orbitmap 0.3.0 → 0.4.1

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.
Files changed (174) hide show
  1. package/README.md +546 -212
  2. package/dist/adapters/cloud.d.ts +367 -0
  3. package/dist/adapters/cloud.js +582 -0
  4. package/dist/adapters/cloud.js.map +1 -0
  5. package/dist/adapters/factory.d.ts +15 -0
  6. package/dist/adapters/factory.js +31 -0
  7. package/dist/adapters/factory.js.map +1 -0
  8. package/dist/adapters/local/adapter.d.ts +351 -0
  9. package/dist/adapters/local/adapter.js +346 -0
  10. package/dist/adapters/local/adapter.js.map +1 -0
  11. package/dist/adapters/local/context.d.ts +112 -0
  12. package/dist/adapters/local/context.js +137 -0
  13. package/dist/adapters/local/context.js.map +1 -0
  14. package/dist/adapters/local/entities/documents.d.ts +85 -0
  15. package/dist/adapters/local/entities/documents.js +251 -0
  16. package/dist/adapters/local/entities/documents.js.map +1 -0
  17. package/dist/adapters/local/entities/planning.d.ts +108 -0
  18. package/dist/adapters/local/entities/planning.js +540 -0
  19. package/dist/adapters/local/entities/planning.js.map +1 -0
  20. package/dist/adapters/local/entities/tasks.d.ts +95 -0
  21. package/dist/adapters/local/entities/tasks.js +442 -0
  22. package/dist/adapters/local/entities/tasks.js.map +1 -0
  23. package/dist/adapters/local/entities/work-items.d.ts +110 -0
  24. package/dist/adapters/local/entities/work-items.js +623 -0
  25. package/dist/adapters/local/entities/work-items.js.map +1 -0
  26. package/dist/adapters/local/rules.d.ts +172 -0
  27. package/dist/adapters/local/rules.js +319 -0
  28. package/dist/adapters/local/rules.js.map +1 -0
  29. package/dist/adapters/local/shapes.d.ts +209 -0
  30. package/dist/adapters/local/shapes.js +558 -0
  31. package/dist/adapters/local/shapes.js.map +1 -0
  32. package/dist/adapters/local/store.d.ts +200 -0
  33. package/dist/adapters/local/store.js +665 -0
  34. package/dist/adapters/local/store.js.map +1 -0
  35. package/dist/adapters/local/types.d.ts +226 -0
  36. package/dist/adapters/local/types.js +41 -0
  37. package/dist/adapters/local/types.js.map +1 -0
  38. package/dist/adapters/types.d.ts +332 -0
  39. package/dist/adapters/types.js +2 -0
  40. package/dist/adapters/types.js.map +1 -0
  41. package/dist/agent-instructions.d.ts +25 -9
  42. package/dist/agent-instructions.js +285 -237
  43. package/dist/agent-instructions.js.map +1 -1
  44. package/dist/api-client.d.ts +8 -239
  45. package/dist/api-client.js +8 -403
  46. package/dist/api-client.js.map +1 -1
  47. package/dist/commands/agents.d.ts +1 -1
  48. package/dist/commands/agents.js +10 -10
  49. package/dist/commands/agents.js.map +1 -1
  50. package/dist/commands/areas.d.ts +3 -0
  51. package/dist/commands/areas.js +29 -0
  52. package/dist/commands/areas.js.map +1 -0
  53. package/dist/commands/assign.d.ts +3 -2
  54. package/dist/commands/assign.js +52 -15
  55. package/dist/commands/assign.js.map +1 -1
  56. package/dist/commands/context.d.ts +1 -1
  57. package/dist/commands/context.js +18 -12
  58. package/dist/commands/context.js.map +1 -1
  59. package/dist/commands/create-area.d.ts +7 -0
  60. package/dist/commands/create-area.js +29 -0
  61. package/dist/commands/create-area.js.map +1 -0
  62. package/dist/commands/create.d.ts +3 -1
  63. package/dist/commands/create.js +5 -8
  64. package/dist/commands/create.js.map +1 -1
  65. package/dist/commands/dep.d.ts +2 -2
  66. package/dist/commands/dep.js +3 -3
  67. package/dist/commands/dep.js.map +1 -1
  68. package/dist/commands/doc-import.d.ts +1 -1
  69. package/dist/commands/doc-import.js +2 -2
  70. package/dist/commands/doc-import.js.map +1 -1
  71. package/dist/commands/doc-patch.d.ts +1 -1
  72. package/dist/commands/doc-patch.js +2 -2
  73. package/dist/commands/doc-patch.js.map +1 -1
  74. package/dist/commands/doc-share.d.ts +6 -6
  75. package/dist/commands/doc-share.js +13 -13
  76. package/dist/commands/doc-share.js.map +1 -1
  77. package/dist/commands/doc-update.d.ts +1 -1
  78. package/dist/commands/doc-update.js +2 -2
  79. package/dist/commands/doc-update.js.map +1 -1
  80. package/dist/commands/doc.d.ts +1 -1
  81. package/dist/commands/doc.js +5 -4
  82. package/dist/commands/doc.js.map +1 -1
  83. package/dist/commands/docs-cache.d.ts +2 -2
  84. package/dist/commands/docs-cache.js +3 -3
  85. package/dist/commands/docs-cache.js.map +1 -1
  86. package/dist/commands/docs.d.ts +1 -1
  87. package/dist/commands/docs.js +2 -2
  88. package/dist/commands/docs.js.map +1 -1
  89. package/dist/commands/get.d.ts +1 -1
  90. package/dist/commands/get.js +43 -3
  91. package/dist/commands/get.js.map +1 -1
  92. package/dist/commands/ideas.d.ts +4 -4
  93. package/dist/commands/ideas.js +6 -11
  94. package/dist/commands/ideas.js.map +1 -1
  95. package/dist/commands/init.d.ts +45 -3
  96. package/dist/commands/init.js +452 -104
  97. package/dist/commands/init.js.map +1 -1
  98. package/dist/commands/intent.d.ts +41 -0
  99. package/dist/commands/intent.js +237 -0
  100. package/dist/commands/intent.js.map +1 -0
  101. package/dist/commands/issues.d.ts +6 -5
  102. package/dist/commands/issues.js +8 -12
  103. package/dist/commands/issues.js.map +1 -1
  104. package/dist/commands/log.d.ts +1 -1
  105. package/dist/commands/log.js +2 -2
  106. package/dist/commands/log.js.map +1 -1
  107. package/dist/commands/mission.d.ts +42 -0
  108. package/dist/commands/mission.js +219 -0
  109. package/dist/commands/mission.js.map +1 -0
  110. package/dist/commands/orbit.d.ts +40 -3
  111. package/dist/commands/orbit.js +231 -58
  112. package/dist/commands/orbit.js.map +1 -1
  113. package/dist/commands/overview.d.ts +2 -2
  114. package/dist/commands/overview.js +25 -28
  115. package/dist/commands/overview.js.map +1 -1
  116. package/dist/commands/setup-agent.d.ts +27 -0
  117. package/dist/commands/setup-agent.js +85 -30
  118. package/dist/commands/setup-agent.js.map +1 -1
  119. package/dist/commands/setup-mcp.d.ts +1 -1
  120. package/dist/commands/setup-mcp.js +20 -49
  121. package/dist/commands/setup-mcp.js.map +1 -1
  122. package/dist/commands/start.d.ts +1 -1
  123. package/dist/commands/start.js +2 -2
  124. package/dist/commands/start.js.map +1 -1
  125. package/dist/commands/status.d.ts +2 -1
  126. package/dist/commands/status.js +3 -3
  127. package/dist/commands/status.js.map +1 -1
  128. package/dist/commands/subtask.d.ts +1 -1
  129. package/dist/commands/subtask.js +2 -2
  130. package/dist/commands/subtask.js.map +1 -1
  131. package/dist/commands/task-edit-content.d.ts +1 -1
  132. package/dist/commands/task-edit-content.js +2 -2
  133. package/dist/commands/task-edit-content.js.map +1 -1
  134. package/dist/commands/task.d.ts +10 -3
  135. package/dist/commands/task.js +19 -21
  136. package/dist/commands/task.js.map +1 -1
  137. package/dist/commands/tasks.d.ts +1 -1
  138. package/dist/commands/tasks.js +2 -2
  139. package/dist/commands/tasks.js.map +1 -1
  140. package/dist/commands/vibes.d.ts +4 -4
  141. package/dist/commands/vibes.js +5 -5
  142. package/dist/commands/vibes.js.map +1 -1
  143. package/dist/config.d.ts +69 -9
  144. package/dist/config.js +206 -23
  145. package/dist/config.js.map +1 -1
  146. package/dist/doc-cache.d.ts +23 -3
  147. package/dist/doc-cache.js +72 -12
  148. package/dist/doc-cache.js.map +1 -1
  149. package/dist/errors.d.ts +19 -2
  150. package/dist/errors.js +35 -0
  151. package/dist/errors.js.map +1 -1
  152. package/dist/id-resolve.d.ts +61 -0
  153. package/dist/id-resolve.js +87 -0
  154. package/dist/id-resolve.js.map +1 -0
  155. package/dist/index.js +477 -104
  156. package/dist/index.js.map +1 -1
  157. package/dist/mcp-config.d.ts +36 -0
  158. package/dist/mcp-config.js +51 -0
  159. package/dist/mcp-config.js.map +1 -0
  160. package/dist/oauth.d.ts +8 -0
  161. package/dist/oauth.js +54 -15
  162. package/dist/oauth.js.map +1 -1
  163. package/dist/output.js +7 -2
  164. package/dist/output.js.map +1 -1
  165. package/dist/paths.d.ts +97 -0
  166. package/dist/paths.js +178 -0
  167. package/dist/paths.js.map +1 -0
  168. package/dist/project-config.d.ts +75 -0
  169. package/dist/project-config.js +55 -0
  170. package/dist/project-config.js.map +1 -0
  171. package/dist/workspace-resolve.d.ts +158 -0
  172. package/dist/workspace-resolve.js +284 -0
  173. package/dist/workspace-resolve.js.map +1 -0
  174. package/package.json +53 -50
package/README.md CHANGED
@@ -1,212 +1,546 @@
1
- # OrbitMap CLI
2
-
3
- > Project management for AI coding agents — without MCP.
4
-
5
- ## What is this?
6
-
7
- OrbitMap CLI gives AI agents (Gemini CLI, GPT Codex, Claude Code without MCP, etc.) access to [OrbitMap](https://orbitmap.app) project management through simple shell commands. It's the non-MCP alternative to [orbitmap-mcp](https://github.com/BTA-Systems/orbitmap-mcp).
8
-
9
- **Use cases:**
10
- - AI agents that can run shell commands but don't support MCP (Gemini CLI, GPT Codex CLI)
11
- - Environments where MCP configuration is impractical
12
- - Quick task management from your terminal
13
-
14
- ## Quick Start
15
-
16
- ```bash
17
- # 1. Run the setup wizard
18
- npx orbitmap init
19
-
20
- # 2. Enter your credentials:
21
- # - API Key (from OrbitMap dashboard)
22
- # - Project ID (optional auto-detected if you have one project)
23
-
24
- # 3. Start working
25
- npx orbitmap start
26
- ```
27
-
28
- ## Commands
29
-
30
- ### Task Management
31
-
32
- | Command | Description |
33
- |---------|-------------|
34
- | `orbitmap tasks` | List your assigned tasks |
35
- | `orbitmap task <id>` | Show full task details (UUID or 6-char task number) |
36
- | `orbitmap start [id]` | Start working on a task (auto-picks next TODO if no ID) |
37
- | `orbitmap status <task-id> <status>` | Update task status |
38
- | `orbitmap create <title>` | Create a new task (`--from-issue` to link an issue) |
39
- | `orbitmap subtask <parent-id> <title>` | Create a subtask |
40
- | `orbitmap assign <task-id> <agent-id>` | Assign an agent to a task |
41
- | `orbitmap get <prefixed-id>` | Show any object by prefixed ID (TS-xxx, IS-xxx, ID-xxx, VB-xxx) |
42
- | `orbitmap dep add <id> <target-id>` | Add a dependency between tasks |
43
- | `orbitmap dep remove <id> <target-id>` | Remove a dependency |
44
- | `orbitmap task-edit-content <id>` | Edit task title, description, or agent instructions |
45
-
46
- **Valid statuses:** `backlog`, `todo`, `in_progress`, `in_review`, `review_changes`, `done`, `blocked`
47
-
48
- ### Work Logging
49
-
50
- | Command | Description |
51
- |---------|-------------|
52
- | `orbitmap log <task-id> <message>` | Log work on a task |
53
-
54
- **Options:**
55
- - `--type <type>` Log type: `note` (default), `code_change`, `decision`, `blocker`
56
- - `--meta <json>` — JSON metadata, e.g. `'{"files":["src/app.ts"]}'`
57
-
58
- **Examples:**
59
- ```bash
60
- orbitmap log abc123 "Implemented user auth endpoint" --type code_change
61
- orbitmap log abc123 "Using JWT over sessions for stateless auth" --type decision
62
- orbitmap log abc123 "Blocked on missing API credentials" --type blocker
63
- ```
64
-
65
- ### Documents
66
-
67
- | Command | Description |
68
- |---------|-------------|
69
- | `orbitmap docs` | List project documents |
70
- | `orbitmap doc <id-or-slug>` | Show full document content |
71
- | `orbitmap doc-import <title>` | Import a markdown file (`--context` to set when-to-use hint) |
72
- | `orbitmap doc-update <id-or-slug>` | Update a document from a file |
73
- | `orbitmap doc-patch <id-or-slug>` | Patch a document with operations (replace_section, append, etc.) |
74
- | `orbitmap doc-share <doc-id> <project-id>` | Share a document with another project |
75
- | `orbitmap doc-unshare <doc-id> <project-id>` | Remove document sharing |
76
- | `orbitmap docs pull [slug]` | Download document(s) to local cache |
77
- | `orbitmap docs list-cache` | Show locally cached documents |
78
- | `orbitmap docs clean` | Remove stale cached documents |
79
-
80
- **Examples:**
81
- ```bash
82
- # List all API docs
83
- orbitmap docs --type api
84
-
85
- # Search documents by title
86
- orbitmap docs --search "auth"
87
-
88
- # View a document
89
- orbitmap doc api-specification
90
-
91
- # Import a new document
92
- orbitmap doc-import "API Spec" --type api --file ./docs/api-spec.md
93
-
94
- # Update existing document
95
- orbitmap doc-update api-specification --file ./docs/api-spec.md --changelog "Added auth section"
96
-
97
- # Share with another project
98
- orbitmap doc-share <doc-uuid> <project-uuid> --agents agent1-uuid,agent2-uuid
99
- ```
100
-
101
- ### Project & Agent Info
102
-
103
- | Command | Description |
104
- |---------|-------------|
105
- | `orbitmap context` | Show agent identity and current project |
106
- | `orbitmap projects` | List all your projects |
107
- | `orbitmap members <project-id>` | List agents and users in a project (accepts slug) |
108
- | `orbitmap overview [project-id]` | Project overview with task statistics (uses default project) |
109
-
110
- ### Issues, Ideas & Vibes
111
-
112
- | Command | Description |
113
- |---------|-------------|
114
- | `orbitmap issues` | List open issues |
115
- | `orbitmap issue show <id>` | Show issue details (UUID or number) |
116
- | `orbitmap issue register` | Register a new issue |
117
- | `orbitmap issue resolve <id>` | Resolve an issue |
118
- | `orbitmap ideas` | List ideas |
119
- | `orbitmap idea add` | Add a new idea |
120
- | `orbitmap idea show <id>` | Show idea details (UUID or number) |
121
- | `orbitmap idea status <id>` | Update idea status |
122
- | `orbitmap vibes` | List vibes |
123
- | `orbitmap vibe log` | Log a new vibe |
124
- | `orbitmap vibe show <id>` | Show vibe details |
125
- | `orbitmap vibe update <id>` | Update a vibe |
126
-
127
- ### Orbits
128
-
129
- | Command | Description |
130
- |---------|-------------|
131
- | `orbitmap orbit items <id-or-slug>` | List items in an orbit |
132
- | `orbitmap orbit attach <id-or-slug>` | Attach an object to an orbit |
133
- | `orbitmap orbit detach <id-or-slug>` | Detach an object from an orbit |
134
-
135
- ### Delivery Status
136
-
137
- Track code delivery lifecycle on tasks:
138
-
139
- ```bash
140
- orbitmap status abc123 done --delivery on_branch
141
- orbitmap status abc123 done --delivery merged
142
- orbitmap status abc123 done --delivery released
143
- ```
144
-
145
- ### Global Options
146
-
147
- | Option | Description |
148
- |--------|-------------|
149
- | `--json` | Output raw JSON (for scripting/piping) |
150
- | `--project <id>` | Override project context (UUID or slug) |
151
-
152
- ## Configuration
153
-
154
- ### Setup
155
-
156
- Run `npx orbitmap init` for interactive setup. Credentials are stored in `~/.orbitmap/config.json`.
157
-
158
- ### Config file
159
-
160
- ```json
161
- {
162
- "api_url": "https://orbitmap.app/api/agent",
163
- "api_key": "orbitmap_...",
164
- "project_id": "my-project-slug"
165
- }
166
- ```
167
-
168
- ### Environment Variables
169
-
170
- Environment variables take precedence over the config file:
171
-
172
- | Variable | Description |
173
- |----------|-------------|
174
- | `ORBITMAP_API_KEY` | Agent API key |
175
- | `ORBITMAP_API_URL` | API base URL (default: `https://orbitmap.app/api/agent`) |
176
- | `ORBITMAP_PROJECT_ID` | Project UUID or slug |
177
-
178
- ### Resolution Priority
179
-
180
- 1. Environment variables
181
- 2. Config file (`~/.orbitmap/config.json`)
182
- 3. Defaults
183
-
184
- ## Authentication
185
-
186
- OrbitMap CLI uses a single **Agent API Key** for authentication (`Authorization: Bearer` header). Each agent has its own key — get it from the OrbitMap dashboard.
187
-
188
- Optionally, set a default **Project ID** if your agent is assigned to multiple projects.
189
-
190
- ## For AI Agents
191
-
192
- Run the setup wizard to teach your agent about OrbitMap:
193
-
194
- ```bash
195
- npx orbitmap setup-agent # auto-detects your agent
196
- npx orbitmap setup-agent --agent claude
197
- ```
198
-
199
- It installs two layers, mirroring the OrbitMap MCP server:
200
-
201
- - A **thin always-on hook** (~10 lines) in your agent config (`CLAUDE.md`, `AGENTS.md`, …) so the agent always knows the project uses OrbitMap and knows the workflow skeleton.
202
- - The **deep, on-demand instructions** — full parity with the MCP `full` profile (all 27 tools mapped to commands). For **Claude Code** this is installed as a loaded-on-demand skill at `.claude/skills/orbitmap/SKILL.md` (zero per-turn context cost); for other agents it's inlined as a markdown fallback.
203
-
204
- See [Agent Instructions](docs/agent-instructions.md) for details.
205
-
206
- ## Requirements
207
-
208
- - Node.js 18+
209
-
210
- ## License
211
-
212
- MIT
1
+ # OrbitMap CLI
2
+
3
+ > Project management for AI coding agents — without MCP.
4
+
5
+ ## What is this?
6
+
7
+ OrbitMap CLI gives AI agents (Gemini CLI, GPT Codex, Claude Code without MCP, etc.) access to [OrbitMap](https://orbitmap.ai) project management through simple shell commands. It's the non-MCP alternative to [orbitmap-mcp](https://github.com/BTA-Systems/orbitmap-mcp), and tracks the same Agent API contract (currently **schema_version 6.3.0**).
8
+
9
+ **Use cases:**
10
+ - AI agents that can run shell commands but don't support MCP (Gemini CLI, GPT Codex CLI)
11
+ - Environments where MCP configuration is impractical
12
+ - Quick task management from your terminal
13
+
14
+ ## Quick Start
15
+
16
+ ```bash
17
+ # 1. Run the setup wizard — it asks where your data should live:
18
+ # [1] Orbitmap.ai account (cloud) [2] Local files (no account)
19
+ npx orbitmap init
20
+
21
+ # 2. Cloud: enter your credentials
22
+ # - API Key (from OrbitMap dashboard)
23
+ # - Area ID (optional — auto-detected if you belong to a single area)
24
+ # Local: pick a workspace directory, a workspace name and a first area
25
+
26
+ # 3. Confirm the agent skills — `init` installs them in the same run, creating
27
+ # CLAUDE.md / AGENTS.md if this directory has none yet. `--agent claude`
28
+ # picks the type without asking; `--no-skills` opts out.
29
+
30
+ # 4. Start working
31
+ npx orbitmap start
32
+ ```
33
+
34
+ `init` is the whole install: config, credentials, MCP block and the agent skills. There is no
35
+ mandatory second command.
36
+
37
+ ## Local mode
38
+
39
+ The CLI runs in one of two modes, chosen once during `orbitmap init`:
40
+
41
+ | | **Cloud mode** | **Local mode** |
42
+ |---|---|---|
43
+ | Storage | Orbitmap.ai workspace (Agent API) | Markdown files with YAML frontmatter on your disk |
44
+ | Account | required | none |
45
+ | Web UI, team, multiple agents | yes | no — solo developer |
46
+ | Commands | all of them | all of them, minus the limitations below |
47
+
48
+ Both modes speak the **same commands with the same output** — `orbitmap start`, `orbitmap log`,
49
+ `orbitmap tasks --json` behave identically, and agent skills installed by `orbitmap init` never
50
+ need to know which mode is active.
51
+
52
+ ### Set up local mode
53
+
54
+ Interactive — answer `2` at the mode question, then accept or override the three defaults
55
+ (workspace directory `./.orbitmap`, workspace name, first area):
56
+
57
+ ```bash
58
+ npx orbitmap init
59
+ ```
60
+
61
+ Scripted / CI:
62
+
63
+ ```bash
64
+ npx orbitmap init --local \
65
+ --workspace ~/orbits/personal \ # where the files live (default: ./.orbitmap)
66
+ --workspace-name "My Orbit" \ # default: current directory name
67
+ --area "My App" \ # first area (default: current directory name)
68
+ --no-skills # skip installing agent skills
69
+ ```
70
+
71
+ If the workspace directory is **outside** the project, `init` writes a pointer at
72
+ `<project>/.orbitmap/link.json` (`{"workspace": "…", "area": "…"}`) and adds
73
+ `.orbitmap/link.json` and `.orbitmap/docs/` to `.gitignore` (not the whole `.orbitmap/`
74
+ directory — `.orbitmap/config.json`, see [Configuration](#configuration), is meant to be
75
+ committed). The pointer is found by walking up from the current directory, like `.git`, so
76
+ commands work from any subdirectory. If the workspace *is* `./.orbitmap`, nothing is gitignored —
77
+ the data is meant to be committable.
78
+
79
+ Resolution order for the workspace directory: `--workspace` → `ORBITMAP_WORKSPACE` →
80
+ `.orbitmap/link.json` → `./.orbitmap/workspace.yml` → `workspace_path` in
81
+ `~/.orbitmap/config.json`. The mode itself is resolved per-project, first match wins: `--workspace`
82
+ (explicit local) `ORBITMAP_MODE=local|cloud` → nearest `.orbitmap/config.json` `mode` field →
83
+ auto-detect (walk up from cwd looking for `.orbitmap/workspace.yml` or `.orbitmap/link.json`, same
84
+ as git looking for `.git` → local) → `mode` in the global config file, defaulting to `cloud` when
85
+ absent. The auto-detect rung (and the project config rung above it) is what lets one project stay
86
+ local and another stay cloud on the same machine — `init` never writes `mode` to the global config
87
+ for the local path.
88
+
89
+ ### Where the data lives
90
+
91
+ ```
92
+ <workspace-dir>/
93
+ workspace.yml # workspace header, default area + entity-number counters
94
+ missions/MS-<num>.md
95
+ intents/IN-<num>.md
96
+ ideas/ID-<num>.md
97
+ documents/<slug>.md
98
+ issues/IS-<num>.md # workspace-level issues (no area)
99
+ areas/
100
+ <area-slug>/
101
+ area.yml # area header (git url, default branch, …)
102
+ tasks/TS-<num>.md
103
+ issues/IS-<num>.md # area-scoped issues
104
+ vibes/VB-<num>.md
105
+ ```
106
+
107
+ Every entity is one Markdown file: the YAML frontmatter holds the fields, the body holds the long
108
+ text (`## Description`, and for tasks an append-only `## Work Log`). Relations are stored as entity
109
+ numbers and slugs, so the files stay readable and diff cleanly in git.
110
+
111
+ **The CLI is the only writer.** Editing these files by hand (or letting an agent do it) bypasses
112
+ validation and the counters — always go through `orbitmap` commands.
113
+
114
+ ### Current limitations
115
+
116
+ Local mode is a proof of concept. Not supported yet:
117
+
118
+ - **No import/export between a local workspace and the cloud** (planned next; entity-number format
119
+ and response shapes are already identical so the future import is a data copy).
120
+ - **No orbits** `orbit *` commands fail with `NOT_SUPPORTED_IN_LOCAL_MODE` and exit 1.
121
+ - **No document section-patching, sharing or presigned uploads** `doc-patch`, `doc-share`,
122
+ `doc-unshare`, `doc-visibility` fail the same way. `docs`, `doc`, `doc-import` and `doc-update`
123
+ work.
124
+ - **No OAuth** (`login` / `logout`) meaningless without a server.
125
+ - **No human team members**: exactly one implicit user (`me`) and one implicit agent
126
+ (`local-agent`). `members` returns them; `assign` accepts only them.
127
+ - **No sync or merge between machines** — you may sync the workspace directory with git yourself,
128
+ the CLI does not mediate conflicts.
129
+
130
+ See [`docs/architecture.md`](docs/architecture.md) for the adapter split and
131
+ [`docs/adr/0001-local-mode.md`](docs/adr/0001-local-mode.md) for why local storage exists at all.
132
+
133
+ ## Object model
134
+
135
+ OrbitMap organises work on several levels. The CLI mirrors them 1:1:
136
+
137
+ | Level | Prefix | What it is |
138
+ |-------|--------|-----------|
139
+ | **Workspace** | — | Top-level container that owns areas, orbits, intents and missions |
140
+ | **Area** | | A single product/repo/domain (formerly called *project*) — the default scope of most commands |
141
+ | **Orbit** | | Cross-area grouping of work (a theme, an initiative); items of any type can be attached |
142
+ | **Intent** | `IN-` | A desired outcome at workspace level; tasks and issues can be linked to it |
143
+ | **Mission** | `MS-` | A time-boxed workspace focus; only one mission can be `active` |
144
+ | **Task** | `TS-` | The unit of work agents execute |
145
+ | **Issue** | `IS-` | A reported problem |
146
+ | **Idea** | `ID-` | A future possibility |
147
+ | **Vibe** | `VB-` | Ad-hoc work context outside the task lifecycle |
148
+
149
+ > **Project → Area rename.** What used to be called a *project* is now an **area**. The global flag is `--area`, the env var is `ORBITMAP_AREA`, and the config key is `area`. The legacy `ORBITMAP_PROJECT_ID` env var and `project_id` config key were read-only fallbacks for one release and were removed by [ADR 0002](docs/adr/0002-project-scoped-config.md) — they had the same cross-project leak as the machine-wide `area` they aliased. Set `area` in your project's `.orbitmap/config.json` instead.
150
+
151
+ ## Commands
152
+
153
+ ### Task Management
154
+
155
+ | Command | Description |
156
+ |---------|-------------|
157
+ | `orbitmap tasks` | List your assigned tasks (`--status`, `--priority`, `--orbit`) |
158
+ | `orbitmap task <id-or-number>` | Show full task details |
159
+ | `orbitmap start [id-or-number]` | Start working on a task (auto-picks next TODO if no ID) |
160
+ | `orbitmap status <id-or-number> <status>` | Update task status (`--force` to move a parent to `done` with unfinished subtasks) |
161
+ | `orbitmap create <title>` | Create a new task (`--from-issue`, `--intent`, `--orbit`) |
162
+ | `orbitmap subtask <parent-id-or-number> <title>` | Create a subtask |
163
+ | `orbitmap assign <id-or-number> [agent-id]` | Assign a task, issue, idea, or intent to an agent or user |
164
+ | `orbitmap get <prefixed-id>` | Show any object by prefixed ID (TS-, IS-, ID-, VB-, IN-, MS-) |
165
+ | `orbitmap dep add <id-or-number> <target-id-or-number>` | Add a dependency between tasks |
166
+ | `orbitmap dep remove <id-or-number> <target-id-or-number>` | Remove a dependency |
167
+ | `orbitmap task-edit-content <id-or-number>` | Edit task title, description, or agent instructions |
168
+
169
+ **Valid statuses:** `backlog`, `todo`, `in_progress`, `in_review`, `review_changes`, `done`, `blocked`
170
+
171
+ ### Referring to objects: `<id-or-number>`
172
+
173
+ Every command that takes an object reference accepts all three forms interchangeably:
174
+
175
+ - the prefixed display ID the CLI prints — `TS-uw9yh5`, `IS-4k2p9q`, `IN-6htga8`
176
+ - the bare 6-character code `uw9yh5`
177
+ - the UUID
178
+
179
+ You can therefore paste any identifier straight out of `orbitmap tasks`, `orbitmap context` or
180
+ the message `orbitmap create` prints. This was previously true of `orbitmap task` and
181
+ `orbitmap get` only: `status`, `log`, `subtask`, `start`, `assign`, `task-edit-content` and
182
+ `dep add`/`dep remove` rejected prefixed IDs with a 404, including identifiers the CLI had
183
+ just printed itself.
184
+
185
+ The Agent API resolves a prefixed ID inline for issues, ideas, intents and missions, but not
186
+ for tasks a task reference that is not a UUID needs a `/tasks/by-number/{n}` lookup first.
187
+ The CLI now does that once, in the adapter layer, so every task command behaves the same and a
188
+ UUID still costs exactly one request. See `src/id-resolve.ts`.
189
+
190
+ `assign` auto-detects the object type from the prefix (`IS-…` → issue, `IN-…` → intent, …);
191
+ pass `--type task|issue|idea|intent` for bare UUIDs and bare codes.
192
+
193
+ ### Work Logging
194
+
195
+ | Command | Description |
196
+ |---------|-------------|
197
+ | `orbitmap log <id-or-number> <message>` | Log work on a task |
198
+
199
+ **Options:**
200
+ - `--type <type>` — Log type: `note` (default), `code_change`, `decision`, `blocker`, `discovery`, `exploration`, `fix`
201
+ - `--meta <json>` JSON metadata, e.g. `'{"files":["src/app.ts"]}'`
202
+
203
+ **Examples:**
204
+ ```bash
205
+ orbitmap log abc123 "Implemented user auth endpoint" --type code_change
206
+ orbitmap log abc123 "Using JWT over sessions for stateless auth" --type decision
207
+ orbitmap log abc123 "Blocked on missing API credentials" --type blocker
208
+ ```
209
+
210
+ ### Documents
211
+
212
+ | Command | Description |
213
+ |---------|-------------|
214
+ | `orbitmap docs` | List area documents |
215
+ | `orbitmap doc <id-or-slug>` | Show document (TOC by default, `--full`, `--section`) |
216
+ | `orbitmap doc-import <title>` | Import a markdown file (`--context` to set when-to-use hint) |
217
+ | `orbitmap doc-update <id-or-slug>` | Replace a document from a file |
218
+ | `orbitmap doc-patch <id-or-slug>` | Patch a document with section operations |
219
+ | `orbitmap doc-share <doc-id> <area-id>` | Share a document with another area |
220
+ | `orbitmap doc-unshare <doc-id> <area-id>` | Remove document sharing |
221
+ | `orbitmap doc-visibility <doc-id> <area-id>` | Restrict a share to specific agents (or allow all) |
222
+ | `orbitmap docs pull [slug]` | Download document(s) to local cache |
223
+ | `orbitmap docs list-cache` | Show locally cached documents |
224
+ | `orbitmap docs clean` | Remove stale cached documents |
225
+
226
+ **Examples:**
227
+ ```bash
228
+ # List all API docs
229
+ orbitmap docs --type api
230
+
231
+ # Search documents by title
232
+ orbitmap docs --search "auth"
233
+
234
+ # Read cheaply: TOC → one section → full content
235
+ orbitmap doc api-specification
236
+ orbitmap doc api-specification --section "## Authentication"
237
+ orbitmap doc api-specification --full
238
+
239
+ # Import a new document
240
+ orbitmap doc-import "API Spec" --type api --file ./docs/api-spec.md
241
+
242
+ # Update existing document
243
+ orbitmap doc-update api-specification --file ./docs/api-spec.md --changelog "Added auth section"
244
+
245
+ # Patch a single section (optimistic locking via --base-version)
246
+ orbitmap doc-patch api-specification --base-version 7 \
247
+ --replace-section "## Authentication" --content "Bearer tokens only." \
248
+ --changelog "Reworded auth"
249
+
250
+ # Share with another area
251
+ orbitmap doc-share <doc-uuid> <area-uuid> --agents agent1-uuid,agent2-uuid
252
+ ```
253
+
254
+ ### Area & Agent Info
255
+
256
+ | Command | Description |
257
+ |---------|-------------|
258
+ | `orbitmap context` | Show agent identity and current area |
259
+ | `orbitmap areas` | List all areas assigned to this agent |
260
+ | `orbitmap create-area <name>` | Create a new area (`--desc`, `--slug`, `--workspace-id`) |
261
+ | `orbitmap members <area-id>` | List agents and users in an area (accepts slug) |
262
+ | `orbitmap overview [area-id]` | Area overview with task statistics (uses default area) |
263
+
264
+ ### Issues, Ideas & Vibes
265
+
266
+ | Command | Description |
267
+ |---------|-------------|
268
+ | `orbitmap issues` | List open issues |
269
+ | `orbitmap issue show <id>` | Show issue details (UUID or number) |
270
+ | `orbitmap issue register` | Register a new issue (`--intent` to link it to an intent) |
271
+ | `orbitmap issue status <id> <status>` | Update issue status |
272
+ | `orbitmap issue resolve <id>` | Resolve an issue |
273
+ | `orbitmap ideas` | List ideas |
274
+ | `orbitmap idea add` | Add a new idea |
275
+ | `orbitmap idea show <id>` | Show idea details (UUID or number) |
276
+ | `orbitmap idea status <id>` | Update idea status |
277
+ | `orbitmap vibes` | List vibes |
278
+ | `orbitmap vibe log` | Log a new vibe |
279
+ | `orbitmap vibe show <id>` | Show vibe details |
280
+ | `orbitmap vibe update <id>` | Update a vibe |
281
+
282
+ ### Intents
283
+
284
+ Workspace-level desired outcomes. Tasks and issues hang off an intent; an intent can sit in an orbit.
285
+
286
+ | Command | Description |
287
+ |---------|-------------|
288
+ | `orbitmap intents` | List intents (shortcut for `intent list`) |
289
+ | `orbitmap intent show <id-or-number>` | Show an intent (UUID or `IN-xxxxxx`) |
290
+ | `orbitmap intent create <title>` | Create an intent (`--outcome`, `--status`, `--orbit`) |
291
+ | `orbitmap intent update <id>` | Update title, outcome, or status |
292
+ | `orbitmap intent link <id> --type task\|issue --id <uuid>` | Link a task or issue |
293
+ | `orbitmap intent unlink <id> --type task\|issue --id <uuid>` | Unlink a task or issue |
294
+ | `orbitmap intent orbit <id> [orbit-id]` | Set the intent's orbit (`--clear` to remove) |
295
+
296
+ **Statuses:** `new`, `design`, `plan`, `build`, `done`, `cancelled`
297
+
298
+ ```bash
299
+ orbitmap intent create "Cut onboarding time in half" \
300
+ --outcome "New users reach first value in under 5 minutes" \
301
+ --status design --orbit growth-q3
302
+
303
+ orbitmap intent link IN-a1b2c3 --type task --id <task-uuid>
304
+ ```
305
+
306
+ `intent create --orbit` is create-then-attach. If the attach step fails the intent is still created — the CLI reports the failure and does not retry.
307
+
308
+ ### Missions
309
+
310
+ Time-boxed workspace focus. Only one mission can be `active` at a time.
311
+
312
+ | Command | Description |
313
+ |---------|-------------|
314
+ | `orbitmap missions` | List missions (shortcut for `mission list`) |
315
+ | `orbitmap mission show <id-or-number>` | Show a mission (UUID or `MS-xxxxxx`) |
316
+ | `orbitmap mission create <title>` | Create a mission (`--desc`, `--outcome`, `--end-date`) |
317
+ | `orbitmap mission update <id>` | Update title, description, outcome, or end date |
318
+ | `orbitmap mission status <id> <status>` | Set lifecycle status (`--move-to` to relocate unfinished work) |
319
+ | `orbitmap mission link <id> --type <t> --id <uuid>` | Link a task, issue, idea, or intent |
320
+ | `orbitmap mission unlink <id> --type <t> --id <uuid>` | Unlink a directly-linked item |
321
+
322
+ **Statuses:** created as `new`; then `active`, `completed`, `cancelled`.
323
+
324
+ ```bash
325
+ orbitmap mission create "Ship v2 beta" --outcome "Beta live for 50 customers" --end-date 2026-09-30
326
+ orbitmap mission status MS-a1b2c3 active
327
+ orbitmap mission status MS-a1b2c3 completed --move-to MS-d4e5f6
328
+ ```
329
+
330
+ Linking a task or issue to a mission clears its `intent_id` — an item belongs either to an intent or directly to a mission.
331
+
332
+ ### Orbits
333
+
334
+ | Command | Description |
335
+ |---------|-------------|
336
+ | `orbitmap orbit list` | List orbits (workspace-scoped from the area context, `--workspace`) |
337
+ | `orbitmap orbit show <id-or-slug>` | Show orbit details (areas, task counts, resources) |
338
+ | `orbitmap orbit create <name>` | Create an orbit (`--desc`, `--color`, `--areas`) |
339
+ | `orbitmap orbit update <id-or-slug>` | Update name, description, status, or color |
340
+ | `orbitmap orbit items <id-or-slug>` | List items in an orbit (`--type`) |
341
+ | `orbitmap orbit attach <id-or-slug>` | Attach an object to an orbit |
342
+ | `orbitmap orbit detach <id-or-slug>` | Detach an object from an orbit |
343
+ | `orbitmap orbit area link <id-or-slug> <area-id>` | Link an area to an orbit |
344
+ | `orbitmap orbit area unlink <id-or-slug> <area-id>` | Unlink an area from an orbit |
345
+ | `orbitmap orbit dep <id-or-slug> <target-orbit-id>` | Add an orbit-to-orbit dependency |
346
+
347
+ **Item types:** `task`, `issue`, `vibe`, `idea`, `document`
348
+ **Orbit statuses:** `active`, `completed`, `archived`
349
+
350
+ ```bash
351
+ orbitmap orbit create "Growth Q3" --color "#5B8DEF" --areas <area-uuid>,<area-uuid>
352
+ orbitmap orbit attach growth-q3 --type task --id <task-uuid> --note "core flow"
353
+ orbitmap orbit items growth-q3 --type task
354
+ ```
355
+
356
+ There is no orbit delete and no dependency remove in the API — archive via `orbit update --status archived`.
357
+
358
+ ### Delivery Status
359
+
360
+ Track code delivery lifecycle on tasks:
361
+
362
+ ```bash
363
+ orbitmap status abc123 done --delivery on_branch
364
+ orbitmap status abc123 done --delivery merged
365
+ orbitmap status abc123 done --delivery released
366
+ ```
367
+
368
+ ### Setup helpers
369
+
370
+ | Command | Description |
371
+ |---------|-------------|
372
+ | `orbitmap init` | Full setup — mode, then credentials or workspace, then the agent skills (`--key`, `--area`, `--profile`, `--advanced`, `--global`; `--local`, `--workspace`, `--workspace-name`; `--agent <type>`, `--no-skills`) |
373
+ | `orbitmap login` / `orbitmap logout` | Browser-based OAuth login / token revocation |
374
+ | `orbitmap setup-agent` | Refresh the installed instructions (after a CLI upgrade) or add another agent type — `init` installs them once already |
375
+ | `orbitmap setup-mcp` | Write/merge an `orbitmap` entry into `.mcp.json` (no API calls) |
376
+
377
+ ### Global Options
378
+
379
+ | Option | Description |
380
+ |--------|-------------|
381
+ | `--json` | Output raw JSON (for scripting/piping) |
382
+ | `--area <id>` | Override area context (UUID or slug) |
383
+ | `--workspace <path>` | Override the local workspace directory (local mode only) |
384
+
385
+ ## Configuration
386
+
387
+ See `docs/adr/0002-project-scoped-config.md` for the full design and rationale (this
388
+ replaced a single global config file — breaking for scripted `init` callers that relied on
389
+ that, see the ADR's Consequences section).
390
+
391
+ ### Setup
392
+
393
+ Run `npx orbitmap init` for interactive setup. For cloud mode, it writes
394
+ `<project>/.orbitmap/config.json` (committable, no secrets) by default; pass `--global` to
395
+ write `~/.orbitmap/config.json` instead (a machine-wide default, like `git config --global`).
396
+ The API key always goes to `~/.orbitmap/credentials.json`, under a named **agent profile** —
397
+ never into a config file, either way.
398
+
399
+ ### Project config file — `<project>/.orbitmap/config.json`
400
+
401
+ ```json
402
+ {
403
+ "schema_version": 1,
404
+ "mode": "cloud",
405
+ "agent": "orbitmap-app-bot",
406
+ "area": "my-area-slug"
407
+ }
408
+ ```
409
+
410
+ `mode` is `"cloud"` (the default when the key is absent) or `"local"`. `agent` names a
411
+ profile in `~/.orbitmap/credentials.json` — the project says *which* agent to use, the
412
+ credentials file (below) holds *that agent's* key. This file is meant to be committed: a
413
+ team shares the `agent` name and `area` pinning through version control, and each member's
414
+ own copy of `credentials.json` supplies their own agent's key.
415
+
416
+ ### Global config file — `~/.orbitmap/config.json`
417
+
418
+ Same shape, used as the fallback for any field a project's own config doesn't set, and as
419
+ the only place `workspace_path` (the default local workspace directory) is read from. Only
420
+ written by `orbitmap init --global`, or left over from before ADR 0002 — in which case a
421
+ lingering `area` is still honoured but prints a one-time deprecation warning telling you to
422
+ move it into a project's own `.orbitmap/config.json`.
423
+
424
+ ### Credentials file — `~/.orbitmap/credentials.json`
425
+
426
+ Never committed, never leaves the machine. Also holds the OAuth session used by
427
+ `orbitmap login`/`orbitmap logout` (unrelated top-level fields, unchanged shape):
428
+
429
+ ```json
430
+ {
431
+ "agents": {
432
+ "orbitmap-app-bot": { "api_key": "orbitmap_..." },
433
+ "orbitmap-cli-bot": { "api_key": "orbitmap_..." }
434
+ }
435
+ }
436
+ ```
437
+
438
+ An agent name that resolves to nothing here (nothing named `agent` anywhere, including the
439
+ global config) falls back to the `"default"` profile — which is also where a pre-ADR-0002
440
+ global `api_key` is migrated to. That migration runs inside `loadConfig()`, i.e. on the
441
+ first command of any kind after upgrading, not only on `orbitmap init`; it rewrites
442
+ `~/.orbitmap/config.json` without the key (preserving every other key in the file) and
443
+ prints a one-time notice. If the write fails — read-only `$HOME`, a `credentials.json` owned
444
+ by another user — it says so and keeps using the key from the config file, so the CLI never
445
+ locks you out over a key that is right there on disk.
446
+
447
+ `~/.orbitmap` itself can be relocated with `ORBITMAP_CONFIG_HOME` or the standard
448
+ `XDG_CONFIG_HOME` (as `$XDG_CONFIG_HOME/orbitmap`); reads fall back to the legacy
449
+ `~/.orbitmap` location when the new one has nothing yet.
450
+
451
+ ### Environment Variables
452
+
453
+ Environment variables take precedence over every config file:
454
+
455
+ | Variable | Description |
456
+ |----------|-------------|
457
+ | `ORBITMAP_API_KEY` | Agent API key (bypasses agent-profile lookup entirely) |
458
+ | `ORBITMAP_API_URL` | API base URL — the only remaining override; there is no config-file equivalent any more (see the ADR) |
459
+ | `ORBITMAP_AGENT` | Name of the agent profile in `credentials.json` to use |
460
+ | `ORBITMAP_AREA` | Area UUID or slug |
461
+ | `ORBITMAP_MODE` | `cloud` or `local` — overrides the config `mode` |
462
+ | `ORBITMAP_WORKSPACE` | Local workspace directory (local mode) |
463
+ | `ORBITMAP_CONFIG_HOME` / `XDG_CONFIG_HOME` | Relocate `~/.orbitmap` |
464
+
465
+ ### Resolution Priority
466
+
467
+ **Area** (first match wins):
468
+ 1. Explicit `--area` flag
469
+ 2. `ORBITMAP_AREA` env
470
+ 3. `.orbitmap/link.json` (`area`) found by walking up from the current directory — local mode
471
+ 4. Nearest `.orbitmap/config.json` **that sets `area`**, found the same way. Resolution is
472
+ per field: a `packages/api/.orbitmap/config.json` that sets only `agent` does not hide an
473
+ `area` pinned by the repository root
474
+ 5. `default_area` in the workspace's `workspace.yml` — local mode; written by `orbitmap init` for
475
+ the first area, so a workspace outranks the machine-wide default of an unrelated project
476
+ 6. Global config `area` (deprecated — prints a warning when hit)
477
+ 7. Defaults (local mode: the only area in the workspace, when there is exactly one)
478
+
479
+ **Agent / API key** (first match wins):
480
+ 1. `ORBITMAP_API_KEY` env — used directly, no profile lookup
481
+ 2. Otherwise resolve an agent name (`ORBITMAP_AGENT` env → nearest `.orbitmap/config.json`
482
+ that sets `agent` → global config `agent` → `"default"`) and look up its key in
483
+ `credentials.json`
484
+
485
+ **Mode** (first match wins): `--workspace` (explicit → local) → `ORBITMAP_MODE` → nearest
486
+ `.orbitmap/config.json` that sets `mode` → local auto-detect (`.orbitmap/workspace.yml` or
487
+ `.orbitmap/link.json` found by walking up) → `mode` in the global config, defaulting to
488
+ `cloud`.
489
+
490
+ **Workspace directory** (local mode, first match wins): `--workspace` → `ORBITMAP_WORKSPACE`
491
+ → `.orbitmap/link.json` (`workspace`) → nearest `.orbitmap/workspace.yml` → the `.orbitmap/`
492
+ directory of the nearest config that sets `mode: "local"`, when it is itself a workspace →
493
+ `workspace_path` in the global config, **which must be an absolute path** (a relative one
494
+ would mean a different directory in every project, so it is ignored with a warning).
495
+
496
+ ## Authentication
497
+
498
+ In cloud mode, OrbitMap CLI uses a single **Agent API Key** for authentication (`Authorization: Bearer` header). Local mode has no authentication at all — access to the workspace directory is the only credential. Each agent has its own key, named by an agent profile in `~/.orbitmap/credentials.json` — get the key itself from the OrbitMap dashboard. Area context travels in the `X-Orbitmap-Area` header.
499
+
500
+ Optionally, set a default **Area ID** if your agent is assigned to multiple areas.
501
+
502
+ ## Error handling
503
+
504
+ API errors are printed as `Error [CODE] (status): message`. Alongside the regular envelope, the client normalises the flat billing/usage shape returned by 402/429 responses into:
505
+
506
+ | Code | When |
507
+ |------|------|
508
+ | `PAYMENT_REQUIRED` | HTTP 402 — billing action needed |
509
+ | `RATE_LIMITED` | HTTP 429 — too many requests |
510
+ | `USAGE_LIMIT` | Other flat-error responses |
511
+ | `TIMEOUT` | No response within 30s |
512
+
513
+ ## For AI Agents
514
+
515
+ `orbitmap init` already teaches your agent about OrbitMap — the skills are its last step, in
516
+ both cloud and local mode, and it creates the agent config file when the directory has none:
517
+
518
+ ```bash
519
+ npx orbitmap init --agent claude # or let it detect / ask; --no-skills opts out
520
+ ```
521
+
522
+ `setup-agent` does the same install on its own, for the two cases `init` does not cover:
523
+ refreshing the content after upgrading the CLI, and adding a second agent type to a directory
524
+ that is already set up.
525
+
526
+ ```bash
527
+ npx orbitmap setup-agent # auto-detects your agent
528
+ npx orbitmap setup-agent --agent claude
529
+ ```
530
+
531
+ Either way it installs two layers, mirroring the OrbitMap MCP server:
532
+
533
+ - A **thin always-on hook** (~10 lines) in your agent config (`CLAUDE.md`, `AGENTS.md`, …) so the agent always knows the project uses OrbitMap and knows the workflow skeleton.
534
+ - The **deep, on-demand instructions** — full parity with the MCP `full` profile. For **Claude Code** these are installed as loaded-on-demand skills (`.claude/skills/orbitmap`, `orbitmap-working`, `orbitmap-planning`, `orbitmap-docs`, zero per-turn context cost); for other agents they're inlined as a markdown fallback.
535
+
536
+ The instructions are mode-agnostic: they reference CLI commands only, so the same skills drive an agent whether the data goes to the cloud or to local files.
537
+
538
+ See [Agent Instructions](docs/agent-instructions.md) for details.
539
+
540
+ ## Requirements
541
+
542
+ - Node.js 18+
543
+
544
+ ## License
545
+
546
+ MIT