@hasna/todos 0.11.44 → 0.11.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +695 -11
- package/dist/cli/commands/agent-reliability-commands.d.ts +3 -0
- package/dist/cli/commands/agent-reliability-commands.d.ts.map +1 -0
- package/dist/cli/commands/audit-ledger-commands.d.ts +3 -0
- package/dist/cli/commands/audit-ledger-commands.d.ts.map +1 -0
- package/dist/cli/commands/capacity-commands.d.ts +3 -0
- package/dist/cli/commands/capacity-commands.d.ts.map +1 -0
- package/dist/cli/commands/config-serve-commands.d.ts.map +1 -1
- package/dist/cli/commands/help-commands.d.ts +3 -0
- package/dist/cli/commands/help-commands.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-commands.d.ts +3 -0
- package/dist/cli/commands/knowledge-commands.d.ts.map +1 -0
- package/dist/cli/commands/local-backup-commands.d.ts +3 -0
- package/dist/cli/commands/local-backup-commands.d.ts.map +1 -0
- package/dist/cli/commands/local-snapshot-commands.d.ts +3 -0
- package/dist/cli/commands/local-snapshot-commands.d.ts.map +1 -0
- package/dist/cli/commands/machines.d.ts.map +1 -1
- package/dist/cli/commands/mcp-hooks-commands.d.ts.map +1 -1
- package/dist/cli/commands/onboarding-commands.d.ts +3 -0
- package/dist/cli/commands/onboarding-commands.d.ts.map +1 -0
- package/dist/cli/commands/project-commands.d.ts.map +1 -1
- package/dist/cli/commands/query-commands.d.ts.map +1 -1
- package/dist/cli/commands/release-compatibility-commands.d.ts +3 -0
- package/dist/cli/commands/release-compatibility-commands.d.ts.map +1 -0
- package/dist/cli/commands/retrospective-commands.d.ts +3 -0
- package/dist/cli/commands/retrospective-commands.d.ts.map +1 -0
- package/dist/cli/commands/review-queue-commands.d.ts +3 -0
- package/dist/cli/commands/review-queue-commands.d.ts.map +1 -0
- package/dist/cli/commands/risk-commands.d.ts +3 -0
- package/dist/cli/commands/risk-commands.d.ts.map +1 -0
- package/dist/cli/commands/roadmap-commands.d.ts +3 -0
- package/dist/cli/commands/roadmap-commands.d.ts.map +1 -0
- package/dist/cli/commands/scale-hardening-commands.d.ts +3 -0
- package/dist/cli/commands/scale-hardening-commands.d.ts.map +1 -0
- package/dist/cli/commands/sdk-fixture-commands.d.ts +3 -0
- package/dist/cli/commands/sdk-fixture-commands.d.ts.map +1 -0
- package/dist/cli/commands/task-commands.d.ts.map +1 -1
- package/dist/cli/commands/usage-ledger-commands.d.ts +3 -0
- package/dist/cli/commands/usage-ledger-commands.d.ts.map +1 -0
- package/dist/cli/components/Dashboard.d.ts.map +1 -1
- package/dist/cli/index.js +39446 -19769
- package/dist/cli-mcp-parity.d.ts +1 -1
- package/dist/cli-mcp-parity.d.ts.map +1 -1
- package/dist/contracts.d.ts +25 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +14818 -3885
- package/dist/db/agent-metrics.d.ts +101 -0
- package/dist/db/agent-metrics.d.ts.map +1 -1
- package/dist/db/agent-names.d.ts +2 -1
- package/dist/db/agent-names.d.ts.map +1 -1
- package/dist/db/boards.d.ts +56 -0
- package/dist/db/boards.d.ts.map +1 -0
- package/dist/db/calendar.d.ts +52 -0
- package/dist/db/calendar.d.ts.map +1 -0
- package/dist/db/comments.d.ts.map +1 -1
- package/dist/db/handoffs.d.ts +25 -0
- package/dist/db/handoffs.d.ts.map +1 -1
- package/dist/db/machines.d.ts +19 -6
- package/dist/db/machines.d.ts.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/project-knowledge.d.ts +88 -0
- package/dist/db/project-knowledge.d.ts.map +1 -0
- package/dist/db/project-risks.d.ts +139 -0
- package/dist/db/project-risks.d.ts.map +1 -0
- package/dist/db/retrospectives.d.ts +98 -0
- package/dist/db/retrospectives.d.ts.map +1 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/task-crud.d.ts.map +1 -1
- package/dist/db/task-relations.d.ts +69 -9
- package/dist/db/task-relations.d.ts.map +1 -1
- package/dist/db/task-runs.d.ts +3 -0
- package/dist/db/task-runs.d.ts.map +1 -1
- package/dist/db/tasks.d.ts +6 -2
- package/dist/db/tasks.d.ts.map +1 -1
- package/dist/index.d.ts +74 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24662 -11829
- package/dist/json-contracts.d.ts.map +1 -1
- package/dist/lib/agent-replay-simulator.d.ts +66 -0
- package/dist/lib/agent-replay-simulator.d.ts.map +1 -0
- package/dist/lib/audit-ledger.d.ts +59 -0
- package/dist/lib/audit-ledger.d.ts.map +1 -0
- package/dist/lib/branch-work-plans.d.ts +46 -0
- package/dist/lib/branch-work-plans.d.ts.map +1 -0
- package/dist/lib/capacity-forecasts.d.ts +70 -0
- package/dist/lib/capacity-forecasts.d.ts.map +1 -0
- package/dist/lib/cli-help.d.ts +38 -0
- package/dist/lib/cli-help.d.ts.map +1 -0
- package/dist/lib/config.d.ts +217 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/context-packs.d.ts +26 -3
- package/dist/lib/context-packs.d.ts.map +1 -1
- package/dist/lib/event-hooks.d.ts +1 -1
- package/dist/lib/event-hooks.d.ts.map +1 -1
- package/dist/lib/external-issue-importers.d.ts +60 -0
- package/dist/lib/external-issue-importers.d.ts.map +1 -0
- package/dist/lib/extract.d.ts +57 -0
- package/dist/lib/extract.d.ts.map +1 -1
- package/dist/lib/local-backups.d.ts +129 -0
- package/dist/lib/local-backups.d.ts.map +1 -0
- package/dist/lib/local-bridge.d.ts +3 -1
- package/dist/lib/local-bridge.d.ts.map +1 -1
- package/dist/lib/local-extensions.d.ts +92 -0
- package/dist/lib/local-extensions.d.ts.map +1 -0
- package/dist/lib/local-notifications.d.ts +55 -0
- package/dist/lib/local-notifications.d.ts.map +1 -0
- package/dist/lib/local-reports.d.ts +149 -0
- package/dist/lib/local-reports.d.ts.map +1 -0
- package/dist/lib/local-snapshots.d.ts +66 -0
- package/dist/lib/local-snapshots.d.ts.map +1 -0
- package/dist/lib/mention-resolver.d.ts +43 -0
- package/dist/lib/mention-resolver.d.ts.map +1 -0
- package/dist/lib/natural-language-intake.d.ts +56 -0
- package/dist/lib/natural-language-intake.d.ts.map +1 -0
- package/dist/lib/onboarding-fixtures.d.ts +31 -0
- package/dist/lib/onboarding-fixtures.d.ts.map +1 -0
- package/dist/lib/public-release-gate.d.ts +7 -0
- package/dist/lib/public-release-gate.d.ts.map +1 -1
- package/dist/lib/redaction.d.ts +9 -0
- package/dist/lib/redaction.d.ts.map +1 -1
- package/dist/lib/release-compatibility.d.ts +59 -0
- package/dist/lib/release-compatibility.d.ts.map +1 -0
- package/dist/lib/release-notes.d.ts +81 -0
- package/dist/lib/release-notes.d.ts.map +1 -0
- package/dist/lib/retention-cleanup.d.ts +63 -0
- package/dist/lib/retention-cleanup.d.ts.map +1 -0
- package/dist/lib/review-queues.d.ts +98 -0
- package/dist/lib/review-queues.d.ts.map +1 -0
- package/dist/lib/roadmaps.d.ts +133 -0
- package/dist/lib/roadmaps.d.ts.map +1 -0
- package/dist/lib/scale-hardening.d.ts +74 -0
- package/dist/lib/scale-hardening.d.ts.map +1 -0
- package/dist/lib/sdk-integration-fixtures.d.ts +65 -0
- package/dist/lib/sdk-integration-fixtures.d.ts.map +1 -0
- package/dist/lib/terminal-notifications.d.ts +53 -0
- package/dist/lib/terminal-notifications.d.ts.map +1 -0
- package/dist/lib/todos-md.d.ts.map +1 -1
- package/dist/lib/tui-dashboard.d.ts +49 -0
- package/dist/lib/tui-dashboard.d.ts.map +1 -0
- package/dist/lib/usage-ledger.d.ts +82 -0
- package/dist/lib/usage-ledger.d.ts.map +1 -0
- package/dist/lib/workflow-prompts.d.ts +38 -0
- package/dist/lib/workflow-prompts.d.ts.map +1 -0
- package/dist/lib/workflow-states.d.ts +70 -0
- package/dist/lib/workflow-states.d.ts.map +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +25922 -13067
- package/dist/mcp/token-utils.d.ts.map +1 -1
- package/dist/mcp/tools/code-tools.d.ts.map +1 -1
- package/dist/mcp/tools/machines.d.ts.map +1 -1
- package/dist/mcp/tools/task-adv-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-auto-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-crud.d.ts.map +1 -1
- package/dist/mcp/tools/task-meta-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-rel-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-resources.d.ts.map +1 -1
- package/dist/mcp/tools/workflow-prompts.d.ts +3 -0
- package/dist/mcp/tools/workflow-prompts.d.ts.map +1 -0
- package/dist/mcp.js +107 -2
- package/dist/registry.js +15919 -6050
- package/dist/server/index.js +645 -143
- package/dist/storage.js +2516 -159
- package/dist/types/index.d.ts +214 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/release-provenance.json +0 -7
package/README.md
CHANGED
|
@@ -17,6 +17,38 @@ bun install -g @hasna/todos
|
|
|
17
17
|
todos --help
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
Generate shell completions directly from the registered CLI command tree:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
todos completions bash > ~/.local/share/bash-completion/completions/todos
|
|
24
|
+
todos completions zsh > ~/.zsh/completions/_todos
|
|
25
|
+
todos completions fish > ~/.config/fish/completions/todos.fish
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Print the local CLI manual when you need install/update commands, examples,
|
|
29
|
+
JSON output contracts, error behavior, and the command catalog:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
todos manual
|
|
33
|
+
todos manual --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Terminal Dashboard
|
|
37
|
+
|
|
38
|
+
`todos dashboard` launches a local Ink TUI with keyboard tabs for overview,
|
|
39
|
+
projects, tasks, plans, runs, dependencies, inbox, and search. It reads only the
|
|
40
|
+
local SQLite database and can also print deterministic snapshots for scripts or
|
|
41
|
+
tests:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
todos dashboard
|
|
45
|
+
todos dashboard --snapshot --view tasks --search "release" --json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Keyboard hints are shown in the interface: `h`/left and `l`/right move between
|
|
49
|
+
tabs, `1`-`8` jumps to a tab, `/` opens local search, `r` refreshes, and `q`
|
|
50
|
+
quits.
|
|
51
|
+
|
|
20
52
|
## Local Project Bootstrap
|
|
21
53
|
|
|
22
54
|
Bootstrap discovers the current local workspace, registers a project identity,
|
|
@@ -33,6 +65,25 @@ MCP clients can use `bootstrap_project` for the same local-only workflow. The
|
|
|
33
65
|
command is idempotent, so running it again refreshes machine-local paths without
|
|
34
66
|
duplicating projects, task lists, or source records.
|
|
35
67
|
|
|
68
|
+
## Local Machine Topology
|
|
69
|
+
|
|
70
|
+
Machine registry state stays in local SQLite. Machines can record identity,
|
|
71
|
+
last-seen heartbeats, workspace paths, git roots, and user-provided Tailscale
|
|
72
|
+
or LAN addresses without probing the network:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
todos machines register spark01 --ssh hasna@spark01 --tailscale-name spark01.tailnet --tailscale-ip 100.64.0.10 --lan-address 192.168.8.10 --workspace ~/workspace
|
|
76
|
+
todos machines heartbeat spark01 --workspace ~/workspace
|
|
77
|
+
todos machines topology --json
|
|
78
|
+
todos projects-path set <project-id> ~/workspace/my-project
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`todos machines topology` reports stale machines, missing local path overrides,
|
|
82
|
+
missing local paths, and projects whose machine-local paths differ across
|
|
83
|
+
registered machines. MCP clients can use `machines_register`,
|
|
84
|
+
`machines_heartbeat`, `machines_topology`, and `machines_list` for the same
|
|
85
|
+
offline diagnostics.
|
|
86
|
+
|
|
36
87
|
## Local Workspace Trust
|
|
37
88
|
|
|
38
89
|
Workspace trust profiles live in `~/.hasna/todos/config.json` and keep agent
|
|
@@ -53,6 +104,28 @@ MCP clients can use `set_workspace_trust`, `get_workspace_trust`,
|
|
|
53
104
|
return deterministic JSON showing whether an action is allowed, why it needs a
|
|
54
105
|
prompt, and which environment keys should be redacted.
|
|
55
106
|
|
|
107
|
+
Secret safety uses the same local config. Add project-specific regexes and
|
|
108
|
+
metadata keys with `todos redaction add --pattern <regex> --key <name>`, then
|
|
109
|
+
scan text or files with `todos redaction scan` without printing matched values.
|
|
110
|
+
Comments, local run evidence, and bridge exports are redacted before storage or
|
|
111
|
+
sharing. MCP clients can use `get_secret_safety`, `set_secret_safety`, and
|
|
112
|
+
`scan_secret_text`.
|
|
113
|
+
|
|
114
|
+
Retention cleanup is also local and dry-run-first. Use it to prune old comments,
|
|
115
|
+
run ledgers, verification evidence, and expired stored artifact files by age,
|
|
116
|
+
project, task status, and run status. Reports return counts, IDs, and
|
|
117
|
+
content-addressed artifact paths only; they do not include raw comments,
|
|
118
|
+
commands, output summaries, artifact source paths, or secret-like values.
|
|
119
|
+
Destructive cleanup requires the exact confirmation string shown by the preview:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
todos retention cleanup --older-than-days 30 --project <project-id> --task-status completed --json
|
|
123
|
+
todos retention cleanup --older-than-days 30 --project <project-id> --task-status completed --apply --confirm delete-local-retention-data --json
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
MCP clients can use `preview_retention_cleanup` and
|
|
127
|
+
`apply_retention_cleanup` for the same offline workflow.
|
|
128
|
+
|
|
56
129
|
## Local Runner Sandboxes
|
|
57
130
|
|
|
58
131
|
Runner sandbox profiles also live in local config. They declare the commands a
|
|
@@ -73,6 +146,76 @@ MCP clients can use `set_runner_sandbox_profile`,
|
|
|
73
146
|
are local-only and compose with workspace trust checks, so command and write
|
|
74
147
|
decisions stay auditable before an agent records run evidence.
|
|
75
148
|
|
|
149
|
+
## Local Project Knowledge
|
|
150
|
+
|
|
151
|
+
Project knowledge records keep agent decisions, architecture notes, tradeoffs,
|
|
152
|
+
and task-linked context snapshots in local SQLite. They are searchable,
|
|
153
|
+
exportable, redacted on output, and available to MCP clients without hosted
|
|
154
|
+
services:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
todos knowledge add decision "Use local SQLite" --decision "Keep OSS knowledge local" --rationale "Agents need offline project memory" --task <task-id> --tag architecture --json
|
|
158
|
+
todos knowledge snapshot --summary "Parser fix is ready for verification" --task <task-id> --agent codex --file src/parser.ts --json
|
|
159
|
+
todos knowledge search "offline project memory" --json
|
|
160
|
+
todos knowledge export --format markdown
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
MCP clients can use `create_knowledge_record`, `create_knowledge_snapshot`,
|
|
164
|
+
`list_knowledge_records`, `search_knowledge_records`, and
|
|
165
|
+
`export_knowledge_records`. The MCP server also publishes `todos://knowledge`
|
|
166
|
+
and `todos://knowledge/decisions` resources for agent context refreshes.
|
|
167
|
+
|
|
168
|
+
## Local Extension Registry
|
|
169
|
+
|
|
170
|
+
Extensions are installed from local manifests, directories with
|
|
171
|
+
`todos.extension.json`, or offline JSON bundles. The registry validates the
|
|
172
|
+
manifest shape, checks `@hasna/todos` compatibility ranges, records requested
|
|
173
|
+
permissions, supports custom commands, MCP tool declarations, templates, hooks,
|
|
174
|
+
and renderers, runs CLI/MCP compatibility checks, dry-runs declared commands and
|
|
175
|
+
renderer commands through the local runner sandbox, verifies optional source
|
|
176
|
+
checksums or detached signatures, and stores trust state in local config only:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
todos extensions discover . --json
|
|
180
|
+
todos extensions inspect ./todos.extension.json --json
|
|
181
|
+
todos extensions compat ./todos.extension.json --json
|
|
182
|
+
todos extensions install ./todos.extension.json --checksum sha256:... --trust --json
|
|
183
|
+
todos extensions verify ./bundle.todos-extension.json --signature <signature> --public-key "$PUBLIC_KEY"
|
|
184
|
+
todos extensions list
|
|
185
|
+
todos extensions remove my-extension
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Unsigned extensions are allowed but installed as local records with warnings.
|
|
189
|
+
Without `--trust`, installs remain in `needs_review` so agents can discover
|
|
190
|
+
custom commands, MCP tools, hooks, and permissions without treating them as
|
|
191
|
+
approved. MCP clients can use `inspect_local_extension`,
|
|
192
|
+
`test_local_extension_compatibility`, `install_local_extension`,
|
|
193
|
+
`list_local_extensions`, and `remove_local_extension` for the same offline
|
|
194
|
+
workflow.
|
|
195
|
+
|
|
196
|
+
## Local Workflow Prompts
|
|
197
|
+
|
|
198
|
+
The package includes bundled MCP prompts for common agent workflows:
|
|
199
|
+
`goal_planning`, `task_claiming`, `review`, `verification`, `handoff`,
|
|
200
|
+
`release_prep`, `import_triage`, and `incident_response`. They are static,
|
|
201
|
+
local-only prompt resources that can be listed or rendered without a model call:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
todos workflows list
|
|
205
|
+
todos workflows show goal_planning --objective "Ship release" --task 1234abcd --json
|
|
206
|
+
todos workflows export --format markdown
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
MCP clients can discover the same catalog at `todos://workflow-prompts` and call
|
|
210
|
+
the matching prompt by ID. Prompt output is deterministic and is intended for
|
|
211
|
+
Codex, Claude Code, Takumi, and other agent-native clients that need reusable
|
|
212
|
+
local guidance for planning, claiming, review, verification, handoff, release,
|
|
213
|
+
triage, and incident workflows.
|
|
214
|
+
|
|
215
|
+
Agent setup recipes for MCP registration, `/goal` planning, task
|
|
216
|
+
claim/update/complete loops, evidence comments, and no-cloud verification live
|
|
217
|
+
in [docs/agent-adapters.md](docs/agent-adapters.md).
|
|
218
|
+
|
|
76
219
|
## Local Policy Packs
|
|
77
220
|
|
|
78
221
|
Policy packs are project-local done gates for agents. They validate task status,
|
|
@@ -99,6 +242,32 @@ MCP clients can use `set_policy_pack`, `list_policy_packs`,
|
|
|
99
242
|
Validation is a dry local read of recorded task evidence; it never calls a
|
|
100
243
|
hosted enforcement service.
|
|
101
244
|
|
|
245
|
+
## Local Source TODO Index
|
|
246
|
+
|
|
247
|
+
Source extraction scans local code for `TODO`, `FIXME`, `HACK`, `BUG`, `XXX`,
|
|
248
|
+
and `NOTE` comments, respects `.gitignore` plus explicit excludes, records
|
|
249
|
+
source files, line anchors, nearby symbols, and stable dedupe fingerprints, and
|
|
250
|
+
can run as a finite local watcher:
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
todos extract . --dry-run --index --json
|
|
254
|
+
todos extract . --exclude fixtures/** --tags tech-debt
|
|
255
|
+
todos extract-watch . --dry-run --max-runs 1 --json
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Created tasks are tagged with `extracted` and linked back to the source file.
|
|
259
|
+
MCP clients can call `extract_todos` and `watch_source_todos` for the same
|
|
260
|
+
offline workflow; no hosted code search, cloud sync, or telemetry is used.
|
|
261
|
+
|
|
262
|
+
## Local Editor Integrations
|
|
263
|
+
|
|
264
|
+
Editor recipes live in `docs/editor-integrations.md` and
|
|
265
|
+
`examples/editor-integrations/`. They include VS Code task definitions,
|
|
266
|
+
JetBrains external tool recipes, Neovim Lua helpers, a shell statusline snippet,
|
|
267
|
+
and a Bun task picker. Every example uses only `todos` CLI JSON output or MCP
|
|
268
|
+
tool names, so editors can claim tasks, inspect local queues, build context
|
|
269
|
+
packs, and link source files without importing private modules or hosted code.
|
|
270
|
+
|
|
102
271
|
## Task Contracts and Reviews
|
|
103
272
|
|
|
104
273
|
Task contracts make acceptance criteria, required verification, expected
|
|
@@ -144,6 +313,50 @@ MCP clients can use `require_approval_gate`, `approve_approval_gate`,
|
|
|
144
313
|
`list_approval_gates`. Gate events are written to task audit history and, when
|
|
145
314
|
a run is linked, to the local run ledger.
|
|
146
315
|
|
|
316
|
+
## Local Review Queues
|
|
317
|
+
|
|
318
|
+
Review queues turn local task review into an explicit agent workflow: request a
|
|
319
|
+
review, route it to a queue, claim it, return it with changes, reopen it, or
|
|
320
|
+
approve it. Routing rules live in local config and can match tags, priorities,
|
|
321
|
+
and projects without hosted users, orgs, or cloud services:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
todos reviews rules set security --queue security-review --reviewers reviewer --tags security --priorities high
|
|
325
|
+
todos reviews request <task-id> --requester codex --reason "security-sensitive change"
|
|
326
|
+
todos reviews claim <task-id> --reviewer reviewer
|
|
327
|
+
todos reviews return <task-id> --reviewer reviewer --changes "Add tests;Record verification"
|
|
328
|
+
todos reviews approve <task-id> --reviewer reviewer
|
|
329
|
+
todos reviews list --queue security-review --json
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
MCP clients can use `list_review_queue`, `request_review_queue`,
|
|
333
|
+
`claim_review_item`, `return_review_item`, `approve_review_item`,
|
|
334
|
+
`reopen_review_item`, `set_review_routing_rule`, `list_review_routing_rules`,
|
|
335
|
+
and `remove_review_routing_rule`. Queue transitions are written to audit
|
|
336
|
+
history and emitted to local event hooks as `review.requested`,
|
|
337
|
+
`review.claimed`, `review.returned`, `review.approved`, and `review.reopened`.
|
|
338
|
+
|
|
339
|
+
## Local Roadmaps
|
|
340
|
+
|
|
341
|
+
Roadmaps group local tasks, plans, runs, milestones, and release labels into a
|
|
342
|
+
portable planning view. They live in local config, summarize dependency
|
|
343
|
+
readiness from the task graph, and export deterministic JSON or Markdown
|
|
344
|
+
bundles:
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
todos roadmaps create "Public package launch" --release v1 --json
|
|
348
|
+
todos roadmaps milestones add <roadmap-id> "Docs and examples" --tasks <task-id> --due 2026-06-01 --release v1 --json
|
|
349
|
+
todos roadmaps releases set <roadmap-id> v1 --milestones <milestone-id> --release-version 1.0.0 --json
|
|
350
|
+
todos roadmaps show <roadmap-id> --format markdown
|
|
351
|
+
todos roadmaps export <roadmap-id> --out roadmap.json
|
|
352
|
+
todos roadmaps import roadmap.json --apply --json
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
MCP clients can use `create_roadmap`, `list_roadmaps`,
|
|
356
|
+
`get_roadmap_summary`, `update_roadmap`, `delete_roadmap`,
|
|
357
|
+
`create_milestone`, `update_milestone`, `delete_milestone`,
|
|
358
|
+
`set_release_group`, `export_roadmap`, and `import_roadmap`.
|
|
359
|
+
|
|
147
360
|
## Local Event Hooks
|
|
148
361
|
|
|
149
362
|
Event hooks are local subscriptions for task, plan, run, approval, import, and
|
|
@@ -162,6 +375,28 @@ MCP clients can use `set_local_event_hook`, `list_local_event_hooks`,
|
|
|
162
375
|
`test_local_event_hook`, and `remove_local_event_hook`. Hook delivery is
|
|
163
376
|
local-only; it does not call hosted webhooks or cloud automation services.
|
|
164
377
|
|
|
378
|
+
## Local Terminal Notifications
|
|
379
|
+
|
|
380
|
+
Terminal notification rules are local watch rules for agents that want concise
|
|
381
|
+
event signals in a shell, tmux pane, or editor terminal. Rules match task, run,
|
|
382
|
+
plan, approval, import, and export events by severity, agent, project, priority,
|
|
383
|
+
status, and payload text, then render deterministic line or JSON notifications:
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
todos terminal-notifications set blocked --event task.blocked,task.failed --min-severity warning --agent codex --priority high --contains deploy --bell
|
|
387
|
+
todos terminal-notifications set due --event task.due,task.sla_breached --min-severity warning --quiet-hours 22:00-07:00
|
|
388
|
+
todos notifications check --emit-hooks --terminal --quiet-hours 22:00-07:00 --json
|
|
389
|
+
todos terminal-notifications test blocked --event task.failed --payload '{"id":"demo","title":"Deploy failed","agent_id":"codex","priority":"high"}' --json
|
|
390
|
+
todos terminal-notifications list --json
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
MCP clients can use `set_terminal_notification_rule`,
|
|
394
|
+
`list_terminal_notification_rules`, `test_terminal_notification_rule`,
|
|
395
|
+
`evaluate_terminal_watch_rules`, `check_local_notifications`, and
|
|
396
|
+
`remove_terminal_notification_rule`. Notifications are evaluated from local
|
|
397
|
+
event payloads, can respect quiet hours, and do not require a desktop
|
|
398
|
+
notification daemon, hosted queue, or cloud webhook service.
|
|
399
|
+
|
|
165
400
|
## Local Encryption Profiles
|
|
166
401
|
|
|
167
402
|
Encryption profiles are optional local config entries for sensitive fields and
|
|
@@ -207,6 +442,24 @@ MCP clients can use `set_agent_run_adapter`, `queue_agent_run`,
|
|
|
207
442
|
`cancel_agent_run_dispatch`, and `retry_agent_run_dispatch`. These commands
|
|
208
443
|
launch only local processes and do not call hosted runners.
|
|
209
444
|
|
|
445
|
+
## Local Agent Replay Simulation
|
|
446
|
+
|
|
447
|
+
Replay simulation turns a recorded context pack or run fixture into a
|
|
448
|
+
deterministic dry-run snapshot without opening the project database or mutating
|
|
449
|
+
tasks. Use it to debug agent plans, verification commands, task transitions,
|
|
450
|
+
failures, touched files, artifacts, and approval decisions offline:
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
todos context-pack <task-id> --format json > replay.json
|
|
454
|
+
todos runs simulate replay.json --agent codex --scenario parser-failure --json
|
|
455
|
+
todos runs simulate replay.json --format markdown
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
MCP clients can use `simulate_agent_replay` with a fixture object and optional
|
|
459
|
+
`agent_id` or `scenario`. The simulator redacts fixture values before hashing
|
|
460
|
+
or rendering, reports `mutates_database: false`, and emits stable command,
|
|
461
|
+
approval, failure, file, artifact, and warning summaries for local debugging.
|
|
462
|
+
|
|
210
463
|
## Local Dependency Workflows
|
|
211
464
|
|
|
212
465
|
Dependencies are stored in the local SQLite database and never require hosted
|
|
@@ -225,6 +478,72 @@ The same workflow is available to MCP clients through
|
|
|
225
478
|
blocked pending tasks, and startup schema repair recreates the local dependency
|
|
226
479
|
table for older databases.
|
|
227
480
|
|
|
481
|
+
## Local Risk Register And Health
|
|
482
|
+
|
|
483
|
+
Risks are stored in local SQLite and can be linked to projects, plans, or tasks
|
|
484
|
+
with an owner, mitigation, due date, severity, probability, tags, and metadata:
|
|
485
|
+
|
|
486
|
+
```bash
|
|
487
|
+
todos risks add "Release blocker" --plan 1234abcd --severity high --owner codex --mitigation "Ship fallback" --json
|
|
488
|
+
todos risks list --plan 1234abcd --json
|
|
489
|
+
todos risks score --plan 1234abcd --json
|
|
490
|
+
todos risks export --project my-project --json
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
Health reports score a plan or project from local evidence only: blocked tasks,
|
|
494
|
+
overdue open work, failed verification records, failed run ledgers, dependency
|
|
495
|
+
depth, and open risks. MCP clients get the same surface through `create_risk`,
|
|
496
|
+
`list_risks`, `update_risk`, `close_risk`, `score_plan_health`,
|
|
497
|
+
`score_project_health`, and `export_risk_register`.
|
|
498
|
+
|
|
499
|
+
## Local Retrospectives
|
|
500
|
+
|
|
501
|
+
Retrospectives summarize a project or plan using local evidence: completed
|
|
502
|
+
plans, missed estimates, repeated blockers, failed verification records,
|
|
503
|
+
lessons learned, and suggested follow-up tasks.
|
|
504
|
+
|
|
505
|
+
```bash
|
|
506
|
+
todos retrospectives create --plan 1234abcd --json
|
|
507
|
+
todos retrospectives list --project my-project --json
|
|
508
|
+
todos retrospectives export --plan 1234abcd --format markdown
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
Use `--create-followups` to create the suggested follow-up tasks locally. MCP
|
|
512
|
+
clients get the same reports through `create_retrospective`,
|
|
513
|
+
`list_retrospectives`, and `export_retrospectives`.
|
|
514
|
+
|
|
515
|
+
## Local Agent Reliability Scorecards
|
|
516
|
+
|
|
517
|
+
Reliability scorecards summarize each agent from local evidence only: completed
|
|
518
|
+
and failed tasks, passed and failed verification records, failed run ledgers,
|
|
519
|
+
stale task/resource locks, retry history, and handoff quality.
|
|
520
|
+
|
|
521
|
+
```bash
|
|
522
|
+
todos reliability show codex --json
|
|
523
|
+
todos reliability list --project my-project --json
|
|
524
|
+
todos reliability export --format markdown
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
MCP clients get the same summaries through `get_agent_reliability_scorecard`,
|
|
528
|
+
`export_agent_reliability_scorecards`, and the `todos://agents/reliability`
|
|
529
|
+
resource.
|
|
530
|
+
|
|
531
|
+
## Local Agent Reports
|
|
532
|
+
|
|
533
|
+
Agent reports compose the local planning surfaces into one report for standups,
|
|
534
|
+
handoffs, and agent run planning: ready tasks, blocked tasks, overdue work,
|
|
535
|
+
plan progress, run outcomes, verification evidence, and per-agent summaries.
|
|
536
|
+
|
|
537
|
+
```bash
|
|
538
|
+
todos reports local --agent codex --format markdown
|
|
539
|
+
todos reports local --project <project-id> --json
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
MCP clients can list sections with `list_local_report_types` and build the
|
|
543
|
+
same local-only `local_report` contract with `build_local_report`. The report
|
|
544
|
+
uses the local SQLite store only and does not call hosted analytics or external
|
|
545
|
+
services.
|
|
546
|
+
|
|
228
547
|
## Local Agent Locking
|
|
229
548
|
|
|
230
549
|
Task claims and locks are local SQLite leases. Agents can claim the next ready
|
|
@@ -293,6 +612,56 @@ MCP clients get the same local data through `link_task_to_commit`,
|
|
|
293
612
|
`add_task_verification`, and `get_task_traceability`, so agents can explain
|
|
294
613
|
which task changed a commit, branch, PR, file, or verification command.
|
|
295
614
|
|
|
615
|
+
## Local Mention Resolution
|
|
616
|
+
|
|
617
|
+
Agents can resolve task references before adding them to descriptions, plans, or
|
|
618
|
+
handoffs. The resolver validates local files and line anchors, scans local source
|
|
619
|
+
declarations for symbols, checks local git commits, branches, and fetched pull
|
|
620
|
+
request refs, and resolves plans, runs, tasks, and agents from the local SQLite
|
|
621
|
+
state:
|
|
622
|
+
|
|
623
|
+
```bash
|
|
624
|
+
todos references resolve file:src/index.ts:12 symbol:createTask branch:main --json
|
|
625
|
+
todos refs resolve plan:release run:abc123 agent:marcus --workspace .
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
The JSON output includes canonical reference keys and validated backlinks such
|
|
629
|
+
as `file:src/index.ts:12`, `symbol:createTask@src/index.ts:40`, `commit:<sha>`,
|
|
630
|
+
`plan:<id>`, and `run:<id>`. MCP clients can call `resolve_mentions` for the
|
|
631
|
+
same local-only report; pull request refs are validated only when present in
|
|
632
|
+
local git refs, and the resolver never calls hosted code search.
|
|
633
|
+
|
|
634
|
+
## Local Branch-Safe Work Plans
|
|
635
|
+
|
|
636
|
+
Before an agent starts a branch, it can ask for a local branch work plan that
|
|
637
|
+
checks the task or plan scope, planned files, active file conflicts, local git
|
|
638
|
+
status, and suggested branch/traceability commands:
|
|
639
|
+
|
|
640
|
+
```bash
|
|
641
|
+
todos branch-plan 1234abcd --branch task/parser-fix --path src/parser.ts --json
|
|
642
|
+
todos branch-plan --plan <plan-id> --branch task/release-plan --no-git-status --json
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
MCP clients can call `create_branch_work_plan` with `task_id` or `plan_id`.
|
|
646
|
+
The result is local-only: it does not create a branch, fetch from a remote, or
|
|
647
|
+
contact hosted code review services. Agents can inspect `safe_to_start`,
|
|
648
|
+
`conflicts`, `reasons`, and `commands` before running any git operation.
|
|
649
|
+
|
|
650
|
+
## Local Release Notes
|
|
651
|
+
|
|
652
|
+
Generate changelogs from completed local tasks and their linked plans, commits,
|
|
653
|
+
verification records, breaking-change notes, and migration notes:
|
|
654
|
+
|
|
655
|
+
```bash
|
|
656
|
+
todos release-notes --project . --format markdown
|
|
657
|
+
todos release-notes --tag release --since 2026-01-01T00:00:00.000Z --json
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
Tasks can add release metadata through `metadata.breaking_change`,
|
|
661
|
+
`metadata.breaking_changes`, `metadata.migration_note`, or
|
|
662
|
+
`metadata.migration_notes`. MCP clients use `generate_release_notes` for the
|
|
663
|
+
same deterministic JSON or Markdown output without hosted release tooling.
|
|
664
|
+
|
|
296
665
|
## Local Verification Providers
|
|
297
666
|
|
|
298
667
|
Optional provider adapters let agents standardize local verification without a
|
|
@@ -327,13 +696,19 @@ todos handoff --unread-for claude --json
|
|
|
327
696
|
todos handoff --read <handoff-id> --json
|
|
328
697
|
todos handoff --ack <handoff-id> --agent claude --json
|
|
329
698
|
todos handoff --recover --agent codex --session codex-42 --json
|
|
699
|
+
todos handoff --export <handoff-id> --output handoff.json --json
|
|
700
|
+
todos handoff --import handoff.json --json
|
|
701
|
+
todos handoff --import handoff.json --apply --json
|
|
330
702
|
```
|
|
331
703
|
|
|
332
704
|
MCP clients can use `create_handoff`, `list_handoffs`, `read_handoff`,
|
|
333
|
-
`
|
|
334
|
-
`get_latest_handoff`. Recovery handoffs
|
|
335
|
-
links, and run evidence for the
|
|
336
|
-
continuation packet; no hosted queue
|
|
705
|
+
`export_handoff`, `import_handoff`, `acknowledge_handoff`,
|
|
706
|
+
`recover_stale_session_handoff`, and `get_latest_handoff`. Recovery handoffs
|
|
707
|
+
inspect local in-progress tasks, file links, and run evidence for the
|
|
708
|
+
agent/session and create a deterministic continuation packet; no hosted queue
|
|
709
|
+
or cloud service is involved. Handoff imports default to a dry-run preview;
|
|
710
|
+
`--apply` writes the local handoff and preserves per-agent acknowledgement
|
|
711
|
+
state.
|
|
337
712
|
|
|
338
713
|
## Local Run Ledger
|
|
339
714
|
|
|
@@ -360,6 +735,112 @@ metadata, redaction status, retention metadata, and metadata-only fallback when
|
|
|
360
735
|
the original path is unavailable. Use `--no-store` to record only artifact
|
|
361
736
|
metadata.
|
|
362
737
|
|
|
738
|
+
## Local Time Tracking
|
|
739
|
+
|
|
740
|
+
Manual time logs and focus sessions stay in the local SQLite database and roll
|
|
741
|
+
up into `task.actual_minutes` for planning and retrospectives:
|
|
742
|
+
|
|
743
|
+
```bash
|
|
744
|
+
todos time log <task-id> 25 --agent codex --notes "reviewed parser"
|
|
745
|
+
SESSION=$(todos time start <task-id> --agent codex --idle-after 30 --json | jq -r .id)
|
|
746
|
+
todos time pause "$SESSION"
|
|
747
|
+
todos time resume "$SESSION"
|
|
748
|
+
todos time stop "$SESSION" --notes "implemented and tested"
|
|
749
|
+
todos time report --include-open --json
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
Focus sessions can be linked to tasks, plans, or run ledgers. Stopping a
|
|
753
|
+
completed task-linked session writes a time log with the session id and run id,
|
|
754
|
+
then recalculates actual minutes from all local logs. `todos time idle` and the
|
|
755
|
+
`get_idle_focus_prompts` MCP tool report active sessions that exceeded their
|
|
756
|
+
local idle threshold; no desktop notification service or hosted telemetry is
|
|
757
|
+
required.
|
|
758
|
+
|
|
759
|
+
## Local Capacity Forecasts
|
|
760
|
+
|
|
761
|
+
Capacity profiles give agents a local way to forecast whether a project or plan
|
|
762
|
+
is realistic from task estimates, actual minutes, due dates, and available
|
|
763
|
+
minutes per day:
|
|
764
|
+
|
|
765
|
+
```bash
|
|
766
|
+
todos capacity set codex --minutes-per-day 240 --days 1,2,3,4,5 --json
|
|
767
|
+
todos capacity forecast --plan <plan-id> --agent codex --start-date 2026-06-01 --json
|
|
768
|
+
todos capacity forecast --project <project-id> --format markdown
|
|
769
|
+
todos capacity list --json
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
Forecasts report remaining estimated minutes, logged actual minutes, forecast
|
|
773
|
+
work days, projected completion date, missing estimates, overdue open tasks,
|
|
774
|
+
and risk flags. MCP clients use `set_capacity_profile`,
|
|
775
|
+
`list_capacity_profiles`, `remove_capacity_profile`, and
|
|
776
|
+
`get_planning_forecast`.
|
|
777
|
+
|
|
778
|
+
## Local Audit Ledger
|
|
779
|
+
|
|
780
|
+
Audit ledger checkpoints hash local evidence into a deterministic chain so an
|
|
781
|
+
agent can seal task, run, verification, approval, and handoff records and verify
|
|
782
|
+
later that the local evidence still matches:
|
|
783
|
+
|
|
784
|
+
```bash
|
|
785
|
+
todos audit-ledger show --task <task-id> --entries --json
|
|
786
|
+
todos audit-ledger seal release-checkpoint --task <task-id> --json
|
|
787
|
+
todos audit-ledger verify release-checkpoint --json
|
|
788
|
+
todos audit-ledger list --json
|
|
789
|
+
```
|
|
790
|
+
|
|
791
|
+
The ledger stores only local checkpoint metadata in config. It does not call a
|
|
792
|
+
hosted service and it does not claim to prevent local deletion; it detects
|
|
793
|
+
changes against a previously sealed root hash. MCP clients use
|
|
794
|
+
`get_audit_ledger`, `seal_audit_ledger`, `list_audit_ledger_checkpoints`, and
|
|
795
|
+
`verify_audit_ledger`.
|
|
796
|
+
|
|
797
|
+
## Release Compatibility
|
|
798
|
+
|
|
799
|
+
Release compatibility checks give agents a local dry-run report before publish
|
|
800
|
+
or update work. They verify the package stays `@hasna/todos`, public, pointed at
|
|
801
|
+
`hasna/todos`, export-stable, migration-compatible from recent local schema
|
|
802
|
+
levels, and ready for Bun global install smoke tests:
|
|
803
|
+
|
|
804
|
+
```bash
|
|
805
|
+
todos release-compat check --json
|
|
806
|
+
todos release-compat check --format markdown
|
|
807
|
+
```
|
|
808
|
+
|
|
809
|
+
The report also includes changelog surfaces and rollback commands. MCP clients
|
|
810
|
+
use `check_release_compatibility` for the same `release_compatibility_report`
|
|
811
|
+
JSON contract.
|
|
812
|
+
|
|
813
|
+
## Local Usage Ledger
|
|
814
|
+
|
|
815
|
+
Usage reports summarize local tasks, projects, runs, commands, durations,
|
|
816
|
+
agent-provided token and cost metadata, and run artifact storage. Quota flags
|
|
817
|
+
are simulated locally so agents can check free/pro limits or project budgets
|
|
818
|
+
without sending data anywhere:
|
|
819
|
+
|
|
820
|
+
```bash
|
|
821
|
+
todos usage report --agent codex --max-tasks 1000 --max-projects 10 --json
|
|
822
|
+
todos usage report --project <project-id> --format markdown
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
The report is aggregate-only: raw command strings and artifact paths are not
|
|
826
|
+
included. MCP clients use `get_usage_ledger` for the same
|
|
827
|
+
`local_usage_ledger` JSON contract.
|
|
828
|
+
|
|
829
|
+
## Local Scale Hardening
|
|
830
|
+
|
|
831
|
+
Scale reports benchmark common local queries, count archive-ready terminal
|
|
832
|
+
tasks, check expected SQLite indexes, run integrity diagnostics, and preview
|
|
833
|
+
database compaction without network access:
|
|
834
|
+
|
|
835
|
+
```bash
|
|
836
|
+
todos scale report --older-than-days 30 --json
|
|
837
|
+
todos scale report --format markdown
|
|
838
|
+
todos scale compact --json
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
`todos scale compact --apply` runs `PRAGMA optimize` and `VACUUM` against the
|
|
842
|
+
local SQLite database. The default is a dry run.
|
|
843
|
+
|
|
363
844
|
## Local Activity Timeline
|
|
364
845
|
|
|
365
846
|
The timeline command gives agents one ordered, redacted view of local comments,
|
|
@@ -377,6 +858,31 @@ local SQLite store and local bridge exports already include the underlying
|
|
|
377
858
|
comments, runs, run evidence, files, commits, and verification records needed to
|
|
378
859
|
rebuild the same timeline after import.
|
|
379
860
|
|
|
861
|
+
## Local Scheduling and SLA Escalation
|
|
862
|
+
|
|
863
|
+
Tasks can carry local due dates, recurrence rules, and SLA thresholds without a
|
|
864
|
+
hosted scheduler. Recurring tasks spawn their next local task from the previous
|
|
865
|
+
scheduled due date, preserving cadence even when completion happens late:
|
|
866
|
+
|
|
867
|
+
```bash
|
|
868
|
+
todos add "Weekly review" --due 2026-06-01 --recurrence "every week" --sla-minutes 120 --json
|
|
869
|
+
todos update <task-id> --due 2026-06-08 --recurrence "every monday" --sla 90 --json
|
|
870
|
+
todos overdue --json
|
|
871
|
+
todos sla --json
|
|
872
|
+
todos notifications check --due-within-minutes 60 --stale-minutes 30 --terminal --json
|
|
873
|
+
```
|
|
874
|
+
|
|
875
|
+
`todos overdue` returns unfinished tasks past `due_at`. `todos sla` returns
|
|
876
|
+
unfinished tasks that are past `due_at` or whose `sla_minutes` threshold has
|
|
877
|
+
elapsed from `started_at` when present, otherwise `created_at`. MCP clients use
|
|
878
|
+
`create_task` and `update_task` with `deadline`, `recurrence_rule`, and
|
|
879
|
+
`sla_minutes`, and can call `get_sla_breaches` for the same local escalation
|
|
880
|
+
view. `todos notifications check` turns due, due-soon, SLA, stale task,
|
|
881
|
+
completed run, and local reminder records into redacted local alerts; it can
|
|
882
|
+
emit configured file/socket/script/stdout event hooks, evaluate terminal watch
|
|
883
|
+
rules, and suppress delivery during quiet hours without contacting an external
|
|
884
|
+
notification service.
|
|
885
|
+
|
|
380
886
|
## Local Task Fields
|
|
381
887
|
|
|
382
888
|
Tasks can carry local labels, severity, owner, area, and custom metadata while
|
|
@@ -393,6 +899,44 @@ for existing filters, and the metadata is included in local bridge exports.
|
|
|
393
899
|
MCP clients use `get_task_fields`, `set_task_fields`, and
|
|
394
900
|
`query_tasks_by_fields` for the same local-only workflow.
|
|
395
901
|
|
|
902
|
+
## Local Workflow States
|
|
903
|
+
|
|
904
|
+
Projects can define local workflow states such as review, blocked, verifying,
|
|
905
|
+
failed, or released while keeping storage compatible with the canonical task
|
|
906
|
+
statuses:
|
|
907
|
+
|
|
908
|
+
```bash
|
|
909
|
+
todos workflow states --json
|
|
910
|
+
todos workflow set <task-id> review --json
|
|
911
|
+
todos workflow tasks review --json
|
|
912
|
+
todos workflow migrate --apply --json
|
|
913
|
+
```
|
|
914
|
+
|
|
915
|
+
Workflow states live in local config under `workflow_states.states`. Each state
|
|
916
|
+
maps to a canonical `canonical_status`, can declare aliases, and can restrict
|
|
917
|
+
allowed transitions. The selected local state is stored in task metadata and is
|
|
918
|
+
included in local bridge exports. MCP clients use `list_workflow_states`,
|
|
919
|
+
`set_task_workflow_state`, `query_tasks_by_workflow_state`, and
|
|
920
|
+
`migrate_workflow_states`.
|
|
921
|
+
|
|
922
|
+
## Local Calendar And ICS
|
|
923
|
+
|
|
924
|
+
Calendar events are derived from local tasks, SLA thresholds, run ledgers, and
|
|
925
|
+
authored local reminders, milestones, or work blocks. Exported ICS files are
|
|
926
|
+
deterministic and can be redacted before sharing:
|
|
927
|
+
|
|
928
|
+
```bash
|
|
929
|
+
todos calendar list --from 2026-06-01T00:00:00.000Z --json
|
|
930
|
+
todos calendar add "Release milestone" --kind milestone --start 2026-06-01T09:00:00.000Z --json
|
|
931
|
+
todos calendar export --redact --out todos.ics
|
|
932
|
+
todos calendar import team.ics --json
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
Recurring task rules are mapped into ICS `RRULE` values when possible, and task
|
|
936
|
+
SLA thresholds appear as local calendar events without any Google Calendar,
|
|
937
|
+
hosted API, or cloud sync dependency. MCP clients use `create_calendar_item`,
|
|
938
|
+
`list_calendar_events`, `export_calendar_ics`, and `import_calendar_ics`.
|
|
939
|
+
|
|
396
940
|
## Local Saved Search Views
|
|
397
941
|
|
|
398
942
|
Saved views are local SQLite records for repeatable task, project, plan, run,
|
|
@@ -413,6 +957,26 @@ preserve the filters without any hosted service. MCP clients use
|
|
|
413
957
|
`save_search_view`, `list_search_views`, `run_search_view`, and
|
|
414
958
|
`delete_search_view`.
|
|
415
959
|
|
|
960
|
+
## Local Kanban Boards
|
|
961
|
+
|
|
962
|
+
Boards are local SQLite records for task and plan workflow views. Lanes map to
|
|
963
|
+
workflow statuses, can carry WIP limits, and render blocked/ready badges for
|
|
964
|
+
agent planning:
|
|
965
|
+
|
|
966
|
+
```bash
|
|
967
|
+
todos board create local-flow --lane "Ready=pending" "Doing=in_progress:3" --json
|
|
968
|
+
todos board show local-flow
|
|
969
|
+
todos board tui local-flow --json
|
|
970
|
+
todos board move local-flow <task-id> --lane Doing --json
|
|
971
|
+
todos board export local-flow --json
|
|
972
|
+
```
|
|
973
|
+
|
|
974
|
+
Task boards render tasks; plan boards use `--scope plans` and render plans by
|
|
975
|
+
plan status. Board snapshots include terminal key bindings for keyboard/TUI
|
|
976
|
+
clients, but the state is still just local data and can be exported or imported
|
|
977
|
+
without a hosted web UI. MCP clients use `create_board`, `list_boards`,
|
|
978
|
+
`get_board_snapshot`, and `move_board_card`.
|
|
979
|
+
|
|
416
980
|
## Local Duplicate Detection
|
|
417
981
|
|
|
418
982
|
Agents can scan local tasks for likely duplicates from imported issue URLs,
|
|
@@ -441,11 +1005,43 @@ traceability, and run-ledger evidence from the local SQLite database only:
|
|
|
441
1005
|
todos context-pack <task-id> --profile codex --format markdown
|
|
442
1006
|
todos context-pack <task-id> --profile claude --format json
|
|
443
1007
|
todos context-pack <task-id> --profile takumi --run <run-id> --comments 12 --files 40
|
|
1008
|
+
todos context-pack <task-id> --profile codex --token-budget 1800 --exclude runs --compact
|
|
444
1009
|
```
|
|
445
1010
|
|
|
446
1011
|
MCP clients can call `build_agent_context_pack` with the same limits and choose
|
|
447
|
-
JSON or Markdown output. Long text and evidence
|
|
448
|
-
and stale or omitted local data is surfaced as
|
|
1012
|
+
JSON, Markdown, compact JSON, or compact Markdown output. Long text and evidence
|
|
1013
|
+
are redacted and size-limited, and stale or omitted local data is surfaced as
|
|
1014
|
+
warnings in the pack.
|
|
1015
|
+
|
|
1016
|
+
Budget-aware context packing is local and deterministic. Use `--token-budget`
|
|
1017
|
+
for an approximate character-based token budget, `--include` or `--exclude` to
|
|
1018
|
+
shape sections, and `--summary-chars` to cap the redacted summaries generated
|
|
1019
|
+
for omitted evidence. When the pack is too large, lower-priority evidence such
|
|
1020
|
+
as runs, traceability, comments, files, dependencies, and plan context is
|
|
1021
|
+
summarized in a stable `context_budget` block so agents still know what was left
|
|
1022
|
+
out.
|
|
1023
|
+
|
|
1024
|
+
## Local External Issue Imports
|
|
1025
|
+
|
|
1026
|
+
Import issue records from pasted JSON, files, stdin, or explicit URLs without
|
|
1027
|
+
depending on any hosted Hasna service. Imports default to a dry-run preview;
|
|
1028
|
+
`--apply` creates local tasks, stores redacted source metadata, creates linked
|
|
1029
|
+
inbox evidence, and skips existing tasks that already have the same source URL,
|
|
1030
|
+
GitHub owner/repo/number, or external issue key:
|
|
1031
|
+
|
|
1032
|
+
```bash
|
|
1033
|
+
todos issues import --file issues.json --provider github --json
|
|
1034
|
+
todos issues import --file issues.json --provider github --apply --json
|
|
1035
|
+
todos issues import --provider linear --apply < linear-export.json
|
|
1036
|
+
todos issues import "Title: Fix parser\nURL: https://tracker.example/BUG-42" --apply --json
|
|
1037
|
+
```
|
|
1038
|
+
|
|
1039
|
+
GitHub, Linear, Jira, and plain URL records are normalized into local task
|
|
1040
|
+
metadata and tags. Network access is off unless `--allow-network` is passed; for
|
|
1041
|
+
GitHub that explicitly shells out through the authenticated `gh` CLI, while
|
|
1042
|
+
offline files and pasted exports work without tokens. MCP clients use
|
|
1043
|
+
`import_external_issues` with the same dry-run, apply, inbox, and dedupe
|
|
1044
|
+
controls.
|
|
449
1045
|
|
|
450
1046
|
## Local Inbox Intake
|
|
451
1047
|
|
|
@@ -456,12 +1052,76 @@ deduped inbox and create a linked task:
|
|
|
456
1052
|
todos inbox add "bun test failed: parser regression" --source-type ci_log
|
|
457
1053
|
todos inbox add --file /tmp/ci.log --source-name "local CI"
|
|
458
1054
|
todos inbox add https://github.com/hasna/todos/issues/42 --source-url https://github.com/hasna/todos/issues/42
|
|
1055
|
+
todos inbox parse "Add task fix parser priority high @codex #cli due tomorrow" --json
|
|
1056
|
+
todos inbox parse --file plan-notes.txt --apply --json
|
|
459
1057
|
todos inbox git --diff
|
|
460
1058
|
todos inbox list
|
|
461
1059
|
```
|
|
462
1060
|
|
|
463
1061
|
Inbox bodies and metadata are redacted before storage. Repeated input resolves
|
|
464
|
-
to the existing inbox item instead of creating duplicate tasks.
|
|
1062
|
+
to the existing inbox item instead of creating duplicate tasks. Natural-language
|
|
1063
|
+
intake parsing is deterministic and local-only; it defaults to a dry-run preview
|
|
1064
|
+
and creates projects, plans, tasks, dependencies, and acceptance criteria only
|
|
1065
|
+
with `--apply`.
|
|
1066
|
+
|
|
1067
|
+
## Bundled Onboarding Fixtures
|
|
1068
|
+
|
|
1069
|
+
The package ships deterministic local demo fixtures for first-run onboarding and
|
|
1070
|
+
agent integration tests. The default `agent-project-demo` fixture shows the
|
|
1071
|
+
simple flow used by the public demo: create a project, add todos, generate a
|
|
1072
|
+
plan, run an agent, record command/artifact/verification evidence, review the
|
|
1073
|
+
remaining task, and prove export/import with the local bridge bundle.
|
|
1074
|
+
|
|
1075
|
+
```bash
|
|
1076
|
+
todos onboarding --json
|
|
1077
|
+
todos onboarding --show agent-project-demo > agent-project-demo.bridge.json
|
|
1078
|
+
todos onboarding --import agent-project-demo --json
|
|
1079
|
+
todos onboarding --import agent-project-demo --apply
|
|
1080
|
+
```
|
|
1081
|
+
|
|
1082
|
+
Fixtures are bundled with `@hasna/todos`, redacted, offline, and local-only.
|
|
1083
|
+
Imports default to dry-run mode and use the same bridge importer as normal
|
|
1084
|
+
exports, so CLI, MCP, and SDK consumers can test against the exact project,
|
|
1085
|
+
tasks, plan, run ledger, evidence, saved view, and board records.
|
|
1086
|
+
|
|
1087
|
+
MCP clients can read `todos://onboarding/fixtures` or
|
|
1088
|
+
`todos://onboarding/demo`, then use `list_onboarding_fixtures`,
|
|
1089
|
+
`get_onboarding_fixture`, and `import_onboarding_fixture`.
|
|
1090
|
+
|
|
1091
|
+
## Local Agent Snapshots
|
|
1092
|
+
|
|
1093
|
+
Agents can refresh context through stable local snapshots for projects, tasks,
|
|
1094
|
+
plans, runs, dependencies, activity events, and evidence. Snapshots are
|
|
1095
|
+
redacted, deterministic, and include cursors plus fingerprints so MCP clients
|
|
1096
|
+
can poll for changes without a hosted event stream.
|
|
1097
|
+
|
|
1098
|
+
```bash
|
|
1099
|
+
todos snapshots --json
|
|
1100
|
+
todos snapshots --show tasks --json
|
|
1101
|
+
todos snapshots --show evidence --markdown
|
|
1102
|
+
todos snapshots --poll --types tasks,evidence --since 2026-05-22T00:00:00.000Z --json
|
|
1103
|
+
```
|
|
1104
|
+
|
|
1105
|
+
MCP clients can read `todos://snapshots/catalog` and
|
|
1106
|
+
`todos://snapshots/tasks` through `todos://snapshots/evidence`, or use
|
|
1107
|
+
`list_local_snapshots`, `get_local_snapshot`, and `poll_local_snapshots` for
|
|
1108
|
+
JSON or Markdown payloads.
|
|
1109
|
+
|
|
1110
|
+
## SDK Integration Fixtures
|
|
1111
|
+
|
|
1112
|
+
Downstream SDK, CLI JSON, MCP, and agent-adapter tests can generate a complete
|
|
1113
|
+
local fixture pack from the bundled demo project:
|
|
1114
|
+
|
|
1115
|
+
```bash
|
|
1116
|
+
todos sdk-fixtures --json
|
|
1117
|
+
todos sdk-fixtures --show > sdk-fixture-pack.json
|
|
1118
|
+
todos sdk-fixtures --write .todos/sdk-integrations --json
|
|
1119
|
+
```
|
|
1120
|
+
|
|
1121
|
+
The pack includes a local bridge fixture, stable JSON contract snapshots,
|
|
1122
|
+
project/task/plan/run/evidence snapshots, and a context pack. Copy-pasteable
|
|
1123
|
+
examples live in `examples/sdk-integrations/`, and the full guide is in
|
|
1124
|
+
`docs/sdk-integrations.md`.
|
|
465
1125
|
|
|
466
1126
|
## Local Bridge Import/Export
|
|
467
1127
|
|
|
@@ -478,10 +1138,10 @@ todos bridge-import todos-bridge.json --apply --resolve-conflicts
|
|
|
478
1138
|
|
|
479
1139
|
Bridge bundles include local projects, task lists, plans, tasks, dependencies,
|
|
480
1140
|
comments, run ledgers, command evidence, file evidence, artifacts, stored
|
|
481
|
-
artifact contents, commits, refs,
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
explicitly.
|
|
1141
|
+
artifact contents, commits, refs, verification records, saved views, local board
|
|
1142
|
+
definitions, and local calendar items. Imports default to dry-run mode and
|
|
1143
|
+
report conflicts before writing. The package does not upload bundles or call
|
|
1144
|
+
hosted services; any hosted sync must consume the exported JSON explicitly.
|
|
485
1145
|
|
|
486
1146
|
For multi-machine local work, `--resolve-conflicts` performs a safe task merge
|
|
487
1147
|
instead of overwriting local edits. It fills blank local fields from the
|
|
@@ -490,6 +1150,27 @@ unresolved divergent fields in `metadata.sync_conflicts` for manual review.
|
|
|
490
1150
|
Local non-empty title, status, priority, and metadata values win when both sides
|
|
491
1151
|
changed.
|
|
492
1152
|
|
|
1153
|
+
## Local Backups and Integrity
|
|
1154
|
+
|
|
1155
|
+
Create a checksum-protected local backup wrapper around the bridge bundle when
|
|
1156
|
+
you need a restorable snapshot with manifest counts and SQLite integrity
|
|
1157
|
+
metadata:
|
|
1158
|
+
|
|
1159
|
+
```bash
|
|
1160
|
+
todos backup create --output todos-backup.json
|
|
1161
|
+
todos backup verify todos-backup.json --json
|
|
1162
|
+
todos backup restore todos-backup.json --json
|
|
1163
|
+
todos backup restore todos-backup.json --apply --resolve-conflicts
|
|
1164
|
+
todos backup integrity --json
|
|
1165
|
+
```
|
|
1166
|
+
|
|
1167
|
+
Backups include the same local projects, task lists, plans, tasks, comments,
|
|
1168
|
+
runs, commands, files, commits, refs, verification records, saved views, boards,
|
|
1169
|
+
calendar items, and stored artifact contents as bridge exports. The backup
|
|
1170
|
+
manifest adds SHA-256 checksums for the full payload, embedded bridge bundle,
|
|
1171
|
+
and each bridge section. Restore defaults to dry-run mode and refuses corrupted
|
|
1172
|
+
or schema-incompatible bundles before importing.
|
|
1173
|
+
|
|
493
1174
|
## todos.md Markdown Import/Export
|
|
494
1175
|
|
|
495
1176
|
`todos.md` files are readable Markdown checklists with an embedded local bridge
|
|
@@ -595,6 +1276,9 @@ Release checks enforce that boundary before publishing:
|
|
|
595
1276
|
- local runtime tests use a no-network fixture for local-only workflows
|
|
596
1277
|
- `bun run verify:release` builds, packs, validates provenance, and runs a clean
|
|
597
1278
|
Bun global install smoke test from the candidate tarball
|
|
1279
|
+
- the install smoke plan itself is covered by tests: it installs only with Bun,
|
|
1280
|
+
verifies `todos`, `todos-mcp`, and `todos-serve`, and rejects private or
|
|
1281
|
+
hosted endpoint references
|
|
598
1282
|
|
|
599
1283
|
## License
|
|
600
1284
|
|