@otto-assistant/otto 0.1.2 → 0.7.16
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/agent-model.e2e.test.js +755 -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/anthropic-account-identity.js +62 -0
- package/dist/anthropic-account-identity.test.js +38 -0
- package/dist/anthropic-auth-plugin.js +917 -0
- package/dist/anthropic-auth-state.js +303 -0
- package/dist/anthropic-auth-state.test.js +150 -0
- package/dist/bin.js +152 -0
- package/dist/btw-prefix-detection.js +17 -0
- package/dist/btw-prefix-detection.test.js +63 -0
- package/dist/channel-management.js +259 -0
- package/dist/cli-parsing.test.js +142 -0
- package/dist/cli-send-thread.e2e.test.js +353 -0
- package/dist/cli-telegram-options.test.js +99 -0
- package/dist/cli.js +4210 -568
- package/dist/commands/abort.js +65 -0
- package/dist/commands/action-buttons.js +245 -0
- package/dist/commands/add-dir.js +124 -0
- package/dist/commands/add-dir.test.js +126 -0
- package/dist/commands/add-project.js +113 -0
- package/dist/commands/agent.js +355 -0
- package/dist/commands/ask-question.js +320 -0
- package/dist/commands/ask-question.test.js +92 -0
- package/dist/commands/btw.js +121 -0
- package/dist/commands/cli-commands-group-a.test.js +728 -0
- package/dist/commands/cli-commands-group-b.test.js +695 -0
- package/dist/commands/compact.js +120 -0
- package/dist/commands/context-usage.js +140 -0
- package/dist/commands/create-new-project.js +130 -0
- package/dist/commands/diff.js +63 -0
- package/dist/commands/discord-commands-group-a.test.js +655 -0
- package/dist/commands/discord-commands-group-b.test.js +595 -0
- package/dist/commands/discord-commands-group-c.test.js +739 -0
- package/dist/commands/file-upload.js +275 -0
- package/dist/commands/fork-subagent.js +177 -0
- package/dist/commands/fork.js +262 -0
- package/dist/commands/gemini-apikey.js +70 -0
- package/dist/commands/login.js +893 -0
- package/dist/commands/mcp.js +239 -0
- package/dist/commands/memory-snapshot.js +24 -0
- package/dist/commands/mention-mode.js +44 -0
- package/dist/commands/merge-worktree.js +162 -0
- package/dist/commands/model-variant.js +369 -0
- package/dist/commands/model.js +798 -0
- package/dist/commands/new-worktree.js +465 -0
- package/dist/commands/paginated-select.js +57 -0
- package/dist/commands/permissions.js +274 -0
- package/dist/commands/queue.js +223 -0
- package/dist/commands/remove-project.js +115 -0
- package/dist/commands/restart-opencode-server.js +127 -0
- package/dist/commands/resume.js +149 -0
- package/dist/commands/run-command.js +79 -0
- package/dist/commands/screenshare.js +303 -0
- package/dist/commands/screenshare.test.js +20 -0
- package/dist/commands/session-id.js +78 -0
- package/dist/commands/session.js +176 -0
- package/dist/commands/share.js +80 -0
- package/dist/commands/tasks.js +205 -0
- package/dist/commands/thread-deletion-sync.js +50 -0
- package/dist/commands/types.js +2 -0
- package/dist/commands/undo-redo.js +305 -0
- package/dist/commands/unset-model.js +139 -0
- package/dist/commands/upgrade.js +48 -0
- package/dist/commands/user-command.js +155 -0
- package/dist/commands/verbosity.js +125 -0
- package/dist/commands/vscode.js +269 -0
- package/dist/commands/worktree-settings.js +43 -0
- package/dist/commands/worktrees.js +468 -0
- package/dist/condense-memory.js +33 -0
- package/dist/config.js +100 -255
- package/dist/context-awareness-plugin.js +340 -0
- package/dist/context-awareness-plugin.test.js +126 -0
- package/dist/critique-utils.js +95 -0
- package/dist/database.js +1355 -0
- package/dist/db.js +260 -0
- package/dist/db.test.js +138 -0
- package/dist/debounce-timeout.js +28 -0
- package/dist/debounced-process-flush.js +77 -0
- package/dist/discord-bot.js +1124 -0
- package/dist/discord-command-registration.js +567 -0
- package/dist/discord-urls.js +82 -0
- package/dist/discord-utils.js +616 -0
- package/dist/discord-utils.test.js +134 -0
- package/dist/errors.js +179 -0
- package/dist/escape-backticks.test.js +429 -0
- package/dist/event-stream-real-capture.e2e.test.js +533 -0
- package/dist/eventsource-parser.test.js +327 -0
- package/dist/exec-async.js +26 -0
- package/dist/external-opencode-sync.js +480 -0
- package/dist/format-tables.js +491 -0
- package/dist/format-tables.test.js +478 -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 +113 -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-proxy-reconnect.e2e.test.js +394 -0
- package/dist/gateway-proxy.e2e.test.js +485 -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 +37 -0
- package/dist/generated/commonInputTypes.js +10 -0
- package/dist/generated/enums.js +58 -0
- package/dist/generated/internal/class.js +49 -0
- package/dist/generated/internal/prismaNamespace.js +254 -0
- package/dist/generated/internal/prismaNamespaceBrowser.js +224 -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_events.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 +122 -0
- package/dist/hrana-server.js +251 -0
- package/dist/hrana-server.test.js +370 -0
- package/dist/html-actions.js +123 -0
- package/dist/html-actions.test.js +70 -0
- package/dist/html-components.js +117 -0
- package/dist/html-components.test.js +34 -0
- package/dist/image-optimizer-plugin.js +153 -0
- package/dist/image-utils.js +112 -0
- package/dist/interaction-handler.js +420 -0
- package/dist/ipc-polling.js +327 -0
- package/dist/ipc-tools-plugin.js +193 -0
- package/dist/ipc-utils.js +18 -0
- package/dist/limit-heading-depth.js +25 -0
- package/dist/limit-heading-depth.test.js +105 -0
- package/dist/logger.js +171 -0
- package/dist/markdown.js +342 -0
- package/dist/markdown.test.js +264 -0
- package/dist/memory-overview-plugin.js +128 -0
- package/dist/message-finish-field.e2e.test.js +168 -0
- package/dist/message-formatting.js +415 -0
- package/dist/message-formatting.test.js +115 -0
- package/dist/message-preprocessing.js +359 -0
- package/dist/onboarding-tutorial.js +163 -0
- package/dist/onboarding-welcome.js +37 -0
- package/dist/openai-realtime.js +224 -0
- package/dist/opencode-command-detection.js +65 -0
- package/dist/opencode-command-detection.test.js +240 -0
- package/dist/opencode-command.js +131 -0
- package/dist/opencode-command.test.js +48 -0
- package/dist/opencode-interrupt-plugin.js +388 -0
- package/dist/opencode-interrupt-plugin.test.js +463 -0
- package/dist/opencode.js +1124 -0
- package/dist/otto/branding.js +22 -0
- package/dist/otto/index.js +21 -0
- package/dist/otto-digital-twin.e2e.test.js +161 -0
- package/dist/otto-opencode-plugin-loading.e2e.test.js +94 -0
- package/dist/otto-opencode-plugin.js +21 -0
- package/dist/otto-opencode-plugin.test.js +98 -0
- package/dist/parse-permission-rules.test.js +117 -0
- package/dist/patch-text-parser.js +97 -0
- package/dist/plugin-logger.js +68 -0
- package/dist/privacy-sanitizer.js +105 -0
- package/dist/queue-advanced-abort.e2e.test.js +293 -0
- package/dist/queue-advanced-action-buttons.e2e.test.js +206 -0
- package/dist/queue-advanced-e2e-setup.js +790 -0
- package/dist/queue-advanced-footer.e2e.test.js +481 -0
- package/dist/queue-advanced-model-switch.e2e.test.js +299 -0
- package/dist/queue-advanced-permissions-typing.e2e.test.js +179 -0
- package/dist/queue-advanced-question.e2e.test.js +261 -0
- package/dist/queue-advanced-typing-interrupt.e2e.test.js +114 -0
- package/dist/queue-advanced-typing.e2e.test.js +153 -0
- package/dist/queue-drain-after-interactive-ui.e2e.test.js +119 -0
- package/dist/queue-interrupt-drain.e2e.test.js +135 -0
- package/dist/queue-question-select-drain.e2e.test.js +256 -0
- package/dist/runtime-idle-sweeper.js +52 -0
- package/dist/runtime-lifecycle.e2e.test.js +514 -0
- package/dist/sentry.js +23 -0
- package/dist/session-handler/agent-utils.js +67 -0
- package/dist/session-handler/event-stream-state.js +475 -0
- package/dist/session-handler/event-stream-state.test.js +632 -0
- package/dist/session-handler/model-utils.js +147 -0
- package/dist/session-handler/opencode-session-event-log.js +94 -0
- package/dist/session-handler/thread-runtime-state.js +131 -0
- package/dist/session-handler/thread-session-runtime.js +3390 -0
- package/dist/session-handler.js +9 -0
- package/dist/session-search.js +100 -0
- package/dist/session-search.test.js +40 -0
- package/dist/session-title-rename.test.js +92 -0
- package/dist/skill-filter.js +31 -0
- package/dist/skill-filter.test.js +65 -0
- package/dist/startup-service.js +153 -0
- package/dist/startup-time.e2e.test.js +296 -0
- package/dist/store.js +19 -0
- package/dist/subagent-rate-limit-plugin.js +175 -0
- package/dist/system-message.js +702 -0
- package/dist/system-message.test.js +697 -0
- package/dist/task-runner.js +530 -0
- package/dist/task-schedule.js +213 -0
- package/dist/task-schedule.test.js +71 -0
- package/dist/test-utils.js +313 -0
- package/dist/thinking-utils.js +35 -0
- package/dist/thread-message-queue.e2e.test.js +1111 -0
- package/dist/tools.js +357 -0
- package/dist/undo-redo.e2e.test.js +161 -0
- package/dist/unnest-code-blocks.js +146 -0
- package/dist/unnest-code-blocks.test.js +673 -0
- package/dist/upgrade.js +156 -0
- package/dist/utils.js +172 -0
- package/dist/utils.test.js +130 -0
- package/dist/voice-attachment.js +34 -0
- package/dist/voice-handler.js +646 -0
- package/dist/voice-message.e2e.test.js +1021 -0
- package/dist/voice.js +456 -0
- package/dist/voice.test.js +235 -0
- package/dist/wait-session.js +171 -0
- package/dist/websockify.js +69 -0
- package/dist/worker-types.js +4 -0
- package/dist/worktree-lifecycle.e2e.test.js +311 -0
- package/dist/worktree-utils.js +3 -0
- package/dist/worktrees.js +991 -0
- package/dist/worktrees.test.js +415 -0
- package/dist/xml.js +92 -0
- package/dist/xml.test.js +32 -0
- package/package.json +90 -38
- package/schema.prisma +303 -0
- package/skills/batch/SKILL.md +87 -0
- package/skills/critique/SKILL.md +112 -0
- package/skills/egaki/SKILL.md +100 -0
- package/skills/errore/SKILL.md +647 -0
- package/skills/event-sourcing-state/SKILL.md +252 -0
- package/skills/goke/SKILL.md +38 -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/lintcn/SKILL.md +873 -0
- package/skills/manual-kimaki-upstream-adapt/SKILL.md +114 -0
- package/skills/new-skill/SKILL.md +237 -0
- package/skills/npm-package/SKILL.md +617 -0
- package/skills/opensrc/SKILL.md +78 -0
- package/skills/otto-publish/SKILL.md +61 -0
- package/skills/playwriter/SKILL.md +35 -0
- package/skills/profano/SKILL.md +16 -0
- package/skills/proxyman/SKILL.md +215 -0
- package/skills/security-review/SKILL.md +208 -0
- package/skills/sigillo/SKILL.md +101 -0
- package/skills/simplify/SKILL.md +58 -0
- package/skills/spiceflow/SKILL.md +28 -0
- package/skills/termcast/SKILL.md +945 -0
- package/skills/tuistory/SKILL.md +98 -0
- package/skills/usecomputer/SKILL.md +264 -0
- package/skills/x-articles/SKILL.md +554 -0
- package/skills/zele/SKILL.md +49 -0
- package/skills/zustand-centralized-state/SKILL.md +1004 -0
- package/src/agent-model.e2e.test.ts +979 -0
- package/src/ai-tool-to-genai.test.ts +296 -0
- package/src/ai-tool-to-genai.ts +283 -0
- package/src/ai-tool.ts +39 -0
- package/src/anthropic-account-identity.test.ts +52 -0
- package/src/anthropic-account-identity.ts +77 -0
- package/src/anthropic-auth-plugin.ts +1139 -0
- package/src/anthropic-auth-state.test.ts +187 -0
- package/src/anthropic-auth-state.ts +386 -0
- package/src/bin.ts +182 -0
- package/src/btw-prefix-detection.test.ts +73 -0
- package/src/btw-prefix-detection.ts +23 -0
- package/src/channel-management.ts +376 -0
- package/src/cli-parsing.test.ts +197 -0
- package/src/cli-send-thread.e2e.test.ts +463 -0
- package/src/cli-telegram-options.test.ts +114 -0
- package/src/cli.ts +5718 -580
- package/src/commands/abort.ts +89 -0
- package/src/commands/action-buttons.ts +364 -0
- package/src/commands/add-dir.test.ts +154 -0
- package/src/commands/add-dir.ts +175 -0
- package/src/commands/add-project.ts +149 -0
- package/src/commands/agent.ts +496 -0
- package/src/commands/ask-question.test.ts +111 -0
- package/src/commands/ask-question.ts +455 -0
- package/src/commands/btw.ts +184 -0
- package/src/commands/cli-commands-group-a.test.ts +837 -0
- package/src/commands/cli-commands-group-b.test.ts +800 -0
- package/src/commands/compact.ts +157 -0
- package/src/commands/context-usage.ts +199 -0
- package/src/commands/create-new-project.ts +190 -0
- package/src/commands/diff.ts +91 -0
- package/src/commands/discord-commands-group-a.test.ts +789 -0
- package/src/commands/discord-commands-group-b.test.ts +648 -0
- package/src/commands/discord-commands-group-c.test.ts +882 -0
- package/src/commands/file-upload.ts +389 -0
- package/src/commands/fork-subagent.ts +263 -0
- package/src/commands/fork.ts +386 -0
- package/src/commands/gemini-apikey.ts +104 -0
- package/src/commands/login.ts +1181 -0
- package/src/commands/mcp.ts +307 -0
- package/src/commands/memory-snapshot.ts +30 -0
- package/src/commands/mention-mode.ts +68 -0
- package/src/commands/merge-worktree.ts +226 -0
- package/src/commands/model-variant.ts +488 -0
- package/src/commands/model.ts +1082 -0
- package/src/commands/new-worktree.ts +645 -0
- package/src/commands/paginated-select.ts +81 -0
- package/src/commands/permissions.ts +397 -0
- package/src/commands/queue.ts +293 -0
- package/src/commands/remove-project.ts +155 -0
- package/src/commands/restart-opencode-server.ts +162 -0
- package/src/commands/resume.ts +230 -0
- package/src/commands/run-command.ts +123 -0
- package/src/commands/screenshare.test.ts +30 -0
- package/src/commands/screenshare.ts +366 -0
- package/src/commands/session-id.ts +109 -0
- package/src/commands/session.ts +227 -0
- package/src/commands/share.ts +106 -0
- package/src/commands/tasks.ts +293 -0
- package/src/commands/thread-deletion-sync.ts +80 -0
- package/src/commands/types.ts +25 -0
- package/src/commands/undo-redo.ts +386 -0
- package/src/commands/unset-model.ts +174 -0
- package/src/commands/upgrade.ts +59 -0
- package/src/commands/user-command.ts +198 -0
- package/src/commands/verbosity.ts +173 -0
- package/src/commands/vscode.ts +342 -0
- package/src/commands/worktree-settings.ts +70 -0
- package/src/commands/worktrees.ts +645 -0
- package/src/condense-memory.ts +36 -0
- package/src/config.ts +103 -339
- package/src/context-awareness-plugin.test.ts +144 -0
- package/src/context-awareness-plugin.ts +469 -0
- package/src/critique-utils.ts +139 -0
- package/src/database.ts +1949 -0
- package/src/db.test.ts +162 -0
- package/src/db.ts +295 -0
- package/src/debounce-timeout.ts +43 -0
- package/src/debounced-process-flush.ts +104 -0
- package/src/discord-bot.ts +1507 -0
- package/src/discord-command-registration.ts +752 -0
- package/src/discord-urls.ts +89 -0
- package/src/discord-utils.test.ts +153 -0
- package/src/discord-utils.ts +846 -0
- package/src/errors.ts +232 -0
- package/src/escape-backticks.test.ts +469 -0
- package/src/event-stream-real-capture.e2e.test.ts +692 -0
- package/src/eventsource-parser.test.ts +351 -0
- package/src/exec-async.ts +35 -0
- package/src/external-opencode-sync.ts +685 -0
- package/src/format-tables.test.ts +515 -0
- package/src/format-tables.ts +718 -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 +172 -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/gateway-proxy-reconnect.e2e.test.ts +523 -0
- package/src/gateway-proxy.e2e.test.ts +644 -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 +114 -0
- package/src/generated/client.ts +138 -0
- package/src/generated/commonInputTypes.ts +770 -0
- package/src/generated/enums.ts +98 -0
- package/src/generated/internal/class.ts +384 -0
- package/src/generated/internal/prismaNamespace.ts +2394 -0
- package/src/generated/internal/prismaNamespaceBrowser.ts +327 -0
- package/src/generated/models/bot_api_keys.ts +1288 -0
- package/src/generated/models/bot_tokens.ts +1700 -0
- package/src/generated/models/channel_agents.ts +1256 -0
- package/src/generated/models/channel_directories.ts +1859 -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 +1228 -0
- package/src/generated/models/channel_worktrees.ts +1300 -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_events.ts +1439 -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 +1781 -0
- package/src/generated/models/thread_worktrees.ts +1356 -0
- package/src/generated/models.ts +30 -0
- package/src/heap-monitor.ts +152 -0
- package/src/hrana-server.test.ts +434 -0
- package/src/hrana-server.ts +299 -0
- package/src/html-actions.test.ts +87 -0
- package/src/html-actions.ts +174 -0
- package/src/html-components.test.ts +38 -0
- package/src/html-components.ts +181 -0
- package/src/image-optimizer-plugin.ts +194 -0
- package/src/image-utils.ts +149 -0
- package/src/interaction-handler.ts +610 -0
- package/src/ipc-polling.ts +427 -0
- package/src/ipc-tools-plugin.ts +236 -0
- package/src/ipc-utils.ts +29 -0
- package/src/limit-heading-depth.test.ts +116 -0
- package/src/limit-heading-depth.ts +26 -0
- package/src/logger.ts +215 -0
- package/src/markdown.test.ts +315 -0
- package/src/markdown.ts +410 -0
- package/src/memory-overview-plugin.ts +163 -0
- package/src/message-finish-field.e2e.test.ts +195 -0
- package/src/message-formatting.test.ts +126 -0
- package/src/message-formatting.ts +535 -0
- package/src/message-preprocessing.ts +488 -0
- package/src/onboarding-tutorial.ts +167 -0
- package/src/onboarding-welcome.ts +49 -0
- package/src/openai-realtime.ts +358 -0
- package/src/opencode-command-detection.test.ts +307 -0
- package/src/opencode-command-detection.ts +76 -0
- package/src/opencode-command.test.ts +70 -0
- package/src/opencode-command.ts +191 -0
- package/src/opencode-interrupt-plugin.test.ts +682 -0
- package/src/opencode-interrupt-plugin.ts +507 -0
- package/src/opencode.ts +1462 -0
- package/src/otto/branding.ts +23 -0
- package/src/otto/index.ts +22 -0
- package/src/otto-digital-twin.e2e.test.ts +199 -0
- package/src/otto-opencode-plugin-loading.e2e.test.ts +117 -0
- package/src/otto-opencode-plugin.test.ts +108 -0
- package/src/otto-opencode-plugin.ts +22 -0
- package/src/parse-permission-rules.test.ts +127 -0
- package/src/patch-text-parser.ts +107 -0
- package/src/plugin-logger.ts +84 -0
- package/src/privacy-sanitizer.ts +142 -0
- package/src/queue-advanced-abort.e2e.test.ts +382 -0
- package/src/queue-advanced-action-buttons.e2e.test.ts +268 -0
- package/src/queue-advanced-e2e-setup.ts +877 -0
- package/src/queue-advanced-footer.e2e.test.ts +591 -0
- package/src/queue-advanced-model-switch.e2e.test.ts +383 -0
- package/src/queue-advanced-permissions-typing.e2e.test.ts +246 -0
- package/src/queue-advanced-question.e2e.test.ts +316 -0
- package/src/queue-advanced-typing-interrupt.e2e.test.ts +146 -0
- package/src/queue-advanced-typing.e2e.test.ts +199 -0
- package/src/queue-drain-after-interactive-ui.e2e.test.ts +151 -0
- package/src/queue-interrupt-drain.e2e.test.ts +166 -0
- package/src/queue-question-select-drain.e2e.test.ts +327 -0
- package/src/runtime-idle-sweeper.ts +76 -0
- package/src/runtime-lifecycle.e2e.test.ts +651 -0
- package/src/schema.sql +174 -0
- package/src/sentry.ts +26 -0
- package/src/session-handler/agent-utils.ts +99 -0
- package/src/session-handler/event-stream-fixtures/real-session-action-buttons.jsonl +45 -0
- package/src/session-handler/event-stream-fixtures/real-session-footer-suppressed-on-pre-idle-interrupt.jsonl +40 -0
- package/src/session-handler/event-stream-fixtures/real-session-permission-external-file.jsonl +23 -0
- package/src/session-handler/event-stream-fixtures/real-session-task-normal.jsonl +22 -0
- package/src/session-handler/event-stream-fixtures/real-session-task-three-parallel-sleeps.jsonl +277 -0
- package/src/session-handler/event-stream-fixtures/real-session-task-user-interruption.jsonl +46 -0
- package/src/session-handler/event-stream-fixtures/session-abort-after-idle-race.jsonl +21 -0
- package/src/session-handler/event-stream-fixtures/session-concurrent-messages-serialized.jsonl +56 -0
- package/src/session-handler/event-stream-fixtures/session-explicit-abort.jsonl +44 -0
- package/src/session-handler/event-stream-fixtures/session-normal-completion.jsonl +29 -0
- package/src/session-handler/event-stream-fixtures/session-tool-call-noisy-stream.jsonl +29 -0
- package/src/session-handler/event-stream-fixtures/session-two-completions-same-session.jsonl +50 -0
- package/src/session-handler/event-stream-fixtures/session-user-interruption.jsonl +59 -0
- package/src/session-handler/event-stream-fixtures/session-voice-queued-followup.jsonl +52 -0
- package/src/session-handler/event-stream-state.test.ts +717 -0
- package/src/session-handler/event-stream-state.ts +706 -0
- package/src/session-handler/model-utils.ts +217 -0
- package/src/session-handler/opencode-session-event-log.ts +130 -0
- package/src/session-handler/thread-runtime-state.ts +247 -0
- package/src/session-handler/thread-session-runtime.ts +4440 -0
- package/src/session-handler.ts +15 -0
- package/src/session-search.test.ts +50 -0
- package/src/session-search.ts +148 -0
- package/src/session-title-rename.test.ts +130 -0
- package/src/skill-filter.test.ts +83 -0
- package/src/skill-filter.ts +42 -0
- package/src/startup-service.ts +200 -0
- package/src/startup-time.e2e.test.ts +373 -0
- package/src/store.ts +139 -0
- package/src/subagent-rate-limit-plugin.ts +218 -0
- package/src/system-message.test.ts +710 -0
- package/src/system-message.ts +814 -0
- package/src/task-runner.ts +725 -0
- package/src/task-schedule.test.ts +84 -0
- package/src/task-schedule.ts +317 -0
- package/src/test-utils.ts +451 -0
- package/src/thinking-utils.ts +61 -0
- package/src/thread-message-queue.e2e.test.ts +1350 -0
- package/src/tools.ts +430 -0
- package/src/undici.d.ts +12 -0
- package/src/undo-redo.e2e.test.ts +209 -0
- package/src/unnest-code-blocks.test.ts +713 -0
- package/src/unnest-code-blocks.ts +185 -0
- package/src/upgrade.ts +185 -0
- package/src/utils.test.ts +155 -0
- package/src/utils.ts +265 -0
- package/src/voice-attachment.ts +51 -0
- package/src/voice-handler.ts +908 -0
- package/src/voice-message.e2e.test.ts +1255 -0
- package/src/voice.test.ts +281 -0
- package/src/voice.ts +638 -0
- package/src/wait-session.ts +273 -0
- package/src/websockify.ts +101 -0
- package/src/worker-types.ts +64 -0
- package/src/worktree-lifecycle.e2e.test.ts +396 -0
- package/src/worktree-utils.ts +4 -0
- package/src/worktrees.test.ts +489 -0
- package/src/worktrees.ts +1370 -0
- package/src/xml.test.ts +38 -0
- package/src/xml.ts +121 -0
- package/README.md +0 -142
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts +0 -39
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/config.test.d.ts +0 -2
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -202
- package/dist/config.test.js.map +0 -1
- package/dist/detect.d.ts +0 -9
- package/dist/detect.d.ts.map +0 -1
- package/dist/detect.js +0 -40
- package/dist/detect.js.map +0 -1
- package/dist/detect.test.d.ts +0 -2
- package/dist/detect.test.d.ts.map +0 -1
- package/dist/detect.test.js +0 -26
- package/dist/detect.test.js.map +0 -1
- package/dist/docker.d.ts +0 -7
- package/dist/docker.d.ts.map +0 -1
- package/dist/docker.js +0 -17
- package/dist/docker.js.map +0 -1
- package/dist/docker.test.d.ts +0 -2
- package/dist/docker.test.d.ts.map +0 -1
- package/dist/docker.test.js +0 -12
- package/dist/docker.test.js.map +0 -1
- package/dist/health.d.ts +0 -31
- package/dist/health.d.ts.map +0 -1
- package/dist/health.js +0 -117
- package/dist/health.js.map +0 -1
- package/dist/health.test.d.ts +0 -2
- package/dist/health.test.d.ts.map +0 -1
- package/dist/health.test.js +0 -52
- package/dist/health.test.js.map +0 -1
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -15
- package/dist/index.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -8
- package/dist/index.test.js.map +0 -1
- package/dist/installer.d.ts +0 -10
- package/dist/installer.d.ts.map +0 -1
- package/dist/installer.js +0 -50
- package/dist/installer.js.map +0 -1
- package/dist/installer.test.d.ts +0 -2
- package/dist/installer.test.d.ts.map +0 -1
- package/dist/installer.test.js +0 -43
- package/dist/installer.test.js.map +0 -1
- package/dist/lifecycle.d.ts +0 -10
- package/dist/lifecycle.d.ts.map +0 -1
- package/dist/lifecycle.js +0 -45
- package/dist/lifecycle.js.map +0 -1
- package/dist/lifecycle.test.d.ts +0 -2
- package/dist/lifecycle.test.d.ts.map +0 -1
- package/dist/lifecycle.test.js +0 -20
- package/dist/lifecycle.test.js.map +0 -1
- package/dist/manifest.d.ts +0 -18
- package/dist/manifest.d.ts.map +0 -1
- package/dist/manifest.js +0 -30
- package/dist/manifest.js.map +0 -1
- package/dist/skills-baseline.d.ts +0 -7
- package/dist/skills-baseline.d.ts.map +0 -1
- package/dist/skills-baseline.js +0 -9
- package/dist/skills-baseline.js.map +0 -1
- package/dist/skills.d.ts +0 -110
- package/dist/skills.d.ts.map +0 -1
- package/dist/skills.js +0 -429
- package/dist/skills.js.map +0 -1
- package/dist/skills.test.d.ts +0 -2
- package/dist/skills.test.d.ts.map +0 -1
- package/dist/skills.test.js +0 -416
- package/dist/skills.test.js.map +0 -1
- package/dist/sync.d.ts +0 -10
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js +0 -39
- package/dist/sync.js.map +0 -1
- package/dist/tenant.d.ts +0 -13
- package/dist/tenant.d.ts.map +0 -1
- package/dist/tenant.js +0 -105
- package/dist/tenant.js.map +0 -1
- package/dist/tenant.test.d.ts +0 -2
- package/dist/tenant.test.d.ts.map +0 -1
- package/dist/tenant.test.js +0 -37
- package/dist/tenant.test.js.map +0 -1
- package/src/config.test.ts +0 -237
- package/src/detect.test.ts +0 -29
- package/src/detect.ts +0 -52
- package/src/docker.test.ts +0 -12
- package/src/docker.ts +0 -23
- package/src/health.test.ts +0 -61
- package/src/health.ts +0 -158
- package/src/index.test.ts +0 -8
- package/src/index.ts +0 -62
- package/src/installer.test.ts +0 -52
- package/src/installer.ts +0 -62
- package/src/lifecycle.test.ts +0 -23
- package/src/lifecycle.ts +0 -49
- package/src/manifest.ts +0 -42
- package/src/skills-baseline.ts +0 -14
- package/src/skills.test.ts +0 -503
- package/src/skills.ts +0 -512
- package/src/sync.ts +0 -53
- package/src/tenant.test.ts +0 -49
- package/src/tenant.ts +0 -120
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: manual-kimaki-upstream-adapt
|
|
3
|
+
description: >
|
|
4
|
+
Manual, file-by-file port of changes from remorses/kimaki into this repo.
|
|
5
|
+
Use when the user asks to "pull from kimaki", "port kimaki changes", or
|
|
6
|
+
"sync kimaki manually" without any automatic GitHub Actions syncing.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Manual kimaki upstream adaptation (file-by-file)
|
|
10
|
+
|
|
11
|
+
This workflow replaces any automatic upstream sync. You MUST do a manual, explicit, reviewable port from `remorses/kimaki` into this repository.
|
|
12
|
+
|
|
13
|
+
## Hard rules
|
|
14
|
+
|
|
15
|
+
- Never enable scheduled/automatic syncing in GitHub Actions.
|
|
16
|
+
- Never auto-push or auto-merge upstream changes. Prefer a local branch + PR.
|
|
17
|
+
- Always adapt for this repo (branding, paths, CI policy). Do not copy blindly.
|
|
18
|
+
- After making changes, always run TypeScript compile in `cli/`:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cd cli && pnpm tsc
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Choose the upstream change-set
|
|
25
|
+
|
|
26
|
+
Pick one:
|
|
27
|
+
|
|
28
|
+
1. **Commit range**: kimaki `base..head` (preferred if you know the commits)
|
|
29
|
+
2. **GitHub compare**: kimaki compare view between two refs/tags
|
|
30
|
+
3. **File target list**: you already know which files/features to port
|
|
31
|
+
|
|
32
|
+
Always record which kimaki ref(s) you used (branch/tag/commit SHA) in your PR description or notes.
|
|
33
|
+
|
|
34
|
+
## Get the list of changed files (file-by-file checklist)
|
|
35
|
+
|
|
36
|
+
Preferred (GitHub compare via `gh`):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
gh repo view remorses/kimaki
|
|
40
|
+
gh api "repos/remorses/kimaki/compare/<base>...<head>" --jq ".files[].filename"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Alternative (local clone in a separate directory):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
git clone --depth 1 https://github.com/remorses/kimaki.git ../kimaki
|
|
47
|
+
cd ../kimaki && git fetch --depth 1 origin <head>
|
|
48
|
+
git diff --name-only <base>..<head>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Port each file
|
|
52
|
+
|
|
53
|
+
For each file in the checklist:
|
|
54
|
+
|
|
55
|
+
1. Fetch the kimaki version (raw file at a specific ref).
|
|
56
|
+
2. Copy it into the matching location in this repo.
|
|
57
|
+
3. Apply the adaptation rules below.
|
|
58
|
+
4. If the file does not exist here, stop and decide: is it a real dependency for the feature, or kimaki-only baggage?
|
|
59
|
+
5. If the file exists but differs, merge carefully (do not revert unrelated local changes).
|
|
60
|
+
|
|
61
|
+
Raw fetch patterns (pick one):
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
curl -fsSL "https://raw.githubusercontent.com/remorses/kimaki/<ref>/<path>" -o "./tmp/upstream-kimaki-$(basename \"<path>\")"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
gh api "repos/remorses/kimaki/contents/<path>?ref=<ref>" --jq ".content" | base64 -d > "./tmp/upstream-kimaki-file"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Adaptation rules (always apply)
|
|
72
|
+
|
|
73
|
+
### Monorepo paths
|
|
74
|
+
|
|
75
|
+
- Skills live in `skills/<name>/SKILL.md` at repo root (canonical).
|
|
76
|
+
- Packaged `cli/skills/` is a copy generated by build/publish; do not treat it as the source of truth.
|
|
77
|
+
- Prefer changes inside `cli/` when the change is bot/runtime behavior.
|
|
78
|
+
- Do not add new tsconfig path aliases; use workspace deps instead.
|
|
79
|
+
|
|
80
|
+
### Naming / branding
|
|
81
|
+
|
|
82
|
+
When porting text, config, or package metadata:
|
|
83
|
+
|
|
84
|
+
- Prefer `otto` / `@otto-assistant/bridge` / `otto-assistant/bridge` over `kimaki` branding unless the code is explicitly legacy-compat.
|
|
85
|
+
- URLs/domains must match this project’s expectations (do not introduce kimaki domains unless explicitly required).
|
|
86
|
+
- When generating paths, prefer `OTTO_DATA_DIR` conventions; `KIMAKI_*` should remain only as explicitly deprecated/compat paths.
|
|
87
|
+
|
|
88
|
+
### CI policy (no automation)
|
|
89
|
+
|
|
90
|
+
- Do not introduce new scheduled workflows for upstream syncing.
|
|
91
|
+
- Any upstream-related workflow must be `workflow_dispatch` only.
|
|
92
|
+
- No bot accounts committing to `main` as part of an upstream sync flow.
|
|
93
|
+
|
|
94
|
+
## Validation checklist (must pass)
|
|
95
|
+
|
|
96
|
+
At minimum:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
cd cli && pnpm tsc
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
If you touched message handling / queueing / runtime flow, also run:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
cd cli && pnpm test -u --run
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Conflict resolution checklist
|
|
109
|
+
|
|
110
|
+
If the kimaki change conflicts with this repo:
|
|
111
|
+
|
|
112
|
+
- Prefer keeping this repo’s packaging identity (`@otto-assistant/bridge`) and workspace layout.
|
|
113
|
+
- Prefer keeping CI “manual only” policy.
|
|
114
|
+
- Prefer keeping local bugfixes even if upstream differs; re-apply the upstream intent in a way that compiles and passes tests here.
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: new-skill
|
|
3
|
+
description: >
|
|
4
|
+
Best practices for creating a SKILL.md file. Covers file structure,
|
|
5
|
+
frontmatter, writing style, and where to place skills in a repository.
|
|
6
|
+
Use when the user wants to create a new skill, update an existing
|
|
7
|
+
skill, write a SKILL.md, or asks how skills work.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Creating a SKILL.md
|
|
11
|
+
|
|
12
|
+
A skill is a markdown file that teaches an AI agent a specific workflow, tool, or pattern. Skills are loaded into context when the agent recognizes a task that matches the skill's description.
|
|
13
|
+
|
|
14
|
+
## File location
|
|
15
|
+
|
|
16
|
+
Place the skill in a top-level `skills/` folder at the **repository root**:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
skills/<skill-name>/SKILL.md
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
For example: `skills/critique/SKILL.md`, `skills/errore/SKILL.md`.
|
|
23
|
+
|
|
24
|
+
Do **not** put skills inside package folders like `cli/skills/`, `website/skills/`, or `packages/foo/skills/` unless the repository intentionally syncs or mirrors them there for internal tooling. The canonical repository layout for a skill you are creating is always the root-level `skills/` directory.
|
|
25
|
+
|
|
26
|
+
The folder name should match the skill name in kebab-case. Each skill gets its own folder so it can include companion files if needed (scripts, templates, references).
|
|
27
|
+
|
|
28
|
+
For personal skills that follow you across all repos and are not meant for distribution in a GitHub repository, place them in:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
~/.config/opencode/skills/<skill-name>/SKILL.md
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Personal skills are only available on your machine. Repository skills are shared with everyone who clones the repo.
|
|
35
|
+
|
|
36
|
+
## Editing skills synced from other repositories
|
|
37
|
+
|
|
38
|
+
Some projects (like otto) sync skills from external GitHub repositories into a local skills folder. If a skill was synced from another repo, **never edit the synced copy**. The synced folder is overwritten on every sync and your changes will be lost.
|
|
39
|
+
|
|
40
|
+
Instead, find the source repository where the skill originates and edit the SKILL.md there. The sync process will pick up the changes on the next run. If you are unsure which repo a skill comes from, check for a sync script (e.g. `scripts/sync-skills.ts`) or a `source-repo` field in the skill's frontmatter.
|
|
41
|
+
|
|
42
|
+
## Distribution and installation
|
|
43
|
+
|
|
44
|
+
When you publish skills in a GitHub repository, other users can install them with the `skills` CLI:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npx skills add owner/repo
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This downloads the skills from the repo and symlinks them into the user's agent directories. Add this to your repo's README so users know how to install:
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
## Install skill for AI agents
|
|
54
|
+
|
|
55
|
+
\`\`\`bash
|
|
56
|
+
npx -y skills add owner/repo
|
|
57
|
+
\`\`\`
|
|
58
|
+
|
|
59
|
+
This installs [skills](https://skills.sh) for AI coding agents like
|
|
60
|
+
Claude Code, Cursor, Windsurf, and others. Skills teach agents the
|
|
61
|
+
workflows, patterns, and tools specific to this project.
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Frontmatter
|
|
65
|
+
|
|
66
|
+
Every SKILL.md starts with YAML frontmatter containing two required fields:
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
---
|
|
70
|
+
name: skill-name
|
|
71
|
+
description: >
|
|
72
|
+
One to three sentences explaining what this skill does and when to use it.
|
|
73
|
+
Start with a noun or verb phrase. Include trigger conditions so the agent
|
|
74
|
+
knows when to load this skill automatically.
|
|
75
|
+
---
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- **name**: kebab-case identifier matching the folder name
|
|
79
|
+
- **description**: this is the most important field. The agent reads descriptions of all available skills and decides which to load based on this text. Be specific about when the skill applies. Include keywords the user might say.
|
|
80
|
+
|
|
81
|
+
Good description example:
|
|
82
|
+
```yaml
|
|
83
|
+
description: >
|
|
84
|
+
Git diff viewer. Renders diffs as web pages, images, and PDFs
|
|
85
|
+
with syntax highlighting. Use this skill when working with critique
|
|
86
|
+
for showing diffs, generating diff URLs, or selective hunk staging.
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Bad description example:
|
|
90
|
+
```yaml
|
|
91
|
+
description: A helpful tool for developers.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## File structure
|
|
95
|
+
|
|
96
|
+
After the frontmatter, write the skill as a normal markdown document. Follow this general structure:
|
|
97
|
+
|
|
98
|
+
```markdown
|
|
99
|
+
# Skill Title
|
|
100
|
+
|
|
101
|
+
One paragraph explaining what this skill is and why it exists.
|
|
102
|
+
|
|
103
|
+
## Key section
|
|
104
|
+
|
|
105
|
+
Core rules, commands, or patterns. Use code blocks for commands
|
|
106
|
+
and examples. Use numbered lists for sequential steps.
|
|
107
|
+
|
|
108
|
+
## Another section
|
|
109
|
+
|
|
110
|
+
More detail, edge cases, gotchas, tips.
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
There is no rigid template. Structure the content in whatever way communicates the workflow most clearly. Some skills are short (20 lines for a simple CLI tool), others are long (600+ lines for a complex pattern like errore).
|
|
114
|
+
|
|
115
|
+
## Writing style
|
|
116
|
+
|
|
117
|
+
**Write for an AI agent, not a human.** The reader is a language model that will follow these instructions while helping a user. This changes how you write:
|
|
118
|
+
|
|
119
|
+
- **Be direct and imperative.** Say "Always run `tool --help` first" not "You might want to consider running the help command."
|
|
120
|
+
- **Include concrete commands and code.** The agent needs copy-pasteable examples, not abstract descriptions.
|
|
121
|
+
- **State rules as rules.** Use "Never", "Always", "Must" when something is non-negotiable.
|
|
122
|
+
- **Show the right way, not just the wrong way.** After saying what not to do, immediately show what to do instead.
|
|
123
|
+
- **Use code blocks with language hints.** The agent uses these to generate correct code.
|
|
124
|
+
- **Keep prose short between code blocks.** One or two sentences of explanation, then an example.
|
|
125
|
+
- **Call out common mistakes.** If there is a gotcha the agent will likely hit, warn about it explicitly.
|
|
126
|
+
|
|
127
|
+
## What makes a good skill
|
|
128
|
+
|
|
129
|
+
A good skill captures **hard-won knowledge** that is not obvious from reading docs or source code alone. Focus on:
|
|
130
|
+
|
|
131
|
+
- **Correct usage patterns** — the commands and code that actually work, not just what the docs say
|
|
132
|
+
- **Gotchas and edge cases** — things that break in subtle ways (e.g. "libsql transaction() with file::memory: silently uses a separate empty database unless you add ?cache=shared")
|
|
133
|
+
- **Opinionated defaults** — when there are multiple ways to do something, state which way to use and why
|
|
134
|
+
- **Integration context** — how this tool fits into the broader workflow (e.g. "Always use critique when showing diffs to Discord users because they cannot see terminal output")
|
|
135
|
+
|
|
136
|
+
A bad skill is just a copy of the tool's README or man page. If the agent could figure it out from `--help`, it does not need a skill for it.
|
|
137
|
+
|
|
138
|
+
## Keep the SKILL.md thin — point at canonical docs
|
|
139
|
+
|
|
140
|
+
The best skills are **thin**. They contain almost no documentation themselves. Their only job is to tell the agent where to find the full, fresh docs and to forbid truncation. This keeps docs in one place and stops the skill from going stale.
|
|
141
|
+
|
|
142
|
+
There are two variants:
|
|
143
|
+
|
|
144
|
+
**1. CLI tools → run `<tool> --help`**
|
|
145
|
+
|
|
146
|
+
Put as much documentation as possible into the CLI itself — command descriptions, option help text, examples. The skill then says:
|
|
147
|
+
|
|
148
|
+
```markdown
|
|
149
|
+
Every time you use mytool, you MUST run:
|
|
150
|
+
|
|
151
|
+
\`\`\`bash
|
|
152
|
+
mytool --help # NEVER pipe to head/tail, read the full output
|
|
153
|
+
\`\`\`
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Exception: some CLIs have a dedicated `<tool> skill` subcommand when `--help` is not rich enough (e.g. `playwriter skill`). Prefer `--help` by default and only use a custom subcommand when the CLI ships one.
|
|
157
|
+
|
|
158
|
+
**2. Libraries and projects → curl the raw README**
|
|
159
|
+
|
|
160
|
+
For libraries, frameworks, and pattern skills, keep the canonical docs in `README.md` and have the skill curl the raw file from the main branch so the agent always reads the latest version:
|
|
161
|
+
|
|
162
|
+
```markdown
|
|
163
|
+
Every time you work with myproject, you MUST fetch the latest README:
|
|
164
|
+
|
|
165
|
+
\`\`\`bash
|
|
166
|
+
curl -s https://raw.githubusercontent.com/owner/repo/main/README.md # NEVER pipe to head/tail
|
|
167
|
+
\`\`\`
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**In monorepos/workspaces, always put the README at the repository root** — not inside individual package folders. Package-level READMEs don't get read by anyone. One root README is the single source of truth for the whole project. The skill should curl the root README path (`.../main/README.md`), not a package subdirectory.
|
|
171
|
+
|
|
172
|
+
**Never truncate docs output.** The agent must read `--help` and curl'd README output **in full**. Never pipe through `head`, `tail`, `sed -n`, `awk`, `| less`, or any command that strips or limits lines. Critical rules are spread throughout the doc, not just at the top. Agents truncate frequently and miss important context — forbid it explicitly in the skill body.
|
|
173
|
+
|
|
174
|
+
## Examples from real skills
|
|
175
|
+
|
|
176
|
+
**Simple CLI tool skill** (gitchamber — 93 lines):
|
|
177
|
+
```markdown
|
|
178
|
+
---
|
|
179
|
+
name: gitchamber
|
|
180
|
+
description: CLI to download npm packages, PyPI packages, crates, or GitHub
|
|
181
|
+
repo source code into node_modules/.gitchamber/ for analysis. Use when you
|
|
182
|
+
need to read a package's inner workings, documentation, examples, or source
|
|
183
|
+
code.
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
# gitchamber
|
|
187
|
+
|
|
188
|
+
CLI to download source code for npm packages, PyPI packages, crates.io
|
|
189
|
+
crates, or GitHub repos into `node_modules/.gitchamber/`.
|
|
190
|
+
|
|
191
|
+
Always run `gitchamber --help` first. The help output has all commands,
|
|
192
|
+
options, and examples.
|
|
193
|
+
|
|
194
|
+
## Fetch packages
|
|
195
|
+
|
|
196
|
+
\`\`\`bash
|
|
197
|
+
chamber zod
|
|
198
|
+
chamber pypi:requests
|
|
199
|
+
chamber github:owner/repo
|
|
200
|
+
\`\`\`
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Pattern/convention skill** (errore — 647 lines):
|
|
204
|
+
```markdown
|
|
205
|
+
---
|
|
206
|
+
name: errore
|
|
207
|
+
description: >
|
|
208
|
+
errore is Go-style error handling for TypeScript: return errors instead
|
|
209
|
+
of throwing them. ALWAYS read this skill when a repo uses the errore
|
|
210
|
+
"errors as values" convention.
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
# errore
|
|
214
|
+
|
|
215
|
+
Go-style error handling for TypeScript. Functions return errors instead
|
|
216
|
+
of throwing them.
|
|
217
|
+
|
|
218
|
+
## Rules
|
|
219
|
+
|
|
220
|
+
1. Always `import * as errore from 'errore'` — namespace import
|
|
221
|
+
2. Never throw for expected failures — return errors as values
|
|
222
|
+
3. Use `createTaggedError` for domain errors
|
|
223
|
+
...
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Notice both follow the same pattern: minimal frontmatter, clear title, actionable content with code examples. The simple tool skill is short and focused on commands. The pattern skill is long and focused on rules and conventions.
|
|
227
|
+
|
|
228
|
+
## Checklist
|
|
229
|
+
|
|
230
|
+
Before saving a new skill:
|
|
231
|
+
|
|
232
|
+
1. Does the **description** clearly state when to load this skill? Would an agent reading just the description know whether to load it?
|
|
233
|
+
2. Does the **name** match the folder name?
|
|
234
|
+
3. Does the skill **point at a single source of truth** (README curl URL or `--help` command) instead of duplicating docs inline?
|
|
235
|
+
4. Is there an explicit **"never truncate"** rule next to any docs command?
|
|
236
|
+
5. Are there **concrete code examples** for the main workflows?
|
|
237
|
+
6. Did you capture the **gotchas** — the things that took trial and error to figure out?
|