{
  "name": "calkit",
  "version": "0.3.0",
  "updated": "2026-08-20",
  "global": {
    "json_flag": ["--json"],
    "json_env": "CALKIT_JSON=1",
    "envelope_ok": {"ok": true, "data": {}},
    "envelope_err": {"ok": false, "error": {"code": "NOT_FOUND", "message": "..."}},
    "require_clean": "--require-clean refuses mutations when git has uncommitted changes",
    "repo": "Every command except init needs a .calkit/ marker in cwd or an ancestor."
  },
  "commands": [
    {"name": "init", "usage": "calkit init [--name N] [--owner O] [--timezone TZ]", "purpose": "Scaffold a calendar repo in the current directory (git init).", "see": "setup.md"},
    {"name": "schema", "usage": "calkit schema [--event|--scope|--calendar|--reminder]", "purpose": "Emit JSON Schema for agent introspection. No flag = all.", "see": "json.md"},
    {"name": "doctor", "usage": "calkit doctor", "purpose": "Health-check: integrity, git, empty scopes.", "see": "setup.md"},
    {"name": "validate", "usage": "calkit validate", "purpose": "Validate all files and referential integrity.", "see": "setup.md"},
    {"name": "add", "usage": "calkit add --title T [--scope S] [--start ISO] [--end ISO] [--all-day] [--tz TZ] [--location L] [--url U] [--notes N] [--status confirmed|tentative|cancelled] [--rrule R | --repeat F --interval N --byday D --until D --count N] [--alert OFFSET]...", "purpose": "Add an event. Scope default personal.", "see": "events.md"},
    {"name": "edit", "usage": "calkit edit ID [same flags as add except --scope]", "purpose": "Edit an event. Change scope with mv.", "see": "events.md"},
    {"name": "show", "usage": "calkit show ID", "purpose": "Show one event.", "see": "events.md"},
    {"name": "rm", "usage": "calkit rm ID", "purpose": "Delete an event.", "see": "events.md"},
    {"name": "mv", "usage": "calkit mv ID --scope S", "purpose": "Move an event to another scope track.", "see": "events.md"},
    {"name": "list", "usage": "calkit list [--scope S] [--from D] [--to D] [--query Q] [--status S] [--expand]", "purpose": "List event definitions; --expand lists occurrences.", "see": "agenda.md"},
    {"name": "agenda", "usage": "calkit agenda [--from D] [--to D] [--scope S]", "purpose": "Expanded occurrences. Default next 7 days.", "see": "agenda.md"},
    {"name": "next", "usage": "calkit next [--scope S] [--count N]", "purpose": "Next upcoming occurrence(s). Default count 1.", "see": "agenda.md"},
    {"name": "scope list", "usage": "calkit scope list", "purpose": "List scope tracks.", "see": "scopes.md"},
    {"name": "scope add", "usage": "calkit scope add ID --name N --color #RRGGBB [--description D]", "purpose": "Create a scope track.", "see": "scopes.md"},
    {"name": "scope edit", "usage": "calkit scope edit ID [--name N] [--color #RRGGBB] [--description D]", "purpose": "Edit a scope.", "see": "scopes.md"},
    {"name": "scope rm", "usage": "calkit scope rm ID [--reassign S]", "purpose": "Remove a scope. Reassign events first.", "see": "scopes.md"},
    {"name": "import", "usage": "calkit import FILE.ics [--scope ID]", "purpose": "Import iCalendar. Auto-creates missing scopes unless --scope.", "see": "ical.md"},
    {"name": "export", "usage": "calkit export [--format ics|json] [--scope S] [--id EVENT] [-o FILE]", "purpose": "Export calendar, one scope, or one event. Omit -o for stdout.", "see": "ical.md"},
    {"name": "preview", "usage": "calkit preview [-o DIR]", "purpose": "Static read-only month snapshot. Default dist/preview.", "see": "ical.md"},
    {"name": "serve", "usage": "calkit serve [--port N] [--no-open]", "purpose": "Local month view + ICS feeds on 127.0.0.1 (default 4455).", "see": "ical.md"},
    {"name": "snapshot", "usage": "calkit snapshot [-m MSG]", "purpose": "Git commit of calendar state. Only command that commits.", "see": "git.md"},
    {"name": "history", "usage": "calkit history [ID]", "purpose": "Git history for the calendar or one event.", "see": "git.md"},
    {"name": "revert", "usage": "calkit revert REF", "purpose": "Restore calendar files to a prior commit (checkout, not commit).", "see": "git.md"},
    {"name": "branch", "usage": "calkit branch [NAME] [--switch]", "purpose": "List branches, or create+switch for scenario planning.", "see": "git.md"},
    {"name": "branches", "usage": "calkit branches", "purpose": "List branches.", "see": "git.md"},
    {"name": "reminder add", "usage": "calkit reminder add NAME --at WHEN [--every CADENCE | --rrule R | --repeat F --byday D] [--until D] [--details T] [--alert OFF]... [--scope S]", "purpose": "Add a reminder item (not an event).", "see": "reminders.md"},
    {"name": "reminder list", "usage": "calkit reminder list [--all] [--scope S]", "purpose": "List reminders. Default active only.", "see": "reminders.md"},
    {"name": "reminder show", "usage": "calkit reminder show ID", "purpose": "Show a reminder and fire instants.", "see": "reminders.md"},
    {"name": "reminder edit", "usage": "calkit reminder edit ID [flags]", "purpose": "Edit a reminder.", "see": "reminders.md"},
    {"name": "reminder rm", "usage": "calkit reminder rm ID", "purpose": "Delete a reminder.", "see": "reminders.md"},
    {"name": "reminders install", "usage": "calkit reminders install [--cadence 5m]", "purpose": "Install+load per-calendar launchd cron (calkit remind --due).", "see": "reminders.md"},
    {"name": "reminders status", "usage": "calkit reminders status", "purpose": "Cron + reminder state.", "see": "reminders.md"},
    {"name": "reminders test", "usage": "calkit reminders test", "purpose": "Fire one synthetic notification. Does not mutate calendar.", "see": "reminders.md"},
    {"name": "reminders uninstall", "usage": "calkit reminders uninstall", "purpose": "Unload and remove the cron.", "see": "reminders.md"},
    {"name": "remind", "usage": "calkit remind [--due] [--dry-run] [--window Nm|Nh]", "purpose": "Cron entrypoint. Prefer --dry-run to preview.", "see": "reminders.md"},
    {"name": "init-skill", "usage": "calkit init-skill", "purpose": "Install the agent skill into .claude/skills/calkit.", "see": "agents.md"}
  ]
}
