one-code-extension 0.1.4 → 0.3.1

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