$npx -y skills add alfredxw/denova --skill automation-configUse when config_manager creates or updates Denova automation task JSON through automation tools.
| 1 | # Automation Config |
| 2 | |
| 3 | Use this skill before calling `write_automations`. |
| 4 | |
| 5 | ## Workflow |
| 6 | |
| 7 | 1. Call `list_automations` first. For updates, call `read_automations` for the target IDs before writing. |
| 8 | 2. Use `write_automations` only for module-level changes. Do not edit `automations/tasks.json` directly. |
| 9 | 3. For `create`, provide a complete `task` object with clear `name`, `scope`, `template`, `prompt`, trigger policy, write policy, and output policy. |
| 10 | 4. For `update`, preserve fields not requested by the user. Send the existing `id` in `op.id` or `task.id`. |
| 11 | 5. For `delete`, only send `op: "delete"` after the user explicitly asked to delete the task. |
| 12 | |
| 13 | ## Task Shape |
| 14 | |
| 15 | Important task fields: |
| 16 | |
| 17 | - `scope`: `workspace` for the current book, or `user` for reusable personal automations. |
| 18 | - `enabled`: boolean. |
| 19 | - `name`: user visible task name. |
| 20 | - `template`: one of `memory_consolidation`, `review`, `continue_writing`, `custom_prompt`. |
| 21 | - `prompt`: the task instruction that the automation agent will run. |
| 22 | - `model_profile_id`: optional model profile ID. Leave empty to inherit automation/default settings. |
| 23 | - `schedule`: structured schedule. Keep it consistent with schedule triggers. |
| 24 | - `triggers`: array of trigger definitions. |
| 25 | - `write_mode`: one of `read_only`, `confirm_write`, `auto_write`. |
| 26 | - `write_scope`: one of `none`, `lore`, `file`, `lore_and_file`. |
| 27 | - `output_policy`: one of `run_record_only`, `optional_file`. |
| 28 | - `output_path`: required only when `output_policy` is `optional_file`. |
| 29 | |
| 30 | The backend derives legacy `write_policy` and `default_action_policy`; do not rely on trigger-level action policy. |
| 31 | |
| 32 | ## Trigger Shape |
| 33 | |
| 34 | `triggers` contains objects with: |
| 35 | |
| 36 | - `id`: stable identifier. Use meaningful IDs like `daily_review` or `chapter_batch_review`. |
| 37 | - `type`: one of `manual`, `schedule`, `semantic`, `chapter_batch`. |
| 38 | - `enabled`: boolean. |
| 39 | - `name`: optional user-visible label. |
| 40 | - `notify_policy`: `inbox` or `silent`. Schedule defaults to `silent`; content triggers default to `inbox`. |
| 41 | - `schedule`: required for `schedule` triggers. |
| 42 | - `semantic_condition`: required for useful `semantic` triggers. |
| 43 | - `chapter_batch_size`: positive integer for `chapter_batch`; default is 5. |
| 44 | |
| 45 | Do not set `action_policy` on triggers. Effective execution behavior comes from `write_mode`. |
| 46 | |
| 47 | ## Schedule Shape |
| 48 | |
| 49 | `schedule.kind` must be one of: |
| 50 | |
| 51 | - `manual` |
| 52 | - `daily` |
| 53 | - `weekly` |
| 54 | - `monthly` |
| 55 | - `every_hours` |
| 56 | |
| 57 | Common fields: |
| 58 | |
| 59 | - `hour`: 0-23. |
| 60 | - `minute`: 0-59. |
| 61 | - `weekday`: 0-6 for weekly schedules, where 0 is Sunday. |
| 62 | - `day_of_month`: 1-31 for monthly schedules. |
| 63 | - `every_hours`: 1-168 for interval schedules. |
| 64 | |
| 65 | `cron` is generated by the backend. Leave it empty unless you are preserving an existing value. |
| 66 | |
| 67 | ## Safe Defaults |
| 68 | |
| 69 | - Review-only tasks: `write_mode: "read_only"`, `write_scope: "none"`, `output_policy: "run_record_only"`. |
| 70 | - File-writing tasks: prefer `write_mode: "confirm_write"` unless the user explicitly asks for unattended writes. |
| 71 | - Auto-write tasks must have a narrow `write_scope` and a prompt that names the exact file or lore boundary. |
| 72 | - Use `workspace` scope unless the user says the automation should apply across books. |