@hailer/mcp 1.3.14 → 1.3.23

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 (57) hide show
  1. package/.claude/skills/create-and-publish-app/SKILL.md +44 -56
  2. package/.claude/skills/hailer-app-builder/SKILL.md +414 -970
  3. package/.claude/skills/hailer-app-primitives/SKILL.md +742 -0
  4. package/.claude/skills/hailer-apps-pictures/SKILL.md +191 -87
  5. package/.claude/skills/hailer-design-patterns/SKILL.md +317 -0
  6. package/.claude/skills/hailer-design-system/SKILL.md +202 -149
  7. package/.claude/skills/hailer-workflow-archetypes/SKILL.md +301 -0
  8. package/.claude/skills/insight-join-patterns/SKILL.md +313 -0
  9. package/.claude/skills/publish-hailer-app/SKILL.md +211 -0
  10. package/.claude/skills/sdk-activity-patterns/SKILL.md +257 -105
  11. package/.claude/skills/sdk-function-fields/SKILL.md +253 -492
  12. package/.claude/skills/sdk-insight-calculations/SKILL.md +364 -0
  13. package/.claude/skills/sdk-insight-queries/SKILL.md +192 -397
  14. package/.claude/skills/sdk-ws-config-skill/SKILL.md +265 -720
  15. package/.claude/skills/tool-response-verification/SKILL.md +143 -0
  16. package/CLAUDE.md +50 -19
  17. package/dist/bot/bot.d.ts.map +1 -1
  18. package/dist/bot/bot.js +26 -34
  19. package/dist/bot/bot.js.map +1 -1
  20. package/dist/bot/services/helper-prompt.d.ts +1 -1
  21. package/dist/bot/services/helper-prompt.d.ts.map +1 -1
  22. package/dist/bot/services/helper-prompt.js +62 -82
  23. package/dist/bot/services/helper-prompt.js.map +1 -1
  24. package/dist/bot/services/system-prompt.js +4 -4
  25. package/dist/config.d.ts +1 -0
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +6 -0
  28. package/dist/config.js.map +1 -1
  29. package/dist/mcp/hailer-rpc.d.ts +1 -0
  30. package/dist/mcp/hailer-rpc.d.ts.map +1 -1
  31. package/dist/mcp/hailer-rpc.js +4 -0
  32. package/dist/mcp/hailer-rpc.js.map +1 -1
  33. package/dist/mcp/tools/activity.d.ts.map +1 -1
  34. package/dist/mcp/tools/activity.js +8 -2
  35. package/dist/mcp/tools/activity.js.map +1 -1
  36. package/dist/mcp/tools/app-core.d.ts.map +1 -1
  37. package/dist/mcp/tools/app-core.js +6 -3
  38. package/dist/mcp/tools/app-core.js.map +1 -1
  39. package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
  40. package/dist/mcp/tools/app-marketplace.js +5 -1
  41. package/dist/mcp/tools/app-marketplace.js.map +1 -1
  42. package/dist/mcp/webhook-handler.d.ts.map +1 -1
  43. package/dist/mcp/webhook-handler.js +27 -0
  44. package/dist/mcp/webhook-handler.js.map +1 -1
  45. package/dist/public-chat/graduate.d.ts.map +1 -1
  46. package/dist/public-chat/graduate.js +153 -53
  47. package/dist/public-chat/graduate.js.map +1 -1
  48. package/dist/public-chat/rate-limit.js +1 -1
  49. package/dist/public-chat/rate-limit.js.map +1 -1
  50. package/dist/public-chat/studio-prewarm.js +2 -2
  51. package/dist/public-chat/studio-prewarm.js.map +1 -1
  52. package/dist/public-chat/system-prompt.d.ts.map +1 -1
  53. package/dist/public-chat/system-prompt.js +41 -25
  54. package/dist/public-chat/system-prompt.js.map +1 -1
  55. package/package.json +1 -1
  56. package/.claude/skills/hailer-project-protocol/SKILL.md +0 -398
  57. package/.opencode/package-lock.json +0 -117
@@ -85,26 +85,16 @@ Confidence with humility. "I think this would help because X" — never "you nee
85
85
  Every reply:
86
86
  - 1-3 sentences (the answer)
87
87
  - 2-3 numbered options (what to do next)
88
+ - Options are written FROM THE VISITOR'S perspective — as if the visitor is saying it. "I want to see pricing", "Show me sales templates", "I need a project tracker" — NOT "Tell me what you need" or "I'll find templates for you" (that's the bot talking, not the visitor).
88
89
 
89
- First turndiscovery before demonstration:
90
- - Your greeter (rendered client-side before the user types) asked them a qualifying question: "what brought you here today? Sizing it up for your team, hunting for a specific tool, or just curious how it works?"
91
- - The user's FIRST message is their answer. It's an archetype signal but it's not enough. You can't tell them how Hailer would work for THEIR business until you know what their business actually does today.
92
- - Your first reply must do three things, in order, in one short message (under 15 words the hard length rule applies here too):
93
- 1. **Reflect** what they told you back — one specific phrase from their answer ("a way to keep client projects together", "something that replaces three different tools") so they feel heard.
94
- 2. **Map** to an archetype silently (see Visitor archetypes) and quietly bias the rest of the session toward that lens.
95
- 3. **Ask about their current workflow and where it hurts.** This is the most important step. Phrase it naturally in their language — match the words they used in their first message. Examples (don't copy verbatim; adapt to their wording):
96
- - "Tell me how your team handles [the thing they named] today — what does the process look like, and where does it usually fall apart?"
97
- - "Walk me through a typical [deal / project / case / ticket] right now, start to finish. What's painful enough that you're looking?"
98
- - "How is your team running [sales / projects / support] today? What's the tool stack, and where does it leak?"
99
- - DO NOT offer a demo, tour, slide deck, or "next move" on turn 1. You don't know enough yet to show them anything specific. Discovery first; demonstration after.
100
- - DO NOT list multiple options. One reflection + one open discovery question, that's it.
101
- - DO NOT mention the "Continue in Hailer" button in your first reply. The button is right there in the UI; the first reply earns the visitor's trust by listening, not by selling.
102
-
103
- 1. Show me how it works
104
- 2. I have a specific business need
105
- 3. What makes Hailer different?"
106
-
107
- NEVER write a reply without numbered options.
90
+ EVERY replyincluding the very first one — MUST end with 2-3 numbered options. No exceptions.
91
+
92
+ If the visitor says something generic like "hi", "hello", "hey"respond with a short welcome and options:
93
+ "Welcome! Hailer is a workspace where your team manages processes, communication, and data in one place. What would you like to do?
94
+
95
+ 1. Tell me more about Hailer
96
+ 2. I already know what I need
97
+ 3. Show me the marketplace"
108
98
 
109
99
  ═══ CONVERSATION FLOW ═══
110
100
 
@@ -112,6 +102,27 @@ Your goal: introduce Hailer, walk the visitor through key features, discover wha
112
102
 
113
103
  At any point the visitor can type their own question — answer it naturally. Remind them regularly (every 2-3 replies) that they can ask anything, not just click buttons. Add a short note like "Feel free to ask anything" or "You can always type your own question" at the end of your reply before the options.
114
104
 
105
+ TELL ME MORE ABOUT HAILER:
106
+ When the visitor says "Tell me more about Hailer" or similar ("what is Hailer", "how does it work", "show me more"):
107
+ - Give a 3-5 sentence overview covering the key ideas: Hailer replaces scattered tools (CRM, project tracker, chat, spreadsheets) with one workspace. Workflows model your processes with phases and fields. Every record has its own discussion thread so context stays with the work. There's a marketplace with ready-made templates you can install and customize. Apps and AI agents extend the platform.
108
+ - ALWAYS end with this exact sentence before the options: "Want to see it in action? Click 'Take a tour' in the top left corner — it walks you through the main features step by step."
109
+ - Offer numbered options:
110
+ 1. I already know what I need
111
+ 2. Show me the marketplace
112
+
113
+ Do NOT navigate anywhere. Do NOT launch a tour yourself. The tour button in the UI handles it.
114
+
115
+ SHOW ME THE MARKETPLACE:
116
+ When the visitor says "Show me the marketplace" or similar:
117
+ - Navigate to apps page: <bot-action type="navigate" target="apps" />
118
+ - In your reply text, tell them they can browse what's there OR describe what they need and you'll search for matching templates.
119
+ - Offer concrete category options — NOT generic "I'm looking for a specific solution":
120
+ 1. Sales pipeline
121
+ 2. Project tracker
122
+ 3. HR & onboarding
123
+ 4. Customer support
124
+ - The message text already invites them to type freely, so no need for a catch-all option.
125
+
115
126
  SHORTCUT — DIRECT BUSINESS NEED:
116
127
  If the visitor says "I already know what I need" or mentions their business, industry, or specific need at ANY point (e.g. "I run a construction company", "we need a sales pipeline", "I'm looking for project management", "HR tool for my team"), respond with a short question and concrete options.
117
128
 
@@ -139,7 +150,7 @@ Example for "I run a construction company":
139
150
  2. Crew scheduling and management
140
151
  3. Invoicing and billing"
141
152
 
142
- When they pick a specific option → do marketplace-search with TOOL keywords (not industry name) + navigate to apps.
153
+ When they pick a specific option → do marketplace-search with TOOL keywords (not industry name) + ALWAYS navigate to apps (the marketplace page). NEVER navigate to workflow-list or kanban when showing marketplace results.
143
154
 
144
155
  ` +
145
156
  // Scripted tour STEP 1-6 moved to frontend tour state machine to save output tokens.
@@ -250,6 +261,7 @@ A bakery doesn't need a "bakery template". They need:
250
261
  Your job: translate "I'm a [business type]" into 2-3 concrete tool needs, then search for THOSE.
251
262
 
252
263
  Use multiple marketplace-search tags if needed — one per tool category. Use their language, not Hailer jargon.
264
+ ALWAYS include <bot-action type="navigate" target="apps" /> to show the marketplace page. NEVER navigate to workflow-list, kanban, or Data Core when searching for templates.
253
265
 
254
266
  Example for "I'm a plumber":
255
267
  "For a plumbing business, you'd want job tracking to manage service calls, a client list to keep customer history, and invoicing to bill when the job's done.
@@ -259,9 +271,11 @@ Example for "I'm a plumber":
259
271
  <bot-action type="navigate" target="apps" />
260
272
 
261
273
  1. Tell me more about how job tracking works
262
- 2. Show me other tools that might help
274
+ 2. Nothing matched — let me describe what I need
263
275
  3. I want to try this"
264
276
 
277
+ After every marketplace-search, ALWAYS include "Nothing matched — let me describe what I need" as one of the numbered options. The search may return empty results and the visitor needs a way to continue.
278
+
265
279
  PRODUCT SELECTED — visitor chose a specific product from the marketplace:
266
280
  When you see a message like 'Install the template [name: Product Name] by Publisher in my workspace.' — this means the visitor browsed the marketplace and picked a specific product. The exact product name is inside [name: ...]. This OVERRIDES everything else in the conversation — forget what category they picked before, forget any previous context. Only the product name matters now. Respond:
267
281
  1. Say the product name will be installed: "[Product Name] will be installed in your workspace." — nothing else about what it does, what category it is, or how it works. Just the name.
@@ -304,7 +318,7 @@ You control the center area with navigate tags. Use them to SHOW what you're tal
304
318
 
305
319
  DEMO VIEWS — what's on each page and when to show it:
306
320
 
307
- workflow-list — Grid of workflow cards. Shows that Hailer organizes work into workflows (processes). Use when introducing Hailer or explaining the concept of workflows.
321
+ workflow-list — DEPRECATED, DO NOT USE. This page shows a static placeholder, not real content. To explain workflows, use kanban view instead or just describe in text.
308
322
 
309
323
  kanban — A "Sales Pipeline" board with columns (New, Qualified, Proposal, Won). Cards represent deals/activities. Use when explaining how work moves through phases, or when visitor mentions sales/pipeline/tracking.
310
324
 
@@ -362,10 +376,11 @@ Examples:
362
376
 
363
377
  ═══ SCOPE ═══
364
378
 
365
- - Only discuss Hailer
379
+ - You ONLY discuss Hailer and topics directly related to it. Nothing else.
380
+ - If the visitor asks about anything unrelated to Hailer (weather, coding help, math, jokes, other products, general knowledge, personal questions), respond: "I can only help with Hailer-related questions. What would you like to know about the platform?" and offer the standard options.
381
+ - Do NOT answer off-topic questions even partially. Do NOT say "I don't know but..." and then answer anyway. Just redirect to Hailer.
366
382
  - Privacy → knowledge base or privacy@hailer.com
367
383
  - Want a human? → https://form.hailer.com/846f393a84406e85dbc150ffdfff8352
368
- - Off-topic → gently redirect
369
384
  `;
370
385
  const BOT_ACTION_PROTOCOL = `Bot-action tags — embed these in your replies to control the demo UI. The visitor will NOT see the tag text.
371
386
 
@@ -378,7 +393,8 @@ Available tags:
378
393
  <bot-action type="marketplace-search" target="{query}" category="{category}" label="{button text}" />
379
394
  Categories: template, app, integration, ai-agent, support. Omit category to search all.
380
395
 
381
- Navigate targets: workflow-list, kanban, table, activity-detail, discussions, discussion-detail, feed, calendar, apps
396
+ Navigate targets: kanban, table, activity-detail, discussions, discussion-detail, feed, calendar, apps
397
+ NOTE: workflow-list is DEPRECATED — do not use it. Use kanban instead to show workflows.
382
398
  Rules:
383
399
  - Use one or two tags per reply, max — except for guided tours (see below). More than that is noise.
384
400
  - ONLY use highlight when the user is asking where something is or how to do something specific. Don't sprinkle them on regular Q&A.
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/public-chat/system-prompt.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AA4oBH,sDAEC;AA5oBD,2CAA8E;AAQ9E,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8HzB;IACD,qFAAqF;IACrF,yFAAyF;IACzF,yDAAyD;IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuEE;IACF,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqJJ,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoF3B;IACD,oFAAoF;IACpF,iGAAiG;IACjG,yDAAyD;IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6KE;IACF,EAAE,CAAC;AAEH,MAAM,gBAAgB,GAAG;;CAExB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,aAAa,GAAwB;IACzC;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,mBAAmB;QACpD,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KACrC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,gBAAgB,GAAG,mCAAuB;QAChD,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KACrC;CACF,CAAC;AAEF,SAAgB,qBAAqB;IACnC,OAAO,aAAa,CAAC;AACvB,CAAC;AAEY,QAAA,eAAe,GAAG,kCAAsB,CAAC"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/public-chat/system-prompt.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AA4pBH,sDAEC;AA5pBD,2CAA8E;AAQ9E,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyIzB;IACD,qFAAqF;IACrF,yFAAyF;IACzF,yDAAyD;IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuEE;IACF,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyJJ,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqF3B;IACD,oFAAoF;IACpF,iGAAiG;IACjG,yDAAyD;IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6KE;IACF,EAAE,CAAC;AAEH,MAAM,gBAAgB,GAAG;;CAExB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,aAAa,GAAwB;IACzC;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,mBAAmB;QACpD,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KACrC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,gBAAgB,GAAG,mCAAuB;QAChD,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KACrC;CACF,CAAC;AAEF,SAAgB,qBAAqB;IACnC,OAAO,aAAa,CAAC;AACvB,CAAC;AAEY,QAAA,eAAe,GAAG,kCAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hailer/mcp",
3
- "version": "1.3.14",
3
+ "version": "1.3.23",
4
4
  "config": {
5
5
  "docker": {
6
6
  "registry": "registry.gitlab.com/hailer-repos/hailer-mcp"
@@ -1,398 +0,0 @@
1
- ---
2
- name: hailer-project-protocol
3
- description: Complete Hailer project management workflow schemas, field definitions, and protocols for SDK projects
4
- version: 1.1.0
5
- ---
6
-
7
- # Hailer Project Management Protocol
8
-
9
- This skill contains the complete Hailer project management workflow schemas, field definitions, and protocols for working with Hailer SDK projects.
10
-
11
- ---
12
-
13
- <critical-rules>
14
- ## Overview
15
-
16
- Every Hailer workspace uses project management workflows. Claude installs and maintains these automatically using MCP or SDK.
17
-
18
- **CRITICAL: Real-Time Updates**
19
- - Update Hailer items IN REAL-TIME as work progresses
20
- - Do NOT batch updates - update immediately when status changes
21
- - When completing a task, update Hailer BEFORE moving to next task
22
-
23
- **Context File Hierarchy**
24
- 1. **SESSION-HANDOFF.md** - Previous session state (read first when resuming)
25
- 2. **DEVELOPMENT.md** - Local backup/snapshot of Hailer state
26
- 3. **Hailer Workflows** - Source of truth for project data
27
- </critical-rules>
28
-
29
- ---
30
-
31
- ## Workflow 1: Project Planning
32
-
33
- **Workflow name:** `Project Planning`
34
-
35
- ### Phases (in order)
36
- 1. `Planning`
37
- 2. `In Progress`
38
- 3. `On Hold`
39
- 4. `Completed`
40
-
41
- ### Fields
42
-
43
- | Field Name | Field Type | Configuration |
44
- |------------|------------|---------------|
45
- | Title | Text | - |
46
- | Description | Long text | - |
47
- | Type | Predefined options (single) | Options: `Project`, `Feature`, `Session Handoff`, `PRD` |
48
- | Project | Activity link | Links to: `Project Planning` workflow |
49
- | Child Features | Linked from | Linked from: `Project Planning` → `Project` field |
50
- | Dev Tasks | Linked from | Linked from: `Dev Tasks` → `Feature` field |
51
- | Goal | Long text | - |
52
- | Documentation | Long text | - |
53
- | Technical Notes | Long text | - |
54
- | Blockers | Long text | - |
55
- | User Stories | Long text | PRD: As a [user], I want [X] so that [Y] |
56
- | Acceptance Criteria | Long text | PRD: Checklist of "done" conditions |
57
- | Technical Constraints | Long text | PRD: Performance, security, compatibility |
58
- | Out of Scope | Long text | PRD: What this feature does NOT include |
59
-
60
- - **Project**: Features use this to link UP to their parent Project
61
- - **Child Features**: Automatically shows Features that link to this Project
62
- - **Dev Tasks**: Automatically shows Tasks/Bugs that link to this Feature
63
-
64
- ---
65
-
66
- ## Workflow 2: Dev Tasks
67
-
68
- **Workflow name:** `Dev Tasks`
69
-
70
- ### Phases (in order)
71
- 1. `Backlog`
72
- 2. `Todo`
73
- 3. `In Progress`
74
- 4. `Review`
75
- 5. `Done`
76
-
77
- ### Fields
78
-
79
- | Field Name | Field Type | Configuration |
80
- |------------|------------|---------------|
81
- | Title | Text | - |
82
- | Description | Long text | - |
83
- | Type | Predefined options (single) | Options: `Task`, `Bug`, `Tech Debt` |
84
- | Priority | Predefined options (single) | Options: `HIGH`, `MEDIUM`, `LOW` |
85
- | Feature | Activity link | Links to: `Project Planning` workflow |
86
- | Blocked By | Activity link | Links to: `Dev Tasks` workflow |
87
- | Blocks | Linked from | Linked from: `Dev Tasks` → `Blocked By` field |
88
- | Related Items | Activity link | Links to: `Dev Tasks` workflow |
89
- | Related From | Linked from | Linked from: `Dev Tasks` → `Related Items` field |
90
- | Files Modified | Text | - |
91
- | Commits | Text | - |
92
-
93
- - **Feature**: Links UP to parent Feature in Project Planning
94
- - **Blocked By**: Links to other Dev Tasks that block this one
95
- - **Blocks**: Automatically shows Dev Tasks that this task blocks
96
- - **Related Items**: Links to related Tasks/Bugs (e.g., Bug → Task that caused it)
97
-
98
- ---
99
-
100
- ## Protocol: Starting in a Workspace
101
-
102
- ### Step 1: Check for Existing Workflows
103
-
104
- **AUTOMATIC CREATION: If workflows don't exist, CREATE THEM.**
105
-
106
- Look for workflows named exactly:
107
- - `Project Planning`
108
- - `Dev Tasks`
109
-
110
- ### Step 2: Create Workflows if Missing
111
-
112
- **This is NOT optional - create them automatically.**
113
-
114
- Notify user: "Setting up project management workflows for this workspace..."
115
-
116
- #### Create Project Planning Workflow
117
-
118
- ```typescript
119
- {
120
- name: "Project Planning",
121
- phases: ["Planning", "In Progress", "On Hold", "Completed"],
122
- fields: [
123
- { name: "Title", type: "text" },
124
- { name: "Description", type: "textarea" },
125
- { name: "Type", type: "textpredefinedoptions", options: ["Project", "Feature", "Session Handoff", "PRD"] },
126
- { name: "Project", type: "activitylink", linkedWorkflow: "Project Planning" },
127
- { name: "Goal", type: "textarea" },
128
- { name: "Documentation", type: "textarea" },
129
- { name: "Technical Notes", type: "textarea" },
130
- { name: "Blockers", type: "textarea" },
131
- { name: "User Stories", type: "textarea" },
132
- { name: "Acceptance Criteria", type: "textarea" },
133
- { name: "Technical Constraints", type: "textarea" },
134
- { name: "Out of Scope", type: "textarea" }
135
- ]
136
- }
137
- ```
138
-
139
- #### Create Dev Tasks Workflow
140
-
141
- ```typescript
142
- {
143
- name: "Dev Tasks",
144
- phases: ["Backlog", "Todo", "In Progress", "Review", "Done"],
145
- fields: [
146
- { name: "Title", type: "text" },
147
- { name: "Description", type: "textarea" },
148
- { name: "Type", type: "textpredefinedoptions", options: ["Task", "Bug", "Tech Debt"] },
149
- { name: "Priority", type: "textpredefinedoptions", options: ["HIGH", "MEDIUM", "LOW"] },
150
- { name: "Feature", type: "activitylink", linkedWorkflow: "Project Planning" },
151
- { name: "Blocked By", type: "activitylink", linkedWorkflow: "Dev Tasks" },
152
- { name: "Related Items", type: "activitylink", linkedWorkflow: "Dev Tasks" },
153
- { name: "Files Modified", type: "text" },
154
- { name: "Commits", type: "text" }
155
- ]
156
- }
157
- ```
158
-
159
- ### Step 3: Verify PRD Fields Exist
160
-
161
- If `Project Planning` workflow exists but is missing PRD fields, ADD THEM:
162
- - User Stories
163
- - Acceptance Criteria
164
- - Technical Constraints
165
- - Out of Scope
166
-
167
- ### Step 4: Read Current State
168
-
169
- Before starting work:
170
- 1. Check for SESSION-HANDOFF.md - read if exists (previous session context)
171
- 2. Check for active Project (Type = `Project`, Phase = `In Progress`)
172
- 3. If no Project exists, ask user for project name and create one
173
- 4. Fetch In Progress Features and Tasks
174
- 5. Check for recent Session Handoff (Type = `Session Handoff`)
175
- 6. Summarize state to user
176
-
177
- ---
178
-
179
- ## Protocol: During Development (Real-Time Updates)
180
-
181
- ### Starting New Work
182
- 1. Ensure a Feature exists (Type = `Feature`)
183
- - Set `Project` field to link to parent Project
184
- 2. Create Task in Dev Tasks (Type = `Task`)
185
- - Set `Feature` field to link to parent Feature
186
- 3. **IMMEDIATELY** move Task to `In Progress`
187
- 4. Keep only ONE task `In Progress` at a time
188
-
189
- ### Completing Work
190
- 1. **IMMEDIATELY** update Task:
191
- - `Files Modified`: List changed files
192
- - `Commits`: Add commit hashes
193
- 2. **IMMEDIATELY** move to `Done`
194
- 3. If new work discovered → create new Tasks in `Backlog`
195
-
196
- ### Finding Bugs
197
- 1. **IMMEDIATELY** create item in Dev Tasks (Type = `Bug`)
198
- 2. Set `Feature` to link to relevant Feature
199
- 3. Set `Priority` based on severity
200
- 4. Optionally set `Related Items` to link to Task that caused it
201
-
202
- ### Blocked Tasks
203
- 1. Set `Blocked By` to link to blocking Task(s)
204
- 2. Update Description with blocker details
205
- 3. When blocker resolved, clear `Blocked By` and continue
206
-
207
- ### Technical Decisions
208
- Update the Feature's `Technical Notes` field with:
209
- - Architecture decisions and rationale
210
- - Important discoveries
211
- - Trade-offs considered
212
-
213
- ### Documentation
214
- When feature is complete or stable, update `Documentation` field with:
215
- - How it works
216
- - Usage instructions
217
- - Configuration options
218
-
219
- ---
220
-
221
- ## Protocol: Session Handoff
222
-
223
- ### When to Create
224
- - Context reaches 70-80%
225
- - Before ending a long session
226
- - User requests it
227
-
228
- ### Create Session Handoff Item
229
- In Project Planning workflow:
230
-
231
- | Field | Value |
232
- |-------|-------|
233
- | Title | `Session Handoff - YYYY-MM-DD HH:MM` |
234
- | Type | `Session Handoff` |
235
- | Project | Link to active Project |
236
- | Phase | `Completed` |
237
- | Description | See template below |
238
- | Technical Notes | Key discoveries and decisions |
239
- | Blockers | Unresolved issues, next steps |
240
-
241
- **Description template:**
242
- ```
243
- ## Completed This Session
244
- - [List completed tasks]
245
-
246
- ## In Progress
247
- - [Current work state]
248
-
249
- ## Next Steps
250
- - [What to do when resuming]
251
- ```
252
-
253
- ### Local SESSION-HANDOFF.md
254
- Also create/update `SESSION-HANDOFF.md` in project root:
255
-
256
- ```markdown
257
- ## Session Handoff - YYYY-MM-DD HH:MM
258
-
259
- ### Completed This Session
260
- - [What was accomplished]
261
-
262
- ### Current State
263
- - [Work in progress, any partial implementations]
264
-
265
- ### Blockers / Issues Found
266
- - [Problems encountered, unresolved errors]
267
-
268
- ### Next Steps
269
- - [Immediate actions for next session]
270
-
271
- ### Key Decisions Made
272
- - [Important context that shouldn't be lost]
273
-
274
- ### Files Modified
275
- - [List of changed files with brief description]
276
- ```
277
-
278
- ---
279
-
280
- ## Protocol: Creating Items
281
-
282
- ### New Project
283
- | Field | Value |
284
- |-------|-------|
285
- | Title | Project name (ask user) |
286
- | Type | `Project` |
287
- | Phase | `In Progress` |
288
- | Description | Project overview |
289
- | Goal | What success looks like |
290
-
291
- ### New Feature
292
- | Field | Value |
293
- |-------|-------|
294
- | Title | Feature name (use arrow prefix for related features: `Sales Orders → Automations`) |
295
- | Type | `Feature` |
296
- | Project | Link to parent Project |
297
- | Phase | `Planning` or `In Progress` |
298
- | Description | Scope and requirements |
299
- | Goal | Acceptance criteria |
300
- | Documentation | How it works (fill when complete) |
301
- | Technical Notes | Architecture decisions |
302
-
303
- ### New PRD
304
- | Field | Value |
305
- |-------|-------|
306
- | Title | `PRD: [Feature Name]` |
307
- | Type | `PRD` |
308
- | Project | Link to parent Project |
309
- | Phase | `Planning` |
310
- | Description | Executive summary |
311
- | Goal | Success metrics |
312
- | User Stories | As a [user], I want [X] so that [Y] |
313
- | Acceptance Criteria | - [ ] Criterion 1<br>- [ ] Criterion 2 |
314
- | Technical Constraints | Performance, security, compatibility needs |
315
- | Out of Scope | What this does NOT include |
316
-
317
- ### New Task
318
- | Field | Value |
319
- |-------|-------|
320
- | Title | Specific, actionable description |
321
- | Type | `Task` |
322
- | Feature | Link to parent Feature |
323
- | Priority | `MEDIUM` (default) |
324
- | Phase | `Backlog` or `Todo` |
325
- | Description | Implementation details |
326
-
327
- ### New Bug
328
- | Field | Value |
329
- |-------|-------|
330
- | Title | Clear bug description with context |
331
- | Type | `Bug` |
332
- | Feature | Link to affected Feature |
333
- | Priority | Based on severity |
334
- | Phase | `Backlog` or `Todo` |
335
- | Description | Steps to reproduce, expected vs actual |
336
- | Related Items | Link to Task that caused it (if known) |
337
-
338
- ---
339
-
340
- ## Protocol: DEVELOPMENT.md Sync
341
-
342
- When user requests sync (`/project-status`):
343
-
344
- 1. Fetch all data from Hailer workflows:
345
- - Active Project
346
- - All Features with their phases
347
- - All Dev Tasks (grouped by phase)
348
- - Recent Session Handoffs
349
-
350
- 2. Generate DEVELOPMENT.md:
351
- ```markdown
352
- # [Project Title] Development Status
353
-
354
- **Last Updated:** YYYY-MM-DD
355
- **Hailer Sync:** YYYY-MM-DD HH:MM
356
-
357
- ---
358
-
359
- ## Active Feature
360
- **Name:** [Feature Title]
361
- **Goal:** [Feature Goal]
362
- **Status:** [Phase]
363
-
364
- ---
365
-
366
- ## Current Sprint
367
-
368
- ### In Progress
369
- - [ ] [Task Title] (Feature: [Feature Name])
370
-
371
- ### Completed This Session
372
- - [x] [Task Title] (YYYY-MM-DD)
373
-
374
- ### Blocked
375
- - [ ] [Task Title] - **Blocker:** [reason]
376
-
377
- ---
378
-
379
- ## Backlog
380
- - [ ] [Task Title] (Feature: [Feature Name], Priority: [Priority])
381
-
382
- ---
383
-
384
- ## Known Issues
385
- | Priority | Issue | Status |
386
- |----------|-------|--------|
387
- | HIGH | [Bug Title] | [Phase] |
388
-
389
- ---
390
-
391
- ## Technical Notes
392
- [Aggregated from Features' Technical Notes fields]
393
-
394
- ---
395
-
396
- ## Session Notes
397
- [Local notes not synced to Hailer]
398
- ```
@@ -1,117 +0,0 @@
1
- {
2
- "name": ".opencode",
3
- "lockfileVersion": 3,
4
- "requires": true,
5
- "packages": {
6
- "": {
7
- "dependencies": {
8
- "@opencode-ai/plugin": "1.3.17"
9
- }
10
- },
11
- "node_modules/@opencode-ai/plugin": {
12
- "version": "1.3.17",
13
- "resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.3.17.tgz",
14
- "integrity": "sha512-N5lckFtYvEu2R8K1um//MIOTHsJHniF2kHoPIWPCrxKG5Jpismt1ISGzIiU3aKI2ht/9VgcqKPC5oZFLdmpxPw==",
15
- "license": "MIT",
16
- "dependencies": {
17
- "@opencode-ai/sdk": "1.3.17",
18
- "zod": "4.1.8"
19
- },
20
- "peerDependencies": {
21
- "@opentui/core": ">=0.1.96",
22
- "@opentui/solid": ">=0.1.96"
23
- },
24
- "peerDependenciesMeta": {
25
- "@opentui/core": {
26
- "optional": true
27
- },
28
- "@opentui/solid": {
29
- "optional": true
30
- }
31
- }
32
- },
33
- "node_modules/@opencode-ai/sdk": {
34
- "version": "1.3.17",
35
- "resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.3.17.tgz",
36
- "integrity": "sha512-2+MGgu7wynqTBwxezR01VAGhILXlpcHDY/pF7SWB87WOgLt3kD55HjKHNj6PWxyY8n575AZolR95VUC3gtwfmA==",
37
- "license": "MIT",
38
- "dependencies": {
39
- "cross-spawn": "7.0.6"
40
- }
41
- },
42
- "node_modules/cross-spawn": {
43
- "version": "7.0.6",
44
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
45
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
46
- "license": "MIT",
47
- "dependencies": {
48
- "path-key": "^3.1.0",
49
- "shebang-command": "^2.0.0",
50
- "which": "^2.0.1"
51
- },
52
- "engines": {
53
- "node": ">= 8"
54
- }
55
- },
56
- "node_modules/isexe": {
57
- "version": "2.0.0",
58
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
59
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
60
- "license": "ISC"
61
- },
62
- "node_modules/path-key": {
63
- "version": "3.1.1",
64
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
65
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
66
- "license": "MIT",
67
- "engines": {
68
- "node": ">=8"
69
- }
70
- },
71
- "node_modules/shebang-command": {
72
- "version": "2.0.0",
73
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
74
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
75
- "license": "MIT",
76
- "dependencies": {
77
- "shebang-regex": "^3.0.0"
78
- },
79
- "engines": {
80
- "node": ">=8"
81
- }
82
- },
83
- "node_modules/shebang-regex": {
84
- "version": "3.0.0",
85
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
86
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
87
- "license": "MIT",
88
- "engines": {
89
- "node": ">=8"
90
- }
91
- },
92
- "node_modules/which": {
93
- "version": "2.0.2",
94
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
95
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
96
- "license": "ISC",
97
- "dependencies": {
98
- "isexe": "^2.0.0"
99
- },
100
- "bin": {
101
- "node-which": "bin/node-which"
102
- },
103
- "engines": {
104
- "node": ">= 8"
105
- }
106
- },
107
- "node_modules/zod": {
108
- "version": "4.1.8",
109
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.8.tgz",
110
- "integrity": "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==",
111
- "license": "MIT",
112
- "funding": {
113
- "url": "https://github.com/sponsors/colinhacks"
114
- }
115
- }
116
- }
117
- }