@pathmode/mcp-server 1.1.0 → 1.2.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pathmode Oy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,45 +1,36 @@
1
1
  # @pathmode/mcp-server
2
2
 
3
- Connect Claude Code, Cursor, and other AI agents to your [Pathmode](https://pathmode.io) Intent Layer.
3
+ Build structured intent specs through Socratic AI conversation right in your terminal.
4
4
 
5
- Get strategic context, dependency graph analysis, and structured implementation prompts — so your AI agent builds the right thing, not just any thing.
5
+ No signup. No API key. Just add the MCP server and start talking.
6
6
 
7
- ## Features
7
+ ## Intent Compiler
8
8
 
9
- - **Intent context** Structured specs with objectives, outcomes, constraints, and edge cases
10
- - **Dependency graph analysis** — Critical path, cycle detection, bottleneck identification
11
- - **Context export** — Generate CLAUDE.md, .cursorrules, and intent.md files
12
- - **Workspace strategy** — Vision, non-negotiables, architecture principles
13
- - **Constitution rules** — Mandatory constraints for all implementations
14
- - **Implementation tracking** — Status updates and technical decision logging
9
+ The Intent Compiler turns Claude Code into a Socratic product thinking partner. Describe a problem, paste a support ticket, or explain what's broken — Claude challenges vague thinking, asks pointed questions, and builds a structured spec.
15
10
 
16
- ## Quick Start
17
-
18
- ```bash
19
- npx @pathmode/mcp-server
20
11
  ```
12
+ > Help me write an intent spec for our checkout flow
21
13
 
22
- ## Setup
14
+ What's broken about it? When you say "checkout flow" — is the whole
15
+ thing failing, or is there one specific moment where users bail?
23
16
 
24
- ### Claude Desktop
17
+ > Payment step times out and users get confused
25
18
 
26
- Add to `~/.config/Claude/claude_desktop_config.json`:
19
+ When you say "times out" — is that 5 seconds or 30? And what does
20
+ the user actually see? A spinner? A blank screen? An error?
27
21
 
28
- ```json
29
- {
30
- "mcpServers": {
31
- "pathmode": {
32
- "command": "npx",
33
- "args": ["@pathmode/mcp-server"],
34
- "env": {
35
- "PATHMODE_API_KEY": "pm_live_..."
36
- }
37
- }
38
- }
39
- }
22
+ > About 8 seconds, they see a spinner with no feedback
23
+
24
+ Proposed Objective: "Reduce cart abandonment caused by payment step
25
+ timeouts exceeding 3 seconds, where users see a spinner with no
26
+ status feedback or recovery path."
27
+
28
+ Does that capture it, or is there more to the pain?
40
29
  ```
41
30
 
42
- ### Claude Code
31
+ When the spec is ready, Claude saves it as `intent.md` and optionally exports as `.cursorrules` or `CLAUDE.md` — so every AI agent in your project sees the intent as its implementation context.
32
+
33
+ ### Quick Start
43
34
 
44
35
  Add to `.claude/settings.json`:
45
36
 
@@ -48,18 +39,79 @@ Add to `.claude/settings.json`:
48
39
  "mcpServers": {
49
40
  "pathmode": {
50
41
  "command": "npx",
51
- "args": ["@pathmode/mcp-server"],
52
- "env": {
53
- "PATHMODE_API_KEY": "pm_live_..."
54
- }
42
+ "args": ["@pathmode/mcp-server"]
55
43
  }
56
44
  }
57
45
  }
58
46
  ```
59
47
 
60
- ### Cursor
48
+ Then in Claude Code:
61
49
 
62
- Add to `.cursor/mcp.json`:
50
+ ```
51
+ > Help me write an intent spec for [your problem here]
52
+ ```
53
+
54
+ That's it. No API key needed.
55
+
56
+ ### What You Get
57
+
58
+ **intent.md** — Structured spec with YAML frontmatter:
59
+ ```markdown
60
+ ---
61
+ id: "intent_17291..."
62
+ version: 1
63
+ status: "draft"
64
+ ---
65
+ # Fix Checkout Payment Timeout
66
+
67
+ ## Objective
68
+ Reduce cart abandonment caused by payment step
69
+ timeouts exceeding 3 seconds.
70
+
71
+ ## Outcomes
72
+ - [ ] Payment completes in under 3 seconds (p95)
73
+ - [ ] Users see real-time status during processing
74
+ - [ ] Failed payments show actionable error with retry
75
+
76
+ ## Edge Cases
77
+ - **Network timeout during payment**: Show retry button, no double-charge
78
+ - **Unknown provider status**: Hold order, notify user within 30s
79
+ ```
80
+
81
+ **.cursorrules** — Agent-directive format for Cursor:
82
+ ```
83
+ # CURRENT OBJECTIVE
84
+ You are implementing: "Fix Checkout Payment Timeout"
85
+
86
+ # SUCCESS OUTCOMES
87
+ Your implementation MUST satisfy ALL of these:
88
+ - Payment completes in under 3 seconds (p95)
89
+ - Users see real-time status during processing
90
+ - Failed payments show actionable error with retry
91
+ ```
92
+
93
+ **CLAUDE.md** — Appends a `<!-- PATHMODE:START -->` section so Claude Code sees the intent in every conversation.
94
+
95
+ ### Intent Compiler Tools
96
+
97
+ | Tool | Description |
98
+ |------|-------------|
99
+ | `intent_save` | Save an intent spec to `intent.md` in the project root |
100
+ | `intent_export` | Export as `.cursorrules` or `CLAUDE.md` section |
101
+
102
+ ### Intent Compiler Prompt
103
+
104
+ | Prompt | Description |
105
+ |--------|-------------|
106
+ | `compile-intent` | Start a Socratic conversation to build an intent spec |
107
+
108
+ ---
109
+
110
+ ## Team Features (API Key Required)
111
+
112
+ For teams shipping with AI agents, connect to your [Pathmode](https://pathmode.io) workspace for dependency tracking, strategic context, and governance.
113
+
114
+ ### Setup with API Key
63
115
 
64
116
  ```json
65
117
  {
@@ -75,6 +127,10 @@ Add to `.cursor/mcp.json`:
75
127
  }
76
128
  ```
77
129
 
130
+ Works with Claude Code (`.claude/settings.json`), Claude Desktop (`claude_desktop_config.json`), and Cursor (`.cursor/mcp.json`).
131
+
132
+ Get your API key from **Settings > API Keys** in the [Pathmode app](https://pathmode.io).
133
+
78
134
  ### Local Mode (Offline)
79
135
 
80
136
  Read `intent.md` files from your project directory without an API key:
@@ -90,46 +146,45 @@ Read `intent.md` files from your project directory without an API key:
90
146
  }
91
147
  ```
92
148
 
93
- ## Configuration
149
+ ### Configuration
94
150
 
95
151
  | Method | Details |
96
152
  |--------|---------|
97
153
  | Environment variable | `PATHMODE_API_KEY=pm_live_...` |
98
154
  | Config file | `~/.pathmode/config.json` with `apiKey`, `apiUrl`, `workspaceId` |
99
155
  | Local mode | `--local` flag — reads `intent.md` and `.pathmode/intents/*.md` |
156
+ | No config | Intent Compiler works without any configuration |
100
157
 
101
- Get your API key from **Settings > API Keys** in the [Pathmode app](https://pathmode.io).
102
-
103
- ## Tools
158
+ ### Team Tools
104
159
 
105
- ### Intent Management
160
+ #### Intent Management
106
161
 
107
- | Tool | Description | Annotations |
108
- |------|-------------|-------------|
109
- | `get_current_intent` | Get the active intent (first approved, or most recent) | readOnly |
110
- | `get_intent` | Get a single intent by ID with full details | readOnly |
111
- | `list_intents` | List all intents, optionally filtered by status | readOnly |
112
- | `search_intents` | Search intents by keyword across goals, objectives, and outcomes | readOnly |
113
- | `update_intent_status` | Update intent status (draft > validated > approved > shipped > verified) | write |
114
- | `log_implementation_note` | Record a technical decision or implementation note | write |
162
+ | Tool | Description |
163
+ |------|-------------|
164
+ | `get_current_intent` | Get the active intent (first approved, or most recent) |
165
+ | `get_intent` | Get a single intent by ID with full details |
166
+ | `list_intents` | List all intents, optionally filtered by status |
167
+ | `search_intents` | Search intents by keyword across goals, objectives, and outcomes |
168
+ | `update_intent_status` | Update intent status (draft > validated > approved > shipped > verified) |
169
+ | `log_implementation_note` | Record a technical decision or implementation note |
115
170
 
116
- ### Strategic Analysis
171
+ #### Strategic Analysis
117
172
 
118
- | Tool | Description | Annotations |
119
- |------|-------------|-------------|
120
- | `analyze_intent_graph` | Analyze dependency graph for critical path, cycles, bottlenecks, and risks | readOnly |
121
- | `get_intent_relations` | Get the dependency graph for a specific intent | readOnly |
173
+ | Tool | Description |
174
+ |------|-------------|
175
+ | `analyze_intent_graph` | Analyze dependency graph for critical path, cycles, bottlenecks |
176
+ | `get_intent_relations` | Get the dependency graph for a specific intent |
122
177
 
123
- ### Context & Export
178
+ #### Context & Export
124
179
 
125
- | Tool | Description | Annotations |
126
- |------|-------------|-------------|
127
- | `export_context` | Generate CLAUDE.md, .cursorrules, or intent.md files | readOnly |
128
- | `get_agent_prompt` | Get a structured execution prompt for an intent | readOnly |
129
- | `get_workspace` | Get workspace details including strategy and constitution | readOnly |
130
- | `get_constitution` | Get mandatory constraint rules for the workspace | readOnly |
180
+ | Tool | Description |
181
+ |------|-------------|
182
+ | `export_context` | Generate CLAUDE.md, .cursorrules, or intent.md files |
183
+ | `get_agent_prompt` | Get a structured execution prompt for an intent |
184
+ | `get_workspace` | Get workspace details including strategy and constitution |
185
+ | `get_constitution` | Get mandatory constraint rules for the workspace |
131
186
 
132
- ### Prompts
187
+ #### Team Prompts
133
188
 
134
189
  | Prompt | Description |
135
190
  |--------|-------------|
@@ -137,7 +192,7 @@ Get your API key from **Settings > API Keys** in the [Pathmode app](https://path
137
192
  | `review-risks` | Analyze the intent graph for architectural risks |
138
193
  | `what-next` | Suggest the highest-priority intent to work on next |
139
194
 
140
- ### Resources
195
+ #### Resources
141
196
 
142
197
  | URI | Description |
143
198
  |-----|-------------|
@@ -145,99 +200,37 @@ Get your API key from **Settings > API Keys** in the [Pathmode app](https://path
145
200
  | `intent://graph` | Full intent dependency graph |
146
201
  | `intent://workspace-strategy` | Workspace vision, principles, and active constitution rules |
147
202
 
148
- ## Usage Examples
149
-
150
- ### Example 1: Get Implementation Context
151
-
152
- **User prompt:** "What should I implement next?"
153
-
154
- **Expected tool calls:**
155
- 1. `get_current_intent` — Fetches the first approved intent
156
- 2. `get_agent_prompt` with `intentId` and `mode: "execute"` — Gets the structured implementation prompt
157
-
158
- **Expected output:** A full specification with objective, observable outcomes, constraints, edge cases, and verification steps that the AI agent uses to plan and execute the implementation.
159
-
160
- ---
161
-
162
- ### Example 2: Analyze Architectural Risks
163
-
164
- **User prompt:** "Are there any risks in our intent dependency graph?"
165
-
166
- **Expected tool calls:**
167
- 1. `analyze_intent_graph` with `analysis: "full"` — Runs complete graph analysis
168
-
169
- **Expected output:**
170
- ```json
171
- {
172
- "summary": { "total": 12, "statusDistribution": { "draft": 3, "approved": 5, "shipped": 4 } },
173
- "criticalPath": [
174
- { "id": "abc", "userGoal": "User authentication", "status": "shipped" },
175
- { "id": "def", "userGoal": "Role-based access control", "status": "approved" },
176
- { "id": "ghi", "userGoal": "Admin dashboard", "status": "draft" }
177
- ],
178
- "cycles": [],
179
- "bottlenecks": [
180
- { "id": "def", "userGoal": "Role-based access control", "dependentCount": 4, "status": "approved" }
181
- ],
182
- "orphanCount": 2
183
- }
184
- ```
185
-
186
- The AI agent summarizes: the critical path has 3 steps, "Role-based access control" is a bottleneck blocking 4 other intents and should be prioritized, and 2 intents have no relationships.
187
-
188
- ---
189
-
190
- ### Example 3: Generate a CLAUDE.md Context File
191
-
192
- **User prompt:** "Generate a CLAUDE.md for this project"
193
-
194
- **Expected tool calls:**
195
- 1. `export_context` with `format: "claude-md"` — Generates workspace context
196
-
197
- **Expected output:** A markdown file containing workspace strategy, active constitution rules, and all approved intents formatted as structured context that can be added to any project's `CLAUDE.md` file. The AI agent can write this directly to disk.
198
-
199
- ---
200
-
201
- ### Example 4: Search and Track Implementation
202
-
203
- **User prompt:** "Find all intents related to authentication and mark the login one as shipped"
204
-
205
- **Expected tool calls:**
206
- 1. `search_intents` with `query: "authentication"` — Finds matching intents
207
- 2. `update_intent_status` with `intentId` and `status: "shipped"` — Updates the login intent
208
- 3. `log_implementation_note` — Documents what was implemented
209
-
210
- **Expected output:** The search returns matching intents, the status is updated, and a note is logged documenting the implementation approach.
211
-
212
203
  ## Troubleshooting
213
204
 
214
205
  **"No Pathmode configuration found"**
215
- Set the `PATHMODE_API_KEY` environment variable or create `~/.pathmode/config.json`.
206
+ This no longer causes an error. The Intent Compiler works without any configuration. Team features require an API key.
216
207
 
217
208
  **Tools return "not available in local mode"**
218
- Most tools require cloud mode. Set up an API key, or use `--local` for basic intent reading from `intent.md` files.
209
+ Most team tools require cloud mode. Set up an API key, or use `--local` for basic intent reading.
219
210
 
220
211
  **Connection timeout**
221
- Ensure your API key is valid and has the correct scopes (read, write). Check your network connection to `pathmode.io`.
212
+ Ensure your API key is valid and has the correct scopes. Check your network connection to `pathmode.io`.
222
213
 
223
214
  ## Privacy Policy
224
215
 
225
216
  This MCP server connects to the Pathmode API (`pathmode.io`) to read and write intent specifications, workspace data, and constitution rules on behalf of the authenticated user.
226
217
 
227
- **Data collected:** The server transmits your API key for authentication and sends/receives workspace data (intents, constitution rules, workspace strategy) via the Pathmode API.
218
+ The **Intent Compiler** works entirely offline no data is sent to Pathmode servers. Specs are saved locally to your project directory.
228
219
 
229
- **Data storage:** The MCP server itself does not store any data locally (except in `--local` mode where it reads existing `intent.md` files from your project directory). All persistent data is stored in Pathmode's cloud infrastructure.
220
+ **Data collected (team features only):** The server transmits your API key for authentication and sends/receives workspace data via the Pathmode API.
230
221
 
231
- **Third-party sharing:** No data is shared with third parties. The server communicates exclusively with the Pathmode API.
222
+ **Data storage:** The MCP server does not store data locally (except `intent.md` files it creates and in `--local` mode). Persistent data is stored in Pathmode's cloud infrastructure.
232
223
 
233
- **Data retention:** Data retention follows Pathmode's standard data retention policies. See the full privacy policy at [https://pathmode.io/privacy](https://pathmode.io/privacy).
224
+ **Third-party sharing:** No data is shared with third parties. The server communicates exclusively with the Pathmode API.
234
225
 
235
- **Contact:** For privacy inquiries, contact privacy@pathmode.io.
226
+ Full privacy policy: [pathmode.io/privacy](https://pathmode.io/privacy)
236
227
 
237
- ## Support
228
+ ## Links
238
229
 
239
- - Issues: [github.com/pathmode/mcp-server/issues](https://github.com/pathmode/mcp-server/issues)
240
- - Documentation: [pathmode.io/docs](https://pathmode.io/docs)
230
+ - [Intent Compiler page](https://pathmode.io/intent-compiler) — Overview and setup guide
231
+ - [Try in browser](https://pathmode.io/sandbox) — Interactive sandbox, no install needed
232
+ - [Pathmode](https://pathmode.io) — Full platform for teams
233
+ - [Issues](https://github.com/pathmodeio/mcp-server/issues)
241
234
 
242
235
  ## License
243
236
 
@@ -17,12 +17,11 @@ export interface ApiIntent {
17
17
  version: number;
18
18
  objective: string;
19
19
  problemSeverity?: string;
20
- userGoal: string;
20
+ title: string;
21
21
  outcomes: string[];
22
22
  healthMetrics: string[];
23
23
  strategicAlignment?: string;
24
24
  alignmentNotes?: string;
25
- preconditions: Record<string, any>;
26
25
  context: Record<string, any>;
27
26
  constraints: string[];
28
27
  verification: Record<string, any>;
@@ -74,7 +73,18 @@ export declare class PathmodeClient {
74
73
  prompt: string;
75
74
  json: object;
76
75
  }>;
77
- updateIntentStatus(id: string, status: string): Promise<any>;
76
+ updateIntentStatus(id: string, status: string): Promise<{
77
+ id: string;
78
+ status: string;
79
+ updatedAt: string;
80
+ shippedAt?: string;
81
+ verifiedAt?: string;
82
+ verificationChecklist?: {
83
+ text: string;
84
+ category: string;
85
+ }[];
86
+ verificationChecklistCount?: number;
87
+ }>;
78
88
  logNote(intentId: string, note: string, source?: string): Promise<any>;
79
89
  getWorkspace(): Promise<ApiWorkspace>;
80
90
  getConstitution(): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/api-client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,13 +6,15 @@
6
6
  * npx @pathmode/mcp-server # Cloud mode (uses ~/.pathmode/config.json)
7
7
  * npx @pathmode/mcp-server --local # Local mode (reads intent.md from cwd)
8
8
  *
9
+ * The Intent Compiler (compile-intent prompt, intent_save, intent_export tools)
10
+ * works without an API key — zero-config intent spec building in Claude Code.
11
+ *
9
12
  * Add to .claude/settings.json:
10
13
  * {
11
14
  * "mcpServers": {
12
15
  * "pathmode": {
13
16
  * "command": "npx",
14
- * "args": ["@pathmode/mcp-server"],
15
- * "env": { "PATHMODE_API_KEY": "pm_live_..." }
17
+ * "args": ["@pathmode/mcp-server"]
16
18
  * }
17
19
  * }
18
20
  * }
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;GAkBG"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;GAoBG"}
package/dist/index.js CHANGED
@@ -11468,6 +11468,297 @@ class PathmodeClient {
11468
11468
  exports.PathmodeClient = PathmodeClient;
11469
11469
 
11470
11470
 
11471
+ /***/ }),
11472
+
11473
+ /***/ 6488:
11474
+ /***/ ((__unused_webpack_module, exports) => {
11475
+
11476
+ "use strict";
11477
+
11478
+ /**
11479
+ * Intent Compiler — Zero-config intent spec builder for Claude Code.
11480
+ *
11481
+ * Provides:
11482
+ * 1. A Socratic conversation prompt that turns Claude into a product thinking partner
11483
+ * 2. Format generators for intent.md, .cursorrules, and CLAUDE.md
11484
+ *
11485
+ * Architecture: Claude Code IS the conversation engine. This module only provides
11486
+ * the personality prompt and file format generators. No AI API calls happen here.
11487
+ */
11488
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
11489
+ exports.getCompileIntentPrompt = getCompileIntentPrompt;
11490
+ exports.formatIntentMd = formatIntentMd;
11491
+ exports.formatCursorRules = formatCursorRules;
11492
+ exports.formatClaudeMdSection = formatClaudeMdSection;
11493
+ // ============================================================
11494
+ // Compile Intent Prompt
11495
+ // ============================================================
11496
+ /**
11497
+ * Returns the system prompt that turns Claude into a Socratic intent interviewer.
11498
+ * Adapted from intentDesignerMachine.ts conversationFirstPreamble for terminal use.
11499
+ */
11500
+ function getCompileIntentPrompt() {
11501
+ return `You are a sharp product thinking partner. Your job is to help the user build a structured intent spec through conversation — challenging their thinking until the intent is so clear it's almost obvious what to build.
11502
+
11503
+ RULES:
11504
+ - Push back on vague language. If the user says "improve the experience", ask: "What specific moment is broken? What would the user see differently?"
11505
+ - Ask ONE pointed question at a time. Never list 3 questions.
11506
+ - When the user gives a clear answer, propose how you'd write that as a spec field. Explain WHY you worded it that way.
11507
+ - Look for inconsistencies between what they say the problem is and what outcomes they propose.
11508
+ - Be direct and concise. No pleasantries. No "Great question!" or "That's a good point!"
11509
+ - When the spec has existing content, critique it before adding more. Quality over quantity.
11510
+
11511
+ VOICE:
11512
+ - Short sentences. Direct. Like a smart colleague, not a consultant.
11513
+ - Use concrete examples when challenging: "When you say 'faster', do you mean 2 seconds or 20 seconds?"
11514
+ - When you write spec fields, use precise language. No filler words.
11515
+
11516
+ CONVERSATION FLOW (guidance, not rigid steps):
11517
+ 1. **Problem** — What's broken? What's the pain? What happens today that shouldn't?
11518
+ 2. **Goal** — What specific user outcome would solve this? Make it concrete and singular.
11519
+ 3. **Outcomes** — Observable, testable state changes. Not activities, not implementations.
11520
+ 4. **Edge Cases** — What's the most embarrassing way this could fail in a demo?
11521
+ 5. **Review** — Play devil's advocate. What's missing? What would you cut?
11522
+
11523
+ You are NOT bound by this order. Follow the user's thinking wherever it goes. If they start with edge cases, work backwards to the objective.
11524
+
11525
+ BUILDING THE SPEC:
11526
+ As the conversation progresses, keep a mental model of the spec fields:
11527
+ - **Title**: Short name for the intent (what is this?)
11528
+ - **Objective**: Why this matters — the problem and who has it
11529
+ - **Outcomes**: 2-5 observable, testable results (not activities)
11530
+ - **Constraints**: Hard limits the implementation must respect
11531
+ - **Edge Cases**: Scenario + expected behavior pairs
11532
+ - **Health Metrics**: What to monitor after shipping (optional)
11533
+ - **Verification**: How to confirm it actually works (optional)
11534
+
11535
+ When you have enough clarity on ANY field, state it clearly:
11536
+ > **Proposed Objective**: "Reduce failed deliveries in multi-unit buildings from 23% to under 5% by fixing address resolution at the driver app level."
11537
+
11538
+ Then ask if that captures it or needs refinement.
11539
+
11540
+ WHEN THE SPEC FEELS READY:
11541
+ Once you have at minimum a title, objective, and 2+ outcomes:
11542
+ 1. Present the full spec as a summary for the user to review
11543
+ 2. Ask if they want to save it
11544
+ 3. When confirmed, call the \`intent_save\` tool with the complete spec
11545
+ 4. Ask if they also want to export it as \`.cursorrules\` or \`CLAUDE.md\` for AI agent consumption — if yes, call \`intent_export\`
11546
+ 5. Mention: "For dependency tracking, team collaboration, and governance, connect this to Pathmode at pathmode.io"
11547
+
11548
+ IMPORTANT:
11549
+ - The spec fields in \`intent_save\` must use this exact structure:
11550
+ - title: string
11551
+ - objective: string
11552
+ - outcomes: string[] (list of outcome statements)
11553
+ - constraints: string[] (optional)
11554
+ - edgeCases: { scenario: string, expectedBehavior: string }[] (optional)
11555
+ - healthMetrics: string[] (optional)
11556
+ - verification: { manualChecks?: string[], unitTests?: string[], e2eTests?: string[] } (optional)
11557
+
11558
+ Now, ask the user what they're working on. If they've already described something, dig into it.`;
11559
+ }
11560
+ // ============================================================
11561
+ // Format: intent.md
11562
+ // ============================================================
11563
+ /**
11564
+ * Generate intent.md content with YAML frontmatter.
11565
+ * Adapted from lib/agentPromptGenerator.ts generateIntentMd().
11566
+ */
11567
+ function formatIntentMd(spec) {
11568
+ const now = new Date().toISOString();
11569
+ const frontmatter = {
11570
+ id: spec.id || `intent_${Date.now()}`,
11571
+ version: 1,
11572
+ status: 'draft',
11573
+ created: now,
11574
+ updated: now,
11575
+ };
11576
+ const yamlLines = Object.entries(frontmatter)
11577
+ .map(([key, value]) => `${key}: ${typeof value === 'string' ? `"${value}"` : value}`)
11578
+ .join('\n');
11579
+ const sections = [];
11580
+ sections.push('---');
11581
+ sections.push(yamlLines);
11582
+ sections.push('---');
11583
+ sections.push('');
11584
+ sections.push(`# ${spec.title || 'Untitled Intent'}`);
11585
+ if (spec.objective) {
11586
+ sections.push('');
11587
+ sections.push('## Objective');
11588
+ sections.push(spec.objective);
11589
+ }
11590
+ if (spec.outcomes?.length) {
11591
+ sections.push('');
11592
+ sections.push('## Outcomes');
11593
+ for (const outcome of spec.outcomes) {
11594
+ sections.push(`- [ ] ${outcome}`);
11595
+ }
11596
+ }
11597
+ if (spec.constraints?.length) {
11598
+ sections.push('');
11599
+ sections.push('## Constraints');
11600
+ for (const constraint of spec.constraints) {
11601
+ sections.push(`- ${constraint}`);
11602
+ }
11603
+ }
11604
+ if (spec.edgeCases?.length) {
11605
+ sections.push('');
11606
+ sections.push('## Edge Cases');
11607
+ for (const ec of spec.edgeCases) {
11608
+ sections.push(`- **${ec.scenario}**: ${ec.expectedBehavior}`);
11609
+ }
11610
+ }
11611
+ if (spec.healthMetrics?.length) {
11612
+ sections.push('');
11613
+ sections.push('## Health Metrics');
11614
+ for (const metric of spec.healthMetrics) {
11615
+ sections.push(`- ${metric}`);
11616
+ }
11617
+ }
11618
+ if (spec.verification) {
11619
+ const { e2eTests, unitTests, manualChecks } = spec.verification;
11620
+ const hasContent = e2eTests?.length || unitTests?.length || manualChecks?.length;
11621
+ if (hasContent) {
11622
+ sections.push('');
11623
+ sections.push('## Verification');
11624
+ if (e2eTests?.length) {
11625
+ sections.push('**E2E Tests**:');
11626
+ for (const t of e2eTests)
11627
+ sections.push(`- [ ] ${t}`);
11628
+ }
11629
+ if (unitTests?.length) {
11630
+ sections.push('**Unit Tests**:');
11631
+ for (const t of unitTests)
11632
+ sections.push(`- [ ] ${t}`);
11633
+ }
11634
+ if (manualChecks?.length) {
11635
+ sections.push('**Manual Checks**:');
11636
+ for (const t of manualChecks)
11637
+ sections.push(`- [ ] ${t}`);
11638
+ }
11639
+ }
11640
+ }
11641
+ sections.push('');
11642
+ return sections.join('\n');
11643
+ }
11644
+ // ============================================================
11645
+ // Format: .cursorrules
11646
+ // ============================================================
11647
+ /**
11648
+ * Generate .cursorrules content for a single intent.
11649
+ * Adapted from lib/agentPromptGenerator.ts generateCursorRules().
11650
+ */
11651
+ function formatCursorRules(spec) {
11652
+ const sections = [];
11653
+ sections.push('# Pathmode Intent Rules');
11654
+ sections.push(`# Generated at ${new Date().toISOString()}`);
11655
+ sections.push('# Regenerate with: intentspec pull (or use Pathmode MCP compile-intent prompt)');
11656
+ // Current objective
11657
+ sections.push('');
11658
+ sections.push('# CURRENT OBJECTIVE');
11659
+ sections.push(`You are implementing: "${spec.title || 'Untitled Feature'}"`);
11660
+ if (spec.objective) {
11661
+ sections.push('');
11662
+ sections.push('# WHY');
11663
+ sections.push(spec.objective);
11664
+ }
11665
+ if (spec.outcomes?.length) {
11666
+ sections.push('');
11667
+ sections.push('# SUCCESS OUTCOMES');
11668
+ sections.push('Your implementation MUST satisfy ALL of these:');
11669
+ for (const outcome of spec.outcomes) {
11670
+ sections.push(`- ${outcome}`);
11671
+ }
11672
+ }
11673
+ if (spec.constraints?.length) {
11674
+ sections.push('');
11675
+ sections.push('# CONSTRAINTS');
11676
+ sections.push('These are mandatory rules. You MUST NOT violate them:');
11677
+ for (const constraint of spec.constraints) {
11678
+ sections.push(`- ${constraint}`);
11679
+ }
11680
+ }
11681
+ if (spec.edgeCases?.length) {
11682
+ sections.push('');
11683
+ sections.push('# EDGE CASES');
11684
+ sections.push('Handle these scenarios:');
11685
+ for (const ec of spec.edgeCases) {
11686
+ sections.push(`- ${ec.scenario} → ${ec.expectedBehavior}`);
11687
+ }
11688
+ }
11689
+ if (spec.healthMetrics?.length) {
11690
+ sections.push('');
11691
+ sections.push('# HEALTH METRICS');
11692
+ sections.push('Monitor these after shipping:');
11693
+ for (const metric of spec.healthMetrics) {
11694
+ sections.push(`- ${metric}`);
11695
+ }
11696
+ }
11697
+ if (spec.verification) {
11698
+ const { e2eTests, unitTests, manualChecks } = spec.verification;
11699
+ const hasContent = e2eTests?.length || unitTests?.length || manualChecks?.length;
11700
+ if (hasContent) {
11701
+ sections.push('');
11702
+ sections.push('# VERIFICATION');
11703
+ sections.push('After implementation, verify:');
11704
+ if (e2eTests?.length) {
11705
+ for (const t of e2eTests)
11706
+ sections.push(`- [e2e] ${t}`);
11707
+ }
11708
+ if (unitTests?.length) {
11709
+ for (const t of unitTests)
11710
+ sections.push(`- [unit] ${t}`);
11711
+ }
11712
+ if (manualChecks?.length) {
11713
+ for (const t of manualChecks)
11714
+ sections.push(`- [manual] ${t}`);
11715
+ }
11716
+ }
11717
+ }
11718
+ sections.push('');
11719
+ return sections.join('\n');
11720
+ }
11721
+ // ============================================================
11722
+ // Format: CLAUDE.md section
11723
+ // ============================================================
11724
+ /**
11725
+ * Generate a CLAUDE.md section wrapped in PATHMODE markers.
11726
+ * Can be appended to an existing CLAUDE.md or used standalone.
11727
+ * Adapted from lib/agentPromptGenerator.ts generateClaudeMdContent().
11728
+ */
11729
+ function formatClaudeMdSection(spec) {
11730
+ const sections = [];
11731
+ sections.push('<!-- PATHMODE:START - Do not edit this section manually -->');
11732
+ sections.push('# Pathmode Intent Context');
11733
+ sections.push(`_Generated at ${new Date().toISOString()} | [pathmode.io](https://pathmode.io)_`);
11734
+ sections.push('');
11735
+ sections.push('## Active Intent');
11736
+ sections.push(`### ${spec.title || 'Untitled Intent'}`);
11737
+ sections.push(`**Status**: draft`);
11738
+ if (spec.objective) {
11739
+ sections.push(`**Objective**: ${spec.objective}`);
11740
+ }
11741
+ if (spec.outcomes?.length) {
11742
+ sections.push('**Outcomes**:');
11743
+ sections.push(spec.outcomes.map(o => `- [ ] ${o}`).join('\n'));
11744
+ }
11745
+ if (spec.constraints?.length) {
11746
+ sections.push('**Constraints**:');
11747
+ sections.push(spec.constraints.map(c => `- ${c}`).join('\n'));
11748
+ }
11749
+ if (spec.edgeCases?.length) {
11750
+ sections.push('**Edge Cases**:');
11751
+ sections.push(spec.edgeCases.map(ec => `- **${ec.scenario}**: ${ec.expectedBehavior}`).join('\n'));
11752
+ }
11753
+ if (spec.healthMetrics?.length) {
11754
+ sections.push('**Health Metrics**:');
11755
+ sections.push(spec.healthMetrics.map(m => `- ${m}`).join('\n'));
11756
+ }
11757
+ sections.push('<!-- PATHMODE:END -->');
11758
+ return sections.join('\n\n');
11759
+ }
11760
+
11761
+
11471
11762
  /***/ }),
11472
11763
 
11473
11764
  /***/ 3518:
@@ -11528,7 +11819,7 @@ function readIntentFile(filePath) {
11528
11819
  status: data.status || 'draft',
11529
11820
  version: data.version || 1,
11530
11821
  objective: data.objective || extractSection(body, 'Objective') || '',
11531
- userGoal: data.userGoal || extractTitle(body) || 'Untitled Intent',
11822
+ title: data.title || data.userGoal || extractTitle(body) || 'Untitled Intent',
11532
11823
  stageName: data.stage || undefined,
11533
11824
  severity: data.severity || undefined,
11534
11825
  outcomes,
@@ -39392,13 +39683,15 @@ var exports = __webpack_exports__;
39392
39683
  * npx @pathmode/mcp-server # Cloud mode (uses ~/.pathmode/config.json)
39393
39684
  * npx @pathmode/mcp-server --local # Local mode (reads intent.md from cwd)
39394
39685
  *
39686
+ * The Intent Compiler (compile-intent prompt, intent_save, intent_export tools)
39687
+ * works without an API key — zero-config intent spec building in Claude Code.
39688
+ *
39395
39689
  * Add to .claude/settings.json:
39396
39690
  * {
39397
39691
  * "mcpServers": {
39398
39692
  * "pathmode": {
39399
39693
  * "command": "npx",
39400
- * "args": ["@pathmode/mcp-server"],
39401
- * "env": { "PATHMODE_API_KEY": "pm_live_..." }
39694
+ * "args": ["@pathmode/mcp-server"]
39402
39695
  * }
39403
39696
  * }
39404
39697
  * }
@@ -39407,27 +39700,26 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
39407
39700
  const mcp_js_1 = __nccwpck_require__(3886);
39408
39701
  const stdio_js_1 = __nccwpck_require__(4239);
39409
39702
  const zod_1 = __nccwpck_require__(924);
39703
+ const path_1 = __nccwpck_require__(6928);
39704
+ const fs_1 = __nccwpck_require__(9896);
39410
39705
  const api_client_1 = __nccwpck_require__(7475);
39411
39706
  const local_reader_1 = __nccwpck_require__(3518);
39707
+ const intent_compiler_1 = __nccwpck_require__(6488);
39412
39708
  const isLocalMode = process.argv.includes('--local');
39413
39709
  let client = null;
39414
39710
  if (!isLocalMode) {
39415
39711
  const config = (0, api_client_1.loadConfig)();
39416
- if (!config) {
39417
- console.error('No Pathmode configuration found. Either:\n' +
39418
- ' 1. Run `intentspec login` to configure\n' +
39419
- ' 2. Set PATHMODE_API_KEY environment variable\n' +
39420
- ' 3. Use --local flag for offline mode');
39421
- process.exit(1);
39712
+ if (config) {
39713
+ client = new api_client_1.PathmodeClient(config);
39422
39714
  }
39423
- client = new api_client_1.PathmodeClient(config);
39715
+ // No exit — Intent Compiler tools work without an API key
39424
39716
  }
39425
39717
  // ============================================================
39426
39718
  // Server Setup
39427
39719
  // ============================================================
39428
39720
  const server = new mcp_js_1.McpServer({
39429
39721
  name: 'pathmode',
39430
- version: '1.1.0',
39722
+ version: '1.2.0',
39431
39723
  });
39432
39724
  // Annotation presets
39433
39725
  const READ_ONLY = { readOnlyHint: true, openWorldHint: true };
@@ -39521,7 +39813,7 @@ server.registerTool('get_intent_relations', {
39521
39813
  type: 'text',
39522
39814
  text: JSON.stringify({
39523
39815
  intentId: intent.id,
39524
- userGoal: intent.userGoal,
39816
+ title: intent.title,
39525
39817
  relations: intent.relations,
39526
39818
  }, null, 2)
39527
39819
  }]
@@ -39540,7 +39832,7 @@ server.registerTool('search_intents', {
39540
39832
  const intents = (0, local_reader_1.readLocalIntents)();
39541
39833
  const q = query.toLowerCase();
39542
39834
  const matches = intents.filter(i => {
39543
- const text = [i.userGoal, i.objective, ...i.outcomes, ...i.constraints].join(' ').toLowerCase();
39835
+ const text = [i.title, i.objective, ...i.outcomes, ...i.constraints].join(' ').toLowerCase();
39544
39836
  return text.includes(q) && (!status || i.status === status);
39545
39837
  });
39546
39838
  return { content: [{ type: 'text', text: JSON.stringify({ results: matches, count: matches.length, query }, null, 2) }] };
@@ -39549,12 +39841,12 @@ server.registerTool('search_intents', {
39549
39841
  const intents = await client.listIntents(status);
39550
39842
  const q = query.toLowerCase();
39551
39843
  const matches = intents.filter(i => {
39552
- const text = [i.userGoal, i.objective, ...(i.outcomes || []), ...(i.constraints || [])].join(' ').toLowerCase();
39844
+ const text = [i.title, i.objective, ...(i.outcomes || []), ...(i.constraints || [])].join(' ').toLowerCase();
39553
39845
  return text.includes(q);
39554
39846
  });
39555
39847
  const results = matches.map(i => ({
39556
39848
  id: i.id,
39557
- userGoal: i.userGoal,
39849
+ title: i.title,
39558
39850
  objective: i.objective,
39559
39851
  status: i.status,
39560
39852
  stageName: i.stageName,
@@ -39697,7 +39989,7 @@ server.registerTool('analyze_intent_graph', {
39697
39989
  for (const [id, dependents] of reverse) {
39698
39990
  if (dependents.size >= 3) {
39699
39991
  const spec = specMap.get(id);
39700
- bottlenecks.push({ id, userGoal: spec?.userGoal || 'Untitled', dependentCount: dependents.size, status: spec?.status || 'unknown' });
39992
+ bottlenecks.push({ id, title: spec?.title || 'Untitled', dependentCount: dependents.size, status: spec?.status || 'unknown' });
39701
39993
  }
39702
39994
  }
39703
39995
  // Orphans
@@ -39715,19 +40007,19 @@ server.registerTool('analyze_intent_graph', {
39715
40007
  if (type === 'critical-path') {
39716
40008
  const pathDetails = criticalPath.map(id => {
39717
40009
  const s = specMap.get(id);
39718
- return { id, userGoal: s?.userGoal || 'Untitled', status: s?.status || 'unknown' };
40010
+ return { id, title: s?.title || 'Untitled', status: s?.status || 'unknown' };
39719
40011
  });
39720
40012
  return { content: [{ type: 'text', text: JSON.stringify({ criticalPath: pathDetails, length: criticalPath.length }, null, 2) }] };
39721
40013
  }
39722
40014
  if (type === 'risks') {
39723
40015
  const risks = [];
39724
40016
  for (const cycle of cycles) {
39725
- const names = cycle.slice(0, -1).map(id => specMap.get(id)?.userGoal || 'Untitled');
40017
+ const names = cycle.slice(0, -1).map(id => specMap.get(id)?.title || 'Untitled');
39726
40018
  risks.push({ type: 'cycle', severity: 'critical', message: `Circular dependency: ${names.join(' \u2192 ')}` });
39727
40019
  }
39728
40020
  for (const b of bottlenecks) {
39729
40021
  const isDraft = b.status === 'draft' || b.status === 'validated';
39730
- risks.push({ type: 'bottleneck', severity: isDraft ? 'critical' : 'warning', message: `"${b.userGoal}" blocks ${b.dependentCount} intents${isDraft ? ` and is still ${b.status}` : ''}` });
40022
+ risks.push({ type: 'bottleneck', severity: isDraft ? 'critical' : 'warning', message: `"${b.title}" blocks ${b.dependentCount} intents${isDraft ? ` and is still ${b.status}` : ''}` });
39731
40023
  }
39732
40024
  return { content: [{ type: 'text', text: JSON.stringify({ risks }, null, 2) }] };
39733
40025
  }
@@ -39736,9 +40028,9 @@ server.registerTool('analyze_intent_graph', {
39736
40028
  summary: { total: intents.length, statusDistribution: statusDist },
39737
40029
  criticalPath: criticalPath.map(id => {
39738
40030
  const s = specMap.get(id);
39739
- return { id, userGoal: s?.userGoal || 'Untitled', status: s?.status || 'unknown' };
40031
+ return { id, title: s?.title || 'Untitled', status: s?.status || 'unknown' };
39740
40032
  }),
39741
- cycles: cycles.map(c => c.slice(0, -1).map(id => ({ id, userGoal: specMap.get(id)?.userGoal || 'Untitled' }))),
40033
+ cycles: cycles.map(c => c.slice(0, -1).map(id => ({ id, title: specMap.get(id)?.title || 'Untitled' }))),
39742
40034
  bottlenecks,
39743
40035
  orphanCount: orphans.length,
39744
40036
  };
@@ -39825,7 +40117,7 @@ server.registerTool('get_constitution', {
39825
40117
  // ============================================================
39826
40118
  server.registerTool('update_intent_status', {
39827
40119
  title: 'Update Intent Status',
39828
- description: 'Update the status of an intent. Use this to mark an intent as shipped after implementation, or verified after testing.',
40120
+ description: 'Update the status of an intent. Use this to mark an intent as shipped after implementation, or verified after testing. For shipped/verified transitions, the response includes a verification checklist of outcomes, constitution rules, and health metrics that should be confirmed.',
39829
40121
  inputSchema: {
39830
40122
  intentId: zod_1.z.string().describe('The intent ID to update'),
39831
40123
  status: zod_1.z.enum(['draft', 'validated', 'approved', 'shipped', 'verified']).describe('The new status'),
@@ -39836,10 +40128,19 @@ server.registerTool('update_intent_status', {
39836
40128
  return { content: [{ type: 'text', text: 'Status updates are not available in local mode. Use cloud mode.' }] };
39837
40129
  }
39838
40130
  const result = await client.updateIntentStatus(intentId, status);
40131
+ let responseText = `Intent ${intentId} status updated to "${status}".`;
40132
+ // Surface verification checklist for shipped/verified transitions
40133
+ if (result.verificationChecklist && result.verificationChecklist.length > 0) {
40134
+ responseText += `\n\nVerification Checklist (${result.verificationChecklistCount} items to verify):`;
40135
+ for (const item of result.verificationChecklist) {
40136
+ responseText += `\n [ ] [${item.category}] ${item.text}`;
40137
+ }
40138
+ responseText += `\n\nThese items should be verified. Use log_implementation_note to record verification results.`;
40139
+ }
39839
40140
  return {
39840
40141
  content: [{
39841
40142
  type: 'text',
39842
- text: `Intent ${intentId} status updated to "${status}". ${JSON.stringify(result)}`
40143
+ text: responseText
39843
40144
  }]
39844
40145
  };
39845
40146
  });
@@ -39902,6 +40203,88 @@ server.prompt('what-next', 'Suggest the highest-priority intent to work on next,
39902
40203
  };
39903
40204
  });
39904
40205
  // ============================================================
40206
+ // Intent Compiler — Zero-config tools (no API key needed)
40207
+ // ============================================================
40208
+ const intentSpecSchema = {
40209
+ title: zod_1.z.string().describe('Short name for the intent'),
40210
+ objective: zod_1.z.string().describe('Why this matters — the problem and who has it'),
40211
+ outcomes: zod_1.z.array(zod_1.z.string()).describe('Observable, testable state changes'),
40212
+ constraints: zod_1.z.array(zod_1.z.string()).optional().describe('Hard limits the implementation must respect'),
40213
+ edgeCases: zod_1.z.array(zod_1.z.object({
40214
+ scenario: zod_1.z.string(),
40215
+ expectedBehavior: zod_1.z.string(),
40216
+ })).optional().describe('Failure modes and boundary conditions'),
40217
+ healthMetrics: zod_1.z.array(zod_1.z.string()).optional().describe('What to monitor after shipping'),
40218
+ verification: zod_1.z.object({
40219
+ manualChecks: zod_1.z.array(zod_1.z.string()).optional(),
40220
+ unitTests: zod_1.z.array(zod_1.z.string()).optional(),
40221
+ e2eTests: zod_1.z.array(zod_1.z.string()).optional(),
40222
+ }).optional().describe('How to confirm it works'),
40223
+ };
40224
+ server.prompt('compile-intent', 'Start a Socratic conversation to build a structured intent spec from user feedback or a problem description. No Pathmode account needed.', {}, async () => {
40225
+ return {
40226
+ messages: [{
40227
+ role: 'user',
40228
+ content: {
40229
+ type: 'text',
40230
+ text: (0, intent_compiler_1.getCompileIntentPrompt)(),
40231
+ },
40232
+ }],
40233
+ };
40234
+ });
40235
+ server.tool('intent_save', 'Save an intent spec to intent.md in the project root. Called after building a spec through conversation.', {
40236
+ spec: zod_1.z.object(intentSpecSchema),
40237
+ path: zod_1.z.string().optional().describe('File path relative to cwd. Defaults to intent.md'),
40238
+ }, async ({ spec, path }) => {
40239
+ const filePath = (0, path_1.resolve)(process.cwd(), path || 'intent.md');
40240
+ const content = (0, intent_compiler_1.formatIntentMd)({ ...spec, id: `intent_${Date.now()}` });
40241
+ (0, fs_1.writeFileSync)(filePath, content, 'utf-8');
40242
+ return {
40243
+ content: [{
40244
+ type: 'text',
40245
+ text: `✓ Saved intent spec to ${filePath}\n\nTo connect this to Pathmode for dependency tracking and team collaboration, visit pathmode.io`,
40246
+ }],
40247
+ };
40248
+ });
40249
+ server.tool('intent_export', 'Export an intent spec as .cursorrules or CLAUDE.md section for AI agent consumption.', {
40250
+ format: zod_1.z.enum(['cursorrules', 'claude-md']).describe('Export format'),
40251
+ spec: zod_1.z.object(intentSpecSchema),
40252
+ path: zod_1.z.string().optional().describe('Output file path. Defaults to .cursorrules or CLAUDE.md'),
40253
+ }, async ({ format, spec, path }) => {
40254
+ if (format === 'cursorrules') {
40255
+ const content = (0, intent_compiler_1.formatCursorRules)(spec);
40256
+ const filePath = (0, path_1.resolve)(process.cwd(), path || '.cursorrules');
40257
+ (0, fs_1.writeFileSync)(filePath, content, 'utf-8');
40258
+ return {
40259
+ content: [{
40260
+ type: 'text',
40261
+ text: `✓ Exported .cursorrules to ${filePath}\n\nCursor and other AI agents will now see this intent as their implementation context.`,
40262
+ }],
40263
+ };
40264
+ }
40265
+ else {
40266
+ const section = (0, intent_compiler_1.formatClaudeMdSection)(spec);
40267
+ const filePath = (0, path_1.resolve)(process.cwd(), path || 'CLAUDE.md');
40268
+ // Append or replace PATHMODE section in existing file
40269
+ let existing = '';
40270
+ try {
40271
+ existing = (0, fs_1.readFileSync)(filePath, 'utf-8');
40272
+ }
40273
+ catch { /* file doesn't exist yet */ }
40274
+ const marker = /<!-- PATHMODE:START -->[\s\S]*?<!-- PATHMODE:END -->/;
40275
+ const updated = marker.test(existing)
40276
+ ? existing.replace(marker, section)
40277
+ : existing ? existing + '\n\n' + section : section;
40278
+ (0, fs_1.writeFileSync)(filePath, updated, 'utf-8');
40279
+ return {
40280
+ content: [{
40281
+ type: 'text',
40282
+ text: `✓ Exported CLAUDE.md section to ${filePath}\n\nClaude Code will now see this intent as context in every conversation.`,
40283
+ }],
40284
+ };
40285
+ }
40286
+ });
40287
+ // ============================================================
39905
40288
  // Resources
39906
40289
  // ============================================================
39907
40290
  server.resource('intent://current', 'intent://current', async (uri) => {
@@ -39938,7 +40321,7 @@ server.resource('intent://graph', 'intent://graph', async (uri) => {
39938
40321
  const intents = await client.listIntents();
39939
40322
  const graph = intents.map(i => ({
39940
40323
  id: i.id,
39941
- userGoal: i.userGoal,
40324
+ title: i.title,
39942
40325
  status: i.status,
39943
40326
  relations: i.relations,
39944
40327
  }));
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Intent Compiler — Zero-config intent spec builder for Claude Code.
3
+ *
4
+ * Provides:
5
+ * 1. A Socratic conversation prompt that turns Claude into a product thinking partner
6
+ * 2. Format generators for intent.md, .cursorrules, and CLAUDE.md
7
+ *
8
+ * Architecture: Claude Code IS the conversation engine. This module only provides
9
+ * the personality prompt and file format generators. No AI API calls happen here.
10
+ */
11
+ export interface IntentFields {
12
+ id?: string;
13
+ title: string;
14
+ objective: string;
15
+ outcomes: string[];
16
+ constraints?: string[];
17
+ edgeCases?: {
18
+ scenario: string;
19
+ expectedBehavior: string;
20
+ }[];
21
+ healthMetrics?: string[];
22
+ verification?: {
23
+ manualChecks?: string[];
24
+ unitTests?: string[];
25
+ e2eTests?: string[];
26
+ };
27
+ }
28
+ /**
29
+ * Returns the system prompt that turns Claude into a Socratic intent interviewer.
30
+ * Adapted from intentDesignerMachine.ts conversationFirstPreamble for terminal use.
31
+ */
32
+ export declare function getCompileIntentPrompt(): string;
33
+ /**
34
+ * Generate intent.md content with YAML frontmatter.
35
+ * Adapted from lib/agentPromptGenerator.ts generateIntentMd().
36
+ */
37
+ export declare function formatIntentMd(spec: IntentFields): string;
38
+ /**
39
+ * Generate .cursorrules content for a single intent.
40
+ * Adapted from lib/agentPromptGenerator.ts generateCursorRules().
41
+ */
42
+ export declare function formatCursorRules(spec: IntentFields): string;
43
+ /**
44
+ * Generate a CLAUDE.md section wrapped in PATHMODE markers.
45
+ * Can be appended to an existing CLAUDE.md or used standalone.
46
+ * Adapted from lib/agentPromptGenerator.ts generateClaudeMdContent().
47
+ */
48
+ export declare function formatClaudeMdSection(spec: IntentFields): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/intent-compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE;QACX,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACL;AAMD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CA2D/C;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAkFzD;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA2E5D;AAOD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAyChE"}
@@ -7,7 +7,7 @@ export interface LocalIntent {
7
7
  status: string;
8
8
  version: number;
9
9
  objective: string;
10
- userGoal: string;
10
+ title: string;
11
11
  stageName?: string;
12
12
  severity?: string;
13
13
  outcomes: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/local-reader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAmBhD"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/local-reader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAmBhD"}
package/icon.svg ADDED
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
2
+ <path d="M50 50 L95 25 L95 75 L50 100 Z" fill="#3A8A8C" />
3
+ <path d="M50 50 L5 75 L5 25 L50 0 Z" fill="#C94C56" />
4
+ <path d="M5 75 L50 100 L50 50 Z" fill="#A87693" />
5
+ <path d="M50 0 L95 25 L50 50 Z" fill="#3D476D" />
6
+ <path d="M45 40 L65 50 L45 60 Z" fill="#ffffff" fill-opacity="0.9" />
7
+ </svg>
package/manifest.json CHANGED
@@ -2,9 +2,9 @@
2
2
  "manifest_version": "0.3",
3
3
  "name": "pathmode",
4
4
  "display_name": "Pathmode",
5
- "version": "1.1.0",
6
- "description": "Connect AI agents to your Intent Layer. Get strategic context, dependency graphs, and implementation prompts.",
7
- "long_description": "Pathmode MCP Server connects Claude Code, Cursor, and other AI agents to your product team's Intent Layer. AI agents get structured specifications (objectives, outcomes, constraints, edge cases), dependency graph analysis (critical path, bottlenecks, cycles), and workspace strategy context \u2014 so they build the right thing, not just any thing.",
5
+ "version": "1.2.0",
6
+ "description": "Build structured intent specs through Socratic AI conversation, or connect to your Intent Layer for strategic context and dependency graphs.",
7
+ "long_description": "Pathmode MCP Server includes the Intent Compiler a zero-config Socratic conversation that helps you build structured intent specs (objectives, outcomes, constraints, edge cases) right in Claude Code. No signup needed. For teams, connect to your Pathmode workspace for dependency graph analysis (critical path, bottlenecks, cycles), workspace strategy context, and governance — so AI agents build the right thing, not just any thing.",
8
8
  "author": {
9
9
  "name": "Pathmode",
10
10
  "url": "https://pathmode.io"
@@ -12,14 +12,16 @@
12
12
  "homepage": "https://pathmode.io",
13
13
  "repository": {
14
14
  "type": "git",
15
- "url": "https://github.com/pathmode/mcp-server"
15
+ "url": "https://github.com/pathmodeio/mcp-server"
16
16
  },
17
- "documentation": "https://github.com/pathmode/mcp-server#readme",
18
- "support": "https://github.com/pathmode/mcp-server/issues",
17
+ "documentation": "https://github.com/pathmodeio/mcp-server#readme",
18
+ "support": "https://github.com/pathmodeio/mcp-server/issues",
19
19
  "license": "MIT",
20
+ "icon": "icon.svg",
20
21
  "keywords": [
21
22
  "pathmode",
22
23
  "intent-engineering",
24
+ "intent-compiler",
23
25
  "product-development",
24
26
  "dependency-graph",
25
27
  "ai-agents",
@@ -43,9 +45,9 @@
43
45
  "api_key": {
44
46
  "type": "string",
45
47
  "title": "Pathmode API Key",
46
- "description": "Your Pathmode API key (starts with pm_live_). Get one from Settings > API Keys in the Pathmode app.",
48
+ "description": "Optional. Your Pathmode API key (starts with pm_live_) for team features. The Intent Compiler works without it. Get a key from Settings > API Keys in the Pathmode app.",
47
49
  "sensitive": true,
48
- "required": true
50
+ "required": false
49
51
  }
50
52
  },
51
53
  "compatibility": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pathmode/mcp-server",
3
- "version": "1.1.0",
4
- "description": "Pathmode MCP Server — Connect Claude Code, Cursor, and AI agents to your Intent Layer. Get strategic context, dependency graphs, and implementation prompts.",
3
+ "version": "1.2.1",
4
+ "description": "Pathmode MCP Server — Build structured intent specs through Socratic AI conversation (zero-config), or connect to your Intent Layer for strategic context, dependency graphs, and implementation prompts.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
7
7
  "pathmode-mcp": "./dist/index.js"
@@ -9,6 +9,7 @@
9
9
  "files": [
10
10
  "dist/",
11
11
  "manifest.json",
12
+ "icon.svg",
12
13
  "README.md"
13
14
  ],
14
15
  "scripts": {
@@ -24,6 +25,7 @@
24
25
  "cursor",
25
26
  "windsurf",
26
27
  "intent-engineering",
28
+ "intent-compiler",
27
29
  "ai-agents",
28
30
  "product-development",
29
31
  "dependency-graph",
@@ -37,7 +39,7 @@
37
39
  },
38
40
  "repository": {
39
41
  "type": "git",
40
- "url": "git+https://github.com/pathmode/mcp-server.git"
42
+ "url": "git+https://github.com/pathmodeio/mcp-server.git"
41
43
  },
42
44
  "homepage": "https://pathmode.io",
43
45
  "dependencies": {