@brianli/kimaki 0.4.72-brianli.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.js +2 -0
- package/dist/ai-tool-to-genai.js +233 -0
- package/dist/ai-tool-to-genai.test.js +267 -0
- package/dist/ai-tool.js +6 -0
- package/dist/bin.js +87 -0
- package/dist/bot-token.js +121 -0
- package/dist/bot-token.test.js +134 -0
- package/dist/channel-management.js +101 -0
- package/dist/cli-parsing.test.js +89 -0
- package/dist/cli.js +2529 -0
- package/dist/commands/abort.js +82 -0
- package/dist/commands/action-buttons.js +257 -0
- package/dist/commands/add-project.js +114 -0
- package/dist/commands/agent.js +291 -0
- package/dist/commands/ask-question.js +223 -0
- package/dist/commands/compact.js +120 -0
- package/dist/commands/context-usage.js +140 -0
- package/dist/commands/create-new-project.js +118 -0
- package/dist/commands/diff.js +128 -0
- package/dist/commands/file-upload.js +275 -0
- package/dist/commands/fork.js +217 -0
- package/dist/commands/gemini-apikey.js +70 -0
- package/dist/commands/login.js +490 -0
- package/dist/commands/mention-mode.js +51 -0
- package/dist/commands/merge-worktree.js +124 -0
- package/dist/commands/model.js +694 -0
- package/dist/commands/permissions.js +163 -0
- package/dist/commands/queue.js +217 -0
- package/dist/commands/remove-project.js +115 -0
- package/dist/commands/restart-opencode-server.js +116 -0
- package/dist/commands/resume.js +159 -0
- package/dist/commands/run-command.js +79 -0
- package/dist/commands/session-id.js +78 -0
- package/dist/commands/session.js +192 -0
- package/dist/commands/share.js +80 -0
- package/dist/commands/types.js +2 -0
- package/dist/commands/undo-redo.js +159 -0
- package/dist/commands/unset-model.js +152 -0
- package/dist/commands/upgrade.js +42 -0
- package/dist/commands/user-command.js +148 -0
- package/dist/commands/verbosity.js +60 -0
- package/dist/commands/worktree-settings.js +50 -0
- package/dist/commands/worktree.js +299 -0
- package/dist/condense-memory.js +33 -0
- package/dist/config.js +110 -0
- package/dist/database.js +1050 -0
- package/dist/db.js +159 -0
- package/dist/db.test.js +49 -0
- package/dist/discord-api.js +28 -0
- package/dist/discord-auth.js +231 -0
- package/dist/discord-auth.test.js +80 -0
- package/dist/discord-bot.js +997 -0
- package/dist/discord-utils.js +560 -0
- package/dist/discord-utils.test.js +115 -0
- package/dist/errors.js +167 -0
- package/dist/escape-backticks.test.js +429 -0
- package/dist/format-tables.js +122 -0
- package/dist/format-tables.test.js +199 -0
- package/dist/forum-sync/config.js +79 -0
- package/dist/forum-sync/discord-operations.js +154 -0
- package/dist/forum-sync/index.js +5 -0
- package/dist/forum-sync/markdown.js +117 -0
- package/dist/forum-sync/sync-to-discord.js +417 -0
- package/dist/forum-sync/sync-to-files.js +190 -0
- package/dist/forum-sync/types.js +53 -0
- package/dist/forum-sync/watchers.js +307 -0
- package/dist/gateway-consumer.js +232 -0
- package/dist/gateway-consumer.test.js +18 -0
- package/dist/genai-worker-wrapper.js +111 -0
- package/dist/genai-worker.js +311 -0
- package/dist/genai.js +232 -0
- package/dist/generated/browser.js +17 -0
- package/dist/generated/client.js +35 -0
- package/dist/generated/commonInputTypes.js +10 -0
- package/dist/generated/enums.js +30 -0
- package/dist/generated/internal/class.js +41 -0
- package/dist/generated/internal/prismaNamespace.js +239 -0
- package/dist/generated/internal/prismaNamespaceBrowser.js +209 -0
- package/dist/generated/models/bot_api_keys.js +1 -0
- package/dist/generated/models/bot_tokens.js +1 -0
- package/dist/generated/models/channel_agents.js +1 -0
- package/dist/generated/models/channel_directories.js +1 -0
- package/dist/generated/models/channel_mention_mode.js +1 -0
- package/dist/generated/models/channel_models.js +1 -0
- package/dist/generated/models/channel_verbosity.js +1 -0
- package/dist/generated/models/channel_worktrees.js +1 -0
- package/dist/generated/models/forum_sync_configs.js +1 -0
- package/dist/generated/models/global_models.js +1 -0
- package/dist/generated/models/ipc_requests.js +1 -0
- package/dist/generated/models/part_messages.js +1 -0
- package/dist/generated/models/scheduled_tasks.js +1 -0
- package/dist/generated/models/session_agents.js +1 -0
- package/dist/generated/models/session_models.js +1 -0
- package/dist/generated/models/session_start_sources.js +1 -0
- package/dist/generated/models/thread_sessions.js +1 -0
- package/dist/generated/models/thread_worktrees.js +1 -0
- package/dist/generated/models.js +1 -0
- package/dist/heap-monitor.js +95 -0
- package/dist/hrana-server.js +416 -0
- package/dist/hrana-server.test.js +368 -0
- package/dist/image-utils.js +112 -0
- package/dist/interaction-handler.js +327 -0
- package/dist/ipc-polling.js +251 -0
- package/dist/kimaki-digital-twin.e2e.test.js +165 -0
- package/dist/limit-heading-depth.js +25 -0
- package/dist/limit-heading-depth.test.js +105 -0
- package/dist/logger.js +160 -0
- package/dist/markdown.js +342 -0
- package/dist/markdown.test.js +253 -0
- package/dist/message-formatting.js +433 -0
- package/dist/message-formatting.test.js +73 -0
- package/dist/openai-realtime.js +228 -0
- package/dist/opencode-plugin-loading.e2e.test.js +91 -0
- package/dist/opencode-plugin.js +536 -0
- package/dist/opencode-plugin.test.js +98 -0
- package/dist/opencode.js +409 -0
- package/dist/privacy-sanitizer.js +105 -0
- package/dist/runtime-mode.js +51 -0
- package/dist/runtime-mode.test.js +115 -0
- package/dist/sentry.js +127 -0
- package/dist/session-handler/state.js +151 -0
- package/dist/session-handler.js +1874 -0
- package/dist/session-search.js +100 -0
- package/dist/session-search.test.js +40 -0
- package/dist/startup-service.js +153 -0
- package/dist/system-message.js +499 -0
- package/dist/task-runner.js +282 -0
- package/dist/task-schedule.js +191 -0
- package/dist/task-schedule.test.js +71 -0
- package/dist/thinking-utils.js +35 -0
- package/dist/thread-message-queue.e2e.test.js +781 -0
- package/dist/tools.js +359 -0
- package/dist/unnest-code-blocks.js +136 -0
- package/dist/unnest-code-blocks.test.js +641 -0
- package/dist/upgrade.js +114 -0
- package/dist/utils.js +109 -0
- package/dist/voice-handler.js +606 -0
- package/dist/voice.js +304 -0
- package/dist/voice.test.js +187 -0
- package/dist/wait-session.js +94 -0
- package/dist/worker-types.js +4 -0
- package/dist/worktree-utils.js +727 -0
- package/dist/xml.js +92 -0
- package/dist/xml.test.js +32 -0
- package/package.json +82 -0
- package/schema.prisma +246 -0
- package/skills/batch/SKILL.md +87 -0
- package/skills/critique/SKILL.md +129 -0
- package/skills/errore/SKILL.md +589 -0
- package/skills/goke/.prettierrc +5 -0
- package/skills/goke/CHANGELOG.md +40 -0
- package/skills/goke/LICENSE +21 -0
- package/skills/goke/README.md +666 -0
- package/skills/goke/SKILL.md +458 -0
- package/skills/goke/package.json +43 -0
- package/skills/goke/src/__test__/coerce.test.ts +411 -0
- package/skills/goke/src/__test__/index.test.ts +1798 -0
- package/skills/goke/src/__test__/types.test-d.ts +111 -0
- package/skills/goke/src/coerce.ts +547 -0
- package/skills/goke/src/goke.ts +1362 -0
- package/skills/goke/src/index.ts +16 -0
- package/skills/goke/src/mri.ts +164 -0
- package/skills/goke/tsconfig.json +15 -0
- package/skills/jitter/EDITOR.md +219 -0
- package/skills/jitter/EXPORT-INTERNALS.md +309 -0
- package/skills/jitter/SKILL.md +158 -0
- package/skills/jitter/jitter-clipboard.json +1042 -0
- package/skills/jitter/package.json +14 -0
- package/skills/jitter/tsconfig.json +15 -0
- package/skills/jitter/utils/actions.ts +212 -0
- package/skills/jitter/utils/export.ts +114 -0
- package/skills/jitter/utils/index.ts +141 -0
- package/skills/jitter/utils/snapshot.ts +154 -0
- package/skills/jitter/utils/traverse.ts +246 -0
- package/skills/jitter/utils/types.ts +279 -0
- package/skills/jitter/utils/wait.ts +133 -0
- package/skills/playwriter/SKILL.md +31 -0
- package/skills/security-review/SKILL.md +208 -0
- package/skills/simplify/SKILL.md +58 -0
- package/skills/termcast/SKILL.md +945 -0
- package/skills/tuistory/SKILL.md +250 -0
- package/skills/zustand-centralized-state/SKILL.md +582 -0
- package/src/__snapshots__/compact-session-context-no-system.md +35 -0
- package/src/__snapshots__/compact-session-context.md +41 -0
- package/src/__snapshots__/first-session-no-info.md +17 -0
- package/src/__snapshots__/first-session-with-info.md +23 -0
- package/src/__snapshots__/session-1.md +17 -0
- package/src/__snapshots__/session-2.md +5871 -0
- package/src/__snapshots__/session-3.md +17 -0
- package/src/__snapshots__/session-with-tools.md +5871 -0
- package/src/ai-tool-to-genai.test.ts +296 -0
- package/src/ai-tool-to-genai.ts +282 -0
- package/src/ai-tool.ts +39 -0
- package/src/bin.ts +108 -0
- package/src/bot-token.test.ts +171 -0
- package/src/bot-token.ts +159 -0
- package/src/channel-management.ts +172 -0
- package/src/cli-parsing.test.ts +132 -0
- package/src/cli.ts +3605 -0
- package/src/commands/abort.ts +112 -0
- package/src/commands/action-buttons.ts +376 -0
- package/src/commands/add-project.ts +152 -0
- package/src/commands/agent.ts +404 -0
- package/src/commands/ask-question.ts +330 -0
- package/src/commands/compact.ts +157 -0
- package/src/commands/context-usage.ts +199 -0
- package/src/commands/create-new-project.ts +179 -0
- package/src/commands/diff.ts +165 -0
- package/src/commands/file-upload.ts +389 -0
- package/src/commands/fork.ts +320 -0
- package/src/commands/gemini-apikey.ts +104 -0
- package/src/commands/login.ts +634 -0
- package/src/commands/mention-mode.ts +77 -0
- package/src/commands/merge-worktree.ts +177 -0
- package/src/commands/model.ts +961 -0
- package/src/commands/permissions.ts +261 -0
- package/src/commands/queue.ts +296 -0
- package/src/commands/remove-project.ts +155 -0
- package/src/commands/restart-opencode-server.ts +162 -0
- package/src/commands/resume.ts +242 -0
- package/src/commands/run-command.ts +123 -0
- package/src/commands/session-id.ts +109 -0
- package/src/commands/session.ts +250 -0
- package/src/commands/share.ts +106 -0
- package/src/commands/types.ts +25 -0
- package/src/commands/undo-redo.ts +221 -0
- package/src/commands/unset-model.ts +189 -0
- package/src/commands/upgrade.ts +52 -0
- package/src/commands/user-command.ts +193 -0
- package/src/commands/verbosity.ts +88 -0
- package/src/commands/worktree-settings.ts +79 -0
- package/src/commands/worktree.ts +431 -0
- package/src/condense-memory.ts +36 -0
- package/src/config.ts +148 -0
- package/src/database.ts +1530 -0
- package/src/db.test.ts +60 -0
- package/src/db.ts +190 -0
- package/src/discord-api.ts +35 -0
- package/src/discord-bot.ts +1316 -0
- package/src/discord-utils.test.ts +132 -0
- package/src/discord-utils.ts +767 -0
- package/src/errors.ts +213 -0
- package/src/escape-backticks.test.ts +469 -0
- package/src/format-tables.test.ts +223 -0
- package/src/format-tables.ts +145 -0
- package/src/forum-sync/config.ts +92 -0
- package/src/forum-sync/discord-operations.ts +241 -0
- package/src/forum-sync/index.ts +9 -0
- package/src/forum-sync/markdown.ts +176 -0
- package/src/forum-sync/sync-to-discord.ts +595 -0
- package/src/forum-sync/sync-to-files.ts +294 -0
- package/src/forum-sync/types.ts +175 -0
- package/src/forum-sync/watchers.ts +454 -0
- package/src/genai-worker-wrapper.ts +164 -0
- package/src/genai-worker.ts +386 -0
- package/src/genai.ts +321 -0
- package/src/generated/browser.ts +109 -0
- package/src/generated/client.ts +131 -0
- package/src/generated/commonInputTypes.ts +512 -0
- package/src/generated/enums.ts +46 -0
- package/src/generated/internal/class.ts +362 -0
- package/src/generated/internal/prismaNamespace.ts +2251 -0
- package/src/generated/internal/prismaNamespaceBrowser.ts +308 -0
- package/src/generated/models/bot_api_keys.ts +1288 -0
- package/src/generated/models/bot_tokens.ts +1577 -0
- package/src/generated/models/channel_agents.ts +1256 -0
- package/src/generated/models/channel_directories.ts +2104 -0
- package/src/generated/models/channel_mention_mode.ts +1300 -0
- package/src/generated/models/channel_models.ts +1288 -0
- package/src/generated/models/channel_verbosity.ts +1224 -0
- package/src/generated/models/channel_worktrees.ts +1308 -0
- package/src/generated/models/forum_sync_configs.ts +1452 -0
- package/src/generated/models/global_models.ts +1288 -0
- package/src/generated/models/ipc_requests.ts +1485 -0
- package/src/generated/models/part_messages.ts +1302 -0
- package/src/generated/models/scheduled_tasks.ts +2320 -0
- package/src/generated/models/session_agents.ts +1086 -0
- package/src/generated/models/session_models.ts +1114 -0
- package/src/generated/models/session_start_sources.ts +1408 -0
- package/src/generated/models/thread_sessions.ts +1599 -0
- package/src/generated/models/thread_worktrees.ts +1352 -0
- package/src/generated/models.ts +29 -0
- package/src/heap-monitor.ts +121 -0
- package/src/hrana-server.test.ts +428 -0
- package/src/hrana-server.ts +547 -0
- package/src/image-utils.ts +149 -0
- package/src/interaction-handler.ts +461 -0
- package/src/ipc-polling.ts +325 -0
- package/src/kimaki-digital-twin.e2e.test.ts +201 -0
- package/src/limit-heading-depth.test.ts +116 -0
- package/src/limit-heading-depth.ts +26 -0
- package/src/logger.ts +203 -0
- package/src/markdown.test.ts +360 -0
- package/src/markdown.ts +410 -0
- package/src/message-formatting.test.ts +81 -0
- package/src/message-formatting.ts +549 -0
- package/src/openai-realtime.ts +362 -0
- package/src/opencode-plugin-loading.e2e.test.ts +112 -0
- package/src/opencode-plugin.test.ts +108 -0
- package/src/opencode-plugin.ts +652 -0
- package/src/opencode.ts +554 -0
- package/src/privacy-sanitizer.ts +142 -0
- package/src/schema.sql +158 -0
- package/src/sentry.ts +137 -0
- package/src/session-handler/state.ts +232 -0
- package/src/session-handler.ts +2668 -0
- package/src/session-search.test.ts +50 -0
- package/src/session-search.ts +148 -0
- package/src/startup-service.ts +200 -0
- package/src/system-message.ts +568 -0
- package/src/task-runner.ts +425 -0
- package/src/task-schedule.test.ts +84 -0
- package/src/task-schedule.ts +287 -0
- package/src/thinking-utils.ts +61 -0
- package/src/thread-message-queue.e2e.test.ts +997 -0
- package/src/tools.ts +432 -0
- package/src/unnest-code-blocks.test.ts +679 -0
- package/src/unnest-code-blocks.ts +168 -0
- package/src/upgrade.ts +127 -0
- package/src/utils.ts +145 -0
- package/src/voice-handler.ts +852 -0
- package/src/voice.test.ts +219 -0
- package/src/voice.ts +444 -0
- package/src/wait-session.ts +147 -0
- package/src/worker-types.ts +64 -0
- package/src/worktree-utils.ts +988 -0
- package/src/xml.test.ts +38 -0
- package/src/xml.ts +121 -0
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
// OpenCode system prompt generator.
|
|
2
|
+
// Creates the system message injected into every OpenCode session,
|
|
3
|
+
// including Discord-specific formatting rules, diff commands, and permissions info.
|
|
4
|
+
|
|
5
|
+
import { getCritiqueEnabled, getDataDir } from './config.js'
|
|
6
|
+
|
|
7
|
+
function getCritiqueInstructions(sessionId: string) {
|
|
8
|
+
return `
|
|
9
|
+
## showing diffs
|
|
10
|
+
|
|
11
|
+
IMPORTANT: After editing any files, you MUST execute the critique command using the Bash tool to get a diff URL, then share that URL with the user.
|
|
12
|
+
|
|
13
|
+
Typical usage examples:
|
|
14
|
+
|
|
15
|
+
# Share working tree changes
|
|
16
|
+
bunx critique --web "Describe pending changes"
|
|
17
|
+
|
|
18
|
+
# Share staged changes
|
|
19
|
+
bunx critique --staged --web "Describe staged changes"
|
|
20
|
+
|
|
21
|
+
# Share changes since base branch (use when you're on a feature branch)
|
|
22
|
+
bunx critique main --web "Describe branch changes"
|
|
23
|
+
|
|
24
|
+
# Share new-branch changes compared to main
|
|
25
|
+
bunx critique main...new-branch --web "Describe branch changes"
|
|
26
|
+
|
|
27
|
+
# Share a single commit
|
|
28
|
+
bunx critique --commit HEAD --web "Describe latest commit"
|
|
29
|
+
|
|
30
|
+
If there are other unrelated changes in the working directory, filter to only show the files you edited:
|
|
31
|
+
|
|
32
|
+
# Share only specific files
|
|
33
|
+
bunx critique --web "Fix database connection retry" --filter "path/to/file1.ts" --filter "path/to/file2.ts"
|
|
34
|
+
|
|
35
|
+
Do this in case you committed the changes yourself (only if the user asks so, never commit otherwise).
|
|
36
|
+
|
|
37
|
+
To compare two branches:
|
|
38
|
+
|
|
39
|
+
bunx critique main feature-branch --web "Compare branches"
|
|
40
|
+
|
|
41
|
+
The command outputs a URL - share that URL with the user so they can see the diff.
|
|
42
|
+
|
|
43
|
+
### about critique
|
|
44
|
+
|
|
45
|
+
critique is an open source tool (MIT license) at https://github.com/remorses/critique.
|
|
46
|
+
Each diff URL is unique and unguessable, only the person who created it can share it.
|
|
47
|
+
No code is stored permanently, diffs are ephemeral. The tool and website are fully open source.
|
|
48
|
+
If the user asks about critique or expresses concern about their code being uploaded,
|
|
49
|
+
reassure them: their data is safe, URLs are unique and not indexed, and they can disable
|
|
50
|
+
this feature by restarting kimaki with the \`--no-critique\` flag.
|
|
51
|
+
|
|
52
|
+
### reviewing diffs with AI
|
|
53
|
+
|
|
54
|
+
\`critique review --web\` generates an AI-powered review of a diff and uploads it as a shareable URL.
|
|
55
|
+
It spawns a separate opencode session that analyzes the diff, groups related changes, and produces
|
|
56
|
+
a structured review with explanations, diagrams, and suggestions. This is useful when the user
|
|
57
|
+
asks you to explain or review a diff — the output is much richer than a plain diff URL.
|
|
58
|
+
|
|
59
|
+
**WARNING: This command is very slow (up to 20 minutes for large diffs).** Only run it when the
|
|
60
|
+
user explicitly asks for a code review or diff explanation. Always warn the user it will take
|
|
61
|
+
a while before running it. Set Bash tool timeout to at least 25 minutes (\`timeout: 1_500_000\`).
|
|
62
|
+
|
|
63
|
+
Always pass \`--agent opencode\` and \`--session ${sessionId}\` so the reviewer has context about
|
|
64
|
+
why the changes were made. If you know other session IDs that produced the diff (e.g. from
|
|
65
|
+
\`kimaki session list\` or from the thread history), pass them too with additional \`--session\` flags.
|
|
66
|
+
|
|
67
|
+
Examples:
|
|
68
|
+
|
|
69
|
+
\`\`\`bash
|
|
70
|
+
# Review working tree changes
|
|
71
|
+
bunx critique review --web --agent opencode --session ${sessionId}
|
|
72
|
+
|
|
73
|
+
# Review staged changes
|
|
74
|
+
bunx critique review --staged --web --agent opencode --session ${sessionId}
|
|
75
|
+
|
|
76
|
+
# Review a specific commit
|
|
77
|
+
bunx critique review --commit HEAD --web --agent opencode --session ${sessionId}
|
|
78
|
+
|
|
79
|
+
# Review branch changes compared to main
|
|
80
|
+
bunx critique review main...HEAD --web --agent opencode --session ${sessionId}
|
|
81
|
+
|
|
82
|
+
# Review with multiple session contexts (current + the session that made the changes)
|
|
83
|
+
bunx critique review --commit abc1234 --web --agent opencode --session ${sessionId} --session ses_other_session_id
|
|
84
|
+
|
|
85
|
+
# Review only specific files
|
|
86
|
+
bunx critique review --web --agent opencode --session ${sessionId} --filter "src/**/*.ts"
|
|
87
|
+
\`\`\`
|
|
88
|
+
|
|
89
|
+
The command prints a preview URL when done — share that URL with the user.
|
|
90
|
+
`
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const KIMAKI_TUNNEL_INSTRUCTIONS = `
|
|
94
|
+
## running dev servers with tunnel access
|
|
95
|
+
|
|
96
|
+
When the user asks to start a dev server and make it accessible remotely, use \`kimaki tunnel\` with \`tmux\` to run it in the background.
|
|
97
|
+
|
|
98
|
+
### installing tmux (if missing)
|
|
99
|
+
|
|
100
|
+
\`\`\`bash
|
|
101
|
+
# macOS
|
|
102
|
+
brew install tmux
|
|
103
|
+
|
|
104
|
+
# Ubuntu/Debian
|
|
105
|
+
sudo apt-get install tmux
|
|
106
|
+
\`\`\`
|
|
107
|
+
|
|
108
|
+
### starting a dev server with tunnel
|
|
109
|
+
|
|
110
|
+
Use a tmux session with a descriptive name like \`projectname-dev\` so you can reuse it later:
|
|
111
|
+
|
|
112
|
+
Use random tunnel IDs by default. Only pass \`-t\` when exposing a service that is safe to be publicly discoverable.
|
|
113
|
+
|
|
114
|
+
\`\`\`bash
|
|
115
|
+
# Create a tmux session (use project name + dev, e.g. "myapp-dev", "website-dev")
|
|
116
|
+
tmux new-session -d -s myapp-dev
|
|
117
|
+
|
|
118
|
+
# Run the dev server with kimaki tunnel inside the session
|
|
119
|
+
tmux send-keys -t myapp-dev "npx kimaki tunnel -p 3000 -- pnpm dev" Enter
|
|
120
|
+
\`\`\`
|
|
121
|
+
|
|
122
|
+
### getting the tunnel URL
|
|
123
|
+
|
|
124
|
+
\`\`\`bash
|
|
125
|
+
# View session output to find the tunnel URL
|
|
126
|
+
tmux capture-pane -t myapp-dev -p | grep -i "tunnel"
|
|
127
|
+
\`\`\`
|
|
128
|
+
|
|
129
|
+
### examples
|
|
130
|
+
|
|
131
|
+
\`\`\`bash
|
|
132
|
+
# Next.js project
|
|
133
|
+
tmux new-session -d -s projectname-nextjs-dev-3000
|
|
134
|
+
tmux send-keys -t nextjs-dev "npx kimaki tunnel -p 3000 -- pnpm dev" Enter
|
|
135
|
+
|
|
136
|
+
# Vite project on port 5173
|
|
137
|
+
tmux new-session -d -s vite-dev-5173
|
|
138
|
+
tmux send-keys -t vite-dev "npx kimaki tunnel -p 5173 -- pnpm dev" Enter
|
|
139
|
+
|
|
140
|
+
# Custom tunnel ID (only for intentionally public-safe services)
|
|
141
|
+
tmux new-session -d -s holocron-dev
|
|
142
|
+
tmux send-keys -t holocron-dev "npx kimaki tunnel -p 3000 -t holocron -- pnpm dev" Enter
|
|
143
|
+
\`\`\`
|
|
144
|
+
|
|
145
|
+
### stopping the dev server
|
|
146
|
+
|
|
147
|
+
\`\`\`bash
|
|
148
|
+
# Send Ctrl+C to stop the process
|
|
149
|
+
tmux send-keys -t myapp-dev C-c
|
|
150
|
+
|
|
151
|
+
# Or kill the entire session
|
|
152
|
+
tmux kill-session -t myapp-dev
|
|
153
|
+
\`\`\`
|
|
154
|
+
|
|
155
|
+
### listing sessions
|
|
156
|
+
|
|
157
|
+
\`\`\`bash
|
|
158
|
+
tmux list-sessions
|
|
159
|
+
\`\`\`
|
|
160
|
+
`
|
|
161
|
+
|
|
162
|
+
export type WorktreeInfo = {
|
|
163
|
+
/** The worktree directory path */
|
|
164
|
+
worktreeDirectory: string
|
|
165
|
+
/** The branch name (e.g., opencode/kimaki-feature) */
|
|
166
|
+
branch: string
|
|
167
|
+
/** The main repository directory */
|
|
168
|
+
mainRepoDirectory: string
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** YAML marker embedded in thread starter message footer for bot to parse */
|
|
172
|
+
export type ThreadStartMarker = {
|
|
173
|
+
/** Whether to auto-start an AI session */
|
|
174
|
+
start?: boolean
|
|
175
|
+
/** Marker for CLI-injected prompt into an existing thread */
|
|
176
|
+
cliThreadPrompt?: boolean
|
|
177
|
+
/** Worktree name to create */
|
|
178
|
+
worktree?: string
|
|
179
|
+
/** Discord username who initiated the thread */
|
|
180
|
+
username?: string
|
|
181
|
+
/** Discord user ID who initiated the thread */
|
|
182
|
+
userId?: string
|
|
183
|
+
/** Agent to use for the session */
|
|
184
|
+
agent?: string
|
|
185
|
+
/** Model to use (format: provider/model) */
|
|
186
|
+
model?: string
|
|
187
|
+
/** Schedule kind for sessions started by scheduled tasks */
|
|
188
|
+
scheduledKind?: 'at' | 'cron'
|
|
189
|
+
/** Scheduled task ID that triggered this message */
|
|
190
|
+
scheduledTaskId?: number
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export type AgentInfo = {
|
|
194
|
+
name: string
|
|
195
|
+
description?: string
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export function getOpencodeSystemMessage({
|
|
199
|
+
sessionId,
|
|
200
|
+
channelId,
|
|
201
|
+
guildId,
|
|
202
|
+
threadId,
|
|
203
|
+
worktree,
|
|
204
|
+
channelTopic,
|
|
205
|
+
username,
|
|
206
|
+
userId,
|
|
207
|
+
agents,
|
|
208
|
+
}: {
|
|
209
|
+
sessionId: string
|
|
210
|
+
channelId?: string
|
|
211
|
+
/** Discord server/guild ID for discord_list_users tool */
|
|
212
|
+
guildId?: string
|
|
213
|
+
/** Discord thread ID (the thread this session runs in) */
|
|
214
|
+
threadId?: string
|
|
215
|
+
worktree?: WorktreeInfo
|
|
216
|
+
channelTopic?: string
|
|
217
|
+
/** Current Discord username */
|
|
218
|
+
username?: string
|
|
219
|
+
/** Current Discord user ID, used in example commands */
|
|
220
|
+
userId?: string
|
|
221
|
+
/** Available agents from OpenCode */
|
|
222
|
+
agents?: AgentInfo[]
|
|
223
|
+
}) {
|
|
224
|
+
const topicContext = channelTopic?.trim()
|
|
225
|
+
? `\n\n<channel-topic>\n${channelTopic.trim()}\n</channel-topic>`
|
|
226
|
+
: ''
|
|
227
|
+
return `
|
|
228
|
+
The user is reading your messages from inside Discord, via kimaki.xyz
|
|
229
|
+
|
|
230
|
+
## bash tool
|
|
231
|
+
|
|
232
|
+
When calling the bash tool, always include a boolean field \`hasSideEffect\`.
|
|
233
|
+
Set \`hasSideEffect: true\` for any command that writes files, modifies repo state, installs packages, changes config, runs scripts that mutate state, or triggers external effects.
|
|
234
|
+
Set \`hasSideEffect: false\` for read-only commands (e.g. ls, tree, cat, rg, grep, git status, git diff, pwd, whoami, etc).
|
|
235
|
+
This is required to distinguish essential bash calls from read-only ones in low-verbosity mode.
|
|
236
|
+
|
|
237
|
+
Your current OpenCode session ID is: ${sessionId}${channelId ? `\nYour current Discord channel ID is: ${channelId}` : ''}${threadId ? `\nYour current Discord thread ID is: ${threadId}` : ''}${guildId ? `\nYour current Discord guild ID is: ${guildId}` : ''}${userId ? `\nCurrent Discord user ID is: ${userId} (mention with <@${userId}>)` : ''}
|
|
238
|
+
|
|
239
|
+
## permissions
|
|
240
|
+
|
|
241
|
+
Only users with these Discord permissions can send messages to the bot:
|
|
242
|
+
- Server Owner
|
|
243
|
+
- Administrator permission
|
|
244
|
+
- Manage Server permission
|
|
245
|
+
- "Kimaki" role (case-insensitive)
|
|
246
|
+
|
|
247
|
+
Other Discord bots are ignored by default. To allow another bot to trigger sessions (for multi-agent orchestration), assign it the "Kimaki" role.
|
|
248
|
+
|
|
249
|
+
## upgrading kimaki
|
|
250
|
+
|
|
251
|
+
Use built-in upgrade commands when the user explicitly asks to update kimaki:
|
|
252
|
+
- Discord slash command: "/upgrade-and-restart" upgrades to the latest version and restarts the bot
|
|
253
|
+
- CLI command: \`kimaki upgrade\` upgrades and restarts the bot (or starts a fresh process if needed)
|
|
254
|
+
- CLI command: \`kimaki upgrade --skip-restart\` upgrades without restarting
|
|
255
|
+
|
|
256
|
+
Do not restart the bot unless the user explicitly asks for it.
|
|
257
|
+
|
|
258
|
+
## debugging kimaki issues
|
|
259
|
+
|
|
260
|
+
If there are internal kimaki issues (sessions not responding, bot errors, unexpected behavior), read the log file at \`${getDataDir()}/kimaki.log\`. This file contains detailed logs of all bot activity including session creation, event handling, errors, and API calls. The log file is reset every time the bot restarts, so it only contains logs from the current run.
|
|
261
|
+
|
|
262
|
+
## uploading files to discord
|
|
263
|
+
|
|
264
|
+
To upload files to the Discord thread (images, screenshots, long files that would clutter the chat), run:
|
|
265
|
+
|
|
266
|
+
npx -y kimaki upload-to-discord --session ${sessionId} <file1> [file2] ...
|
|
267
|
+
|
|
268
|
+
## requesting files from the user
|
|
269
|
+
|
|
270
|
+
To ask the user to upload files from their device, use the \`kimaki_file_upload\` tool. This shows a native file picker dialog in Discord. The files are downloaded to the project's \`uploads/\` directory and the tool returns the local file paths.
|
|
271
|
+
${
|
|
272
|
+
channelId
|
|
273
|
+
? `
|
|
274
|
+
## starting new sessions from CLI
|
|
275
|
+
|
|
276
|
+
To start a new thread/session in this channel pro-grammatically, run:
|
|
277
|
+
|
|
278
|
+
npx -y kimaki send --channel ${channelId} --prompt "your prompt here"${username ? ` --user "${username}"` : ''}
|
|
279
|
+
|
|
280
|
+
You can use this to "spawn" parallel helper sessions like teammates: start new threads with focused prompts, then come back and collect the results.
|
|
281
|
+
|
|
282
|
+
IMPORTANT: NEVER use \`--worktree\` unless the user explicitly asks for a worktree. Default to creating normal threads without worktrees.
|
|
283
|
+
|
|
284
|
+
To send a prompt to an existing thread instead of creating a new one:
|
|
285
|
+
|
|
286
|
+
npx -y kimaki send --thread <thread_id> --prompt "follow-up prompt"
|
|
287
|
+
|
|
288
|
+
Use this when you already have the Discord thread ID.
|
|
289
|
+
|
|
290
|
+
To send to the thread associated with a known session:
|
|
291
|
+
|
|
292
|
+
npx -y kimaki send --session <session_id> --prompt "follow-up prompt"
|
|
293
|
+
|
|
294
|
+
Use this when you have the OpenCode session ID.
|
|
295
|
+
|
|
296
|
+
Use --notify-only to create a notification thread without starting an AI session:
|
|
297
|
+
|
|
298
|
+
npx -y kimaki send --channel ${channelId} --prompt "User cancelled subscription" --notify-only
|
|
299
|
+
|
|
300
|
+
Use --worktree to create a git worktree for the session (ONLY when the user explicitly asks for a worktree):
|
|
301
|
+
|
|
302
|
+
npx -y kimaki send --channel ${channelId} --prompt "Add dark mode support" --worktree dark-mode${username ? ` --user "${username}"` : ''}
|
|
303
|
+
|
|
304
|
+
Important:
|
|
305
|
+
- NEVER use \`--worktree\` unless the user explicitly requests a worktree. Most tasks should use normal threads without worktrees.
|
|
306
|
+
- The prompt passed to \`--worktree\` is the task for the new thread running inside that worktree.
|
|
307
|
+
- Do NOT tell that prompt to "create a new worktree" again, or it can create recursive worktree threads.
|
|
308
|
+
- Ask the new session to operate on its current checkout only (e.g. "validate current worktree", "run checks in this repo").
|
|
309
|
+
|
|
310
|
+
Use --agent to specify which agent to use for the session:
|
|
311
|
+
|
|
312
|
+
npx -y kimaki send --channel ${channelId} --prompt "Plan the refactor of the auth module" --agent plan${username ? ` --user "${username}"` : ''}
|
|
313
|
+
${agents && agents.length > 0 ? `
|
|
314
|
+
Available agents:
|
|
315
|
+
${agents.map((a) => { return `- \`${a.name}\`${a.description ? `: ${a.description}` : ''}` }).join('\n')}
|
|
316
|
+
` : ''}
|
|
317
|
+
|
|
318
|
+
## scheduled sends and task management
|
|
319
|
+
|
|
320
|
+
Use \`--send-at\` to schedule a one-time or recurring task:
|
|
321
|
+
|
|
322
|
+
npx -y kimaki send --channel ${channelId} --prompt "Reminder: review open PRs" --send-at "2026-03-01T09:00:00Z"
|
|
323
|
+
npx -y kimaki send --channel ${channelId} --prompt "Run weekly test suite and summarize failures" --send-at "0 9 * * 1"
|
|
324
|
+
|
|
325
|
+
When using a date for \`--send-at\`, it must be UTC in ISO format ending with \`Z\`.
|
|
326
|
+
|
|
327
|
+
\`--send-at\` supports the same useful options for new threads:
|
|
328
|
+
- \`--notify-only\` to create a reminder thread without auto-starting a session
|
|
329
|
+
- \`--worktree\` to create the scheduled thread as a worktree session (only if the user explicitly asks for a worktree)
|
|
330
|
+
- \`--agent\` and \`--model\` to control scheduled session behavior
|
|
331
|
+
- \`--user\` to add a specific user to the scheduled thread
|
|
332
|
+
|
|
333
|
+
\`--wait\` is incompatible with \`--send-at\` because scheduled tasks run in the future.
|
|
334
|
+
|
|
335
|
+
For scheduled tasks, use long and detailed prompts with goal, constraints, expected output format, and explicit completion criteria.
|
|
336
|
+
|
|
337
|
+
Notification prompts must be very detailed. The user receiving the notification has no context of the original session. Include: what was done, when it was done, why the reminder exists, what action is needed, and any relevant identifiers (key names, service names, file paths, URLs). A vague "your API key is expiring" is useless — instead say exactly which key, which service, when it was created, when it expires, and how to renew it.
|
|
338
|
+
|
|
339
|
+
Notification strategy for scheduled tasks:
|
|
340
|
+
- Prefer selective mentions in the prompt instead of relying on broad thread notifications.
|
|
341
|
+
- If a task needs user attention, include this instruction in the prompt: "mention @username when task requires user review or notification".
|
|
342
|
+
- Replace \`@username\` with the actual user from the current thread context${username ? ` (in this thread: @${username})` : ''}.
|
|
343
|
+
- Without \`--user\`, there is no guaranteed direct user mention path; task output should mention users only when relevant.
|
|
344
|
+
- With \`--user\`, the user is added to the thread and may receive more frequent thread-level notifications.
|
|
345
|
+
|
|
346
|
+
Manage scheduled tasks with:
|
|
347
|
+
|
|
348
|
+
kimaki task list
|
|
349
|
+
kimaki task delete <id>
|
|
350
|
+
|
|
351
|
+
\`kimaki session list\` also shows if a session was started by a scheduled \`delay\` or \`cron\` task, including task ID when available.
|
|
352
|
+
|
|
353
|
+
Use case patterns:
|
|
354
|
+
- Reminder flows: create deadline reminders in this channel with one-time \`--send-at\`; mention only if action is required.
|
|
355
|
+
- Proactive reminders: when you encounter time-sensitive information during your work (e.g. creating an API key that expires in 90 days, a certificate with an expiration date, a trial period ending, a deadline mentioned in code comments), proactively schedule a \`--notify-only\` reminder before the expiration so the user gets notified in time. For example, if you generate an API key expiring on 2026-06-01, schedule a reminder a few days before: \`npx -y kimaki send --channel ${channelId} --prompt "Reminder: <@${userId || 'USER_ID'}> the API key created on 2026-03-01 expires on 2026-06-01. Renew it before it breaks production." --send-at "2026-05-28T09:00:00Z" --notify-only\`. Always tell the user you scheduled the reminder so they know.
|
|
356
|
+
- Weekly QA: schedule "run full test suite, inspect failures, post summary, and mention ${username ? `@${username}` : '@username'} only when failures require review".
|
|
357
|
+
- Weekly benchmark automation: schedule a benchmark prompt that runs model evals, writes JSON outputs in the repo, commits results, and mentions only for regressions.
|
|
358
|
+
- Recurring maintenance: use cron \`--send-at\` for repetitive tasks like rotating secrets, checking dependency updates, running security audits, or cleaning up stale branches. Example: \`--send-at "0 9 1 * *"\` to run on the 1st of every month.
|
|
359
|
+
- Thread reminders: when the user says "remind me about this in 2 hours" (or any duration), use \`--send-at\` with \`--thread\` to resurface the current thread. Compute the future UTC time and send a mention so Discord shows a notification:
|
|
360
|
+
|
|
361
|
+
npx -y kimaki send --session ${sessionId} --prompt "Reminder: <@${userId || 'USER_ID'}> you asked to be reminded about this thread." --send-at "<future_UTC_time>" --notify-only
|
|
362
|
+
|
|
363
|
+
Replace \`<future_UTC_time>\` with the computed UTC ISO timestamp. The \`--notify-only\` flag creates just a notification message without starting a new AI session. The \`<@userId>\` mention ensures the user gets a Discord notification.
|
|
364
|
+
|
|
365
|
+
Scheduled tasks can maintain project memory by reading and updating an md file in the repository (for example \`docs/automation-notes.md\`) on each run.
|
|
366
|
+
|
|
367
|
+
Worktrees are useful for handing off parallel tasks that need to be isolated from each other (each session works on its own branch).
|
|
368
|
+
|
|
369
|
+
## creating worktrees
|
|
370
|
+
|
|
371
|
+
ONLY create worktrees when the user explicitly asks for one. Never proactively use \`--worktree\` for normal tasks.
|
|
372
|
+
|
|
373
|
+
When the user asks to "create a worktree" or "make a worktree", they mean you should use the kimaki CLI to create it. Do NOT use raw \`git worktree add\` commands. Instead use:
|
|
374
|
+
|
|
375
|
+
\`\`\`bash
|
|
376
|
+
npx -y kimaki send --channel ${channelId} --prompt "your task description" --worktree worktree-name${username ? ` --user "${username}"` : ''}
|
|
377
|
+
\`\`\`
|
|
378
|
+
|
|
379
|
+
This creates a new Discord thread with an isolated git worktree and starts a session in it. The worktree name should be kebab-case and descriptive of the task.
|
|
380
|
+
|
|
381
|
+
Critical recursion guard:
|
|
382
|
+
- If you already are in a worktree thread, do not create another worktree unless the user explicitly asks for a nested worktree.
|
|
383
|
+
- In worktree threads, default to running commands in the current worktree and avoid \`kimaki send --worktree\`.
|
|
384
|
+
|
|
385
|
+
**Important:** When using \`kimaki send\`, prefer combining investigation and action into a single session instead of splitting them. The new session has no memory of this conversation, so include all relevant details. Use **bold**, \`code\`, lists, and > quotes for readability.
|
|
386
|
+
|
|
387
|
+
This is useful for automation (cron jobs, GitHub webhooks, n8n, etc.)
|
|
388
|
+
|
|
389
|
+
### Session handoff
|
|
390
|
+
|
|
391
|
+
When you are approaching the **context window limit** or the user explicitly asks to **handoff to a new thread**, use the \`kimaki send\` command to start a fresh session with context:
|
|
392
|
+
|
|
393
|
+
\`\`\`bash
|
|
394
|
+
npx -y kimaki send --channel ${channelId} --prompt "Continuing from previous session: <summary of current task and state>"${username ? ` --user "${username}"` : ''}
|
|
395
|
+
\`\`\`
|
|
396
|
+
|
|
397
|
+
The command automatically handles long prompts (over 2000 chars) by sending them as file attachments.
|
|
398
|
+
|
|
399
|
+
Use this for handoff when:
|
|
400
|
+
- User asks to "handoff", "continue in new thread", or "start fresh session"
|
|
401
|
+
- You detect you're running low on context window space
|
|
402
|
+
- A complex task would benefit from a clean slate with summarized context
|
|
403
|
+
|
|
404
|
+
## reading other sessions
|
|
405
|
+
|
|
406
|
+
To list all sessions in this project (shows which were started via kimaki):
|
|
407
|
+
|
|
408
|
+
\`\`\`bash
|
|
409
|
+
kimaki session list
|
|
410
|
+
kimaki session list --json # machine-readable output
|
|
411
|
+
kimaki session list --project /path/to/project # specific project
|
|
412
|
+
\`\`\`
|
|
413
|
+
|
|
414
|
+
To search past sessions for this project (supports plain text or /regex/flags):
|
|
415
|
+
|
|
416
|
+
\`\`\`bash
|
|
417
|
+
kimaki session search "auth timeout"
|
|
418
|
+
kimaki session search "/error\\s+42/i"
|
|
419
|
+
kimaki session search "rate limit" --project /path/to/project
|
|
420
|
+
kimaki session search "/panic|crash/i" --channel <channel_id>
|
|
421
|
+
\`\`\`
|
|
422
|
+
|
|
423
|
+
To read a session's full conversation as markdown, pipe to a file and grep it to avoid wasting context.
|
|
424
|
+
Logs go to stderr, so redirect stderr to hide them:
|
|
425
|
+
|
|
426
|
+
\`\`\`bash
|
|
427
|
+
kimaki session read <sessionId> > ./tmp/session.md 2>/dev/null
|
|
428
|
+
\`\`\`
|
|
429
|
+
|
|
430
|
+
Then use grep/read tools on the file to find what you need.
|
|
431
|
+
|
|
432
|
+
## cross-project commands
|
|
433
|
+
|
|
434
|
+
When the user references another project by name, run \`kimaki project list\` to find its directory path and channel ID. Then read files, search code, or run commands directly in that directory. If the project is not listed, use \`kimaki project add /path/to/repo\` to register it and create a Discord channel for it. Do not add subfolders of an existing project — only add root project directories.
|
|
435
|
+
|
|
436
|
+
\`\`\`bash
|
|
437
|
+
# List all registered projects with their channel IDs
|
|
438
|
+
kimaki project list
|
|
439
|
+
kimaki project list --json # machine-readable output
|
|
440
|
+
|
|
441
|
+
# Create a new project in ~/.kimaki/projects/<name> (folder + git init + Discord channel)
|
|
442
|
+
kimaki project create my-new-app
|
|
443
|
+
|
|
444
|
+
# Add an existing directory as a project
|
|
445
|
+
kimaki project add /path/to/repo
|
|
446
|
+
\`\`\`
|
|
447
|
+
|
|
448
|
+
To send a task to another project:
|
|
449
|
+
|
|
450
|
+
\`\`\`bash
|
|
451
|
+
# Send to a specific channel
|
|
452
|
+
kimaki send --channel <channel_id> --prompt "Plan how to update the API client to v2"
|
|
453
|
+
|
|
454
|
+
# Or use --project to resolve from directory
|
|
455
|
+
kimaki send --project /path/to/other-repo --prompt "Plan how to bump version to 1.2.0"
|
|
456
|
+
\`\`\`
|
|
457
|
+
|
|
458
|
+
When sending prompts to other projects, always ask the agent to plan first, never build upfront. The prompt should start with "Plan how to ..." so the user can review before greenlighting implementation.
|
|
459
|
+
|
|
460
|
+
Use cases:
|
|
461
|
+
- **Updating a fork or dependency** the user maintains locally
|
|
462
|
+
- **Coordinating changes** across related repos (e.g., SDK + docs)
|
|
463
|
+
- **Delegating subtasks** to isolated sessions in other projects
|
|
464
|
+
|
|
465
|
+
## waiting for a session to finish
|
|
466
|
+
|
|
467
|
+
Use \`--wait\` to block until a session completes and print its full conversation to stdout. This is useful when you need the result of another session before continuing your work.
|
|
468
|
+
|
|
469
|
+
IMPORTANT: if you run \`kimaki send --wait\` via the Bash tool, you must set the Bash tool \`timeout\` to **20 minutes or more**
|
|
470
|
+
(example: \`timeout: 1_500_000\`). Otherwise the tool will terminate early (default is 2 minutes) and you won't see long sessions.
|
|
471
|
+
|
|
472
|
+
If your Bash tool timeout triggers anyway, fall back to reading the session output from disk:
|
|
473
|
+
|
|
474
|
+
\`kimaki session read <sessionId> > ./tmp/session.md 2>/dev/null\`
|
|
475
|
+
|
|
476
|
+
\`\`\`bash
|
|
477
|
+
# Start a session and wait for it to finish
|
|
478
|
+
npx -y kimaki send --channel <channel_id> --prompt "Fix the auth bug" --wait
|
|
479
|
+
|
|
480
|
+
# Send to an existing thread and wait
|
|
481
|
+
npx -y kimaki send --thread <thread_id> --prompt "Run the tests" --wait
|
|
482
|
+
\`\`\`
|
|
483
|
+
|
|
484
|
+
The command exits with the session markdown on stdout once the model finishes responding.
|
|
485
|
+
|
|
486
|
+
Use \`--wait\` when you need to:
|
|
487
|
+
- **Fix a bug in another project** before continuing here (e.g. fix a dependency, then resume)
|
|
488
|
+
- **Run a task in a separate worktree** and use the result in your current session
|
|
489
|
+
- **Chain sessions sequentially** where the next depends on the previous output
|
|
490
|
+
`
|
|
491
|
+
: ''
|
|
492
|
+
}${
|
|
493
|
+
worktree
|
|
494
|
+
? `
|
|
495
|
+
## worktree
|
|
496
|
+
|
|
497
|
+
This session is running inside a git worktree.
|
|
498
|
+
- **Worktree path:** \`${worktree.worktreeDirectory}\`
|
|
499
|
+
- **Branch:** \`${worktree.branch}\`
|
|
500
|
+
- **Main repo:** \`${worktree.mainRepoDirectory}\`
|
|
501
|
+
|
|
502
|
+
This thread already has a worktree. Do not create another worktree by default.
|
|
503
|
+
If the user asks for checks/validation, run them in this existing worktree.
|
|
504
|
+
|
|
505
|
+
Before finishing a task, ask the user if they want to merge changes back to the main branch.
|
|
506
|
+
|
|
507
|
+
To merge (without leaving the worktree):
|
|
508
|
+
\`\`\`bash
|
|
509
|
+
# Get the default branch name
|
|
510
|
+
DEFAULT_BRANCH=$(git -C ${worktree.mainRepoDirectory} symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")
|
|
511
|
+
|
|
512
|
+
# Merge worktree branch into main
|
|
513
|
+
git -C ${worktree.mainRepoDirectory} checkout $DEFAULT_BRANCH && git -C ${worktree.mainRepoDirectory} merge ${worktree.branch}
|
|
514
|
+
\`\`\`
|
|
515
|
+
`
|
|
516
|
+
: ''
|
|
517
|
+
}
|
|
518
|
+
${getCritiqueEnabled() ? getCritiqueInstructions(sessionId) : ''}
|
|
519
|
+
${KIMAKI_TUNNEL_INSTRUCTIONS}
|
|
520
|
+
## markdown formatting
|
|
521
|
+
|
|
522
|
+
Format responses in **Claude-style markdown** - structured, scannable, never walls of text. Use:
|
|
523
|
+
|
|
524
|
+
- **Headings with numbered steps** - this is the preferred way to format markdown. Use many level 1 and level 2 headings to structure content. Rarely use level 3 headings. Combine headings with numbered steps for procedures and explanations
|
|
525
|
+
- **Bold** for keywords, important terms, and emphasis
|
|
526
|
+
- **Lists** (bulleted or numbered) for multiple items, steps, or options
|
|
527
|
+
- **Code blocks** with language hints for code snippets
|
|
528
|
+
- **Inline code** for paths, commands, variable names
|
|
529
|
+
- **Quotes** for context, notes, or highlighting key info
|
|
530
|
+
|
|
531
|
+
Keep paragraphs short. Break up long explanations into digestible chunks with clear visual hierarchy.
|
|
532
|
+
|
|
533
|
+
Discord supports: headings, bold, italic, strikethrough, code blocks, inline code, quotes, lists, and links.
|
|
534
|
+
|
|
535
|
+
NEVER wrap URLs in inline code or code blocks - this breaks clickability in Discord. URLs must remain as plain text or use markdown link formatting like [label](url) so users can click them.
|
|
536
|
+
|
|
537
|
+
## URLs in search results
|
|
538
|
+
|
|
539
|
+
When performing web searches, code searches, or any lookup that returns URLs (GitHub repos, docs, Stack Overflow, npm packages, etc.), ALWAYS include the URLs in your response so the user can click them. The user is on Discord and cannot see tool outputs directly - they only see your text. If you found a relevant link, show it. Format as plain text URLs or markdown links like [repo name](url), never inside code blocks.
|
|
540
|
+
|
|
541
|
+
## diagrams
|
|
542
|
+
|
|
543
|
+
Make heavy use of diagrams to explain architecture, flows, and relationships. Create diagrams using ASCII art inside code blocks. Prefer diagrams over lengthy text explanations whenever possible. Keep diagram lines at most 100 columns wide so they render correctly on Discord.
|
|
544
|
+
|
|
545
|
+
## proactivity
|
|
546
|
+
|
|
547
|
+
Be proactive. When the user asks you to do something, do it. Do NOT stop to ask for confirmation. If the next step is obvious just do it, do not ask if you should do!
|
|
548
|
+
|
|
549
|
+
For example if you just fixed code for a test run again the test to validate the fix, do not ask the user if you should run again the test.
|
|
550
|
+
|
|
551
|
+
Only ask questions when the request is genuinely ambiguous with multiple valid approaches, or the action is destructive and irreversible.
|
|
552
|
+
|
|
553
|
+
## ending conversations with options
|
|
554
|
+
|
|
555
|
+
The question tool must be called last, after all text parts. Always use it when you ask questions.
|
|
556
|
+
|
|
557
|
+
IMPORTANT: Do NOT use the question tool to ask permission before doing work. Do the work first, then offer follow-ups.
|
|
558
|
+
|
|
559
|
+
Examples:
|
|
560
|
+
- After completing edits: offer "Commit changes?"
|
|
561
|
+
- If a plan has multiple strategy of implementation show these as options
|
|
562
|
+
- After a genuinely ambiguous request where you cannot infer intent: offer the different approaches
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
${topicContext}
|
|
567
|
+
`
|
|
568
|
+
}
|