one-code-extension 0.1.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +200 -172
  3. package/agents/explore.md +9 -6
  4. package/agents/general-purpose.md +1 -1
  5. package/agents/plan.md +6 -4
  6. package/docs/guide/README.md +52 -0
  7. package/docs/guide/bring-your-claude-code-setup.md +126 -0
  8. package/docs/guide/configuration.md +171 -0
  9. package/docs/guide/differences-from-claude-code.md +150 -0
  10. package/docs/guide/doctor.md +86 -0
  11. package/docs/guide/hooks.md +109 -0
  12. package/docs/guide/installation.md +124 -0
  13. package/docs/guide/permissions-modes-and-auto-mode.md +450 -0
  14. package/docs/guide/providers-and-models.md +194 -0
  15. package/docs/guide/reference.md +224 -0
  16. package/docs/guide/sessions-and-context.md +190 -0
  17. package/docs/guide/skills-plugins-and-mcp.md +176 -0
  18. package/docs/guide/subagents-and-workflows.md +193 -0
  19. package/docs/guide/tasks-and-background-work.md +111 -0
  20. package/docs/guide/terminal-interface.md +155 -0
  21. package/docs/guide/tools.md +175 -0
  22. package/docs/guide/troubleshooting.md +175 -0
  23. package/extensions/ask-user/index.ts +65 -71
  24. package/extensions/ask-user/questions.ts +15 -28
  25. package/extensions/ask-user/widget.ts +533 -0
  26. package/extensions/auto-mode/actions.ts +9 -26
  27. package/extensions/auto-mode/classifier-prompt.ts +127 -0
  28. package/extensions/auto-mode/classifier.ts +305 -227
  29. package/extensions/auto-mode/config.ts +279 -77
  30. package/extensions/auto-mode/defaults.ts +17 -60
  31. package/extensions/auto-mode/instructions.ts +2 -1
  32. package/extensions/auto-mode/model-picker.ts +53 -31
  33. package/extensions/auto-mode/model-select.ts +153 -82
  34. package/extensions/auto-mode/paths.ts +13 -1
  35. package/extensions/auto-mode/pause.ts +8 -0
  36. package/extensions/auto-mode/prompt.ts +205 -238
  37. package/extensions/auto-mode/recoverability.ts +229 -0
  38. package/extensions/auto-mode/rules.ts +92 -75
  39. package/extensions/auto-mode/safety-floor.ts +43 -12
  40. package/extensions/auto-mode/sensitive.ts +11 -0
  41. package/extensions/auto-mode/setup-run.ts +245 -0
  42. package/extensions/auto-mode/setup.ts +235 -0
  43. package/extensions/auto-mode/shell-analysis.ts +332 -26
  44. package/extensions/auto-mode/transcript.ts +102 -0
  45. package/extensions/background/index.ts +256 -43
  46. package/extensions/background/monitor-batch.ts +58 -0
  47. package/extensions/background/registry.ts +9 -0
  48. package/extensions/background/wakeup.ts +45 -0
  49. package/extensions/bash/background.ts +47 -22
  50. package/extensions/bash/guards.ts +229 -0
  51. package/extensions/bash/index.ts +81 -19
  52. package/extensions/branding/index.ts +44 -18
  53. package/extensions/branding/startup.ts +23 -8
  54. package/extensions/claude-compat/index.ts +17 -2
  55. package/extensions/claude-context/index.ts +41 -12
  56. package/extensions/clear/index.ts +27 -0
  57. package/extensions/compaction/fit.ts +121 -0
  58. package/extensions/compaction/index.ts +176 -71
  59. package/extensions/compaction/prompt.ts +21 -1
  60. package/extensions/context-budget/budget.ts +61 -0
  61. package/extensions/context-budget/index.ts +66 -0
  62. package/extensions/context-management/index.ts +40 -16
  63. package/extensions/doctor/build.ts +226 -0
  64. package/extensions/doctor/cli.ts +99 -0
  65. package/extensions/doctor/compat.ts +532 -0
  66. package/extensions/doctor/dependencies.ts +186 -0
  67. package/extensions/doctor/fix-prompt.ts +125 -0
  68. package/extensions/doctor/index.ts +308 -0
  69. package/extensions/doctor/models.ts +231 -0
  70. package/extensions/doctor/presets.ts +208 -0
  71. package/extensions/doctor/report.ts +189 -0
  72. package/extensions/doctor/update-lookup.ts +46 -0
  73. package/extensions/doctor/viewer.ts +124 -0
  74. package/extensions/effort/index.ts +41 -4
  75. package/extensions/effort/slider.ts +33 -2
  76. package/extensions/file-tracker/index.ts +143 -20
  77. package/extensions/file-tracker/replay.ts +46 -0
  78. package/extensions/file-tracker/tracker.ts +51 -4
  79. package/extensions/footer/footer-line.ts +207 -0
  80. package/extensions/footer/index.ts +152 -0
  81. package/extensions/footer/pr.ts +53 -0
  82. package/extensions/hooks/executor.ts +57 -20
  83. package/extensions/hooks/formatter-notice.ts +76 -0
  84. package/extensions/hooks/index.ts +314 -73
  85. package/extensions/hooks/matcher.ts +35 -1
  86. package/extensions/hooks/plugin-hooks.ts +3 -3
  87. package/extensions/hooks/protocol.ts +58 -0
  88. package/extensions/hooks/subagent-bridge.ts +77 -0
  89. package/extensions/hooks/trust.ts +15 -4
  90. package/extensions/init/index.ts +26 -0
  91. package/extensions/init/prompt.ts +40 -0
  92. package/extensions/interrupted/index.ts +35 -0
  93. package/extensions/interrupted/line.ts +9 -0
  94. package/extensions/lib/abort.ts +15 -0
  95. package/extensions/lib/agent-loader.ts +183 -0
  96. package/extensions/lib/anthropic-payload.ts +15 -0
  97. package/extensions/lib/atomic-write.ts +56 -0
  98. package/extensions/lib/bridge-watch.ts +20 -0
  99. package/extensions/lib/cache-retention.ts +60 -0
  100. package/extensions/lib/capability-index.ts +466 -0
  101. package/extensions/lib/claude-context.ts +318 -27
  102. package/extensions/lib/claude-settings.ts +64 -0
  103. package/extensions/lib/consent-preview.ts +30 -0
  104. package/extensions/lib/deferred.ts +144 -13
  105. package/extensions/lib/favorites.ts +43 -0
  106. package/extensions/lib/fetch-timeout.ts +15 -0
  107. package/extensions/lib/frontmatter.ts +31 -0
  108. package/extensions/lib/git.ts +44 -2
  109. package/extensions/lib/hook-gate.ts +90 -0
  110. package/extensions/lib/interrupt.ts +94 -0
  111. package/extensions/lib/mcp-overrides.ts +61 -0
  112. package/extensions/lib/mcp-share.ts +25 -0
  113. package/extensions/lib/mcp-status.ts +34 -0
  114. package/extensions/lib/memory.ts +41 -6
  115. package/extensions/lib/model-facts.generated.json +2480 -0
  116. package/extensions/lib/model-facts.ts +162 -0
  117. package/extensions/lib/model-policy.ts +145 -189
  118. package/extensions/lib/model-tier.ts +480 -64
  119. package/extensions/lib/model-unusable.ts +37 -0
  120. package/extensions/lib/notifications.ts +320 -1
  121. package/extensions/lib/one-code-settings.ts +63 -0
  122. package/extensions/lib/original-command.ts +71 -0
  123. package/extensions/lib/package-version.ts +31 -0
  124. package/extensions/lib/paths.ts +39 -4
  125. package/extensions/lib/permission-gate.ts +192 -0
  126. package/extensions/lib/persisted-output.ts +18 -0
  127. package/extensions/lib/pi-ai-estimate.ts +160 -0
  128. package/extensions/lib/pi-version.ts +1 -1
  129. package/extensions/lib/plan-mode-channels.ts +11 -0
  130. package/extensions/lib/plugin-overrides.ts +24 -0
  131. package/extensions/lib/plugin-root.ts +44 -0
  132. package/extensions/lib/plugins.ts +233 -54
  133. package/extensions/lib/prefix-warm-gate.ts +157 -0
  134. package/extensions/lib/process-tree.ts +56 -0
  135. package/extensions/lib/reminders.ts +321 -68
  136. package/extensions/lib/scratchpad.ts +11 -8
  137. package/extensions/lib/session-lifecycle.ts +28 -0
  138. package/extensions/lib/settings-channels.ts +14 -0
  139. package/extensions/lib/shell-tasks.ts +54 -0
  140. package/extensions/lib/skill-overrides.ts +86 -0
  141. package/extensions/lib/skill-scan.ts +110 -0
  142. package/extensions/lib/text-width.ts +267 -0
  143. package/extensions/lib/tui-render.ts +281 -54
  144. package/extensions/lib/usage-bus.ts +75 -0
  145. package/extensions/lib/usage-tracker.ts +67 -0
  146. package/extensions/lib/worktree-isolation.ts +170 -0
  147. package/extensions/lsp/client.ts +69 -12
  148. package/extensions/lsp/format.ts +12 -2
  149. package/extensions/lsp/index.ts +273 -84
  150. package/extensions/lsp/install-hints.ts +43 -0
  151. package/extensions/lsp/keep-alive.ts +19 -0
  152. package/extensions/lsp/plugin-servers.ts +331 -0
  153. package/extensions/lsp/watcher.ts +157 -0
  154. package/extensions/mcp/announce.ts +99 -0
  155. package/extensions/mcp/client.ts +181 -22
  156. package/extensions/mcp/config.ts +55 -24
  157. package/extensions/mcp/index.ts +586 -86
  158. package/extensions/mcp/oauth/browser.ts +26 -0
  159. package/extensions/mcp/oauth/callback.ts +104 -0
  160. package/extensions/mcp/oauth/flow.ts +68 -0
  161. package/extensions/mcp/oauth/provider.ts +147 -0
  162. package/extensions/mcp/oauth/store.ts +86 -0
  163. package/extensions/mcp/panel/keys.ts +34 -0
  164. package/extensions/mcp/panel/model.ts +62 -0
  165. package/extensions/mcp/panel/render.ts +141 -0
  166. package/extensions/mcp/panel/state.ts +108 -0
  167. package/extensions/mcp/schema.ts +83 -6
  168. package/extensions/mcp/trust.ts +340 -0
  169. package/extensions/memory/entries.ts +163 -0
  170. package/extensions/memory/index.ts +119 -2
  171. package/extensions/memory/open-external.ts +97 -0
  172. package/extensions/memory/panel.ts +124 -0
  173. package/extensions/model-default/index.ts +74 -0
  174. package/extensions/notebook/index.ts +36 -18
  175. package/extensions/notebook/notebook.ts +110 -17
  176. package/extensions/permissions/index.ts +1012 -247
  177. package/extensions/permissions/matcher.ts +488 -57
  178. package/extensions/permissions/modes.ts +55 -7
  179. package/extensions/permissions/project-trust.ts +81 -0
  180. package/extensions/permissions/protected-paths.ts +16 -3
  181. package/extensions/permissions/rule-prose.ts +79 -0
  182. package/extensions/permissions/session-grant.ts +91 -0
  183. package/extensions/permissions/settings.ts +112 -33
  184. package/extensions/permissions/subagent-gate.ts +57 -0
  185. package/extensions/plan-mode/index.ts +143 -33
  186. package/extensions/plan-mode/reminder.ts +16 -19
  187. package/extensions/plan-mode/viewer.ts +40 -31
  188. package/extensions/plugins/counts.ts +68 -0
  189. package/extensions/plugins/index.ts +496 -32
  190. package/extensions/plugins/install/install.ts +167 -0
  191. package/extensions/plugins/install/paths.ts +23 -0
  192. package/extensions/plugins/install/registry.ts +72 -0
  193. package/extensions/plugins/marketplace/git.ts +103 -0
  194. package/extensions/plugins/marketplace/official.ts +36 -0
  195. package/extensions/plugins/marketplace/parse.ts +94 -0
  196. package/extensions/plugins/marketplace/registry.ts +60 -0
  197. package/extensions/plugins/marketplace/sync.ts +146 -0
  198. package/extensions/plugins/marketplace/types.ts +128 -0
  199. package/extensions/plugins/panel/keys.ts +52 -0
  200. package/extensions/plugins/panel/render.ts +315 -0
  201. package/extensions/plugins/panel/rows.ts +230 -0
  202. package/extensions/plugins/panel/state.ts +333 -0
  203. package/extensions/recap/index.ts +215 -0
  204. package/extensions/recap/prompt.ts +44 -0
  205. package/extensions/recap/scheduler.ts +87 -0
  206. package/extensions/search-tools/index.ts +0 -0
  207. package/extensions/search-tools/tools.ts +7 -5
  208. package/extensions/skill/index.ts +360 -34
  209. package/extensions/skill/invoke.ts +185 -0
  210. package/extensions/skill/listing.ts +21 -0
  211. package/extensions/skill/panel/keys.ts +41 -0
  212. package/extensions/skill/panel/render.ts +91 -0
  213. package/extensions/skill/panel/state.ts +115 -0
  214. package/extensions/spinner/index.ts +110 -0
  215. package/extensions/spinner/line.ts +51 -0
  216. package/extensions/spinner/verbs.ts +201 -0
  217. package/extensions/subagents/agents.ts +88 -44
  218. package/extensions/subagents/default-model.ts +62 -32
  219. package/extensions/subagents/delegation-steer.ts +23 -0
  220. package/extensions/subagents/hand-back-review.ts +67 -0
  221. package/extensions/subagents/index.ts +1545 -346
  222. package/extensions/subagents/live-runs.ts +293 -0
  223. package/extensions/subagents/model-select.ts +252 -82
  224. package/extensions/subagents/outcome.ts +90 -0
  225. package/extensions/subagents/panel-keys.ts +41 -0
  226. package/extensions/subagents/panel-render.ts +357 -0
  227. package/extensions/subagents/panel-widget.ts +330 -0
  228. package/extensions/subagents/pending-claim.ts +45 -0
  229. package/extensions/subagents/prose.ts +105 -0
  230. package/extensions/subagents/runner.ts +674 -0
  231. package/extensions/subagents/runs.ts +68 -1
  232. package/extensions/subagents/send-to-main-tool.ts +55 -0
  233. package/extensions/subagents/session-turns.ts +138 -0
  234. package/extensions/subagents/shell-panel.ts +198 -0
  235. package/extensions/subagents/usage.ts +16 -4
  236. package/extensions/subagents/worktree.ts +13 -0
  237. package/extensions/system-prompt/environment.ts +5 -3
  238. package/extensions/system-prompt/git-status.ts +93 -0
  239. package/extensions/system-prompt/index.ts +23 -1
  240. package/extensions/system-prompt/template.ts +34 -4
  241. package/extensions/system-prompt/tiers/common.ts +31 -6
  242. package/extensions/system-prompt/tiers/low.ts +13 -3
  243. package/extensions/system-prompt/tiers/mid.ts +21 -8
  244. package/extensions/system-reminder/index.ts +53 -9
  245. package/extensions/tasks/index.ts +65 -16
  246. package/extensions/tasks/store.ts +76 -3
  247. package/extensions/tool-search/announce.ts +42 -0
  248. package/extensions/tool-search/index.ts +136 -13
  249. package/extensions/turn-duration/index.ts +60 -0
  250. package/extensions/turn-duration/line.ts +22 -0
  251. package/extensions/turn-duration/span.ts +41 -0
  252. package/extensions/turn-duration/verbs.ts +24 -0
  253. package/extensions/web/backends.ts +421 -0
  254. package/extensions/web/index.ts +178 -21
  255. package/extensions/web-fetch/index.ts +74 -18
  256. package/extensions/web-fetch/summarize.ts +1 -1
  257. package/extensions/workflow/agent-session.ts +182 -112
  258. package/extensions/workflow/globals.ts +129 -106
  259. package/extensions/workflow/index.ts +343 -28
  260. package/extensions/workflow/records.ts +118 -0
  261. package/extensions/workflow/run-manager.ts +80 -31
  262. package/extensions/workflow/saved-workflows.ts +2 -1
  263. package/extensions/workflow/script-worker.mjs +110 -0
  264. package/extensions/workflow/types.ts +74 -8
  265. package/extensions/workflow/viewer.ts +562 -0
  266. package/extensions/workflow/vm-runtime.ts +118 -22
  267. package/extensions/workflow/widget.ts +126 -18
  268. package/extensions/worktree/guards.ts +240 -0
  269. package/extensions/worktree/index.ts +30 -5
  270. package/extensions/worktree/rewrite.ts +32 -16
  271. package/package.json +20 -10
  272. package/skills/code-review/SKILL.md +165 -0
  273. package/skills/fewer-permission-prompts/SKILL.md +61 -0
  274. package/skills/security-review/SKILL.md +178 -0
  275. package/skills/simplify/SKILL.md +70 -0
  276. package/themes/{one-code-light.json → onecode-light.json} +6 -1
  277. package/themes/{one-code.json → onecode.json} +6 -1
  278. package/types/app.d.ts +8 -1
  279. package/types/community-packages.d.ts +45 -2
  280. package/docs/decisions/auto-mode.md +0 -526
  281. package/docs/decisions/branding.md +0 -127
  282. package/docs/decisions/code-review-remediation.md +0 -106
  283. package/docs/decisions/compaction.md +0 -140
  284. package/docs/decisions/distribution.md +0 -168
  285. package/docs/decisions/hooks.md +0 -64
  286. package/docs/decisions/lsp.md +0 -58
  287. package/docs/decisions/mcp.md +0 -104
  288. package/docs/decisions/memory-state.md +0 -170
  289. package/docs/decisions/model-policy.md +0 -126
  290. package/docs/decisions/modes.md +0 -178
  291. package/docs/decisions/skills-plugins.md +0 -56
  292. package/docs/decisions/subagents-workflows.md +0 -225
  293. package/docs/decisions/system-prompt.md +0 -98
  294. package/docs/decisions/tools.md +0 -407
  295. package/docs/decisions/tui.md +0 -217
  296. package/docs/decisions.md +0 -148
  297. package/extensions/subagents/child.ts +0 -414
  298. package/extensions/subagents/rpc-turns.ts +0 -123
  299. package/extensions/todo/index.ts +0 -133
  300. package/extensions/workflow/permission-gate.ts +0 -71
@@ -0,0 +1,176 @@
1
+ # Skills, plugins, and MCP
2
+
3
+ One Code runs Agent Skills, Claude Code plugins, and MCP servers from your
4
+ existing configuration. This page covers using each and the panels that
5
+ manage them.
6
+
7
+ ## Skills
8
+
9
+ An Agent Skill is a packaged set of instructions for a kind of task. One
10
+ Code discovers skills from these places, in order of precedence:
11
+
12
+ 1. `.claude/skills/` in the project
13
+ 2. `~/.claude/skills/` and `~/.agents/skills/`
14
+ 3. Skills from installed plugins
15
+ 4. The bundled catalog
16
+
17
+ A skill of the same name earlier in the list wins.
18
+
19
+ The model calls a skill with the `skill` tool when a task matches its
20
+ description. You can also run one yourself by typing its name as a slash
21
+ command, as in Claude Code: `/simplify`, `/code-review`, or any skill from
22
+ `.claude/skills/`. Anything after the name is passed to the skill as
23
+ arguments. Plugin skills keep their plugin prefix and are run as
24
+ `/skill:<plugin>:<name>`. pi's `/skill:<name>` form works for every skill.
25
+
26
+ A skill's slash command is not created when the name is already taken by a
27
+ built-in command, a `.claude/commands/` template, or another skill.
28
+
29
+ ### Manage skills
30
+
31
+ `/skills` opens the skills panel. Each skill has one of four states, which
32
+ control how the model sees it:
33
+
34
+ | State | Effect |
35
+ |---|---|
36
+ | On | The model sees the full description and can call the skill. |
37
+ | Name only | The model sees the name but not the description. |
38
+ | User only | You can run it as a command; the model does not see it. |
39
+ | Off | Not available to anyone. |
40
+
41
+ **↑** and **↓** move, **Enter** or **Space** cycle the state, **/**
42
+ searches, **t** sorts by name or state, **Esc** closes. Plugin skills are
43
+ managed from `/plugins` instead. States are saved under One Code's plugin
44
+ directory, never in the skill files.
45
+
46
+ ### Bundled skills
47
+
48
+ Four of Claude Code's built-in skills ship with One Code:
49
+
50
+ - `simplify`: clean up recently changed code for clarity.
51
+ - `code-review`: review changes for correctness bugs.
52
+ - `security-review`: review changes for security issues.
53
+ - `fewer-permission-prompts`: scan your usage and propose an allowlist.
54
+
55
+ A skill of the same name in your own `.claude/skills/` takes precedence.
56
+
57
+ ### Skills not bundled
58
+
59
+ The bundle omits the Claude Code skills that depend on services One Code
60
+ does not have:
61
+
62
+ | Group | Skills omitted |
63
+ |---|---|
64
+ | Hosted artifacts and design | `design`, `design-sync`, `dataviz`, the `artifact-*` guides, and the dashboard, report, table, explainer, plan, and whiteboard publishers. |
65
+ | Claude Code configuration, account, and desktop workflows | `update-config`, `keybindings-help`, `claude-in-chrome`, `debug`, `usage`, `explain-usage`, `setup-cowork`, `schedule` cloud routines, `batch`, and `claude-code-guide`. |
66
+ | Run-skill generation | `run` and `run-skill-generator`. Use project-local run skills instead. |
67
+ | API reference | `claude-api`. |
68
+
69
+ One Code provides `/init` and `/loop` itself. Commit and pull-request
70
+ workflows are available through the `commit-commands` plugin.
71
+
72
+ You can add your own skills under `.claude/skills/`. A skill that requires a
73
+ service or tool still needs that service or tool configured.
74
+
75
+ ## Custom commands
76
+
77
+ Markdown files in `.claude/commands/` (project) and `~/.claude/commands/`
78
+ (user) become slash commands with the file's name, as in Claude Code.
79
+ `$ARGUMENTS` is replaced with what you type after the command. Plugin
80
+ commands are namespaced as `/<plugin>:<command>`, and may run shell
81
+ snippets from their body; oversized output is written to a file rather than
82
+ truncated.
83
+
84
+ ## Plugins
85
+
86
+ A plugin bundles agents, skills, commands, hooks, MCP servers, and
87
+ language-server configuration. One Code picks up plugins installed under
88
+ `~/.claude/plugins` and makes their contents available, each namespaced by
89
+ plugin so names never collide with yours. The `enabledPlugins` key in your
90
+ Claude Code settings is honored.
91
+
92
+ Run `/plugins` to open the marketplace panel. Its four tabs are:
93
+
94
+ - **Discover**: browse plugins from your marketplaces. Type to search,
95
+ **Space** to install, **Enter** for details.
96
+ - **Installed**: see what is installed and turn plugins, or individual
97
+ skills within them, on or off. It works like `/skills`: **Enter** or
98
+ **Space** toggles the selected row, **v** opens its details, **e** and
99
+ **d** set it on or off, **u** uninstalls, **f** marks a favorite, and
100
+ **/** opens the search box (**Esc** leaves it). MCP servers have no
101
+ toggle, so **Enter** opens their details.
102
+ - **Marketplaces**: the sources plugins come from. **a** adds one (a GitHub
103
+ `owner/repo`, a git URL, or a local path), **u** refreshes, **d** removes.
104
+ - **Errors**: plugins that failed to load, and why.
105
+
106
+ **←** and **→** switch tabs; **Esc** closes.
107
+
108
+ Plugins you install through One Code go to One Code's own plugin directory
109
+ under its agent directory. Plugins Claude Code installed stay read-only;
110
+ turning one off writes to an overrides layer, never to `~/.claude`.
111
+ Installing or toggling a plugin takes effect for commands at once; its MCP
112
+ servers, agents, and hooks load on the next session, and the panel says so
113
+ when you close it.
114
+
115
+ Marketplace sources are git repositories and local paths. Version pinning,
116
+ npm or pip sources, and dependency resolution are not implemented.
117
+
118
+ ## MCP servers
119
+
120
+ The Model Context Protocol (MCP) lets external servers provide tools and
121
+ resources to the model. One Code reads server definitions from:
122
+
123
+ - `.mcp.json` in the project (the nearest one, walking up to the
124
+ repository root)
125
+ - `~/.claude.json` (the `mcpServers` key)
126
+ - `.claude/settings.local.json`
127
+ - Installed plugins
128
+
129
+ Definitions may reference environment variables as `$VAR` or `${VAR}` in
130
+ the command, arguments, environment, URL, and headers; an unset variable
131
+ produces a warning. Stdio servers (`command`) and HTTP servers (`url`) are
132
+ verified; servers using server-sent events are untested.
133
+
134
+ ### Approve a project's servers
135
+
136
+ Servers listed in a project's `.mcp.json` run only after you approve them.
137
+ On the first start in a project, One Code shows the servers found, with the
138
+ command each one runs, and offers to use this server, to use this and all
139
+ future servers in the project, or to decline. Approvals are stored in
140
+ `~/.onecode/mcp/project-approvals.json`, tied to the server's
141
+ configuration, so a changed command asks again. If you decline, the server
142
+ appears as disabled in `/mcp`; choosing Enable there approves it.
143
+
144
+ Claude Code's `enabledMcpjsonServers`, `disabledMcpjsonServers`, and
145
+ `enableAllProjectMcpServers` settings are honored from
146
+ `~/.claude/settings.json`, and from `.claude/settings.local.json` when that
147
+ file is not tracked by git. They are never honored from a checked-in
148
+ `.claude/settings.json`, which would let a repository approve its own
149
+ servers.
150
+
151
+ In non-interactive runs, unapproved servers are skipped with a note on
152
+ stderr.
153
+
154
+ ### Use MCP tools
155
+
156
+ Each server's tools appear to the model as `mcp__<server>__<tool>` and load
157
+ on demand, so a server with many tools does not bloat the prompt. Servers
158
+ also expose resources, which the model can list and read.
159
+
160
+ A permission rule naming `mcp__<server>` covers every tool of that server.
161
+
162
+ ### Manage servers
163
+
164
+ `/mcp` opens the server manager: servers grouped by source (user, project,
165
+ plugin), each with its status, tool and resource counts, and any warnings.
166
+ **Enter** on a server shows its details and a numbered action list:
167
+
168
+ - **Reconnect** restarts the connection.
169
+ - **Disable** stops the server and remembers that in `~/.onecode` (user
170
+ scope or per repository), so it stays disabled across sessions.
171
+ **Enable** reverses it.
172
+ - **Authenticate** appears for HTTP servers that need OAuth. It opens your
173
+ browser for sign-in; tokens are stored under `~/.onecode/mcp-auth/` with
174
+ owner-only permissions.
175
+
176
+ Press the action's number to run it, or **Esc** to go back.
@@ -0,0 +1,193 @@
1
+ # Subagents and workflows
2
+
3
+ One Code delegates work in two ways: subagents for tasks that deserve their
4
+ own context window, and `ultracode` workflows for fanning a large job out
5
+ across many agents at once.
6
+
7
+ ## Subagents
8
+
9
+ A subagent is a child agent with its own context window. It does its work
10
+ and returns a report, so the noise of an investigation stays out of your
11
+ main conversation.
12
+
13
+ ### Where subagents come from
14
+
15
+ - Three ship with One Code: `general-purpose` (any task), `explore`
16
+ (read-only search), and `plan` (design an implementation plan).
17
+ - Markdown definitions in `.claude/agents/` (project) and
18
+ `~/.claude/agents/` (user), each setting an agent's model, tools, and
19
+ system prompt. A project definition wins over a user definition of the
20
+ same name.
21
+ - Plugins can add agents, namespaced by plugin.
22
+ - `fork`, a synthetic type that copies the current conversation.
23
+
24
+ Run `/agents` with no agents running to list the catalog with each agent's
25
+ tools.
26
+
27
+ ### Run a subagent
28
+
29
+ The model delegates through the `Agent` tool. You steer it in plain
30
+ language: "use a subagent to find every call site", or "explore this with
31
+ the `explore` agent". What happens next:
32
+
33
+ - **The run starts in the background.** The model receives a task id at
34
+ once and keeps working. The subagent's report arrives as a notification
35
+ when it finishes, mid-turn if the model is still busy, or as a new turn
36
+ if it is idle. In a `-p` or `--mode json` run, the subagent runs to
37
+ completion instead and the report is returned inline.
38
+ - **You can keep talking to the model** while agents run.
39
+ - **Subagents go through your permission gate.** A subagent's tool calls
40
+ are decided by the same mode, rules, and classifier as the main session,
41
+ and a prompt it triggers is shown to you. Your hooks run inside subagents
42
+ too.
43
+ - **A finished agent can be messaged later.** The `SendMessage` tool
44
+ reaches a running agent live, or resumes a finished one from its saved
45
+ session. `list_agents` lists the session's agents and their status.
46
+
47
+ Two options change how a subagent runs:
48
+
49
+ - **Fork.** A forked subagent inherits the whole conversation so far, for a
50
+ task that needs everything you have built up. Forks run on the main
51
+ model and can only be started from the main conversation. Depth is
52
+ limited: the main conversation can start a subagent, and that subagent
53
+ one more, but no further.
54
+ - **Worktree isolation.** The subagent gets its own git worktree, branched
55
+ from `HEAD`, so it can edit files without colliding with your working
56
+ tree or other agents. A worktree the agent left unchanged is removed;
57
+ otherwise it is kept and its path reported.
58
+
59
+ ### Choose the subagent model
60
+
61
+ Subagents and workflow agents can run on a different model or provider
62
+ from the main session. The default is chosen for you: the cheapest model on
63
+ your provider that meets the same capability floor auto mode's classifier
64
+ uses (a Sonnet-class model for a Sonnet-class or stronger session), never a
65
+ dearer one than your main model. When an Artificial Analysis key is
66
+ configured, measured coding ability is used for that floor; see
67
+ [Automatic model selection](providers-and-models.md#automatic-model-selection).
68
+
69
+ To set the default yourself:
70
+
71
+ | Command | Effect |
72
+ |---|---|
73
+ | `/subagent <provider/model-id>` | Save a default for subagents and workflow agents. Short aliases such as `sonnet` or `haiku` work too: by name when your provider has that model, otherwise as that class within your provider. |
74
+ | `/subagent inherit` | Use the main session's model. |
75
+ | `/subagent status` | Show the configured default, the model it resolves to, and where the setting came from. |
76
+ | `/subagent clear` | Remove the saved default and return to automatic selection. |
77
+ | `/subagent` | Open a model picker. |
78
+
79
+ The choice is saved to `~/.onecode/settings.json`. A saved choice is tied
80
+ to the provider it was made on; after switching providers, run
81
+ `/subagent status` and pick again if it no longer applies.
82
+
83
+ On a Claude session, Claude Code's `CLAUDE_CODE_SUBAGENT_MODEL` variable is
84
+ honored, from the environment or from the `env` block of your user or
85
+ managed settings. One Code's own setting wins when both are set.
86
+
87
+ An agent definition's own `model` field overrides the default for that
88
+ agent.
89
+
90
+ ### Follow agents live
91
+
92
+ While agents run, the panel below the editor shows a tree: `main` first,
93
+ then each agent with its type, what it is doing right now ("Reading
94
+ src/index.ts", "Running a command"), its elapsed time, and its token count.
95
+ Nested agents appear under their parent. A finished agent stays for a few
96
+ seconds.
97
+
98
+ - Press **↓** from an empty editor to focus the rows (after the shells
99
+ chip, if background shells exist).
100
+ - **↑** and **↓** select an agent. **Enter** opens its live transcript.
101
+ - **x** stops the selected agent. **ctrl+x** then **ctrl+k** stops all of
102
+ them.
103
+ - In the transcript: **↑** and **↓** scroll, **PgUp** and **PgDn** page,
104
+ **Tab** moves to the next agent, **←** returns to the rows, **Enter**
105
+ closes the view.
106
+
107
+ `/agents` opens the panel on the newest agent.
108
+
109
+ ## Git worktrees for the whole session
110
+
111
+ Separately from subagents, the model can move your whole session into an
112
+ isolated worktree with `enter_worktree`. It creates a worktree under
113
+ `.claude/worktrees/`, branched from your current `HEAD`. Every shell command
114
+ and relative path then resolves there, and your main working tree stays
115
+ untouched until `exit_worktree` leaves the worktree, keeping or removing
116
+ it. Removal is refused while there is uncommitted or unmerged work. Ask for
117
+ this when a task will make sweeping changes you want to review before
118
+ merging.
119
+
120
+ ## Ultracode workflows
121
+
122
+ For a big job (a broad audit, a migration, a review worth double-checking),
123
+ include the word **`ultracode`** in your message. The model writes a short
124
+ JavaScript script that fans the work out across many agents in parallel,
125
+ then runs it with the `workflow` tool.
126
+
127
+ The keyword arms the turn it appears in. A message you queue while the
128
+ model is still working does not arm the next turn. For a longer stretch of
129
+ this kind of work, turn the mode on with `/effort ultracode`: it sets the
130
+ reasoning effort to `xhigh` and keeps workflow orchestration armed until
131
+ you change the effort again. The footer shows `✦ ultracode` while it is
132
+ armed.
133
+
134
+ ### How a workflow runs
135
+
136
+ - The script runs in a separate thread, so a runaway script cannot freeze
137
+ the interface. A script that stops making progress is stopped after a
138
+ few seconds; a run is capped at 30 minutes.
139
+ - The run goes to the background and the model gets a run id. Progress
140
+ shows in a strip below the editor (**↓** to focus it, **Enter** to open,
141
+ **x** to stop) and in `/workflows`.
142
+ - Every completed agent call is journaled. Re-running a workflow with
143
+ `resumeFromRunId` replays the calls whose inputs did not change at no
144
+ cost and runs only what differs. A background run does not survive the
145
+ end of a session, but its journal does.
146
+ - A script can carry an output-token target. Once the target is reached,
147
+ new and queued agent calls stop; agents already running finish and can
148
+ land above it.
149
+ - Fan-out agents use the subagent default model, so a cheap subagent tier
150
+ keeps a large run affordable while the main conversation stays on a
151
+ frontier model.
152
+ - In a `-p` or `--mode json` run, the workflow runs to completion and
153
+ returns its result inline.
154
+
155
+ ### The run viewer
156
+
157
+ `/workflows` opens the viewer: a list of phases, the agents in each phase,
158
+ and a detail pane with each agent's prompt and output, with a live ticker.
159
+
160
+ | Key | Action |
161
+ |---|---|
162
+ | **↑**, **↓** | Move. |
163
+ | **Enter** | Open a phase or agent; expand a truncated prompt. |
164
+ | **Tab** | Switch to another running workflow. |
165
+ | **PgUp**, **PgDn** | Scroll the detail pane. |
166
+ | **x** | Stop the running workflow. |
167
+ | **s** | Save the script to `.claude/workflows/<name>.js`. A second **s** confirms an overwrite. |
168
+ | **Esc** | Go up a level, then close. **q** closes at once. |
169
+
170
+ From the prompt, `/workflows stop <runId>` stops a run, `/workflows log
171
+ <runId>` prints its recent events, and `/workflows list` prints this
172
+ session's runs and the saved workflows.
173
+
174
+ ### Save a workflow to reuse
175
+
176
+ Scripts in `.claude/workflows/` (project) or `~/.claude/workflows/` (user)
177
+ can be invoked by name instead of describing the job again. A project
178
+ script shadows a user script of the same name. The viewer's **s** key saves
179
+ the current run's script there.
180
+
181
+ ## Reasoning effort
182
+
183
+ `/effort` sets how much reasoning the model spends: `off`, `minimal`,
184
+ `low`, `medium`, `high`, `xhigh`, `max`, or `ultracode`. A bare `/effort`
185
+ opens a slider (**←** and **→** or **h** and **l** move, **Enter** confirms).
186
+ Levels the current model does not support are skipped. **shift+tab** cycles
187
+ the plain levels; cycling away from `xhigh` while ultracode is armed turns
188
+ ultracode off.
189
+
190
+ Changing the effort re-caches the conversation, so the next request costs
191
+ more than usual. `/effort` does not save the level across restarts; to
192
+ save one, open pi's `/thinking` picker and press **ctrl+s**, or pass
193
+ `--thinking <level>` at launch.
@@ -0,0 +1,111 @@
1
+ # Tasks and background work
2
+
3
+ One Code keeps long-running work out of the model's way. This page covers
4
+ the structured task list, background shells, monitors, scheduled
5
+ wake-ups, and how the results of background work reach the model.
6
+
7
+ ## The task list
8
+
9
+ For multi-step work the model keeps a structured task list, using the
10
+ `task_create`, `task_get`, `task_list`, and `task_update` tools. Each task
11
+ has a subject, a description, a status (pending, in progress, or
12
+ completed), an optional owner, and dependencies on other tasks.
13
+
14
+ While the list has entries, a pinned widget below the transcript shows a
15
+ summary line and up to 12 tasks: `✔` for completed, `◼` for in progress,
16
+ `◻` for pending.
17
+
18
+ | Command | What it does |
19
+ |---|---|
20
+ | `/tasks` | Prints the full list. |
21
+ | `/tasks hide` | Hides the widget. |
22
+ | `/tasks show` | Shows it again. |
23
+
24
+ The list is stored inside the session, so it survives a resume and follows
25
+ the branch you are on in `/tree`. If the model has not touched the list for
26
+ a while during a long task, it is reminded that the list exists.
27
+
28
+ ## Background shells
29
+
30
+ When the model runs a command with `run_in_background`, the command starts
31
+ detached and the model gets a task id at once. Output spools to a log file
32
+ under the session directory. When the command finishes, the model is
33
+ notified with the result, and it can read the output at any time with
34
+ `task_output` or stop the command with `task_stop`.
35
+
36
+ Running and recently finished shells appear in the panel below the editor:
37
+
38
+ 1. Press **↓** from an empty editor to focus the shells chip.
39
+ 2. Press **Enter** to open the Background list, which shows each shell's
40
+ status and command. **↑** and **↓** select, **x** stops the selected
41
+ shell, **Esc** goes back.
42
+ 3. Press **Enter** on a shell to see its status, runtime, command, and a
43
+ live box with the last lines of output. **←** returns to the list;
44
+ **Esc**, **Enter**, or **Space** closes the section; **x** stops it.
45
+
46
+ A finished shell stays in the list for a minute. From the chip, a second
47
+ **↓** moves on to the subagent rows in the same panel.
48
+
49
+ The turn-duration line reports how many shells are still running when a
50
+ turn ends. When a session ends, running shells are stopped and the next
51
+ session is told which ones.
52
+
53
+ ## Monitors
54
+
55
+ The `monitor` tool watches a long-running command, or a WebSocket URL, and
56
+ turns each line of output (or each message) into an event. Events are
57
+ batched and delivered to the model as notifications: at most once a second
58
+ while the model is idle, once every ten seconds while it is working, so a
59
+ noisy process does not flood the conversation.
60
+
61
+ A monitor runs until its command exits or its timeout passes (five minutes
62
+ by default, one hour at most), or for the whole session when started as
63
+ persistent. The model can stop it with `task_stop`.
64
+
65
+ A monitor is not auto-approved, because it runs a shell command; the
66
+ permission gate treats it like `bash`.
67
+
68
+ ## Scheduled wake-ups and loops
69
+
70
+ `/loop` runs a task repeatedly. Two forms exist:
71
+
72
+ - **Fixed interval.** `/loop 5m check whether the deploy finished` runs the
73
+ task every five minutes. Intervals accept `s`, `m`, and `h`, and are
74
+ clamped between one minute and one hour. The first run happens
75
+ immediately. A tick that arrives while the model is still busy is
76
+ skipped, not queued.
77
+ - **Self-paced.** `/loop watch the CI run` with no interval lets the model
78
+ choose when to check next. It uses the `schedule_wakeup` tool, which
79
+ schedules one wake-up at a time between one minute and one hour ahead.
80
+ The model is told to pick a delay that matches what it is waiting for,
81
+ and to stop the loop when the task is done.
82
+
83
+ `/loop status` (or a bare `/loop`) reports the current loop. `/loop stop`
84
+ ends it. Only one loop runs at a time, and loops end with the session.
85
+
86
+ ## The background list
87
+
88
+ `/background` lists every background task in the session: monitors,
89
+ background shells, and background subagents, with their id, kind, status,
90
+ and start time. A small widget shows the count of running tasks that have
91
+ no panel of their own.
92
+
93
+ ## How results reach the model
94
+
95
+ Background work reports back through notifications:
96
+
97
+ - A notification is delivered as soon as the model finishes its current
98
+ batch of tool calls, or starts a new turn if the model is idle.
99
+ - Notifications that arrive within a quarter of a second of each other are
100
+ merged into one message.
101
+ - After you interrupt a turn, notifications are held and attached to your
102
+ next prompt instead of starting a turn on their own.
103
+ - Each notification is framed as an automated event, so the model does not
104
+ mistake it for something you said or approved.
105
+
106
+ ## Non-interactive runs
107
+
108
+ In `-p` and `--mode json` runs nothing can run in the background, because
109
+ the process exits when the turn settles. Background shells, monitors,
110
+ subagents, and workflows run to completion and return their output
111
+ directly. `/loop` and `schedule_wakeup` do not fire.
@@ -0,0 +1,155 @@
1
+ # The terminal interface
2
+
3
+ This page describes what you see on screen and how to move around it: the
4
+ banner, the status line, the working indicator, the panels below the
5
+ editor, the dialogs, and the themes.
6
+
7
+ ## The banner
8
+
9
+ The session opens with a One Code wordmark, the version, and a live line
10
+ showing the model, the permission mode, and the subagent model. Below it, a
11
+ hint line lists the keys worth knowing:
12
+
13
+ | Hint | Meaning |
14
+ |---|---|
15
+ | `/hotkeys` | pi's full key list. |
16
+ | `shift+tab` | Cycle reasoning effort. |
17
+ | `ctrl+q` | Cycle the permission mode. |
18
+ | `ctrl+t` | Show or hide thinking blocks. |
19
+ | `ctrl+o` | Expand a collapsed tool output. |
20
+ | `/` | List commands. |
21
+ | `!` | Run a shell command yourself. |
22
+ | `ultracode` | The keyword that turns on workflow orchestration for a turn. |
23
+
24
+ On a machine with no provider yet, the banner reads `model none` and a
25
+ notice points you at `/login`.
26
+
27
+ When pi's `quietStartup` setting is on (the bundled app turns it on), the
28
+ startup listing is compact: one line each for the instruction files in
29
+ context, the skills found, the saved workflows, and the themes.
30
+
31
+ Set `CC_NO_BANNER=1` to keep pi's own header.
32
+
33
+ ## Prompt and transcript markers
34
+
35
+ Your input line starts with a `❯` marker and the model's replies with a `●`
36
+ bullet, as in Claude Code. Tool calls render as `● Tool(arguments)` with
37
+ the result on an indented `⎿` line. Thinking is collapsed behind
38
+ `✻ Thinking… (ctrl+t to expand)`.
39
+
40
+ Set `CC_NO_INPUT_MARKER=1` or `CC_NO_ASSISTANT_MARKER=1` to remove either
41
+ marker.
42
+
43
+ ## The working indicator
44
+
45
+ While the model works, a spinner shows a random verb, the elapsed time, and
46
+ the tokens streamed so far, for example `✳ Cogitating… (12s · ↓ 843 tokens)`.
47
+ The clock runs from the start of the turn until it settles, through retries.
48
+
49
+ After the turn, a dim `✻ Cooked for 5m 12s` line reports the total time.
50
+ Set `CC_TURN_DURATION=0` to turn it off.
51
+
52
+ ## The status line
53
+
54
+ The footer replaces pi's status line with One Code's own:
55
+
56
+ - **Left:** the working directory, the git branch, and the open pull
57
+ request number for that branch when the GitHub CLI is installed.
58
+ - **Right:** context usage as `used/window (percent)`, the session cost,
59
+ the cache-hit rate of the latest turn, the model, and the reasoning
60
+ effort. When ultracode is armed, the effort reads `✦ ultracode`.
61
+
62
+ The cost is all-in: it includes the main conversation plus every model call
63
+ One Code makes on the side, such as subagents, the auto-mode classifier,
64
+ web-fetch reader calls, and recaps. pi's own footer counts only the main
65
+ conversation. When the line is too narrow, the cache-hit rate goes first,
66
+ then the pull request, then the branch.
67
+
68
+ Set `CC_FOOTER=0` to keep pi's footer.
69
+
70
+ ## The panel below the editor
71
+
72
+ One panel below the editor holds the background-shell manager and the
73
+ live subagent tree. It appears when there is something to show and hides
74
+ when there is not.
75
+
76
+ - Press **↓** from an empty editor to focus it. If background shells exist,
77
+ the first **↓** lands on the shells chip; a second **↓** moves to the
78
+ subagent rows. Otherwise the first **↓** lands on the first subagent.
79
+ - In the subagent rows, **↑** and **↓** select, **Enter** opens the
80
+ selected agent's live transcript, **x** stops it, **ctrl+x** then
81
+ **ctrl+k** stops every agent, and **Esc** leaves the panel. Typing any
82
+ other key returns to the editor.
83
+ - Inside a transcript, **↑** and **↓** scroll, **PgUp** and **PgDn** page,
84
+ **Tab** switches to the next agent, **←** returns to the row list, and
85
+ **Enter** closes the view.
86
+
87
+ The panel's own footer names the keys that apply at each stage. Mouse-wheel
88
+ scrolling is deliberately not enabled in the transcript view, because
89
+ turning on mouse reporting would take over the terminal's native scrolling
90
+ and text selection for the whole session.
91
+
92
+ Details of the shells section are in
93
+ [Background shells](tasks-and-background-work.md#background-shells); the
94
+ subagent view is in [Follow agents live](subagents-and-workflows.md#follow-agents-live).
95
+
96
+ ## The question dialog
97
+
98
+ When the model asks structured questions with `ask_user_question`, a dialog
99
+ opens with one tab per question and a final Submit tab.
100
+
101
+ - **←**, **→**, **Tab**, and **shift+Tab** switch questions.
102
+ - **↑** and **↓** move between options. **Enter** selects one; a
103
+ single-choice question then advances to the next tab.
104
+ - A number key selects that option directly.
105
+ - Multiple-choice questions show checkboxes and a **Next** row to move on.
106
+ - Questions without option previews have an **Other** row for a typed
107
+ answer. Questions with previews show the preview beside the options and
108
+ take free text through a notes field, opened with **n**.
109
+ - **Chat about this**, the last row of every question, closes the dialog
110
+ and tells the model you want to discuss before answering.
111
+ - On the Submit tab, **Enter** submits, or jumps to the first unanswered
112
+ question. **Esc** cancels; nothing is submitted.
113
+
114
+ ## Approval dialogs
115
+
116
+ The permission prompt and the plan-approval dialog are described in
117
+ [The approval prompt](permissions-modes-and-auto-mode.md#the-approval-prompt)
118
+ and [Plan mode](permissions-modes-and-auto-mode.md#plan-mode).
119
+
120
+ ## Panels opened by commands
121
+
122
+ | Command | Panel | Keys |
123
+ |---|---|---|
124
+ | `/agents` | The live subagent panel, focused on the newest agent. | See the preceding section. |
125
+ | `/workflows` | The workflow run viewer. | **↑↓** select, **Enter** open, **Tab** next run, **x** stop, **s** save the script, **Esc** back or close. |
126
+ | `/skills` | The skills panel. | **↑↓** move, **Enter** or **Space** cycle a skill's state, **/** search, **t** sort, **Esc** close. |
127
+ | `/plugins` | The plugin marketplace, with Discover, Installed, Marketplaces, and Errors tabs. | **←→** or **Tab** switch tabs, **Esc** close. Discover: type to search, **Space** install, **Enter** view. Installed (like `/skills`): **Enter**/**Space** toggle, **v** view, **e**/**d** set, **u** uninstall, **f** favorite, **/** search. In a detail view: **Enter**/**Space**/**e**/**d** toggle, **u** uninstall, **i** install, **f** favorite. On Marketplaces: **a** add, **u** update, **d** remove. |
128
+ | `/mcp` | The MCP server manager. | **↑↓** navigate, **Enter** open a server or run an action, a digit picks a numbered action, **Esc** back or close. |
129
+ | `/doctor report` | The setup report. | **↑↓** or **j**/**k** scroll, **Space**/**b** page, **g**/**G** top and end, **f** run the checkup, **Esc** or **q** close. |
130
+ | `/memory` | The instruction and memory file picker. | **↑↓** move, **Enter** open, **Esc** close. |
131
+ | `/effort` | The reasoning-effort slider. | **←→** or **h**/**l** adjust, **Enter** confirm, **Esc** cancel. |
132
+
133
+ **ctrl+c** closes any panel.
134
+
135
+ PgUp and PgDn do not reach these panels in full-screen mode, because pi uses
136
+ them for its own scrollback; use the keys the panel's footer names.
137
+
138
+ ## Full-screen mode
139
+
140
+ The bundled app runs in pi's full-screen mode, on the terminal's alternate
141
+ screen, and restores your terminal when you exit. On a plain pi
142
+ installation full-screen mode is opt-in; see
143
+ [Full-screen mode and themes](configuration.md#full-screen-mode-and-themes).
144
+
145
+ ## Themes
146
+
147
+ Two themes ship: `onecode` (dark, the bundled app's default) and
148
+ `onecode-light`. Any other pi theme also works. See
149
+ [Full-screen mode and themes](configuration.md#full-screen-mode-and-themes)
150
+ for how to select one.
151
+
152
+ ## Keyboard shortcuts
153
+
154
+ The full list of One Code and pi shortcuts is in the
155
+ [command and keyboard reference](reference.md#keyboard-shortcuts).