Common errors
Sync and tasks​
| Symptom | Cause | Solution |
|---|---|---|
| The task did not appear in the console | no task: block, no activity:, or the sync has not run yet | Complete the frontmatter and use Sync; read "Tasks skipped" |
| Duplicate activity, task in the new one | activity: name differs from the existing one | Fix the frontmatter to the existing name and ask for the duplicate to be removed |
I changed workspace: and the task did not change workspace | the workspace is the plugin's; workspace: only names it on creation | To change workspace, the skill has to move to another plugin (and becomes another task) |
I changed model: and the tier did not change | the value is not the slug of an active tier | Use tier-N; the warning appears in the sync result |
| The tier changed, but the AI model did not | the task has an executor and model override | Declare executor: inherit, or ask for it to go back to "Inherit from Tier" |
| I removed a frontmatter field and the task kept the value | missing field = "do not touch" | Declare it empty ([], null, "") |
| I edited the task in the console and the edit vanished | the field is declared in the frontmatter | Make the change in the frontmatter |
| A deleted task does not reappear | the sync treats the deleted one as existing | Ask Kobana to restore it |
| Two tasks for the same skill, one with no executions | the skill folder was renamed | Restore the folder name, or retire the old one and reconfigure the new one |
| I changed the frontmatter and the console did not change | the sync has not run, or the field was discarded for a wrong type | Sync and check "Tasks updated" and the warnings |
task: flag ignored | wrong type in the YAML ("true" instead of true) | Fix the type |
Schedules and environments​
| Symptom | Cause | Solution |
|---|---|---|
Warning schedules ignorado (item N …) | malformed item (no cron, quoted paused, repeated environment) | Fix the item; schedules do not change until then |
Warning agendamentos não aplicados (ambiente "…" não existe) | different environment name, or environment not yet created | Copy the name from the console, or declare the environment in kadu.yaml |
A schedule created in the console did not go away with schedules: [] | the sync only deletes what it created | Delete it in the console |
| Schedule runs at the wrong time | missing timezone = UTC | Declare timezone: America/Sao_Paulo |
| I paused in the console and the sync resumed | the item declares paused: false | Remove paused from the item, or declare true |
Warning kadu.yaml: … — nada aplicado | broken YAML, color not in #rrggbb, wrong key, repeated name | Fix the file; nothing changes until then |
Environment left kadu.yaml and is still in the console | it still has a secret or schedule, or was created in the console | Remove the secrets and schedules, or delete it in the console |
Warning secret X declarado no kadu.yaml sem valor no cofre | expected key not registered in the environment | Register the value in Settings → Secrets |
Warning executor claude_code não roda o modelo … | model from another provider with cli: claude_code | Use claude-* or an alias; for another provider, cli: goose |
Endpoint and webhooks​
| Symptom | Cause | Solution |
|---|---|---|
| Endpoint-without-credential warning | the repository never carries a credential | Ask for the credential to be registered; the next sync turns it on |
| An endpoint turned off in the console turned back on | the frontmatter declares enabled: true | Declare enabled: false |
Warning Webhook "X" criado sem credencial… | the repository never carries a credential | Register the credential in the console and generate the signing secret |
| The receiver rejects the webhook signature | the signing secret was generated by the sync, and nobody saw it | POST /v1/webhooks/{id}/rotate-secret and configure the new value in the receiver |
Warning auth "…" não trocado | auth: differs from the existing webhook | Switch the type in the console (the credential changes along with it) |
| A deactivated webhook becomes active again on every push | enabled: true declared | Remove enabled so that deactivation by failures takes effect |
Warning URL recusada | private IP, loopback or http | Use a public https URL |
Execution​
| Symptom | Cause | Solution |
|---|---|---|
Execution ends with execution.body_skipped | the body did not call mark_body_started | Set the sentinel at the start |
| A step vanished from the timeline | event without message, silently rejected | Always type and message |
| Execution runs for 60 minutes and fails | the skill asked a question | No questions: decide and record a pending item |
| Result tab shows "success" | result used as a status | result is Markdown; counters go in summary |
| Logs tab emptied at the end | the logs were resent at finalization | Do not resend logs; the wrapper finalizes |
| Skill runs with the variable empty | secret in the allowlist, but with no value in the environment | Register the value; check the order of the two steps |
| Parameter ignored | schema without additionalProperties: false | Close the schema |
| Empty timeline between the opening and the end | the task orchestrates helpers that do not instrument themselves | Instrument the helpers (The task body) |
| Logs tab unreadable, thousands of lines | log_http_call on every request of a tool | Summarize the traffic in append_log |
| Configuration does not change per organization, even with a value in the vault | variable read with a default in the body and outside required_secrets | Add the variable to required_secrets |
422 missing_secrets on the endpoint | secret in the list with no value in the call's environment | Register the value in the environment given in environment_id |
Unknown skill in Claude Code | skill created after the session started | Restart the session |