one-code-extension 0.3.0 → 0.4.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.
- package/README.md +189 -94
- package/docs/guide/README.md +3 -2
- package/docs/guide/bring-your-claude-code-setup.md +7 -5
- package/docs/guide/configuration.md +7 -5
- package/docs/guide/differences-from-claude-code.md +25 -14
- package/docs/guide/doctor.md +5 -3
- package/docs/guide/hooks.md +20 -6
- package/docs/guide/installation.md +62 -12
- package/docs/guide/permissions-modes-and-auto-mode.md +46 -28
- package/docs/guide/providers-and-models.md +12 -10
- package/docs/guide/reference.md +9 -4
- package/docs/guide/sessions-and-context.md +23 -3
- package/docs/guide/skills-plugins-and-mcp.md +7 -5
- package/docs/guide/subagents-and-workflows.md +13 -11
- package/docs/guide/tasks-and-background-work.md +10 -8
- package/docs/guide/terminal-interface.md +7 -5
- package/docs/guide/tools.md +29 -5
- package/docs/guide/troubleshooting.md +26 -14
- package/docs/guide/windows.md +184 -0
- package/extensions/auto-mode/actions.ts +3 -1
- package/extensions/auto-mode/paths.ts +21 -23
- package/extensions/auto-mode/safety-floor.ts +44 -6
- package/extensions/auto-mode/shell-analysis.ts +25 -10
- package/extensions/auto-mode/transcript.ts +15 -5
- package/extensions/background/index.ts +83 -34
- package/extensions/background/monitor-batch.ts +7 -5
- package/extensions/background/wakeup.ts +18 -24
- package/extensions/bash/background.ts +19 -10
- package/extensions/bash/guards.ts +36 -16
- package/extensions/bash/index.ts +36 -166
- package/extensions/branding/index.ts +35 -4
- package/extensions/btw/index.ts +207 -0
- package/extensions/btw/panel.ts +179 -0
- package/extensions/btw/prompt.ts +45 -0
- package/extensions/clear/index.ts +15 -0
- package/extensions/compaction/fit.ts +9 -6
- package/extensions/doctor/build.ts +22 -2
- package/extensions/doctor/dependencies.ts +63 -31
- package/extensions/doctor/fix-prompt.ts +12 -4
- package/extensions/doctor/index.ts +1 -0
- package/extensions/doctor/models.ts +2 -1
- package/extensions/doctor/report.ts +2 -3
- package/extensions/doctor/update-lookup.ts +19 -11
- package/extensions/effort/index.ts +2 -1
- package/extensions/footer/footer-line.ts +19 -0
- package/extensions/footer/index.ts +25 -5
- package/extensions/hooks/executor.ts +84 -18
- package/extensions/hooks/index.ts +1 -0
- package/extensions/hooks/matcher.ts +23 -9
- package/extensions/hooks/settings.ts +15 -0
- package/extensions/lib/branch-restore.ts +12 -0
- package/extensions/lib/claude-context.ts +2 -3
- package/extensions/lib/claude-settings.ts +19 -0
- package/extensions/lib/command-launch.ts +71 -0
- package/extensions/lib/deferred.ts +173 -33
- package/extensions/lib/git.ts +16 -0
- package/extensions/lib/keys.ts +38 -0
- package/extensions/lib/local-command.ts +112 -0
- package/extensions/lib/model-facts.generated.json +263 -68
- package/extensions/lib/model-policy.ts +13 -0
- package/extensions/lib/model-tier.ts +16 -5
- package/extensions/lib/notifications.ts +547 -53
- package/extensions/lib/paths.ts +130 -2
- package/extensions/lib/pi-ai-estimate.ts +57 -26
- package/extensions/lib/pi-version.ts +1 -1
- package/extensions/lib/process-tree.ts +131 -5
- package/extensions/lib/reminders.ts +80 -27
- package/extensions/lib/scratchpad.ts +11 -10
- package/extensions/lib/shell-spawn.ts +298 -0
- package/extensions/lib/shell-tool.ts +252 -0
- package/extensions/lib/shell-tools.ts +13 -0
- package/extensions/lib/side-call.ts +76 -0
- package/extensions/lib/tui-render.ts +62 -11
- package/extensions/lib/update-check.mjs +155 -0
- package/extensions/lib/usage-bus.ts +1 -1
- package/extensions/lib/which.ts +62 -0
- package/extensions/lib/worktree-channel.ts +18 -0
- package/extensions/lib/worktree-isolation.ts +2 -1
- package/extensions/lsp/client.ts +14 -3
- package/extensions/lsp/index.ts +12 -5
- package/extensions/lsp/install-hints.ts +33 -3
- package/extensions/lsp/plugin-servers.ts +2 -2
- package/extensions/lsp/servers.ts +29 -7
- package/extensions/mcp/index.ts +3 -2
- package/extensions/memory/entries.ts +9 -6
- package/extensions/memory/index.ts +3 -2
- package/extensions/memory/open-external.ts +4 -1
- package/extensions/model-default/index.ts +21 -2
- package/extensions/permissions/index.ts +57 -28
- package/extensions/permissions/matcher.ts +120 -33
- package/extensions/permissions/modes.ts +14 -6
- package/extensions/permissions/powershell-rules.ts +549 -0
- package/extensions/permissions/session-grant.ts +9 -9
- package/extensions/plugins/index.ts +3 -2
- package/extensions/plugins/install/install.ts +1 -1
- package/extensions/powershell/description.ts +139 -0
- package/extensions/powershell/guards.ts +91 -0
- package/extensions/powershell/index.ts +89 -0
- package/extensions/powershell/policy.ts +91 -0
- package/extensions/recap/index.ts +10 -24
- package/extensions/recap/prompt.ts +3 -3
- package/extensions/session-title/index.ts +120 -0
- package/extensions/session-title/title.ts +111 -0
- package/extensions/skill/index.ts +40 -18
- package/extensions/skill/invoke.ts +1 -0
- package/extensions/subagents/hand-back-review.ts +10 -12
- package/extensions/subagents/index.ts +221 -78
- package/extensions/subagents/model-select.ts +75 -7
- package/extensions/system-prompt/environment.ts +14 -1
- package/extensions/system-reminder/index.ts +9 -0
- package/extensions/tasks/index.ts +2 -1
- package/extensions/tool-search/index.ts +41 -20
- package/extensions/workflow/agent-session.ts +6 -4
- package/extensions/workflow/index.ts +28 -5
- package/extensions/worktree/guards.ts +5 -4
- package/extensions/worktree/index.ts +15 -2
- package/extensions/worktree/rewrite.ts +17 -0
- package/package.json +7 -4
- package/types/app.d.ts +18 -2
package/docs/guide/doctor.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Check your setup with doctor
|
|
2
2
|
|
|
3
|
+
[← One Code user guide](README.md)
|
|
4
|
+
|
|
3
5
|
`/doctor` is One Code's health check, modelled on Claude Code's. It measures
|
|
4
6
|
your setup, reports what a session will use, and can have the model repair
|
|
5
7
|
the findings.
|
|
@@ -18,7 +20,7 @@ the findings.
|
|
|
18
20
|
## What the report contains
|
|
19
21
|
|
|
20
22
|
1. **Installation.** Whether you run the bundled app or the extension on
|
|
21
|
-
your own pi, the pi version and whether it
|
|
23
|
+
your own pi, the pi version and whether it's in the tested range, the
|
|
22
24
|
Node version and platform, pi's agent directory, One Code's state
|
|
23
25
|
directory, where Claude Code configuration is read from, and whether a
|
|
24
26
|
newer One Code is available.
|
|
@@ -47,12 +49,12 @@ Findings are listed first, errors before warnings, each with a suggested
|
|
|
47
49
|
fix. The report is "ready" when at least one provider works, a model is
|
|
48
50
|
selected, and there are no errors.
|
|
49
51
|
|
|
50
|
-
In the panel, press **f** to run the checkup on the report you
|
|
52
|
+
In the panel, press **f** to run the checkup on the report you're reading.
|
|
51
53
|
|
|
52
54
|
## Model presets
|
|
53
55
|
|
|
54
56
|
A preset sets the main model, the subagent model, and the classifier model
|
|
55
|
-
together, from the provider you
|
|
57
|
+
together, from the provider you're connected to. Only current-generation,
|
|
56
58
|
priced models that support tool calls are considered.
|
|
57
59
|
|
|
58
60
|
| Preset | Main model | Subagents | Classifier |
|
package/docs/guide/hooks.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Hooks
|
|
2
2
|
|
|
3
|
+
[← One Code user guide](README.md)
|
|
4
|
+
|
|
3
5
|
Hooks are shell commands that run at fixed points in a session. One Code
|
|
4
6
|
runs Claude Code's command hooks from your existing settings files, with
|
|
5
7
|
the same input, output, and exit-code contract, so hooks you wrote for
|
|
@@ -39,8 +41,8 @@ Only command hooks are supported. Hook entries of type `http`, `prompt`, or
|
|
|
39
41
|
| `PostCompact` | After context compaction, with the summary. |
|
|
40
42
|
|
|
41
43
|
Claude Code's `Notification`, `SubagentStop`, and `PermissionRequest`
|
|
42
|
-
events
|
|
43
|
-
concept, and the other two
|
|
44
|
+
events aren't supported. pi has no event that carries the notification
|
|
45
|
+
concept, and the other two aren't implemented.
|
|
44
46
|
|
|
45
47
|
Hooks also run inside subagents: a `PreToolUse` hook that blocks a command
|
|
46
48
|
blocks it in a subagent too.
|
|
@@ -55,7 +57,7 @@ The hook's standard input is a JSON object with these fields:
|
|
|
55
57
|
| Field | Present | Meaning |
|
|
56
58
|
|---|---|---|
|
|
57
59
|
| `session_id` | Always | The session id. |
|
|
58
|
-
| `transcript_path` | Always | The session file, or an empty string when there
|
|
60
|
+
| `transcript_path` | Always | The session file, or an empty string when there's none. |
|
|
59
61
|
| `cwd` | Always | The working directory. |
|
|
60
62
|
| `hook_event_name` | Always | The event name from the table. |
|
|
61
63
|
| `tool_name`, `tool_input` | Tool events | The tool and its arguments. Tool names are One Code's names; see [Claude Code tool names](tools.md#claude-code-tool-names). |
|
|
@@ -90,7 +92,7 @@ Envelope fields honored in a JSON result:
|
|
|
90
92
|
|---|---|
|
|
91
93
|
| `continue: false` | Blocks, with `stopReason` as the reason. |
|
|
92
94
|
| `decision: "block"` | Blocks, with `reason` as the reason. |
|
|
93
|
-
| `hookSpecificOutput.permissionDecision` | `"deny"` and `"ask"` both block, with `permissionDecisionReason`. `"allow"` is read but never honored; a hook
|
|
95
|
+
| `hookSpecificOutput.permissionDecision` | `"deny"` and `"ask"` both block, with `permissionDecisionReason`. `"allow"` is read but never honored; a hook can't pre-approve an action, and the permission gate still runs. |
|
|
94
96
|
| `hookSpecificOutput.updatedInput` | Replaces the tool's input (`PreToolUse`). |
|
|
95
97
|
| `hookSpecificOutput.updatedToolResult` | Replaces the tool's result (`PostToolUse`). |
|
|
96
98
|
| `hookSpecificOutput.additionalContext` | Adds text to the model's context. |
|
|
@@ -105,5 +107,17 @@ Set `CC_HOOKS_DEBUG=1` before launching to print each hook dispatch and its
|
|
|
105
107
|
outcome to stderr. Decisions are also appended to
|
|
106
108
|
`~/.onecode/hooks/hooks-decisions.jsonl` while the variable is set.
|
|
107
109
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
+
## Which shell runs a hook
|
|
111
|
+
|
|
112
|
+
Hooks run in bash, as in Claude Code: `/bin/bash` on macOS and Linux, Git
|
|
113
|
+
Bash on Windows (`CLAUDE_CODE_GIT_BASH_PATH` points at a different bash;
|
|
114
|
+
a value that isn't a bash or sh binary is ignored with a warning). A hook
|
|
115
|
+
can ask for PowerShell instead with Claude Code's `shell` field:
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{ "type": "command", "command": "Get-Content $env:TEMP\\hook.log", "shell": "powershell" }
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
On a Windows machine without Git for Windows, hooks default to PowerShell.
|
|
122
|
+
Matchers accept `Bash|PowerShell` and `Bash,PowerShell` to cover both shell
|
|
123
|
+
tools. See [Windows](windows.md).
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
# Install One Code
|
|
2
2
|
|
|
3
|
+
[← One Code user guide](README.md)
|
|
4
|
+
|
|
3
5
|
One Code ships as two npm packages from one repository. Choose the one that
|
|
4
6
|
fits how you already work.
|
|
5
7
|
|
|
6
8
|
| You | Install | What you get |
|
|
7
9
|
|---|---|---|
|
|
8
10
|
| New to this, or you want the simplest setup | `npm install -g @one-ai/one-code` | The bundled app: its own `onecode` command, a pinned version of the pi coding agent inside it, and its state kept in `~/.onecode`. It coexists with any `pi` you already have. |
|
|
11
|
+
| On Windows without Node.js | `powershell -c "irm https://raw.githubusercontent.com/IsuruMaduranga/one-code/master/install.ps1 \| iex"` | The bundled app, with Node.js fetched for you when the machine has none. See [Install on Windows](#install-on-windows). |
|
|
9
12
|
| Already running [pi](https://github.com/earendil-works/pi) | `pi install npm:one-code-extension` | The extensions only. They run on your existing pi. One Code's own state still goes to `~/.onecode`; pi's own files stay under your pi agent directory (`~/.pi/agent`). |
|
|
10
13
|
|
|
11
14
|
## Requirements
|
|
12
15
|
|
|
13
16
|
- Node.js 22.19 or later. The app refuses to start on older versions,
|
|
14
17
|
because pi crashes at import time there.
|
|
15
|
-
- macOS or
|
|
16
|
-
|
|
18
|
+
- macOS, Linux, or Windows. Windows Subsystem for Linux (WSL) works like
|
|
19
|
+
Linux. On native Windows, One Code takes Claude Code's shape: Git for
|
|
20
|
+
Windows is recommended but optional, and PowerShell is the primary shell
|
|
21
|
+
tool. See [Windows](windows.md) for what is verified and what isn't.
|
|
17
22
|
- `git`. Optional: `rg` (ripgrep) for faster search, the GitHub CLI for the
|
|
18
23
|
pull-request marker in the footer, and a language server for your
|
|
19
24
|
language (see
|
|
@@ -27,7 +32,7 @@ cd your-project
|
|
|
27
32
|
onecode
|
|
28
33
|
```
|
|
29
34
|
|
|
30
|
-
On the first run there
|
|
35
|
+
On the first run there's no provider yet: the banner shows `model none`.
|
|
31
36
|
Run `/login` inside One Code to connect a provider, or set a provider key
|
|
32
37
|
in your environment before launching. For a free option, see
|
|
33
38
|
[Providers and models](providers-and-models.md).
|
|
@@ -36,15 +41,55 @@ The first run also seeds pi's settings under `~/.onecode/agent/` with the
|
|
|
36
41
|
`onecode` theme, quiet startup, and full-screen mode. It never overrides a
|
|
37
42
|
value you change later.
|
|
38
43
|
|
|
44
|
+
## Install on Windows
|
|
45
|
+
|
|
46
|
+
Open Windows Terminal or PowerShell and run:
|
|
47
|
+
|
|
48
|
+
```powershell
|
|
49
|
+
powershell -c "irm https://raw.githubusercontent.com/IsuruMaduranga/one-code/master/install.ps1 | iex"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The script looks for Node.js 22.19 or later on your PATH. When there is
|
|
53
|
+
none, it downloads the current Node LTS for your CPU from nodejs.org as a
|
|
54
|
+
zip, checks it against nodejs.org's published checksums, unpacks it under
|
|
55
|
+
`%LOCALAPPDATA%\onecode\node`, and adds that folder to your user PATH.
|
|
56
|
+
Nothing is installed system-wide and no Windows installer runs. It then
|
|
57
|
+
runs `npm install -g @one-ai/one-code` and makes sure the `onecode` command
|
|
58
|
+
is on your PATH. Open a new terminal afterwards so it sees the PATH change.
|
|
59
|
+
|
|
60
|
+
The script also tells you when `git` is missing. One Code runs without it,
|
|
61
|
+
but Git for Windows gives you the branch in the footer, `/init`, worktrees,
|
|
62
|
+
and a bash tool for the model next to PowerShell. Install it with
|
|
63
|
+
`winget install --id Git.Git -e`, or set `ONECODE_INSTALL_GIT=1` before
|
|
64
|
+
running the script to have it do that for you.
|
|
65
|
+
|
|
66
|
+
If you already have Node.js 22.19 or later, the plain npm command works the
|
|
67
|
+
same on Windows as anywhere else:
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
npm install -g @one-ai/one-code
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The script's knobs are environment variables, because a piped script
|
|
74
|
+
cannot take parameters: `ONECODE_INSTALL_NODE=1` downloads the standalone
|
|
75
|
+
Node even when one exists, `ONECODE_NODE_VERSION` pins the version it
|
|
76
|
+
downloads, and `ONECODE_NO_PATH_UPDATE=1` leaves your PATH alone and prints
|
|
77
|
+
what to add. Read the script before running it if you like; it is the
|
|
78
|
+
`install.ps1` at the root of the repository.
|
|
79
|
+
|
|
80
|
+
Windows Subsystem for Linux (WSL) is Linux: use the npm or Homebrew route
|
|
81
|
+
inside the distribution. For what works on native Windows, see
|
|
82
|
+
[Windows](windows.md).
|
|
83
|
+
|
|
39
84
|
## Install with Homebrew
|
|
40
85
|
|
|
41
86
|
Homebrew installs Node for you, so this route has no separate Node step:
|
|
42
87
|
|
|
43
88
|
```bash
|
|
44
|
-
brew install isurumaduranga/one-ai/
|
|
89
|
+
brew install isurumaduranga/one-ai/onecode
|
|
45
90
|
```
|
|
46
91
|
|
|
47
|
-
The formula
|
|
92
|
+
The formula and the command it installs are both named `onecode`.
|
|
48
93
|
Homebrew refuses npm packages published less than a day ago, so a release
|
|
49
94
|
becomes installable this way about a day after it appears on npm.
|
|
50
95
|
|
|
@@ -57,12 +102,12 @@ pi install npm:one-code-extension
|
|
|
57
102
|
```
|
|
58
103
|
|
|
59
104
|
Use `pi` in place of `onecode` for every command in this guide. The
|
|
60
|
-
extension is tested against pi 0.83 through 0.
|
|
105
|
+
extension is tested against pi 0.83 through 0.86 and warns at startup when
|
|
61
106
|
your pi is outside that range. Full-screen mode is opt-in on your own pi;
|
|
62
107
|
see [Full-screen mode and themes](configuration.md#full-screen-mode-and-themes).
|
|
63
108
|
|
|
64
109
|
A few interface refinements are applied only by the bundled app, because
|
|
65
|
-
they patch pi internals the extension API
|
|
110
|
+
they patch pi internals the extension API can't reach: a clean exit that
|
|
66
111
|
erases the screen in regular mode, and suppression of pi's "Operation
|
|
67
112
|
aborted" line when you interrupt a reply. Everything else is identical.
|
|
68
113
|
|
|
@@ -97,10 +142,13 @@ notice with the matching upgrade command when a newer version exists:
|
|
|
97
142
|
|
|
98
143
|
```bash
|
|
99
144
|
npm install -g @one-ai/one-code # npm installs
|
|
100
|
-
brew upgrade
|
|
145
|
+
brew upgrade onecode # Homebrew installs
|
|
101
146
|
```
|
|
102
147
|
|
|
103
|
-
|
|
148
|
+
A Homebrew install sees the notice a day after the npm release, because
|
|
149
|
+
Homebrew refuses packages younger than that and `brew upgrade` would find
|
|
150
|
+
nothing sooner. Set `ONECODE_NO_UPDATE_CHECK=1` to skip the check;
|
|
151
|
+
`--offline` skips it too.
|
|
104
152
|
On your own pi, update with `pi update --extensions`.
|
|
105
153
|
|
|
106
154
|
Both packages are released together with the same version number.
|
|
@@ -108,12 +156,14 @@ Both packages are released together with the same version number.
|
|
|
108
156
|
## Uninstall
|
|
109
157
|
|
|
110
158
|
```bash
|
|
111
|
-
npm uninstall -g @one-ai/one-code # or: brew uninstall
|
|
159
|
+
npm uninstall -g @one-ai/one-code # or: brew uninstall onecode
|
|
112
160
|
rm -rf ~/.onecode # One Code's state, including pi's under the app
|
|
113
161
|
```
|
|
114
162
|
|
|
115
|
-
|
|
116
|
-
|
|
163
|
+
If the Windows script fetched Node.js for you, delete `%LOCALAPPDATA%\onecode`
|
|
164
|
+
too and remove that folder from your user PATH. On your own pi, run
|
|
165
|
+
`pi remove one-code-extension` (or remove the package entry from pi's
|
|
166
|
+
settings). Removing `~/.onecode` deletes One Code's
|
|
117
167
|
settings, approvals, plan files, and, under the bundled app, pi's sessions
|
|
118
168
|
and credentials. Memory files stay in `~/.claude/projects/`, because they
|
|
119
169
|
are shared with Claude Code.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Permissions, modes, and auto mode
|
|
2
2
|
|
|
3
|
+
[← One Code user guide](README.md)
|
|
4
|
+
|
|
3
5
|
Every tool call the model makes passes through One Code's permission gate
|
|
4
6
|
before it runs. This page explains the permission modes, how to switch
|
|
5
7
|
between them, how to write rules, what the approval prompt offers, and how
|
|
@@ -16,7 +18,7 @@ For each tool call, the gate checks the following in order:
|
|
|
16
18
|
1. **Protected paths.** A write to a protected file or directory (see
|
|
17
19
|
[Protected paths](#protected-paths)) is never approved automatically. In
|
|
18
20
|
auto mode it goes to the classifier; in other modes it prompts you.
|
|
19
|
-
Allow rules
|
|
21
|
+
Allow rules don't cover protected paths.
|
|
20
22
|
2. **`deny` rules.** A matching `deny` rule blocks the call. `deny` always
|
|
21
23
|
wins.
|
|
22
24
|
3. **`ask` rules.** A matching `ask` rule prompts you, even in a mode that
|
|
@@ -81,6 +83,18 @@ contains command substitution (`$(…)` or backticks), `eval`, `exec`, a pipe
|
|
|
81
83
|
into an interpreter, or a base64 decode is never covered by a prefix or
|
|
82
84
|
wildcard `allow` rule.
|
|
83
85
|
|
|
86
|
+
### PowerShell rule patterns
|
|
87
|
+
|
|
88
|
+
`PowerShell(...)` rules have the same shape and follow Claude Code's
|
|
89
|
+
PowerShell matching: aliases are canonicalized on both sides
|
|
90
|
+
(`PowerShell(Remove-Item:*)` catches `rm`, `del`, and `ri`), cmdlet names
|
|
91
|
+
are case-insensitive, a line is split on `|`, `;`, `&&`, `||`, and newlines
|
|
92
|
+
outside quotes and here-strings, an `allow` rule must cover every statement,
|
|
93
|
+
and a `deny` or `ask` rule fires on any statement. A `$(…)` subexpression, a
|
|
94
|
+
backtick escape, a script block, the `&`/`.` call operators,
|
|
95
|
+
`Invoke-Expression`, or an encoded command keeps a wildcard `allow` from
|
|
96
|
+
applying. Details in [Windows](windows.md#permission-rules).
|
|
97
|
+
|
|
84
98
|
### Add a rule during a session
|
|
85
99
|
|
|
86
100
|
To add an allow rule for the current repository, run:
|
|
@@ -96,7 +110,7 @@ Add `global` at the end to save it for every repository instead:
|
|
|
96
110
|
```
|
|
97
111
|
|
|
98
112
|
To review the current mode and every loaded rule, including which project
|
|
99
|
-
rules are trusted and which rules
|
|
113
|
+
rules are trusted and which rules couldn't be parsed, run `/permissions`.
|
|
100
114
|
|
|
101
115
|
Rules One Code adds are saved under `~/.onecode`, never under `~/.claude`.
|
|
102
116
|
|
|
@@ -104,7 +118,7 @@ Rules One Code adds are saved under `~/.onecode`, never under `~/.claude`.
|
|
|
104
118
|
|
|
105
119
|
A mode sets the default answer for actions no rule covers. **Auto is the
|
|
106
120
|
default**, matching Claude Code: a classifier approves routine actions and
|
|
107
|
-
stops risky ones, so you
|
|
121
|
+
stops risky ones, so you're not prompted for every step.
|
|
108
122
|
|
|
109
123
|
| Mode | Badge | What it does |
|
|
110
124
|
|---|---|---|
|
|
@@ -118,10 +132,10 @@ stops risky ones, so you are not prompted for every step.
|
|
|
118
132
|
The current badge appears in the banner and is announced when the mode
|
|
119
133
|
changes.
|
|
120
134
|
|
|
121
|
-
### Cycle modes with ctrl+q
|
|
135
|
+
### Cycle modes with ctrl+q (alt+m on Windows and WSL)
|
|
122
136
|
|
|
123
|
-
Press **ctrl+q** to cycle through manual, accept edits, plan, and auto.
|
|
124
|
-
Two modes join the cycle only under conditions:
|
|
137
|
+
Press **ctrl+q** to cycle through manual, accept edits, plan, and auto. On
|
|
138
|
+
Windows and WSL the key is **alt+m**. Two modes join the cycle only under certain conditions:
|
|
125
139
|
|
|
126
140
|
- **Auto** appears only when a model that can run the classifier is
|
|
127
141
|
available. With no provider connected, the cycle skips it.
|
|
@@ -130,10 +144,11 @@ Two modes join the cycle only under conditions:
|
|
|
130
144
|
**Don't ask** is never in the cycle; reach it with the `--permission-mode`
|
|
131
145
|
flag or a settings file.
|
|
132
146
|
|
|
133
|
-
Claude Code cycles modes with shift+tab. One Code
|
|
147
|
+
Claude Code cycles modes with shift+tab. One Code can't use that key
|
|
134
148
|
because pi reserves it for the reasoning-effort dial. On Windows and WSL,
|
|
135
|
-
pi's own default keybindings
|
|
136
|
-
|
|
149
|
+
pi's own default keybindings use ctrl+q to queue a follow-up message, so
|
|
150
|
+
One Code cycles modes with alt+m there instead. The footer badge and the
|
|
151
|
+
startup hints name whichever key applies on your machine.
|
|
137
152
|
|
|
138
153
|
### Choose the starting mode
|
|
139
154
|
|
|
@@ -160,12 +175,12 @@ Claude Code settings files. Merge this into the existing object:
|
|
|
160
175
|
}
|
|
161
176
|
```
|
|
162
177
|
|
|
163
|
-
The scopes
|
|
178
|
+
The scopes aren't equal:
|
|
164
179
|
|
|
165
180
|
- **User scope** (`~/.claude/settings.json`) and **managed settings** can
|
|
166
181
|
set any mode.
|
|
167
182
|
- **Project scope** (`.claude/settings.json` and `.claude/settings.local.json`)
|
|
168
|
-
can set `default`, `acceptEdits`, `plan`, or `dontAsk`. It
|
|
183
|
+
can set `default`, `acceptEdits`, `plan`, or `dontAsk`. It can't set
|
|
169
184
|
`auto` or `bypassPermissions`; a checked-in file must not be able to turn
|
|
170
185
|
off approvals for whoever clones it.
|
|
171
186
|
- A `defaultMode` in `~/.onecode/settings.json` has no effect.
|
|
@@ -198,7 +213,7 @@ and these choices:
|
|
|
198
213
|
- **No, tell the agent what to do differently.** Deny it, with an optional
|
|
199
214
|
note that is passed to the model as the reason.
|
|
200
215
|
|
|
201
|
-
The "don't ask again" option
|
|
216
|
+
The "don't ask again" option isn't offered for protected paths, for writes
|
|
202
217
|
that the auto-mode safety floor caught, or in auto mode. Session grants never
|
|
203
218
|
apply in auto mode and are cleared when the session ends.
|
|
204
219
|
|
|
@@ -214,7 +229,10 @@ Reads and edits are confined to the working directory by default:
|
|
|
214
229
|
mode, and is denied in don't-ask mode.
|
|
215
230
|
- Accept-edits mode approves edits only inside the working directory.
|
|
216
231
|
- The harness's own session directories count as inside: the auto-memory
|
|
217
|
-
folder, the session scratchpad, persisted tool output,
|
|
232
|
+
folder, the session scratchpad, persisted tool output, the plan file, and
|
|
233
|
+
this project's own session transcripts (with auto mode's decision log next
|
|
234
|
+
to them), which is what `/doctor` reads. Other projects' transcripts are
|
|
235
|
+
outside, as they are for Claude Code.
|
|
218
236
|
|
|
219
237
|
Paths are compared after resolving symlinks, so a symlink inside the project
|
|
220
238
|
that points outside it counts as outside.
|
|
@@ -226,7 +244,7 @@ check and always goes to the classifier.
|
|
|
226
244
|
## Protected paths
|
|
227
245
|
|
|
228
246
|
Writes to these paths are never approved automatically in any mode other
|
|
229
|
-
than bypass, and allow rules
|
|
247
|
+
than bypass, and allow rules don't cover them.
|
|
230
248
|
|
|
231
249
|
Protected directories, including everything inside them:
|
|
232
250
|
|
|
@@ -285,7 +303,7 @@ code. Only read-only tools and edits to one plan file are available.
|
|
|
285
303
|
`plan` agent, and then write the plan.
|
|
286
304
|
- You can read and edit the plan file yourself while the model works.
|
|
287
305
|
|
|
288
|
-
Enter plan mode by cycling to it with **ctrl+q
|
|
306
|
+
Enter plan mode by cycling to it with **ctrl+q** (**alt+m** on Windows and WSL), by starting with
|
|
289
307
|
`--permission-mode plan`, or by asking the model to plan first (it can call
|
|
290
308
|
`enter_plan_mode` itself).
|
|
291
309
|
|
|
@@ -300,11 +318,11 @@ shows the plan. Nothing runs until you choose. The choices are:
|
|
|
300
318
|
5. **Keep planning.** No mode change; the model refines the plan file.
|
|
301
319
|
|
|
302
320
|
The initial highlight is the option that restores your previous mode, or
|
|
303
|
-
manual mode when that
|
|
321
|
+
manual mode when that isn't offered. It never lands on a more permissive
|
|
304
322
|
option by default. Press the number of a choice to pick it directly, or
|
|
305
323
|
**Esc** to keep planning.
|
|
306
324
|
|
|
307
|
-
In a non-interactive run there
|
|
325
|
+
In a non-interactive run there's no one to approve, so `exit_plan_mode`
|
|
308
326
|
refuses and the session stays in plan mode with the plan on disk.
|
|
309
327
|
|
|
310
328
|
## Auto mode
|
|
@@ -317,20 +335,20 @@ classifier.
|
|
|
317
335
|
|
|
318
336
|
- Actions a deterministic analysis proves safe. Read-only shell commands
|
|
319
337
|
inside the working directory are the common case. This analysis can only
|
|
320
|
-
ever conclude "safe"; anything it
|
|
338
|
+
ever conclude "safe"; anything it can't parse or recognize goes to the
|
|
321
339
|
classifier rather than through.
|
|
322
340
|
- Edits and writes to files inside the project that are not credential
|
|
323
341
|
files, not protected paths, and not files that run code on their own
|
|
324
342
|
(build wrappers, CI workflows, editor auto-run configuration).
|
|
325
343
|
- Deleting or resetting files inside the project **when git can recover
|
|
326
344
|
them**. A tracked, committed file can be restored, so removing it is
|
|
327
|
-
approved. An untracked or modified file
|
|
345
|
+
approved. An untracked or modified file can't, so removing it goes to
|
|
328
346
|
the classifier. Claude Code trusts the whole project directory here; One
|
|
329
347
|
Code checks recoverability first.
|
|
330
348
|
|
|
331
349
|
### What goes to the classifier
|
|
332
350
|
|
|
333
|
-
Everything else: destructive commands git
|
|
351
|
+
Everything else: destructive commands git can't undo, anything that
|
|
334
352
|
reaches outside the project, network-affecting commands, writes to
|
|
335
353
|
protected paths, and reads outside the working directory.
|
|
336
354
|
|
|
@@ -342,21 +360,21 @@ The classifier is Claude Code's two-stage ruleset, embedded verbatim:
|
|
|
342
360
|
stated intent and the allow list, and either approves or blocks with a
|
|
343
361
|
named rule.
|
|
344
362
|
|
|
345
|
-
Verdicts are checked before they
|
|
363
|
+
Verdicts are checked before they're acted on. A block must cite a real
|
|
346
364
|
rule from the ruleset. An approval based on intent must quote your own
|
|
347
|
-
words from the conversation. A classifier that
|
|
348
|
-
out, or returns something unparseable blocks the action; a gate that
|
|
365
|
+
words from the conversation. A classifier that can't be reached, times
|
|
366
|
+
out, or returns something unparseable blocks the action; a gate that can't
|
|
349
367
|
consult its classifier approves nothing.
|
|
350
368
|
|
|
351
369
|
A blocked action is reported to the model with the reason so it can choose
|
|
352
|
-
a safer route. You
|
|
370
|
+
a safer route. You're not prompted per action while auto mode runs. After
|
|
353
371
|
repeated blocks in a row, auto mode pauses and the next action prompts you;
|
|
354
372
|
approving it resumes auto mode.
|
|
355
373
|
|
|
356
374
|
Allow rules that are broad enough to pre-approve arbitrary execution, such
|
|
357
375
|
as `Bash(*)`, a wildcarded interpreter, or a rule that allows delegation to
|
|
358
|
-
subagents, are suspended in auto mode so they
|
|
359
|
-
Session grants from the approval prompt
|
|
376
|
+
subagents, are suspended in auto mode so they can't bypass the classifier.
|
|
377
|
+
Session grants from the approval prompt don't apply in auto mode either.
|
|
360
378
|
|
|
361
379
|
### The classifier model
|
|
362
380
|
|
|
@@ -427,13 +445,13 @@ One Code's security model is the permission gate plus auto mode, not an
|
|
|
427
445
|
assumption that the model behaves. Read these facts before you leave a
|
|
428
446
|
session unattended:
|
|
429
447
|
|
|
430
|
-
- **There
|
|
448
|
+
- **There's no operating-system sandbox.** The gate decides whether a
|
|
431
449
|
command runs; nothing constrains what an approved command can touch. For
|
|
432
450
|
an OS-level wall, run One Code inside a container. The gate and the
|
|
433
451
|
container work together.
|
|
434
452
|
- **Bypass mode bypasses everything**, including protected paths. Claude
|
|
435
453
|
Code keeps its protected-path checks active even under
|
|
436
|
-
`--dangerously-skip-permissions`; One Code
|
|
454
|
+
`--dangerously-skip-permissions`; One Code doesn't.
|
|
437
455
|
- **Auto mode is the default without a first-run consent step**, and
|
|
438
456
|
without the OS sandbox Claude Code pairs its own auto default with.
|
|
439
457
|
- **A weak classifier is a weaker boundary.** Automatic selection applies a
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Providers and models
|
|
2
2
|
|
|
3
|
+
[← One Code user guide](README.md)
|
|
4
|
+
|
|
3
5
|
One Code talks to each model provider natively, so you choose the provider
|
|
4
6
|
and the model, and you can change either one during a session. This page
|
|
5
7
|
covers connecting a provider, storing a key, switching models, how One Code
|
|
@@ -31,8 +33,8 @@ Two providers hand out free models you can try at no cost:
|
|
|
31
33
|
a key, or sign in from inside One Code with no key copying. Free models
|
|
32
34
|
carry a `:free` suffix, such as `nvidia/nemotron-3-ultra-550b-a55b:free`.
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
pi stores credentials in its agent directory (`~/.onecode/agent/` under
|
|
37
|
+
the bundled app). `/logout` removes them.
|
|
36
38
|
|
|
37
39
|
## Store keys as environment variables
|
|
38
40
|
|
|
@@ -100,10 +102,10 @@ otherwise to the matching class within your provider (`haiku` the cheapest
|
|
|
100
102
|
capable model, `sonnet` the cheapest Sonnet-class model, `opus` and `fable`
|
|
101
103
|
your main model). They never switch providers.
|
|
102
104
|
|
|
103
|
-
Capability is judged by tier (see the next section).
|
|
104
|
-
|
|
105
|
-
model released more than a year after its vendor's newest
|
|
106
|
-
|
|
105
|
+
Capability is judged by tier (see the next section). One Code excludes
|
|
106
|
+
models that can't call tools, have no price, or are a generation behind: a
|
|
107
|
+
model released more than a year after its vendor's newest drops one tier,
|
|
108
|
+
and one more than two years behind never gets picked automatically.
|
|
107
109
|
Provider aliases such as `:free` or `:online` variants are skipped.
|
|
108
110
|
|
|
109
111
|
### Measured selection with Artificial Analysis
|
|
@@ -148,8 +150,8 @@ the system prompt to match:
|
|
|
148
150
|
| Cheap | Haiku-class models and comparable "flash", "mini", or "small" models. | The verbose prompt Claude Code gives Haiku. |
|
|
149
151
|
| Tiny | Sub-Haiku models. | The verbose prompt plus extra scaffolding and the `grep`, `find`, and `ls` tools. |
|
|
150
152
|
|
|
151
|
-
The tier is derived from the model's name, release date, and price. You
|
|
152
|
-
|
|
153
|
+
The tier is derived from the model's name, release date, and price. You
|
|
154
|
+
don't configure it; set `CC_PROMPT_TIER` to force one when you want to
|
|
153
155
|
experiment. `/doctor report` shows the tier in use.
|
|
154
156
|
|
|
155
157
|
## Web search on providers without a search API
|
|
@@ -161,7 +163,7 @@ API, in this order:
|
|
|
161
163
|
|
|
162
164
|
1. **Brave Search**, when `BRAVE_SEARCH_API_KEY` is set.
|
|
163
165
|
2. **Tavily**, when `TAVILY_API_KEY` is set.
|
|
164
|
-
3. **Exa's free keyless endpoint**, when neither key is set. It
|
|
166
|
+
3. **Exa's free keyless endpoint**, when neither key is set. It's
|
|
165
167
|
rate-limited and best-effort, so One Code warns you the first time a
|
|
166
168
|
session uses it and labels every result that came from it.
|
|
167
169
|
|
|
@@ -187,7 +189,7 @@ so. Web fetch works on every provider; it never depends on a search API.
|
|
|
187
189
|
- Some models reject request options others accept (a temperature, a
|
|
188
190
|
reasoning setting). One Code sends minimal options to its side calls for
|
|
189
191
|
this reason, and a side call that still fails does so loudly: a
|
|
190
|
-
classifier that
|
|
192
|
+
classifier that can't answer blocks the action; a reader that fails
|
|
191
193
|
returns the raw page.
|
|
192
194
|
- Interactive sessions request the provider's extended prompt cache (one
|
|
193
195
|
hour on Anthropic). Subagents and one-shot runs use the short default.
|
package/docs/guide/reference.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Command and keyboard reference
|
|
2
2
|
|
|
3
|
+
[← One Code user guide](README.md)
|
|
4
|
+
|
|
3
5
|
A lookup for every slash command, keyboard shortcut, command-line flag,
|
|
4
6
|
environment variable, and file location. Each entry points to the page
|
|
5
7
|
that explains it.
|
|
@@ -47,7 +49,7 @@ that explains it.
|
|
|
47
49
|
| `/loop status`, `/loop stop` | Report or end the loop. | |
|
|
48
50
|
| `/tools-deferred` | List deferred tools and whether each is loaded. | [Tools](tools.md#eager-and-deferred-tools) |
|
|
49
51
|
| `/init` | Have the model write a `CLAUDE.md` for the project. | [CLAUDE.md](bring-your-claude-code-setup.md#project-instructions-claudemd) |
|
|
50
|
-
| `/clear` | Start a new session (pi's `/new`). | [Sessions](sessions-and-context.md#start-over) |
|
|
52
|
+
| `/clear` | Start a new session (pi's `/new`); the model is told. | [Sessions](sessions-and-context.md#start-over) |
|
|
51
53
|
| `/exit` | Quit (pi's `/quit`). | |
|
|
52
54
|
|
|
53
55
|
### pi commands
|
|
@@ -83,7 +85,7 @@ These come from pi and are available in every One Code session.
|
|
|
83
85
|
|
|
84
86
|
| Shortcut | What it does |
|
|
85
87
|
|---|---|
|
|
86
|
-
| **ctrl+q** | Cycle the permission mode: manual, accept edits, plan, auto. |
|
|
88
|
+
| **ctrl+q** (**alt+m** on Windows and WSL) | Cycle the permission mode: manual, accept edits, plan, auto. |
|
|
87
89
|
| **↓** (empty editor) | Focus the panel below the editor: background shells, then subagents, then workflows. |
|
|
88
90
|
| **ctrl+x** then **ctrl+k** | Stop every running agent (in the subagent panel). |
|
|
89
91
|
| **x** | Stop the selected agent, shell, or workflow (in a panel). |
|
|
@@ -122,7 +124,7 @@ Rebind keys in pi's keybindings file; see pi's documentation.
|
|
|
122
124
|
## Command-line flags
|
|
123
125
|
|
|
124
126
|
`onecode` forwards every flag to pi except `--version` and `doctor`. On the
|
|
125
|
-
extension
|
|
127
|
+
extension install, use `pi` in place of `onecode`.
|
|
126
128
|
|
|
127
129
|
| Flag | What it does |
|
|
128
130
|
|---|---|
|
|
@@ -157,7 +159,7 @@ Set these before launching.
|
|
|
157
159
|
|---|---|
|
|
158
160
|
| `ONECODE_STATE_DIR` | Where One Code keeps its state (default `~/.onecode`). Independent of pi's agent directory. |
|
|
159
161
|
| `ONECODE_NO_UPDATE_CHECK=1` | Skip the daily update check. |
|
|
160
|
-
| `ONECODE_DEBUG=1` | Report when a pi-internal patch in the bundled app
|
|
162
|
+
| `ONECODE_DEBUG=1` | Report when a pi-internal patch in the bundled app didn't apply. |
|
|
161
163
|
| `AA_API_KEY` | Artificial Analysis key for measured model selection. |
|
|
162
164
|
| `BRAVE_SEARCH_API_KEY`, `TAVILY_API_KEY` | Web-search fallback keys. |
|
|
163
165
|
|
|
@@ -173,6 +175,7 @@ The `CC_` prefix is historical; `ONECODE_`-prefixed aliases are planned.
|
|
|
173
175
|
| `CC_FOOTER=0` | Keep pi's footer instead of One Code's status line. |
|
|
174
176
|
| `CC_TURN_DURATION=0` | Remove the post-turn timing line. |
|
|
175
177
|
| `CC_RECAP=0` | Turn off the "while you were away" recap. |
|
|
178
|
+
| `CC_SESSION_TITLE=0` | Turn off the automatic session title. |
|
|
176
179
|
| `CC_RECAP_IDLE_MS` | Idle time before a recap, in milliseconds (default 300000). |
|
|
177
180
|
| `CC_COMPACTION=0` | Use pi's compaction summary instead of Claude Code's. |
|
|
178
181
|
| `CC_CLEAR_THINKING=0`, `=1` | Force the thinking-preservation request off or on for Anthropic models. Default: on for `api.anthropic.com` only. |
|
|
@@ -192,6 +195,8 @@ The `CC_` prefix is historical; `ONECODE_`-prefixed aliases are planned.
|
|
|
192
195
|
| `PI_CACHE_RETENTION` | pi's prompt-cache lifetime. One Code sets `long` for interactive sessions unless you set it yourself. |
|
|
193
196
|
| `PI_OFFLINE=1` | Same as `--offline`. |
|
|
194
197
|
| `CLAUDE_CONFIG_DIR` | Where Claude Code's user configuration is read from. |
|
|
198
|
+
| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | `1` turns the `powershell` tool on (the default on Windows), `0` turns it off. Off Windows it needs a `pwsh` on PATH. See [Windows](windows.md). |
|
|
199
|
+
| `CLAUDE_CODE_GIT_BASH_PATH` | The bash that drives the `bash` tool, hooks, and background shells. Also read from the `env` block of `~/.claude/settings.json`; a non-bash binary is ignored with a warning. |
|
|
195
200
|
| `CLAUDE_CODE_SUBAGENT_MODEL` | Default subagent model on a Claude session. |
|
|
196
201
|
| `EDITOR`, `VISUAL` | Editor used by `/memory` (and pi's **ctrl+g**). |
|
|
197
202
|
| `SHELL` | Shell used for commands (default `/bin/sh`). |
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Sessions and context
|
|
2
2
|
|
|
3
|
+
[← One Code user guide](README.md)
|
|
4
|
+
|
|
3
5
|
This page covers what One Code puts into the model's context, how it keeps
|
|
4
6
|
long sessions within the context window, what it remembers between
|
|
5
7
|
sessions, and how to continue or branch a session.
|
|
@@ -82,7 +84,7 @@ full transcript if it needs a detail.
|
|
|
82
84
|
Run `/compact` to compact at any time; you can pass instructions about what
|
|
83
85
|
the summary should focus on. Compaction that happens because the context is
|
|
84
86
|
full is more expensive than a manual or threshold compaction, because it
|
|
85
|
-
|
|
87
|
+
can't reuse the cached prefix of the conversation.
|
|
86
88
|
|
|
87
89
|
Set `CC_COMPACTION=0` to use pi's own summary instead.
|
|
88
90
|
|
|
@@ -107,7 +109,7 @@ turn it off.
|
|
|
107
109
|
|
|
108
110
|
Interactive sessions ask the provider for an extended cache lifetime (one
|
|
109
111
|
hour on Anthropic; provider-dependent elsewhere), so a pause between turns
|
|
110
|
-
|
|
112
|
+
doesn't re-send the whole conversation. Subagents, workflow agents, and
|
|
111
113
|
`-p` or `--mode json` runs use the provider's short default. Set
|
|
112
114
|
`PI_CACHE_RETENTION` yourself to take over the choice. The footer shows the
|
|
113
115
|
cache-hit rate of the latest turn.
|
|
@@ -121,7 +123,7 @@ Each session gets a scratchpad directory under the system temp directory,
|
|
|
121
123
|
named by project and session. The model is told to use it for temporary
|
|
122
124
|
files instead of `/tmp`; writes there need no approval.
|
|
123
125
|
|
|
124
|
-
Tool output larger than 50 KB
|
|
126
|
+
Tool output larger than 50 KB isn't truncated. It's written to a file
|
|
125
127
|
under the session directory, and the model receives the path, the size,
|
|
126
128
|
and a 2 KB preview in a `<persisted-output>` block, so it can read the part
|
|
127
129
|
it needs.
|
|
@@ -182,6 +184,24 @@ Not restored:
|
|
|
182
184
|
`/new`. Running background tasks are stopped and listed. The permission
|
|
183
185
|
mode you chose carries over.
|
|
184
186
|
|
|
187
|
+
### What the model learns about your commands
|
|
188
|
+
|
|
189
|
+
As in Claude Code, a slash command you run is recorded for the model: the
|
|
190
|
+
next message you send carries a short note that the command ran, wrapped in a
|
|
191
|
+
caveat telling the model not to act on it. `/clear` opens the new session
|
|
192
|
+
with that note, and a model switch records "Set model to …" the way Claude
|
|
193
|
+
Code does. Commands that One Code cannot observe (pi's own `/compact`,
|
|
194
|
+
`/settings`, `/name`) leave no note.
|
|
195
|
+
|
|
196
|
+
### The session title
|
|
197
|
+
|
|
198
|
+
After your first real message, One Code names the session the way Claude
|
|
199
|
+
Code does: a cheap model on your provider turns the message into a short
|
|
200
|
+
title (Claude Code's own naming prompt), which shows in the terminal tab as
|
|
201
|
+
`One Code - <title> - <folder>` and in the session picker. A name you set
|
|
202
|
+
with `/name` is never overwritten. The call's cost is included in the
|
|
203
|
+
footer's total. Set `CC_SESSION_TITLE=0` to turn it off.
|
|
204
|
+
|
|
185
205
|
## Turn timing
|
|
186
206
|
|
|
187
207
|
After each turn, a dim line such as `✻ Cooked for 5m 12s` reports how long
|