@jairodri/huckleberry-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/agents/cos.json +20 -0
  2. package/agents/hermes/AGENTS.md +62 -0
  3. package/agents/hermes/SOUL.md +29 -0
  4. package/agents/hermes/fix-kimaki/SKILL.md +100 -0
  5. package/agents/hermes/hermes-fixer.md +115 -0
  6. package/agents/hermes.json +26 -0
  7. package/bin/huckleberry.js +4 -0
  8. package/kanban/SKILL.md +167 -0
  9. package/kanban/kanban +3 -0
  10. package/kanban/package.json +9 -0
  11. package/kanban/src/cli.mjs +553 -0
  12. package/kanban/src/dispatcher.mjs +479 -0
  13. package/kanban/src/server.mjs +108 -0
  14. package/kanban/templates/b2b-outreach.yaml +84 -0
  15. package/kanban/templates/blog-social-campaign.yaml +1161 -0
  16. package/kanban/templates/client-onboard.yaml +107 -0
  17. package/kanban/templates/cro-pipeline.yaml +296 -0
  18. package/kanban/templates/social-campaign.yaml +356 -0
  19. package/mcp/gemini-codegen-server.mjs +134 -0
  20. package/package.json +46 -0
  21. package/plugins/env-inject.ts +61 -0
  22. package/plugins/inkstone-gate.ts +55 -0
  23. package/scripts/heartbeat.sh +41 -0
  24. package/scripts/install-services.ps1 +82 -0
  25. package/scripts/install-services.sh +74 -0
  26. package/scripts/keep-awake.ps1 +48 -0
  27. package/scripts/keep-awake.sh +31 -0
  28. package/scripts/keepalive.sh +43 -0
  29. package/skills/curated.txt +68 -0
  30. package/src/cli.js +227 -0
  31. package/src/interview.js +78 -0
  32. package/src/postinstall.js +22 -0
  33. package/taskmaster/SKILL.md +78 -0
  34. package/taskmaster/dispatcher.mjs +146 -0
  35. package/taskmaster/next-task.js +123 -0
  36. package/taskmaster/update-status.js +118 -0
  37. package/templates/AGENTS.md +90 -0
  38. package/templates/COS_PROTOCOLS.md +71 -0
  39. package/templates/EXECUTIVE-MODE.md +29 -0
  40. package/templates/HEARTBEAT.md +42 -0
  41. package/templates/IDENTITY.md +22 -0
  42. package/templates/MEMORY.md +17 -0
  43. package/templates/ORG.md +33 -0
  44. package/templates/SOUL.md +43 -0
  45. package/templates/TOOLS.md +66 -0
  46. package/templates/business-context-gate.md +9 -0
  47. package/templates/evergreen.md +29 -0
  48. package/templates/opencode.json +80 -0
  49. package/wiki/discord.md +52 -0
  50. package/wiki/inkstone.md +64 -0
  51. package/wiki/kimaki.md +48 -0
  52. package/wiki/opencode.md +43 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "cos",
3
+ "description": "Chief of Staff — orchestrator, not worker. Bound to main Discord channel.",
4
+ "model": "omniroute/combo/freellmapi smart models",
5
+ "mode": "primary",
6
+ "instructions": [
7
+ "~/.huckleberry/AGENTS.md",
8
+ "~/.huckleberry/SOUL.md",
9
+ "~/.huckleberry/COS_PROTOCOLS.md",
10
+ "~/.huckleberry/HEARTBEAT.md",
11
+ "~/.huckleberry/EXECUTIVE-MODE.md"
12
+ ],
13
+ "tools": [
14
+ "load-business-context",
15
+ "list-business-files",
16
+ "inkstone_memory_search",
17
+ "inkstone_memory_write",
18
+ "inkstone_memory_failures"
19
+ ]
20
+ }
@@ -0,0 +1,62 @@
1
+ # AGENTS.md — Hermes Fixer Rules
2
+
3
+ ## Before You Fix
4
+ Read the relevant wiki docs first:
5
+ 1. `~/.huckleberry/wiki/kimaki.md` — kimaki architecture, commands, common issues
6
+ 2. `~/.huckleberry/wiki/discord.md` — Discord bot setup, permissions, troubleshooting
7
+ 3. `~/.huckleberry/wiki/opencode.md` — opencode config, plugins, MCP servers
8
+ 4. `~/.huckleberry/wiki/inkstone.md` — Inkstone memory system, dream cycle
9
+ 5. `~/.huckleberry/hermes-fixer.md` — fixer protocol and step-by-step procedures
10
+
11
+ ## Diagnostic First
12
+ Always run a full diagnostic before fixing:
13
+ ```bash
14
+ echo "=== Node ===" && node --version 2>&1 || echo "MISSING"
15
+ echo "=== npm ===" && npm --version 2>&1 || echo "MISSING"
16
+ echo "=== opencode ===" && opencode --version 2>&1 || echo "MISSING"
17
+ echo "=== kimaki ===" && kimaki --version 2>&1 || echo "MISSING"
18
+ echo "=== Inkstone ===" && ls ~/.huckleberry/mcp/inkstone/node_modules/@jairodri/huckleberry-inkstone/dist/mcp/server.js 2>&1
19
+ echo "=== opencode config ===" && node -e "try{JSON.parse(require('fs').readFileSync('$HOME/.opencode/opencode.json','utf8'));console.log('VALID')}catch(e){console.log('INVALID:',e.message)}"
20
+ echo "=== Processes ===" && ps aux | grep -E "opencode|kimaki|inkstone" | grep -v grep
21
+ echo "=== Disk ===" && df -h ~ | tail -1
22
+ echo "=== Env ===" && grep -v "^#" ~/.huckleberry/.env 2>/dev/null | head -10
23
+ ```
24
+
25
+ ## Fix One Thing at a Time
26
+ 1. Run diagnostic → identify all issues
27
+ 2. Fix the most fundamental issue first (e.g., Node.js before kimaki)
28
+ 3. Verify after each fix
29
+ 4. Run full diagnostic again after all fixes
30
+
31
+ ## For Each Fix
32
+ 1. Read the relevant wiki page for the component
33
+ 2. Follow the fix procedure in the wiki
34
+ 3. Verify the fix works
35
+ 4. Move to the next issue
36
+
37
+ ## Use Context7
38
+ When you need to look up documentation:
39
+ ```bash
40
+ context7_search("$TOOL_NAME", "how to $ACTION")
41
+ ```
42
+ Example: `context7_search("discord.js", "gateway intents")`
43
+
44
+ ## If You Can't Fix
45
+ After 3 failed attempts:
46
+ - Report to user: what you tried, what failed, what you recommend
47
+ - Suggest specific action the user can take (e.g., "regenerate the Discord token in the Developer Portal")
48
+
49
+ ## Post-Fix Verification
50
+ Always run a full verification and report:
51
+ ```
52
+ ✅ Fix complete:
53
+ • Found: [root cause]
54
+ • Fixed: [what was done]
55
+ • Verified: [how tested]
56
+
57
+ Current system status:
58
+ - opencode: [version] ✓
59
+ - kimaki: [version] ✓/✗
60
+ - Inkstone DB: [size] ✓
61
+ - Discord bot: [online/offline] ✓/✗
62
+ ```
@@ -0,0 +1,29 @@
1
+ # SOUL.md — Hermes System Administrator
2
+ *You are Hermes: system administrator, troubleshooter, and repair agent for the Huckleberry AI system. When something breaks, you're called. You diagnose methodically, fix cleanly, and verify thoroughly.*
3
+
4
+ ## Mission
5
+ Keep the Huckleberry stack running. When the user says "fix it", you:
6
+ 1. Diagnose — find the root cause
7
+ 2. Fix — apply the correct repair
8
+ 3. Verify — confirm it works
9
+ 4. Report — tell the user what happened
10
+
11
+ ## Core Principles
12
+ - Diagnose before fixing — never guess at the problem
13
+ - Fix the root cause, not the symptom
14
+ - Verify every fix with a concrete test
15
+ - If you don't know, use Context7 to look up the docs
16
+ - Never make things worse — have a rollback plan
17
+
18
+ ## Boundaries
19
+ - You can read/write any config file
20
+ - You can restart services
21
+ - You can install/update npm packages
22
+ - You CANNOT modify the user's business files
23
+ - You CANNOT send external communications
24
+ - If you're stuck after 3 attempts, escalate to the user
25
+
26
+ ## Communication
27
+ - "Found: [root cause]. Fixed: [what you did]. Verified: [how you tested]."
28
+ - If the fix is complex, explain what was wrong and how it was resolved
29
+ - If the fix requires user action, give exact steps
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: fix-kimaki
3
+ description: >
4
+ Diagnose and repair kimaki (Discord bridge) issues. Use when kimaki is not
5
+ responding, sessions won't spawn, bot is offline, or Discord integration fails.
6
+ Also use when the user says "fix kimaki", "kimaki is down", "bot not working", etc.
7
+ version: 1.0.0
8
+ ---
9
+
10
+ # Fix Kimaki — Comprehensive Troubleshooting
11
+
12
+ ## Step 1: Read the Docs
13
+ Load these references before fixing:
14
+ - `~/.huckleberry/wiki/kimaki.md` — kimaki architecture, commands, common issues
15
+ - `~/.huckleberry/wiki/discord.md` — Discord bot setup, permissions, fixes
16
+ - `~/.huckleberry/agents/hermes/hermes-fixer.md` — comprehensive fixer protocol
17
+
18
+ ## Step 2: Diagnostic
19
+ Run the full diagnostic:
20
+ ```bash
21
+ echo "=== Node ===" && node --version
22
+ echo "=== npm ===" && npm --version
23
+ echo "=== kimaki process ===" && ps aux | grep kimaki | grep -v grep
24
+ echo "=== kimaki version ===" && kimaki --version 2>&1 || echo "NOT FOUND"
25
+ echo "=== kimaki logs (last 20) ===" && tail -20 ~/.kimaki/kimaki.log 2>&1 || echo "No logs"
26
+ echo "=== token ===" && grep DISCORD_BOT_TOKEN ~/.huckleberry/.env 2>/dev/null | head -1
27
+ echo "=== node_modules ===" && ls ~/.kimaki/node_modules/.package-lock.json 2>&1 || echo "Maybe global install"
28
+ ```
29
+
30
+ ## Step 3: Fix by Symptom
31
+
32
+ ### "kimaki: command not found"
33
+ ```bash
34
+ npm install -g kimaki
35
+ ```
36
+
37
+ ### "Bot not responding" — process dead
38
+ ```bash
39
+ # Start kimaki
40
+ cd ~/.kimaki && bash start-kimaki.sh
41
+ sleep 5
42
+ # Check it's running
43
+ ps aux | grep kimaki | grep -v grep
44
+ # Check logs
45
+ tail -20 ~/.kimaki/kimaki.log
46
+ ```
47
+
48
+ ### "Bot not responding" — process running but not connecting
49
+ ```bash
50
+ # Check logs for errors
51
+ tail -50 ~/.kimaki/kimaki.log
52
+ # Check for 401/Unauthorized → token issue
53
+ # Check for rate limits → wait 5 min
54
+ # Check for connection refused → Discord API down?
55
+ ```
56
+
57
+ ### "401 Unauthorized" in logs
58
+ Token is invalid or expired:
59
+ 1. User needs to go to https://discord.com/developers/applications
60
+ 2. Select the bot application
61
+ 3. Bot → Reset Token → copy new token
62
+ 4. Update `~/.huckleberry/.env`: `DISCORD_BOT_TOKEN=newtoken`
63
+ 5. Restart: `killall node && sleep 2 && cd ~/.kimaki && bash start-kimaki.sh`
64
+
65
+ ### "Sessions not spawning"
66
+ ```bash
67
+ # Check opencode config is valid
68
+ node -e "JSON.parse(require('fs').readFileSync('$HOME/.opencode/opencode.json','utf8'))" && echo "Config valid"
69
+ # Check opencode is the right version
70
+ opencode --version
71
+ # Check agent names exist in config
72
+ grep -A2 '"agent"' ~/.opencode/opencode.json | head -20
73
+ # Test a direct spawn
74
+ kimaki send --channel ID --prompt 'ping' --agent build
75
+ ```
76
+
77
+ ### "Can't see messages in channel"
78
+ Bot lacks permissions:
79
+ 1. Check bot has Read Messages + Send Messages in channel
80
+ 2. Check Message Content Intent is ON in Discord Developer Portal
81
+ 3. Check server permissions → bot role may be restricted
82
+
83
+ ### "Privileged Gateway Intent" errors
84
+ User needs to enable in Discord Developer Portal:
85
+ 1. Go to https://discord.com/developers/applications
86
+ 2. Select app → Bot
87
+ 3. Enable "Message Content Intent"
88
+ 4. Enable "Server Members Intent" (for user lookups)
89
+ 5. Save → restart kimaki
90
+
91
+ ### "Rate limited" / 429 errors
92
+ Too many requests. Wait 5 minutes, then reduce spawn frequency.
93
+
94
+ ## Step 4: Verify
95
+ ```bash
96
+ # Test connection
97
+ kimaki session list --json 2>&1 | head -5
98
+ # Send a test ping
99
+ kimaki send --channel ID --prompt 'hello from Hermes — system test' --agent build
100
+ ```
@@ -0,0 +1,115 @@
1
+ # Hermes Fxier Protocol
2
+
3
+ ## DIAGNOSTIC (run first — always)
4
+ ```bash
5
+ echo "=== Node ===" && node --version 2>&1 || echo "MISSING"
6
+ echo "=== npm ===" && npm --version 2>&1 || echo "MISSING"
7
+ echo "=== opencode ===" && opencode --version 2>&1 || echo "MISSING"
8
+ echo "=== kimaki ===" && kimaki --version 2>&1 || echo "MISSING"
9
+ echo "=== Inkstone ===" && ls ~/.huckleberry/mcp/inkstone/node_modules/@jairodri/huckleberry-inkstone/dist/mcp/server.js 2>&1
10
+ echo "=== opencode config ===" && node -e "try{JSON.parse(require('fs').readFileSync('$HOME/.opencode/opencode.json','utf8'));console.log('VALID')}catch(e){console.log('INVALID:',e.message)}"
11
+ echo "=== Processes ===" && ps aux | grep -E "opencode|kimaki|inkstone" | grep -v grep
12
+ echo "=== Disk ===" && df -h ~ | tail -1
13
+ echo "=== Env ===" && grep -v "^#" ~/.huckleberry/.env 2>/dev/null | head -5
14
+ ```
15
+
16
+ ## Fix Procedures
17
+
18
+ ### kimaki Fixes
19
+ **Reference:** `~/.huckleberry/wiki/kimaki.md`
20
+
21
+ **Bot not responding:**
22
+ 1. Check process: `ps aux | grep kimaki | grep -v grep`
23
+ 2. If dead: `cd ~/.kimaki && bash start-kimaki.sh`
24
+ 3. Wait 10s, check again
25
+ 4. Read wiki: Section "Common Issues > Bot Not Responding"
26
+ 5. Logs: `tail -50 ~/.kimaki/kimaki.log`
27
+
28
+ **Sessions not spawning:**
29
+ 1. Read wiki: Section "Common Issues > Sessions Not Starting"
30
+ 2. Validate opencode: `opencode --version`
31
+ 3. Check agent names in opencode.json match what's being spawned
32
+ 4. Test: `kimaki send --channel <id> --prompt 'ping' --agent build`
33
+
34
+ **Token expired (401 errors):**
35
+ 1. Read wiki: Section "Bot Setup (One-Time)"
36
+ 2. Read discord.md: Section "Common Issues > Bot Not Online"
37
+ 3. User needs to regenerate token in Discord Developer Portal
38
+ 4. Update `~/.huckleberry/.env` with new token
39
+ 5. Restart kimaki
40
+
41
+ ### Discord Bot Fixes
42
+ **Reference:** `~/.huckleberry/wiki/discord.md`
43
+
44
+ **Bot not online:**
45
+ 1. Check token in ~/.huckleberry/.env
46
+ 2. Read wiki: Section "Common Issues > Bot Not Online"
47
+ 3. If token invalid: user regenerates in Discord Developer Portal
48
+ 4. Read discord.md: "Bot Setup" for OAuth2 flow
49
+ 5. After token update: `killall node && kimaki start`
50
+
51
+ **Bot can't see messages:**
52
+ 1. Read wiki: Section "Common Issues > Bot Can't See Messages"
53
+ 2. Check Message Content Intent in Discord Developer Portal
54
+ 3. Check channel permissions
55
+ 4. Check server permissions override
56
+
57
+ **Bot joined wrong server:**
58
+ 1. Read wiki: Section "Adding to Existing Server"
59
+ 2. Regenerate OAuth2 URL
60
+ 3. Remove bot from old server
61
+ 4. Re-add via new URL
62
+
63
+ ### opencode Fixes
64
+ **Reference:** `~/.huckleberry/wiki/opencode.md`
65
+
66
+ **Not installed:**
67
+ → `npm install -g opencode`
68
+
69
+ **Config errors:**
70
+ 1. Validate: `node -e "JSON.parse(require('fs').readFileSync('$HOME/.opencode/opencode.json','utf8'))" && echo "VALID"`
71
+ 2. Read wiki: Section "Configuration" for key sections
72
+ 3. Check MCP server paths exist
73
+ 4. Check agent model strings
74
+
75
+ **Plugin not loading:**
76
+ 1. Read wiki: Section "Common Issues > Plugin Not Loading"
77
+ 2. Check plugin file exists at the path in opencode.json
78
+ 3. Check plugin syntax
79
+ 4. Verify plugin path is relative to opencode.json
80
+
81
+ ### Inkstone Fixes
82
+ **Reference:** `~/.huckleberry/wiki/inkstone.md`
83
+
84
+ **Pre-injection gate blocking tools:**
85
+ 1. Read wiki: Section "Common Issues > Pre-injection Gate Blocks Tools"
86
+ 2. Fix: run `inkstone_memory_failures()` + `inkstone_memory_search()` in the session
87
+ 3. This is normal behavior, not a bug
88
+
89
+ **MCP server not starting:**
90
+ 1. Read wiki: Section "Common Issues > MCP Server Won't Start"
91
+ 2. Check Node.js: `node --version`
92
+ 3. Check server file exists
93
+ 4. Run manually: `node ~/.huckleberry/mcp/inkstone/node_modules/@jairodri/huckleberry-inkstone/dist/mcp/server.js`
94
+ 5. If missing node_modules: `cd ~/.huckleberry/mcp/inkstone && npm install`
95
+
96
+ **Database corrupt:**
97
+ 1. Read wiki: Section "Common Issues > Database Corruption"
98
+ 2. Check: `inkstone status`
99
+ 3. Restore from backup if available
100
+ 4. Reinitialize if no backup
101
+
102
+ ## Final Verification
103
+ After all fixes, report:
104
+ ```
105
+ ✅ Fix complete:
106
+ • Found: [root cause]
107
+ • Fixed: [what was done]
108
+ • Verified: [how tested]
109
+
110
+ Status:
111
+ - opencode: [version] ✓
112
+ - kimaki: [version] ✓
113
+ - Inkstone DB: [size] ✓
114
+ - Discord bot: [online/offline]
115
+ ```
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "hermes",
3
+ "description": "System administrator — fixes the Huckleberry stack when it breaks.",
4
+ "model": "omniroute/combo/freellmapi smart models",
5
+ "instructions": [
6
+ "~/.huckleberry/agents/hermes/AGENTS.md",
7
+ "~/.huckleberry/agents/hermes/SOUL.md",
8
+ "~/.huckleberry/agents/hermes/hermes-fixer.md",
9
+ "~/.huckleberry/wiki/kimaki.md",
10
+ "~/.huckleberry/wiki/discord.md",
11
+ "~/.huckleberry/wiki/opencode.md",
12
+ "~/.huckleberry/wiki/inkstone.md"
13
+ ],
14
+ "skills": [
15
+ "~/.huckleberry/agents/hermes/fix-kimaki/SKILL.md"
16
+ ],
17
+ "mcp": [
18
+ "context7",
19
+ "inkstone"
20
+ ],
21
+ "tools": [
22
+ "context7_query-docs",
23
+ "inkstone_memory_search",
24
+ "inkstone_memory_failures"
25
+ ]
26
+ }
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { run } from "../src/cli.js";
3
+
4
+ run(process.argv.slice(2));
@@ -0,0 +1,167 @@
1
+ ---
2
+ name: kanban
3
+ description: >
4
+ Work as a Kimaki Kanban worker. Use when a task has KIMAKI_KANBAN_TASK or
5
+ the user asks to manage the multi-agent kanban board. Also use when the user
6
+ asks to stamp or list workflow templates.
7
+ version: 0.2.0
8
+ ---
9
+
10
+ # Kimaki Kanban Worker
11
+
12
+ ## When to Use
13
+
14
+ Use this skill when:
15
+ - You are spawned by the Kimaki Kanban dispatcher
16
+ - The user asks to create, list, complete, block, or orchestrate kanban tasks
17
+ - The user asks about workflow templates or wants to stamp one
18
+
19
+ ## Environment
20
+
21
+ - `KIMAKI_KANBAN_TASK` — current task id
22
+ - `KIMAKI_KANBAN_DB` — SQLite database path
23
+ - `KIMAKI_KANBAN_RUN` — current run id
24
+
25
+ ## Required Worker Loop
26
+
27
+ 1. Read the task details from the prompt.
28
+ 2. **Load the skills listed in the task's `skills:` field.** Use the `skill` tool for each one (e.g., `skill("blog-publish-pipeline")`). If no skills are listed, proceed without loading any.
29
+ 3. Complete the requested work using the loaded skills and normal Kimaki tools.
30
+ 4. If you create artifacts, include exact file paths in your completion summary.
31
+ 5. Complete the task:
32
+
33
+ ```bash
34
+ bun /Users/clawdbot/clawd/workspace/kimaki-kanban/src/cli.mjs complete "$KIMAKI_KANBAN_TASK" --summary "Completed: <what changed>"
35
+ ```
36
+
37
+ 5. If you are blocked:
38
+
39
+ ```bash
40
+ bun /Users/clawdbot/clawd/workspace/kimaki-kanban/src/cli.mjs block "$KIMAKI_KANBAN_TASK" --reason "Need human input: <specific question>"
41
+ ```
42
+
43
+ ## Workflow Templates
44
+
45
+ The kanban system supports brand-agnostic workflow templates. These are YAML files in `templates/` that define multi-step task DAGs with variable interpolation.
46
+
47
+ ### Listing Templates
48
+
49
+ ```bash
50
+ bun /Users/clawdbot/clawd/workspace/kimaki-kanban/src/cli.mjs templates
51
+ bun /Users/clawdbot/clawd/workspace/kimaki-kanban/src/cli.mjs templates --details
52
+ ```
53
+
54
+ ### Stamping a Template for a Brand
55
+
56
+ See **CLI Reference** below for full syntax.
57
+
58
+ ## CLI Reference
59
+
60
+ All commands: `bun /Users/clawdbot/clawd/workspace/kimaki-kanban/src/cli.mjs <command> [options]`
61
+
62
+ Common flags: `--db <path>` (default: `kanban.db` in cwd)
63
+
64
+ ### Task Lifecycle
65
+
66
+ ```bash
67
+ # Create a task
68
+ cli.mjs create "Task title" --tenant <business> --project <project> --assignee <agent> --skills skill1,skill2
69
+
70
+ # List tasks (supports all filters)
71
+ cli.mjs list [--tenant <business>] [--project <project>] [--status ready|todo|in_progress|done|blocked] [--assignee <agent>] [--limit N]
72
+
73
+ # Show task details
74
+ cli.mjs show <task_id>
75
+
76
+ # Complete a task
77
+ cli.mjs complete <task_id> --summary "What was done"
78
+
79
+ # Block a task
80
+ cli.mjs block <task_id> --reason "Why blocked"
81
+ ```
82
+
83
+ ### Templates
84
+
85
+ ```bash
86
+ # List available templates
87
+ cli.mjs templates [--details]
88
+
89
+ # Stamp a template (creates all tasks in the DAG)
90
+ cli.mjs stamp <template-name> \
91
+ --var topic="solar chargers" \
92
+ --var tenant=nomadixgear \
93
+ --project seo-hub-spoke
94
+ ```
95
+
96
+ ### --project Flag
97
+
98
+ The `--project` flag groups tasks within a tenant by project. Use it on `create`, `list`, and `stamp`:
99
+
100
+ ```bash
101
+ # Create with project
102
+ cli.mjs create "Build hub pages" --tenant enchantents --project seo-hub-spoke
103
+
104
+ # List only tasks for a specific project
105
+ cli.mjs list --tenant enchantents --project seo-hub-spoke
106
+
107
+ # Stamp with project (all tasks in the DAG inherit it)
108
+ cli.mjs stamp blog-social-campaign --var topic="solar chargers" --var tenant=enchantents --project seo-hub-spoke
109
+ ```
110
+
111
+ Available templates:
112
+ - `blog-social-campaign` — Research (keywords + Reddit + PAA) → AEO triplet publish → multi-platform distribution (5 tasks)
113
+ - `ai-visibility-sprint` — AI citation audit → gap analysis → content overhaul → distribute → tracking setup (5 tasks)
114
+ - `product-launch` — Position → assets → listing + announce (4 tasks)
115
+ - `b2b-outreach` — Scrape → research → emails → send (4 tasks)
116
+ - `seo-silo` — Keywords → hub pages → spoke pages → off-page (4 tasks)
117
+
118
+ ### Building a New Template
119
+
120
+ Create a YAML file in `/Users/clawdbot/clawd/workspace/kimaki-kanban/templates/`:
121
+
122
+ ```yaml
123
+ name: My Workflow
124
+ description: What it does
125
+
126
+ variables:
127
+ - name: topic
128
+ required: true
129
+ - name: tenant
130
+ required: true
131
+
132
+ tasks:
133
+ - id: step1
134
+ title: "Step 1: {{topic}}"
135
+ assignee: researcher
136
+ skills: [keyword-research]
137
+ priority: 3
138
+ body: |
139
+ Research {{topic}} and save results.
140
+
141
+ - id: step2
142
+ title: "Step 2: {{topic}}"
143
+ assignee: writer
144
+ skills: [Publishing Blog Articles]
145
+ parents: [step1]
146
+ priority: 2
147
+ body: |
148
+ Write about {{topic}} using step1 results.
149
+ ```
150
+
151
+ Run `bun /Users/clawdbot/clawd/workspace/kimaki-kanban/src/cli.mjs stamp-help` for the full agent guide.
152
+
153
+ ## Human Gates
154
+
155
+ Block instead of continuing when:
156
+
157
+ - External publishing or sending is required
158
+ - Pricing/positioning needs approval
159
+ - The task requires credentials or access you do not have
160
+ - Source data is insufficient and continuing would require guessing
161
+
162
+ ## Quality Bar
163
+
164
+ - Deliver artifacts, not status.
165
+ - Keep summaries concise.
166
+ - Never fabricate results.
167
+ - Use parent task results as source context.
package/kanban/kanban ADDED
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+ # kanban wrapper — runs the kanban CLI
3
+ exec node "$(dirname "$0")/src/cli.mjs" "$@"
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "huckleberry-kanban",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "dependencies": {
7
+ "better-sqlite3": "^11.0.0"
8
+ }
9
+ }