todo-init

SKILL.md

todo-init

Set up the agent todos configuration for this project. Creates .agent-todos.local.json in the project root and initializes the todo store directory.

The default todo store is docs/agent-todos/ inside the project. Users with Obsidian can point todosRoot to a vault path instead.

Workflow

Step 1: Check for Existing Config

Read .agent-todos.local.json in the project root, if it exists.

If a config file is found, show the current settings and ask the user whether to reconfigure or abort.

Upgrade path — missing projectName: If the existing config is kept (user chooses not to reconfigure) but projectName is absent, ask: "Would you like to add a projectName to your config? This value is included in the projects: frontmatter of every new todo (e.g. [[my-project]])." If yes, ask for the value and write it to the config file.

Upgrade path — missing CLAUDE.md section: If the existing config is kept but no ## Agent Todos section exists in CLAUDE.md, proceed to Step 6 to add it.

Step 2: Determine Todo Store Path

Ask the user where to store todos:

  • Defaultdocs/agent-todos/ inside the project (works everywhere, no external tools needed)
  • Custom path — any absolute path, e.g. a path inside an Obsidian vault

Use AskUserQuestion to let the user choose.

Step 2b: Determine Project Name (optional)

After the todo store path is set, ask the user whether they want to associate todos with a project name:

Would you like to add a projectName to tag every new todo? This is included in the projects: frontmatter field (e.g. [[my-project]] for Obsidian task-notes integration). Leave blank to skip.

This field is optional. If the user provides a value, include it in the config.

Step 3: Write Config File

Create .agent-todos.local.json in the project root:

{
  "todosRoot": "<todos_root>"
}

If the user provided a projectName, include it:

{
  "todosRoot": "<todos_root>",
  "projectName": "<project_name>"
}

All paths should use ~ for the home directory when applicable.

Step 4: Create Todo Store Directory

Create the todosRoot directory if it does not already exist:

mkdir -p "<todos_root>"

Step 5: Ask for Initial Categories

Ask the user which category subdirectories to create (multi-select). Suggest common ones:

  • misc/ — Miscellaneous tasks
  • data/ — Data-related tasks
  • content/ — Content creation and editing tasks

Create the selected subdirectories inside todosRoot.

Step 6: Add Agent Todos Section to CLAUDE.md

Check whether a CLAUDE.md file exists in the project root and whether it already contains an ## Agent Todos section:

grep -q "## Agent Todos" CLAUDE.md 2>/dev/null && echo "exists" || echo "missing"

If the section is missing, append the following reference block to CLAUDE.md. Replace <todosRoot> with the actual configured path:

## Agent Todos

This project uses the **agent-todos** plugin to manage tasks as structured Markdown files.

**IMPORTANT:** Always read `.agent-todos.local.json` before any todo operation. It defines `todosRoot` — the actual directory where todo files are stored. Do not fall back to `docs/agent-todos/` when this file is present.

**Current todo store:** `<todosRoot>`

**Skills:**

- `/todo-creation [category] [title]` — create a new todo file
- `/todo-processing [category/number]` — pick up and work on a todo
- `/todo-gh-issue-import [category]` — import GitHub issues as todos
- `/todo-moving` — renumber or move todos between categories

If CLAUDE.md does not exist, create it with only this section.

If the section already exists, skip this step.

Notes

  • .agent-todos.local.json is project-specific and should be added to .gitignore when todosRoot points outside the project
  • If todosRoot is inside the project (e.g. docs/agent-todos), it can be checked in
  • All todo skills (/todo-creation, /todo-processing, etc.) read this config automatically
  • To use a different store later, re-run /todo-init or edit .agent-todos.local.json directly
  • Without .agent-todos.local.json, all skills fall back to docs/agent-todos/ in the project root
Weekly Installs
3
First Seen
4 days ago
Installed on
mcpjam3
claude-code3
replit3
junie3
windsurf3
zencoder3