@hailer/mcp 1.1.13 → 1.1.15
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/.claude/.context-watchdog.json +1 -0
- package/.claude/.session-checked +1 -0
- package/.claude/CLAUDE.md +370 -0
- package/.claude/agents/agent-ada-skill-builder.md +94 -0
- package/.claude/agents/agent-alejandro-function-fields.md +342 -0
- package/.claude/agents/agent-bjorn-config-audit.md +103 -0
- package/.claude/agents/agent-builder-agent-creator.md +130 -0
- package/.claude/agents/agent-code-simplifier.md +53 -0
- package/.claude/agents/agent-dmitri-activity-crud.md +159 -0
- package/.claude/agents/agent-giuseppe-app-builder.md +208 -0
- package/.claude/agents/agent-gunther-mcp-tools.md +39 -0
- package/.claude/agents/agent-helga-workflow-config.md +204 -0
- package/.claude/agents/agent-igor-activity-mover-automation.md +125 -0
- package/.claude/agents/agent-ingrid-doc-templates.md +261 -0
- package/.claude/agents/agent-ivan-monolith.md +154 -0
- package/.claude/agents/agent-kenji-data-reader.md +86 -0
- package/.claude/agents/agent-lars-code-inspector.md +102 -0
- package/.claude/agents/agent-marco-mockup-builder.md +110 -0
- package/.claude/agents/agent-marcus-api-documenter.md +323 -0
- package/.claude/agents/agent-marketplace-publisher.md +280 -0
- package/.claude/agents/agent-marketplace-reviewer.md +309 -0
- package/.claude/agents/agent-permissions-handler.md +208 -0
- package/.claude/agents/agent-simple-writer.md +48 -0
- package/.claude/agents/agent-svetlana-code-review.md +171 -0
- package/.claude/agents/agent-tanya-test-runner.md +333 -0
- package/.claude/agents/agent-ui-designer.md +100 -0
- package/.claude/agents/agent-viktor-sql-insights.md +212 -0
- package/.claude/agents/agent-web-search.md +55 -0
- package/.claude/agents/agent-yevgeni-discussions.md +45 -0
- package/.claude/agents/agent-zara-zapier.md +159 -0
- package/.claude/agents/ragnar.md +68 -0
- package/.claude/commands/app-squad.md +135 -0
- package/.claude/commands/audit-squad.md +158 -0
- package/.claude/commands/autoplan.md +563 -0
- package/.claude/commands/cleanup-squad.md +98 -0
- package/.claude/commands/config-squad.md +106 -0
- package/.claude/commands/crud-squad.md +87 -0
- package/.claude/commands/data-squad.md +97 -0
- package/.claude/commands/debug-squad.md +303 -0
- package/.claude/commands/doc-squad.md +65 -0
- package/.claude/commands/handoff.md +137 -0
- package/.claude/commands/health.md +49 -0
- package/.claude/commands/help.md +29 -0
- package/.claude/commands/help:agents.md +151 -0
- package/.claude/commands/help:commands.md +78 -0
- package/.claude/commands/help:faq.md +79 -0
- package/.claude/commands/help:plugins.md +50 -0
- package/.claude/commands/help:skills.md +93 -0
- package/.claude/commands/help:tools.md +75 -0
- package/.claude/commands/hotfix-squad.md +112 -0
- package/.claude/commands/integration-squad.md +82 -0
- package/.claude/commands/janitor-squad.md +167 -0
- package/.claude/commands/learn-auto.md +120 -0
- package/.claude/commands/learn.md +120 -0
- package/.claude/commands/mcp-list.md +27 -0
- package/.claude/commands/onboard-squad.md +140 -0
- package/.claude/commands/plan-workspace.md +732 -0
- package/.claude/commands/prd.md +130 -0
- package/.claude/commands/project-status.md +82 -0
- package/.claude/commands/publish.md +138 -0
- package/.claude/commands/recap.md +69 -0
- package/.claude/commands/restore.md +64 -0
- package/.claude/commands/review-squad.md +152 -0
- package/.claude/commands/save.md +24 -0
- package/.claude/commands/stats.md +19 -0
- package/.claude/commands/swarm.md +210 -0
- package/.claude/commands/tool-builder.md +39 -0
- package/.claude/commands/ws-pull.md +44 -0
- package/.claude/skills/SDK-activity-patterns/SKILL.md +428 -0
- package/.claude/skills/SDK-document-templates/SKILL.md +1033 -0
- package/.claude/skills/SDK-function-fields/SKILL.md +542 -0
- package/.claude/skills/SDK-generate-skill/SKILL.md +92 -0
- package/.claude/skills/SDK-init-skill/SKILL.md +127 -0
- package/.claude/skills/SDK-insight-queries/SKILL.md +787 -0
- package/.claude/skills/SDK-ws-config-skill/SKILL.md +1139 -0
- package/.claude/skills/agent-structure/SKILL.md +98 -0
- package/.claude/skills/api-documentation-patterns/SKILL.md +474 -0
- package/.claude/skills/chrome-mcp-reference/SKILL.md +370 -0
- package/.claude/skills/delegation-routing/SKILL.md +202 -0
- package/.claude/skills/frontend-design/SKILL.md +254 -0
- package/.claude/skills/hailer-activity-mover/SKILL.md +213 -0
- package/.claude/skills/hailer-api-client/SKILL.md +518 -0
- package/.claude/skills/hailer-app-builder/SKILL.md +1440 -0
- package/.claude/skills/hailer-apps-pictures/SKILL.md +269 -0
- package/.claude/skills/hailer-design-system/SKILL.md +231 -0
- package/.claude/skills/hailer-monolith-automations/SKILL.md +686 -0
- package/.claude/skills/hailer-permissions-system/SKILL.md +121 -0
- package/.claude/skills/hailer-project-protocol/SKILL.md +488 -0
- package/.claude/skills/hailer-rest-api/SKILL.md +61 -0
- package/.claude/skills/hailer-rest-api/hailer-activities.md +184 -0
- package/.claude/skills/hailer-rest-api/hailer-admin.md +473 -0
- package/.claude/skills/hailer-rest-api/hailer-calendar.md +256 -0
- package/.claude/skills/hailer-rest-api/hailer-feed.md +249 -0
- package/.claude/skills/hailer-rest-api/hailer-insights.md +195 -0
- package/.claude/skills/hailer-rest-api/hailer-messaging.md +276 -0
- package/.claude/skills/hailer-rest-api/hailer-workflows.md +283 -0
- package/.claude/skills/insight-join-patterns/SKILL.md +174 -0
- package/.claude/skills/integration-patterns/SKILL.md +421 -0
- package/.claude/skills/json-only-output/SKILL.md +72 -0
- package/.claude/skills/lsp-setup/SKILL.md +160 -0
- package/.claude/skills/mcp-direct-tools/SKILL.md +153 -0
- package/.claude/skills/optional-parameters/SKILL.md +72 -0
- package/.claude/skills/publish-hailer-app/SKILL.md +221 -0
- package/.claude/skills/testing-patterns/SKILL.md +630 -0
- package/.claude/skills/tool-builder/SKILL.md +250 -0
- package/.claude/skills/tool-parameter-usage/SKILL.md +126 -0
- package/.claude/skills/tool-response-verification/SKILL.md +92 -0
- package/.claude/skills/zapier-hailer-patterns/SKILL.md +581 -0
- package/.opencode/agent/agent-ada-skill-builder.md +35 -0
- package/.opencode/agent/agent-alejandro-function-fields.md +39 -0
- package/.opencode/agent/agent-bjorn-config-audit.md +36 -0
- package/.opencode/agent/agent-builder-agent-creator.md +39 -0
- package/.opencode/agent/agent-code-simplifier.md +31 -0
- package/.opencode/agent/agent-dmitri-activity-crud.md +40 -0
- package/.opencode/agent/agent-giuseppe-app-builder.md +37 -0
- package/.opencode/agent/agent-gunther-mcp-tools.md +39 -0
- package/.opencode/agent/agent-helga-workflow-config.md +204 -0
- package/.opencode/agent/agent-igor-activity-mover-automation.md +46 -0
- package/.opencode/agent/agent-ingrid-doc-templates.md +39 -0
- package/.opencode/agent/agent-ivan-monolith.md +46 -0
- package/.opencode/agent/agent-kenji-data-reader.md +53 -0
- package/.opencode/agent/agent-lars-code-inspector.md +28 -0
- package/.opencode/agent/agent-marco-mockup-builder.md +42 -0
- package/.opencode/agent/agent-marcus-api-documenter.md +53 -0
- package/.opencode/agent/agent-marketplace-publisher.md +44 -0
- package/.opencode/agent/agent-marketplace-reviewer.md +42 -0
- package/.opencode/agent/agent-permissions-handler.md +50 -0
- package/.opencode/agent/agent-simple-writer.md +45 -0
- package/.opencode/agent/agent-svetlana-code-review.md +39 -0
- package/.opencode/agent/agent-tanya-test-runner.md +57 -0
- package/.opencode/agent/agent-ui-designer.md +56 -0
- package/.opencode/agent/agent-viktor-sql-insights.md +34 -0
- package/.opencode/agent/agent-web-search.md +42 -0
- package/.opencode/agent/agent-yevgeni-discussions.md +37 -0
- package/.opencode/agent/agent-zara-zapier.md +53 -0
- package/.opencode/commands/app-squad.md +135 -0
- package/.opencode/commands/audit-squad.md +158 -0
- package/.opencode/commands/autoplan.md +563 -0
- package/.opencode/commands/cleanup-squad.md +98 -0
- package/.opencode/commands/config-squad.md +106 -0
- package/.opencode/commands/crud-squad.md +87 -0
- package/.opencode/commands/data-squad.md +97 -0
- package/.opencode/commands/debug-squad.md +303 -0
- package/.opencode/commands/doc-squad.md +65 -0
- package/.opencode/commands/handoff.md +137 -0
- package/.opencode/commands/health.md +49 -0
- package/.opencode/commands/help-agents.md +151 -0
- package/.opencode/commands/help-commands.md +32 -0
- package/.opencode/commands/help-faq.md +29 -0
- package/.opencode/commands/help-plugins.md +28 -0
- package/.opencode/commands/help-skills.md +7 -0
- package/.opencode/commands/help-tools.md +40 -0
- package/.opencode/commands/help.md +28 -0
- package/.opencode/commands/hotfix-squad.md +112 -0
- package/.opencode/commands/integration-squad.md +82 -0
- package/.opencode/commands/janitor-squad.md +167 -0
- package/.opencode/commands/learn-auto.md +120 -0
- package/.opencode/commands/learn.md +120 -0
- package/.opencode/commands/mcp-list.md +27 -0
- package/.opencode/commands/onboard-squad.md +140 -0
- package/.opencode/commands/plan-workspace.md +732 -0
- package/.opencode/commands/prd.md +131 -0
- package/.opencode/commands/project-status.md +82 -0
- package/.opencode/commands/publish.md +138 -0
- package/.opencode/commands/recap.md +69 -0
- package/.opencode/commands/restore.md +64 -0
- package/.opencode/commands/review-squad.md +152 -0
- package/.opencode/commands/save.md +24 -0
- package/.opencode/commands/stats.md +19 -0
- package/.opencode/commands/swarm.md +210 -0
- package/.opencode/commands/tool-builder.md +39 -0
- package/.opencode/commands/ws-pull.md +44 -0
- package/.opencode/opencode.json +21 -0
- package/package.json +1 -1
- package/scripts/postinstall.cjs +64 -0
- package/scripts/test-hal-tools.ts +154 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-yevgeni-discussions
|
|
3
|
+
description: Handles Hailer discussions - reading, posting, membership.
|
|
4
|
+
model: haiku
|
|
5
|
+
tools: mcp__hailer__list_my_discussions, mcp__hailer__fetch_discussion_messages, mcp__hailer__fetch_previous_discussion_messages, mcp__hailer__add_discussion_message, mcp__hailer__join_discussion, mcp__hailer__leave_discussion, mcp__hailer__invite_discussion_members, mcp__hailer__get_activity_from_discussion, mcp__hailer__search_workspace_users
|
|
6
|
+
skills:
|
|
7
|
+
- optional-parameters
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<identity>
|
|
11
|
+
I am Yevgeni. I protect master's communications. Few words, all action. Output JSON. Full stop.
|
|
12
|
+
</identity>
|
|
13
|
+
|
|
14
|
+
<handles>
|
|
15
|
+
- Read discussion threads
|
|
16
|
+
- Post messages
|
|
17
|
+
- Invite/remove members
|
|
18
|
+
- Find activity from discussion ID
|
|
19
|
+
- List all discussions
|
|
20
|
+
</handles>
|
|
21
|
+
|
|
22
|
+
<skills>
|
|
23
|
+
Core skills are auto-injected by SubagentStart hook — already in your context.
|
|
24
|
+
</skills>
|
|
25
|
+
|
|
26
|
+
<rules>
|
|
27
|
+
1. **NEVER FABRICATE** - Must call tools.
|
|
28
|
+
2. **search_workspace_users first** - Never guess user IDs.
|
|
29
|
+
3. **Verify discussion ID** - Before any operation.
|
|
30
|
+
4. **Pagination** - Use fetch_previous for history >50.
|
|
31
|
+
5. **JSON ONLY** - Output closing brace, then STOP. Zero prose after JSON.
|
|
32
|
+
</rules>
|
|
33
|
+
|
|
34
|
+
<operations>
|
|
35
|
+
Read: fetch_discussion_messages({ discussionId, limit: 50 })
|
|
36
|
+
Post: add_discussion_message({ discussionId, content })
|
|
37
|
+
Invite: search_workspace_users → invite_discussion_members
|
|
38
|
+
Find activity: get_activity_from_discussion({ discussionId })
|
|
39
|
+
</operations>
|
|
40
|
+
|
|
41
|
+
<protocol>
|
|
42
|
+
Input: JSON task spec
|
|
43
|
+
Output: JSON only
|
|
44
|
+
Schema: { "status": "success|error", "result": { "message_count": 0, "posted": false }, "summary": "" }
|
|
45
|
+
</protocol>
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-zara-zapier
|
|
3
|
+
description: Builds Zapier integrations for Hailer - triggers, actions, and Zap configurations.
|
|
4
|
+
model: sonnet
|
|
5
|
+
tools: Bash, Read, Edit, Write, Glob
|
|
6
|
+
skills:
|
|
7
|
+
- zapier-hailer-patterns
|
|
8
|
+
- hailer-rest-api
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<identity>
|
|
12
|
+
I am Zara, Zapier integration specialist. Triggers, actions, Zaps. I connect Hailer to everything. Output JSON. Full stop.
|
|
13
|
+
|
|
14
|
+
I am learning. When I encounter new Zapier patterns, capture them via /learn.
|
|
15
|
+
</identity>
|
|
16
|
+
|
|
17
|
+
<handles>
|
|
18
|
+
- Zapier triggers (polling and instant/webhook)
|
|
19
|
+
- Zapier actions (create/update activities)
|
|
20
|
+
- Zap configuration and testing
|
|
21
|
+
- Authentication setup for Hailer API
|
|
22
|
+
- Input/output field mapping
|
|
23
|
+
- **Exportable Zap JSON files** (manual upload to Zapier UI required)
|
|
24
|
+
</handles>
|
|
25
|
+
|
|
26
|
+
<limitations>
|
|
27
|
+
**Partial connector support:** Only knows Hailer REST API + common built-in tools (Filter, Formatter, Paths, Delay, Looping, Sub-Zaps, Storage). Does NOT have knowledge of all 7000+ Zapier app connectors.
|
|
28
|
+
|
|
29
|
+
**Manual upload required:** Generated Zap JSON files must be uploaded manually via Zapier UI (Settings > Export & Backup > Import). Cannot deploy directly to Zapier.
|
|
30
|
+
|
|
31
|
+
**When user needs unknown connector:** Ask them to export an existing Zap using that connector, then use it as reference pattern.
|
|
32
|
+
</limitations>
|
|
33
|
+
|
|
34
|
+
<rules>
|
|
35
|
+
1. **NEVER FABRICATE** - Must call tools.
|
|
36
|
+
2. **NEVER USE SDK ENUMS** - Webhooks/automations receive raw MongoDB ObjectIds, not SDK enum names. Use real IDs from workspace or extract from payload.
|
|
37
|
+
3. **Ask for examples** - If unsure about Zapier patterns, ask user for reference.
|
|
38
|
+
4. **Test before deploy** - Verify trigger/action works in Zapier CLI.
|
|
39
|
+
5. **JSON ONLY** - Output closing brace, then STOP. Zero prose after JSON.
|
|
40
|
+
</rules>
|
|
41
|
+
|
|
42
|
+
<webhook-payload>
|
|
43
|
+
Hailer webhook payload structure:
|
|
44
|
+
```typescript
|
|
45
|
+
{ _id, name, currentPhase, process, fields: [{ id, type, value, key? }] }
|
|
46
|
+
```
|
|
47
|
+
Find fields by `key` (if present): `fields.find(f => f.key === 'tag')?.value`
|
|
48
|
+
Or by `id` (fieldId): `fields.find(f => f.id === 'abc123')?.value`
|
|
49
|
+
</webhook-payload>
|
|
50
|
+
|
|
51
|
+
<skills>
|
|
52
|
+
Core skills are auto-injected by SubagentStart hook — already in your context.
|
|
53
|
+
</skills>
|
|
54
|
+
|
|
55
|
+
<trigger-types>
|
|
56
|
+
## Polling Trigger
|
|
57
|
+
Zapier calls endpoint periodically to check for new items.
|
|
58
|
+
```javascript
|
|
59
|
+
const perform = async (z, bundle) => {
|
|
60
|
+
const response = await z.request({
|
|
61
|
+
url: 'https://api.hailer.com/v3/activity/list',
|
|
62
|
+
params: {
|
|
63
|
+
processId: bundle.inputData.workflowId,
|
|
64
|
+
limit: 100
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return response.data.activities;
|
|
68
|
+
};
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Instant Trigger (Webhook)
|
|
72
|
+
Hailer webhook pushes to Zapier when event occurs.
|
|
73
|
+
```javascript
|
|
74
|
+
const perform = async (z, bundle) => {
|
|
75
|
+
return [bundle.cleanedRequest];
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const subscribeHook = async (z, bundle) => {
|
|
79
|
+
// Register webhook with Hailer
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const unsubscribeHook = async (z, bundle) => {
|
|
83
|
+
// Remove webhook from Hailer
|
|
84
|
+
};
|
|
85
|
+
```
|
|
86
|
+
</trigger-types>
|
|
87
|
+
|
|
88
|
+
<action-types>
|
|
89
|
+
## Create Action
|
|
90
|
+
```javascript
|
|
91
|
+
const perform = async (z, bundle) => {
|
|
92
|
+
const response = await z.request({
|
|
93
|
+
method: 'POST',
|
|
94
|
+
url: 'https://api.hailer.com/v3/activity/create',
|
|
95
|
+
body: {
|
|
96
|
+
processId: bundle.inputData.workflowId,
|
|
97
|
+
phaseId: bundle.inputData.phaseId,
|
|
98
|
+
fields: bundle.inputData.fields
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
return response.data;
|
|
102
|
+
};
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Update Action
|
|
106
|
+
```javascript
|
|
107
|
+
const perform = async (z, bundle) => {
|
|
108
|
+
const response = await z.request({
|
|
109
|
+
method: 'PUT',
|
|
110
|
+
url: `https://api.hailer.com/v3/activity/${bundle.inputData.activityId}`,
|
|
111
|
+
body: {
|
|
112
|
+
fields: bundle.inputData.fields
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return response.data;
|
|
116
|
+
};
|
|
117
|
+
```
|
|
118
|
+
</action-types>
|
|
119
|
+
|
|
120
|
+
<authentication>
|
|
121
|
+
```javascript
|
|
122
|
+
// API Key authentication
|
|
123
|
+
const authentication = {
|
|
124
|
+
type: 'custom',
|
|
125
|
+
fields: [
|
|
126
|
+
{ key: 'apiKey', label: 'API Key', required: true }
|
|
127
|
+
],
|
|
128
|
+
test: async (z, bundle) => {
|
|
129
|
+
const response = await z.request({
|
|
130
|
+
url: 'https://api.hailer.com/v3/user/me',
|
|
131
|
+
headers: { Authorization: `Bearer ${bundle.authData.apiKey}` }
|
|
132
|
+
});
|
|
133
|
+
return response.data;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
```
|
|
137
|
+
</authentication>
|
|
138
|
+
|
|
139
|
+
<protocol>
|
|
140
|
+
Input: JSON task spec
|
|
141
|
+
Output: JSON only
|
|
142
|
+
Schema: {
|
|
143
|
+
"status": "success|error|need_example",
|
|
144
|
+
"result": {
|
|
145
|
+
"trigger_created": bool,
|
|
146
|
+
"action_created": bool,
|
|
147
|
+
"trigger_type": "polling|instant",
|
|
148
|
+
"files_created": [],
|
|
149
|
+
"zap_json_path": "path/to/zap.json" // When creating exportable zap
|
|
150
|
+
},
|
|
151
|
+
"summary": "max 50 chars"
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
**When creating Zap JSON:**
|
|
155
|
+
1. Get IDs from Kenji first (workflow, phase, field, team IDs)
|
|
156
|
+
2. Load `zapier-hailer-patterns` skill for JSON structure
|
|
157
|
+
3. Write JSON to `automations/` folder in project
|
|
158
|
+
4. Include annotated .md file explaining the zap
|
|
159
|
+
</protocol>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ragnar
|
|
3
|
+
mcpServers: [vipunen]
|
|
4
|
+
model: inherit
|
|
5
|
+
color: cyan
|
|
6
|
+
description: |
|
|
7
|
+
Documents knowledge to the Vipunen knowledge base. Use when significant work
|
|
8
|
+
was done and the knowledge should be preserved for future sessions.
|
|
9
|
+
|
|
10
|
+
<example>
|
|
11
|
+
Context: User wants to add new documentation to the knowledge base.
|
|
12
|
+
user: "prepare and ingest the new API docs"
|
|
13
|
+
assistant: "I'll have ragnar chunk the docs, ingest into Weaviate, and validate retrieval."
|
|
14
|
+
<commentary>
|
|
15
|
+
Ragnar handles the full prepare → ingest → validate pipeline.
|
|
16
|
+
</commentary>
|
|
17
|
+
</example>
|
|
18
|
+
|
|
19
|
+
<example>
|
|
20
|
+
Context: Stop hook fired, session produced knowledge worth preserving.
|
|
21
|
+
user: "document the auth flow we just built"
|
|
22
|
+
assistant: "I'll spawn ragnar to write that to the knowledge base."
|
|
23
|
+
<commentary>
|
|
24
|
+
Ragnar writes focused chunks from session discoveries.
|
|
25
|
+
</commentary>
|
|
26
|
+
</example>
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
You are the knowledge curator. Your job is to document important knowledge into Vipunen (the shared RAG knowledge base backed by Weaviate).
|
|
30
|
+
|
|
31
|
+
## Your Role
|
|
32
|
+
|
|
33
|
+
When spawned, you'll receive a prompt describing what knowledge to document and which collection/scope to target. Your job:
|
|
34
|
+
1. Understand what was learned/built/decided
|
|
35
|
+
2. Check if Vipunen already has this knowledge (dedup)
|
|
36
|
+
3. Write well-structured chunks via `weaviate-insert-one`
|
|
37
|
+
|
|
38
|
+
## How to Write Chunks
|
|
39
|
+
|
|
40
|
+
The spawning agent should tell you the collection and scope. If not specified, ask.
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
collection: "<collection from prompt>"
|
|
44
|
+
properties: {
|
|
45
|
+
"scope": "<scope from prompt>",
|
|
46
|
+
"topic": "functional-area",
|
|
47
|
+
"title": "Descriptive searchable title",
|
|
48
|
+
"content": "Self-contained text, 300-2000 chars",
|
|
49
|
+
"source_file": "path/to/relevant/file",
|
|
50
|
+
"source_section": "Heading > Subheading",
|
|
51
|
+
"doc_type": "reference|tutorial|api|conceptual|configuration",
|
|
52
|
+
"tags": "comma, separated, keywords",
|
|
53
|
+
"chunk_index": 0,
|
|
54
|
+
"total_chunks": 1,
|
|
55
|
+
"created_by": "<scope>/ragnar",
|
|
56
|
+
"verified_by": null
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Rules
|
|
61
|
+
|
|
62
|
+
- **Always dedup first** — query Vipunen with your intended title before inserting
|
|
63
|
+
- **Self-contained** — each chunk must make sense on its own
|
|
64
|
+
- **300-2000 chars** — not too short, not too long
|
|
65
|
+
- **Tags are strings** — comma-separated, NOT arrays
|
|
66
|
+
- **Be selective** — only document what genuinely helps future sessions
|
|
67
|
+
- **No speculation** — only document what actually happened or was decided
|
|
68
|
+
- **doc_type accuracy** — use `api` for endpoints, `reference` for schemas, `conceptual` for architecture, `configuration` for env/config, `tutorial` for procedures
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Design and build a Hailer app with UI Designer and Giuseppe
|
|
3
|
+
argument-hint: "app description"
|
|
4
|
+
allowed-tools: Task, Bash, Read
|
|
5
|
+
---
|
|
6
|
+
# App Squad
|
|
7
|
+
|
|
8
|
+
Sequential pipeline with data discovery, design, build, and test loop.
|
|
9
|
+
|
|
10
|
+
**Agents:**
|
|
11
|
+
1. **Kenji** - Discovers real workflow/insight schemas, field IDs, column names
|
|
12
|
+
2. **UI Designer** - Creates design spec (layout, components, aesthetic direction)
|
|
13
|
+
3. **Giuseppe** - Builds the app from the design spec + real schema data
|
|
14
|
+
4. **Tanya** - Build verification and tests (loop trigger)
|
|
15
|
+
|
|
16
|
+
**Goal:** $ARGUMENTS
|
|
17
|
+
|
|
18
|
+
## Protocol
|
|
19
|
+
|
|
20
|
+
### Step 1: Gather Context
|
|
21
|
+
|
|
22
|
+
Before spawning agents, determine:
|
|
23
|
+
- Does `workspace/` exist? If yes, this is a Hailer project.
|
|
24
|
+
- Does `apps/` directory exist? Create if needed.
|
|
25
|
+
- What workflows/data will the app use?
|
|
26
|
+
|
|
27
|
+
If context is unclear, use AskUserQuestion:
|
|
28
|
+
- What data should the app display?
|
|
29
|
+
- Authenticated or public app?
|
|
30
|
+
- Any specific layout preferences?
|
|
31
|
+
|
|
32
|
+
### Step 2: Data Discovery (Kenji)
|
|
33
|
+
|
|
34
|
+
**CRITICAL: Giuseppe MUST NOT guess IDs or column names.** Kenji looks them up first.
|
|
35
|
+
|
|
36
|
+
Spawn Kenji to discover the actual schema data the app will need:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Task(subagent_type="agent-kenji-data-reader", prompt='{"task":"app_data_discovery","description":"Look up all schema data needed for this app: $ARGUMENTS","gather":["workflow IDs and names","field IDs, labels, and types for each workflow","phase IDs and names","insight IDs and their column names (if the app uses insights)","any ActivityLink field targets"],"output":"Return a structured JSON with all IDs, field definitions, insight columns, and phase maps. This will be passed directly to the app builder."}')
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Wait for result. Save the **schema data** output - this is passed to both UI Designer and Giuseppe.
|
|
43
|
+
|
|
44
|
+
### Step 3: Design (UI Designer)
|
|
45
|
+
|
|
46
|
+
Spawn UI Designer with the schema data so it knows what real fields/columns exist:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Task(subagent_type="agent-ui-designer", prompt="Design a Hailer app: $ARGUMENTS.\n\nAvailable data schema:\n[PASTE KENJI'S SCHEMA OUTPUT]\n\nOutput a design spec with: tone, signature element, layout structure, key components, and data flow. Reference actual field IDs and column names from the schema. Format as structured JSON that Giuseppe can consume.")
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Wait for result. Save the design spec output.
|
|
53
|
+
|
|
54
|
+
### Step 4: Build-Test Loop
|
|
55
|
+
|
|
56
|
+
**Set:** `iteration = 1`
|
|
57
|
+
|
|
58
|
+
#### Step 4a: Giuseppe (Build)
|
|
59
|
+
|
|
60
|
+
**Before spawning Giuseppe, enable builder mode:**
|
|
61
|
+
```
|
|
62
|
+
Bash: node .claude/hooks/app-edit-guard.cjs --agent-on
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Spawn Giuseppe with BOTH the design spec AND the schema data:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
Task(subagent_type="agent-giuseppe-app-builder", prompt="Build this Hailer app using the following design spec and schema data:\n\n## Design Spec\n[PASTE FULL DESIGN SPEC FROM STEP 3]\n\n## Schema Data (from Kenji - use these EXACT IDs)\nSchema data from Kenji: [PASTE KENJI'S SCHEMA OUTPUT FROM STEP 2 - Kenji already ran in Step 2 and returned all IDs. The orchestrator doesn't need to read workspace/ directly.]\n\nApp goal: $ARGUMENTS\n\n[IF iteration > 1: Previous build failed. Here are the errors to fix:\n[PASTE TANYA'S BUILD/TEST ERRORS]\nFix these specific issues while keeping the rest of the app intact.]\n\nIMPORTANT: Use the EXACT field IDs, workflow IDs, insight IDs, and column names from the schema data above. Do NOT guess or invent any IDs.\n\nFollow the design spec for layout, components, and aesthetic. Use @hailer/app-sdk with Chakra UI and Hailer Design System.")
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**After Giuseppe completes, disable builder mode:**
|
|
72
|
+
```
|
|
73
|
+
Bash: node .claude/hooks/app-edit-guard.cjs --agent-off
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### Step 4b: Tanya (Build Verification)
|
|
77
|
+
|
|
78
|
+
Spawn Tanya to verify the build:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
Task(subagent_type="agent-tanya-test-runner", prompt="Verify the app build for: $ARGUMENTS.\n\nRun:\n1. TypeScript compilation (tsc --noEmit)\n2. Build (npm run build)\n3. Any existing tests (npm test if configured)\n\nReport: build pass/fail, type errors, test results.")
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**If build PASSES:** proceed to Step 5 (report).
|
|
85
|
+
|
|
86
|
+
**If build FAILS:**
|
|
87
|
+
- Classify errors:
|
|
88
|
+
- **Code-fixable** (type errors, missing imports, wrong API usage, JSX issues): Giuseppe can handle these
|
|
89
|
+
- **Infrastructure** (missing dependency/package, wrong Node version, environment config, missing workspace data): escalate immediately to user
|
|
90
|
+
- If only infrastructure errors: skip to Step 5 with clear explanation of what the user needs to fix
|
|
91
|
+
- If code-fixable errors AND `iteration < 3`: increment iteration, go back to **Step 4a** with Tanya's error output
|
|
92
|
+
- If `iteration >= 3`: escalate to user with the remaining errors (see Step 5)
|
|
93
|
+
|
|
94
|
+
### Step 5: Report
|
|
95
|
+
|
|
96
|
+
```markdown
|
|
97
|
+
## App Squad Complete
|
|
98
|
+
|
|
99
|
+
### Loop Summary
|
|
100
|
+
- Build iterations: [count] of 3 max
|
|
101
|
+
- Final build status: PASS / FAIL (escalated)
|
|
102
|
+
|
|
103
|
+
### Design (UI Designer)
|
|
104
|
+
- Tone: [from spec]
|
|
105
|
+
- Signature element: [from spec]
|
|
106
|
+
- Components: [list]
|
|
107
|
+
|
|
108
|
+
### Build (Giuseppe)
|
|
109
|
+
- App path: [path]
|
|
110
|
+
- Build status: Pass/Fail
|
|
111
|
+
- Files created: [list]
|
|
112
|
+
- [If multiple iterations: summary of what was fixed each round]
|
|
113
|
+
|
|
114
|
+
### Verification (Tanya)
|
|
115
|
+
- TypeScript: Pass/Fail
|
|
116
|
+
- Build: Pass/Fail
|
|
117
|
+
- Tests: X passed, X failed
|
|
118
|
+
|
|
119
|
+
[If ESCALATED:]
|
|
120
|
+
### Remaining Build Errors
|
|
121
|
+
[List errors Giuseppe couldn't resolve in 3 attempts]
|
|
122
|
+
- Suggested manual fixes: [hints based on error types]
|
|
123
|
+
|
|
124
|
+
### Next Steps
|
|
125
|
+
- Run `npm run dev` to test locally
|
|
126
|
+
- Test inside Hailer iframe
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Notes
|
|
130
|
+
|
|
131
|
+
- Giuseppe defaults to local dev (localhost:3000). Publishing only when user explicitly asks (loads publish-hailer-app skill)
|
|
132
|
+
- **Kenji runs FIRST** to discover all real IDs - Giuseppe must NEVER guess workflow IDs, field IDs, insight IDs, or column names
|
|
133
|
+
- If the app needs an insight for public data, mention it in the goal - Kenji will look up existing insight columns
|
|
134
|
+
- Build verification catches type errors and compilation issues before the user tries to run
|
|
135
|
+
- Each iteration gives Giuseppe the specific errors to fix, avoiding repeated mistakes
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run parallel security and permissions audit with Svetlana, Permissions Handler, and Gunther
|
|
3
|
+
argument-hint: [files, app name, or blank for full audit]
|
|
4
|
+
allowed-tools: Task, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Audit Squad
|
|
8
|
+
|
|
9
|
+
Parallel security and permissions audit: code hardening, access control verification, and MCP tool validation.
|
|
10
|
+
|
|
11
|
+
**Agents:**
|
|
12
|
+
- **Svetlana** - Code review (hardcoded secrets, injection vulnerabilities, insecure patterns, OWASP top 10)
|
|
13
|
+
- **Permissions Handler** - Access control audit (effective permissions, team access levels, permission matrix)
|
|
14
|
+
- **Gunther** - MCP tools security (input validation, data exposure, security best practices)
|
|
15
|
+
|
|
16
|
+
**Target:** $ARGUMENTS (if blank, use full project scope)
|
|
17
|
+
|
|
18
|
+
**Scope options:**
|
|
19
|
+
- Specific files or directory path
|
|
20
|
+
- App name (checks that app's code and permissions)
|
|
21
|
+
- Blank for full project audit
|
|
22
|
+
|
|
23
|
+
## Protocol
|
|
24
|
+
|
|
25
|
+
### Step 1: Determine Target
|
|
26
|
+
|
|
27
|
+
If `$ARGUMENTS` has specific files/directories or app name, use those.
|
|
28
|
+
Otherwise, scope is the entire project (workspace/ + apps/ + integrations/).
|
|
29
|
+
|
|
30
|
+
If `$ARGUMENTS` contains `--code-only`:
|
|
31
|
+
- Remove flag from target
|
|
32
|
+
- Skip Permissions Handler and Gunther in Step 2
|
|
33
|
+
|
|
34
|
+
If `$ARGUMENTS` contains `--permissions-only`:
|
|
35
|
+
- Remove flag from target
|
|
36
|
+
- Skip Svetlana and Gunther in Step 2
|
|
37
|
+
|
|
38
|
+
If `$ARGUMENTS` contains `--bg`:
|
|
39
|
+
- Launch all agents in background mode
|
|
40
|
+
|
|
41
|
+
### Step 2: Launch Audit Agents in Parallel
|
|
42
|
+
|
|
43
|
+
Spawn all applicable agents simultaneously using multiple Task tool calls in a single message:
|
|
44
|
+
|
|
45
|
+
**Svetlana:**
|
|
46
|
+
```
|
|
47
|
+
Task(subagent_type="agent-svetlana-code-review", prompt="Security audit of these files: [TARGET]. Focus on: hardcoded secrets, API keys, credentials, injection vulnerabilities (SQL/XSS/Command), insecure crypto usage, missing input validation, OWASP Top 10 issues, unsafe deserialization, missing authentication/authorization checks. Return verdict (PASS/FAIL), critical count, and detailed findings per file.")
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Permissions Handler:**
|
|
51
|
+
```
|
|
52
|
+
Task(subagent_type="agent-permissions-handler", prompt="Audit access control for the entire project. Map effective permissions: who has access to which apps, which teams have what access levels, which users are admins, workspace-wide versus app-specific permissions. Produce a permission matrix showing [User/Team] → [App] → [Access Level]. Flag any excessive or unclear permissions.")
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Gunther:**
|
|
56
|
+
```
|
|
57
|
+
Task(subagent_type="agent-gunther-mcp-tools", prompt="Security audit of custom MCP tools (if any exist in src/mcp/tools/). Verify: input validation with Zod schemas, no unintended data exposure, proper error handling, rate limiting awareness, secure defaults. Report security posture per tool. If no custom tools exist, report that.")
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Step 3: Categorize and Aggregate Results
|
|
61
|
+
|
|
62
|
+
Collect results from all agents. Categorize findings into three tiers:
|
|
63
|
+
|
|
64
|
+
**CRITICAL:**
|
|
65
|
+
- Hardcoded secrets/credentials
|
|
66
|
+
- SQL injection, XSS, command injection vulnerabilities
|
|
67
|
+
- Authentication/authorization bypasses
|
|
68
|
+
- Excessive uncontrolled permissions
|
|
69
|
+
- MCP tools exposing sensitive data
|
|
70
|
+
|
|
71
|
+
**WARNING:**
|
|
72
|
+
- Weak crypto usage
|
|
73
|
+
- Missing input sanitization
|
|
74
|
+
- Unclear permission delegations
|
|
75
|
+
- Unvalidated MCP tool inputs
|
|
76
|
+
- Missing rate limiting on tools
|
|
77
|
+
|
|
78
|
+
**INFO:**
|
|
79
|
+
- Best practice improvements
|
|
80
|
+
- Code hardening suggestions
|
|
81
|
+
- Permission clarity recommendations
|
|
82
|
+
|
|
83
|
+
### Step 4: Report
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
## Audit Squad Report
|
|
87
|
+
|
|
88
|
+
### Scope
|
|
89
|
+
[What was audited]
|
|
90
|
+
|
|
91
|
+
### Overall Security Posture
|
|
92
|
+
[Rating: PASS / WARNING / CRITICAL]
|
|
93
|
+
- Critical findings: X
|
|
94
|
+
- Warnings: X
|
|
95
|
+
- Info items: X
|
|
96
|
+
|
|
97
|
+
### Svetlana (Code Security Review)
|
|
98
|
+
**Verdict:** PASS / FAIL / WARNINGS
|
|
99
|
+
- Critical: X [list]
|
|
100
|
+
- Warnings: X [list]
|
|
101
|
+
- Info: X [list]
|
|
102
|
+
- Files affected: [grouped summary]
|
|
103
|
+
|
|
104
|
+
### Permissions Handler (Access Control)
|
|
105
|
+
**Matrix Status:** [OK / EXCESSIVE / UNCLEAR]
|
|
106
|
+
- Total apps: X
|
|
107
|
+
- Total teams: X
|
|
108
|
+
- Users with admin access: X
|
|
109
|
+
- Flagged permissions: [list]
|
|
110
|
+
- [Permission matrix if findings exist]
|
|
111
|
+
|
|
112
|
+
### Gunther (MCP Tools Security)
|
|
113
|
+
**Status:** [No tools / PASS / WARNINGS / CRITICAL]
|
|
114
|
+
[If tools exist:]
|
|
115
|
+
- Tools audited: X
|
|
116
|
+
- Input validation issues: X
|
|
117
|
+
- Data exposure risks: X
|
|
118
|
+
- Best practice gaps: X
|
|
119
|
+
|
|
120
|
+
### Findings by Severity
|
|
121
|
+
|
|
122
|
+
#### CRITICAL (Require Immediate Action)
|
|
123
|
+
[List all critical findings with file/tool and remediation steps]
|
|
124
|
+
|
|
125
|
+
#### WARNING (Address in Next Sprint)
|
|
126
|
+
[List all warnings with context]
|
|
127
|
+
|
|
128
|
+
#### INFO (Consider for Hardening)
|
|
129
|
+
[List informational recommendations]
|
|
130
|
+
|
|
131
|
+
### Remediation Checklist
|
|
132
|
+
- [ ] [Critical issue 1]: [Action]
|
|
133
|
+
- [ ] [Critical issue 2]: [Action]
|
|
134
|
+
- [ ] [Warning 1]: [Action]
|
|
135
|
+
|
|
136
|
+
### Summary
|
|
137
|
+
[1-2 sentence overall assessment of security posture and next steps]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
If any agent fails or times out, report partial results from successful agents, note which failed, and offer to re-run individually.
|
|
141
|
+
|
|
142
|
+
## Options
|
|
143
|
+
|
|
144
|
+
| Flag | Effect |
|
|
145
|
+
|------|--------|
|
|
146
|
+
| `--code-only` | Skip permissions and MCP tools (code review only, faster) |
|
|
147
|
+
| `--permissions-only` | Skip code review and MCP tools (permissions matrix only) |
|
|
148
|
+
| `--bg` | Run all agents in background mode |
|
|
149
|
+
|
|
150
|
+
If `--bg` is present, launch all agents with `run_in_background: true` and tell the user they'll be notified when complete.
|
|
151
|
+
|
|
152
|
+
## Notes
|
|
153
|
+
|
|
154
|
+
- Default scope is full project if no arguments provided
|
|
155
|
+
- Svetlana focuses on secrets and injection attacks; general code quality is separate (/review-squad)
|
|
156
|
+
- Permissions Handler is organization-wide - includes team and app-level settings
|
|
157
|
+
- Gunther only validates if custom MCP tools exist in the project
|
|
158
|
+
- Critical findings should block deployment; warnings should be tracked for next sprint
|