agent-planner-mcp 1.5.19 → 1.6.0

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/AGENT_GUIDE.md CHANGED
@@ -83,11 +83,11 @@ The single most important decision when calling a creation tool.
83
83
 
84
84
  | Origin | Default | Why |
85
85
  |---|---|---|
86
- | **Human said so in chat** | `status='active'` (omit) | User already approved by asking. Don't bury their request in drafts. |
87
- | **You're acting autonomously** | `status='draft'` (pass explicitly) | Let the human review before it activates. Drafts surface in the dashboard pending queue. |
86
+ | **Human said so in chat** | `status='active'` (pass explicitly) | User already approved by asking. Don't bury their request in drafts. |
87
+ | **You're acting autonomously** | `status='draft'` (the default — just omit) | Let the human review before it activates. Drafts surface in the dashboard pending queue. |
88
88
  | **You're uncertain** | use `queue_decision` instead | Drafts are for "I'm proposing structure"; the queue is for "I need an answer." |
89
89
 
90
- Drafts auto-promote to active when work begins on any node (transitions to `in_progress`, `completed`, `blocked`, `plan_ready`). Promote explicitly via `update_plan({status: 'active'})` or `update_goal({status: 'active'})`.
90
+ Draft plans are a hard gate: task status changes and claims on a draft are rejected (409) until the plan is activated. **You can activate it yourself** — `update_plan({status: 'active'})` — whenever a human directed the work (in chat, in the task's instructions, or by assigning it to you). The gate exists to make activation an explicit, auditable step, not to route everything through the UI. Only when you're acting autonomously with no human direction should you leave it draft and `queue_decision` to request activation. Plan completion is derived: a plan reads as `completed` automatically when its work hits 100%; it cannot be set directly.
91
91
 
92
92
  ## Workflow templates
93
93
 
package/README.md CHANGED
@@ -232,8 +232,8 @@ Add the same JSON config to your Cline MCP settings in VS Code.
232
232
 
233
233
  ## Key Features
234
234
 
235
- - **24 BDI-aligned tools** for state, goals, and committed actions — no CRUD shapes, every tool answers a whole agentic question
236
- - **Full mutation surface (v1.0)** — agents and humans-via-agents can manage every plan/node/org property without leaving the conversation; UI is optional inspection
235
+ - **39 BDI-aligned tools** for state, goals, committed actions, and workspace/blueprint management — no CRUD shapes, every tool answers a whole agentic question
236
+ - **Full mutation surface** — agents and humans-via-agents can manage every plan/node/org property, plus workspaces and reusable blueprints, without leaving the conversation; UI is optional inspection
237
237
  - **Draft-status seam** — autonomous agent creation lands as drafts surfacing in the dashboard pending queue; human-directed creation defaults to active
238
238
  - **Dependency graph** — cycle detection, impact analysis, critical path
239
239
  - **Progressive context** — 4-layer context assembly with token budgeting
@@ -242,10 +242,11 @@ Add the same JSON config to your Cline MCP settings in VS Code.
242
242
  - **Task claims** — TTL-based locking for multi-agent coordination
243
243
  - **Organizations** — multi-tenant isolation with member management
244
244
 
245
- ## Available Tools (v1.0.0)
245
+ ## Available Tools (v1.5)
246
246
 
247
247
  ### Beliefs (read state)
248
248
  - `briefing` — bundled mission control state in one call
249
+ - `list_plans` — list plans with optional status/visibility/text filters; returns ids, status, last update, and link counts so you can pick a plan without round-tripping `briefing`
249
250
  - `task_context` — single task at progressive depth 1-4
250
251
  - `goal_state` — single goal deep-dive (details + quality + progress + bottlenecks + gaps)
251
252
  - `recall_knowledge` — knowledge graph query (facts, entities, episodes, contradictions)
@@ -256,7 +257,8 @@ Add the same JSON config to your Cline MCP settings in VS Code.
256
257
  - `list_goals` — goals with health rollup
257
258
  - `update_goal` — atomic goal update (subsumes link/unlink/achievers)
258
259
  - `create_goal` — create a new top-level goal (no parent)
259
- - `derive_subgoal` *(v1.0)* — create a sub-goal under an existing parent
260
+ - `derive_subgoal` — create a sub-goal under an existing parent
261
+ - `record_criterion_progress` — record the latest observed value of a goal's success criterion (e.g. a metric moved 40→72); the write that makes goal attainment real
260
262
 
261
263
  ### Intentions — execution
262
264
  - `claim_next_task` — pick + claim + load context (one call)
@@ -266,24 +268,32 @@ Add the same JSON config to your Cline MCP settings in VS Code.
266
268
  - `resolve_decision` — pick up human's answer (atomically materializes any `proposed_subtasks`)
267
269
  - `add_learning` — record knowledge episode
268
270
 
269
- ### Intentions — creation *(v1.0)*
271
+ ### Intentions — creation
270
272
  - `form_intention` — create plan + initial tree under a goal, atomically
271
273
  - `extend_intention` — add children under an existing parent (lightweight)
272
274
  - `propose_research_chain` — RPI triple with 2 blocking edges, in one call
273
275
 
274
- ### Intentions — structural mutation *(v1.0)*
276
+ ### Intentions — structural mutation
275
277
  - `update_plan` — edit any plan property
276
278
  - `update_node` — edit any node property except status
277
279
  - `move_node` — reparent within plan; cycle-safe
278
280
  - `link_intentions` / `unlink_intentions` — manage dependency edges
279
281
  - `delete_plan` / `delete_node` — soft-delete via `status='archived'` (recoverable)
280
282
 
281
- ### Intentions — sharing & collaboration *(v1.0)*
283
+ ### Intentions — sharing & collaboration
282
284
  - `share_plan` — atomic visibility + add/remove collaborators
283
285
  - `invite_member` — add user to org (by user_id or email)
284
286
  - `update_member_role` — owner-only role change
285
287
  - `remove_member` — owner/admin removes non-owner member
286
288
 
289
+ ### Workspaces & Blueprints
290
+ - `list_workspaces` — list workspaces (goal/plan folders) in an organization
291
+ - `create_workspace` — create a new workspace inside an organization (slug auto-generated and de-duped)
292
+ - `list_blueprints` — list blueprints visible to you (owned + public/unlisted), filterable by scope/visibility
293
+ - `save_as_blueprint` — snapshot a live plan as a reusable plan-scope blueprint (structure + agent_instructions + dependencies; excludes run-state)
294
+ - `fork_blueprint` — fork a plan-scope blueprint into a target workspace as a new plan (statuses reset, lineage recorded)
295
+ - `delete_blueprint` — hard-delete a blueprint you own (already-forked plans are unaffected)
296
+
287
297
  ### Utility
288
298
  - `get_started` — dynamic reference for new agents
289
299
 
@@ -307,12 +317,10 @@ npx agent-planner-mcp
307
317
  For remote access (ChatGPT, cloud deployments, multi-agent systems):
308
318
  ```bash
309
319
  MCP_TRANSPORT=http npx agent-planner-mcp
310
- # Listens on http://127.0.0.1:3100
320
+ # Listens on http://127.0.0.1:3100 (override with PORT)
311
321
  ```
312
322
 
313
- Production endpoint: `https://agentplanner.io/mcp`
314
-
315
- See [HTTP_MODE.md](./HTTP_MODE.md) for details.
323
+ Transport is Streamable HTTP (MCP 2025-03-26); auth via `Authorization: ApiKey <your-token>`. Production endpoint: `https://agentplanner.io/mcp` (discovery at `https://agentplanner.io/.well-known/mcp.json`).
316
324
 
317
325
  ## Local Development
318
326
 
@@ -341,5 +349,4 @@ MIT License - see [LICENSE](./LICENSE) for details.
341
349
  ## Support
342
350
 
343
351
  - [GitHub Issues](https://github.com/TAgents/agent-planner-mcp/issues)
344
- - [CHANGELOG.md](./CHANGELOG.md) for version history
345
- - [PDR.md](./PDR.md) for technical design
352
+ - [GitHub Releases](https://github.com/TAgents/agent-planner-mcp/releases) for version history and release notes
package/SKILL.md CHANGED
@@ -173,15 +173,16 @@ v1.0 closes the creation gap. There are three distinct flows depending on who in
173
173
 
174
174
  ### Scenario A: Human directs you in conversation
175
175
 
176
- User says "create a plan to ship the new auth flow under the security goal" or "mark the BSL launch plan completed."
176
+ User says "create a plan to ship the new auth flow under the security goal."
177
177
 
178
- Default to **`status='active'`** — the human asked for it, just do it.
178
+ Pass **`status='active'` explicitly** — the human asked for it, just do it. (The default is `draft`: omitting status creates a proposal that waits for human activation.)
179
179
 
180
180
  ```
181
181
  form_intention({
182
182
  goal_id: '<security-goal-id>',
183
183
  title: 'Ship new auth flow',
184
184
  rationale: 'User-requested plan to migrate auth to passkeys',
185
+ status: 'active', // human-directed — omit for autonomous proposals (draft)
185
186
  tree: [
186
187
  { node_type: 'phase', title: 'Discovery', children: [
187
188
  { ref: 'research', title: 'Research passkey libraries', task_mode: 'research' },
@@ -196,10 +197,9 @@ form_intention({
196
197
  // return created_without_dependencies + a warning instead.
197
198
  ```
198
199
 
199
- ```
200
- update_plan({ plan_id: '<bsl-plan>', status: 'completed' })
201
- // Done. No queue, no UI trip.
202
- ```
200
+ Completion is not a write: a plan reads as `completed` automatically once its
201
+ work hits 100% (`update_plan({status: 'completed'})` is rejected). To close out
202
+ a plan that won't be finished, archive it: `update_plan({ plan_id, status: 'archived' })`.
203
203
 
204
204
  ### Scenario B: You're acting autonomously (scheduled loop, etc.)
205
205
 
@@ -215,7 +215,10 @@ derive_subgoal({
215
215
  status: 'draft',
216
216
  })
217
217
  // Surfaces in dashboard pending. Human approves via update_goal({status: 'active'})
218
- // or in the UI. Plans auto-promote to active when first task moves to in_progress.
218
+ // or in the UI. Draft plans reject task execution and claims (409) until activated.
219
+ // If the human later directs you to proceed, activate it yourself:
220
+ // update_plan({status: 'active'}) — the gate makes activation explicit, not human-only.
221
+ // Completion is derived — a plan reads as completed when its work hits 100%.
219
222
  ```
220
223
 
221
224
  ### Scenario C: You're uncertain and want explicit input
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-planner-mcp",
3
- "version": "1.5.19",
3
+ "version": "1.6.0",
4
4
  "description": "MCP server for AgentPlanner — AI agent orchestration with planning, dependencies, knowledge graphs, and human oversight",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -798,10 +798,16 @@ const formIntentionDefinition = {
798
798
  "list prerequisite refs/titles in `depends_on` to create 'blocks' edges in " +
799
799
  "the same call — don't ship a bare hierarchy. The response returns a " +
800
800
  "`structure` summary and warns (`created_without_dependencies`) when a " +
801
- "multi-task plan has no edges. Defaults to status='active' for " +
802
- "human-directed creation; pass status='draft' for autonomous loops so a " +
803
- "human can review before promotion. Drafts surface in the dashboard " +
804
- "pending queue and auto-promote to active when work begins on any node.",
801
+ "multi-task plan has no edges. Defaults to status='draft': a draft is a " +
802
+ "proposal it surfaces in the human's pending queue, and task execution " +
803
+ "and claims are rejected (409) until the plan is activated. Pass " +
804
+ "status='active' when a human directed this plan in conversation and " +
805
+ "wants work to start immediately; you may also activate a draft later " +
806
+ "via update_plan(status='active') on the same basis. Acting " +
807
+ "autonomously with no human direction? Leave it draft and " +
808
+ "queue_decision to request activation. Plan completion is derived from " +
809
+ "task completion — plans read as 'completed' automatically at 100%; it " +
810
+ "cannot be set directly.",
805
811
  inputSchema: {
806
812
  type: 'object',
807
813
  properties: {
@@ -812,7 +818,7 @@ const formIntentionDefinition = {
812
818
  status: {
813
819
  type: 'string',
814
820
  enum: ['draft', 'active'],
815
- default: 'active',
821
+ default: 'draft',
816
822
  },
817
823
  visibility: {
818
824
  type: 'string',
@@ -888,7 +894,7 @@ async function createSubtree(apiClient, planId, parentId, children, results, ctx
888
894
  }
889
895
 
890
896
  async function formIntentionHandler(args, apiClient) {
891
- const { goal_id, title, description, rationale, status = 'active', visibility = 'private', tree = [] } = args;
897
+ const { goal_id, title, description, rationale, status = 'draft', visibility = 'private', tree = [] } = args;
892
898
 
893
899
  if (apiClient.agentLoop?.createIntention) {
894
900
  const treeError = validateTreeShape(tree);
@@ -1055,7 +1061,7 @@ const extendIntentionDefinition = {
1055
1061
  "Add children under an existing phase or task. Use when an agent has " +
1056
1062
  "implicit authority to decompose work (e.g., a parent task they have " +
1057
1063
  "claimed). For high-stakes structural proposals, use queue_decision " +
1058
- "with proposed_subtasks instead. Defaults to status='active'.",
1064
+ "with proposed_subtasks instead.",
1059
1065
  inputSchema: {
1060
1066
  type: 'object',
1061
1067
  properties: {
@@ -1126,7 +1132,7 @@ const proposeResearchChainDefinition = {
1126
1132
  "Create a Research → Plan → Implement triple under an existing parent " +
1127
1133
  "task or phase. The Research task feeds Plan; Plan feeds Implement " +
1128
1134
  "(via 'blocks' dependency edges). Use when tackling work with " +
1129
- "significant unknowns. Defaults to status='active'.",
1135
+ "significant unknowns.",
1130
1136
  inputSchema: {
1131
1137
  type: 'object',
1132
1138
  properties: {
@@ -1369,7 +1375,11 @@ const updatePlanDefinition = {
1369
1375
  description: { type: 'string' },
1370
1376
  status: {
1371
1377
  type: 'string',
1372
- enum: ['draft', 'active', 'completed', 'archived'],
1378
+ enum: ['draft', 'active', 'archived'],
1379
+ description:
1380
+ "Commitment lifecycle. 'completed' cannot be set — it is derived " +
1381
+ "automatically when the plan's work reaches 100%. To close out a " +
1382
+ "plan early, archive it.",
1373
1383
  },
1374
1384
  visibility: { type: 'string', enum: ['private', 'unlisted', 'public'] },
1375
1385
  metadata: { type: 'object', description: "Shallow-merged into existing metadata." },