docks-kit 0.16.2 → 0.16.3

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/AGENTS.md CHANGED
@@ -64,6 +64,10 @@ omp SoT notes:
64
64
  - `SoT/.omp/AGENTS.md`, `config.yml`, and `mcp.json` deploy to `~/.omp/agent/`.
65
65
  - `SoT/.omp/intercom.json` deploys to `$PI_CODING_AGENT_DIR/intercom/config.json`. The default root is `~/.pi/agent`.
66
66
  - `ompSync.ts syncConfig` deep-merges `config.yml` through `mergeOmpConfig`.
67
+ - `cycleOrder` ends with the `fable` role (`modelRoles.fable` = `anthropic/claude-fable-5-1:medium`, `modelTags.fable` visible, `retry.fallbackChains.fable` empty), so the model switcher reaches Fable 5.1 as its fourth stop and never falls back off it. The hidden `switch_fable` role points at the same model and level.
68
+ - `modelRoles.task` is `openai-codex/gpt-6-astra:low`, chosen for 2.60 s TTFT and 4k output tokens per task at cost parity with the previous `gpt-5.6-sol:high`. The four reviewer agents in `task.agentModelOverrides` inherit `@task`, and Artificial Analysis publishes no per-level Astra Coding Agent Index score, so reviewer output is the signal to watch.
69
+ - `SoT/.omp/AGENTS.md` carries the rule `Please remove all mannered prose.` Anthropic's Fable 5.1 prompting guide documents mannered prose as a Fable 5.1 behavior and gives that sentence as its short-version fix: https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5-1
70
+ - `cli/docs/omp-models.md` (topic `omp-models`) records the role map rationale and the Artificial Analysis snapshot behind it. Model choices change with published benchmarks, so update that topic in the same commit as a role change.
67
71
  - Sync registers the `docks` marketplace. It installs or upgrades `docks@docks` and `plan-lifecycle@docks` at user scope.
68
72
  - Sync installs `pi-intercom` at the verified version from `SoT/toolchain.json`.
69
73
  - The omp CLI is upstream-owned and self-updating through `omp update`. Sync never installs or upgrades the CLI.
package/README.md CHANGED
@@ -52,7 +52,7 @@ docks-kit toolchain [check|ensure <tool>] verified-version floors for exte
52
52
  docks-kit status [--json] deployed-vs-SoT drift + toolchain + counts
53
53
  docks-kit plugins list [--json] enabledPlugins tri-state vs installed
54
54
  docks-kit skills list [--json] universal skills vs manifest
55
- docks-kit docs [topic] self-documentation (9 topics)
55
+ docks-kit docs [topic] self-documentation (10 topics)
56
56
  --help --version --wizard --completions built-in
57
57
  ```
58
58
 
@@ -145,13 +145,14 @@ release. npm publishes the exact package tarball through trusted publishing
145
145
  with OIDC provenance.
146
146
  Published binaries, checksums, and release notes are available on
147
147
  [GitHub Releases](https://github.com/DocksDocks/public/releases).
148
- Package `docks-kit` 0.16.2 bundles the CLI + generated payload, so npm releases
148
+ Each `docks-kit` npm release bundles the CLI + generated payload, so releases
149
149
  are versioned config snapshots without shipping the authoring `SoT/` tree.
150
150
 
151
151
  ## Deeper docs
152
152
 
153
- - `docks-kit docs <topic>` — overview, sync-layers, flags, modifiers, models,
154
- toolchain, plugins, install, platforms (works offline, bundled with the CLI)
153
+ - `docks-kit docs <topic>` - overview, sync-layers, flags, modifiers, models,
154
+ omp-models, toolchain, plugins, install, platforms (works offline, bundled
155
+ with the CLI)
155
156
  - [`AGENTS.md`](AGENTS.md) — engineering rules for agents working on the kit
156
157
  - [`CLAUDE.md`](CLAUDE.md) — Claude Code specifics: env vars, session
157
158
  management, permission mode, open concerns
@@ -0,0 +1,176 @@
1
+ # omp models
2
+
3
+ Why `SoT/.omp/config.yml` points each omp role at a specific model and thinking
4
+ level, and the Artificial Analysis (AA) measurements the choices were weighed
5
+ against.
6
+
7
+ ## Role map
8
+
9
+ | Role | Model | Level | Index | Cost/task | TTFT | Coding Agent Index |
10
+ |---|---|---|---:|---:|---:|---:|
11
+ | `default` | `anthropic/claude-opus-5` | high | 48 | $3.61 | 16.96 s | 66 (Claude Code) |
12
+ | `slow` | `anthropic/claude-opus-5` | xhigh | 50 | $4.88 | 28.65 s | 68 (Claude Code) |
13
+ | `plan` | `anthropic/claude-opus-5` | xhigh | 50 | $4.88 | 28.65 s | 68 (Claude Code) |
14
+ | `task` | `openai-codex/gpt-6-astra` | low | 46 | $0.82 | 2.60 s | n/a |
15
+ | `advisor` | `openai-codex/gpt-5.6-sol` | medium | 39 | $0.50 | 4.90 s | 62 (Codex) |
16
+ | `designer` | `anthropic/claude-opus-5` | high | 48 | $3.61 | 16.96 s | 66 (Claude Code) |
17
+ | `vision` | `anthropic/claude-opus-5` | medium | 45 | $2.19 | 3.79 s | 64 (Claude Code) |
18
+ | `smol` / `commit` | `openai-codex/gpt-5.6-luna` | medium | 26 | n/a | 2.18 s | 42 (Codex) |
19
+ | `tiny` | `openai-codex/gpt-5.6-luna` | low | 22 | n/a | 1.78 s | 25 (Codex) |
20
+ | `fable` | `anthropic/claude-fable-5-1` | medium | 49 | $2.98 | 9.65 s | n/a |
21
+ | `switch_fable` | `anthropic/claude-fable-5-1` | medium | 49 | $2.98 | 9.65 s | n/a |
22
+
23
+ The table reports the measured Artificial Analysis figures for each assigned
24
+ model and level. It states no motive that the config or omp's own
25
+ documentation does not establish. AA lists no cost per task for Luna medium
26
+ and low, and no Coding Agent Index for any Astra or Fable 5.1 level except
27
+ max.
28
+
29
+ What omp's settings catalog establishes about these roles:
30
+
31
+ - `cycleOrder` lists the roles the model switcher cycles, so `fable` is the
32
+ fourth `Ctrl+P` stop.
33
+ - `tiny` overrides the model for lightweight background tasks: titles, memory,
34
+ auto-thinking, and unexpected-stop detection.
35
+ - `modelTags` carries role metadata and can introduce roles; `hidden: true`
36
+ keeps `switch_fable` out of the switcher list.
37
+
38
+ `task.agentModelOverrides` maps `reviewer`, `security-reviewer`,
39
+ `code-reviewer`, and `plan-reviewer` to `@task`, so all four inherit whatever
40
+ `task` resolves to. `retry.fallbackChains.task` keeps
41
+ `anthropic/claude-opus-5:high` as a cross-vendor fallback.
42
+
43
+ ## Artificial Analysis snapshot
44
+
45
+ Source: `https://artificialanalysis.ai`, read on 2026-09-08. Every score below
46
+ comes from one snapshot: Intelligence Index v4.3 and Coding Agent Index v1.4,
47
+ taken from each family's release page, its per-level model pages, and the
48
+ harness comparison pages. The v4.1.1-era figures in AA's Astra launch article
49
+ are excluded, because index composition changed in v4.2 and again in v4.3, so
50
+ mixing them would invalidate every ratio here. The head-to-head rows come from
51
+ the direct `gpt-6-astra-low-vs-gpt-5-6-sol-high` comparison page, not from a
52
+ comparison against another Sol level.
53
+
54
+ Column meanings:
55
+
56
+ - **Intelligence Index** - AA's weighted aggregate across its evaluation set.
57
+ Comparable only inside one index version.
58
+ - **Coding Agent Index** - agentic coding score inside a named harness. AA
59
+ publishes it per harness, and for most effort levels it publishes nothing.
60
+ - **Cost per Index task** - weighted average USD to run one index task,
61
+ including input, cache, reasoning, and answer tokens.
62
+ - **Index output tokens** - total output tokens the model spends to complete the
63
+ whole index run. This is the token-efficiency signal.
64
+ - **TTFT** - seconds to the first answer token, so reasoning time counts.
65
+
66
+ ### GPT-6 Astra (OpenAI) - `openai-codex/gpt-6-astra`
67
+
68
+ | Level | Intelligence Index | Coding Agent Index | Cost per Index task | Index output tokens | Output speed t/s | TTFT s |
69
+ |---|---:|---:|---:|---:|---:|---:|
70
+ | max | 53 | 67 (Codex) | $3.26 | 60M | 59 | 322.48 |
71
+ | xhigh | 53 | n/a | $2.31 | 38M | 57 | 161.65 |
72
+ | high | 51 | n/a | $1.72 | 26M | 55 | 45.63 |
73
+ | medium | 50 | n/a | $1.54 | 19M | 53 | 5.42 |
74
+ | low | 46 | n/a | $0.82 | 10M | 53 | 2.60 |
75
+ | non-reasoning | 45 | n/a | $1.71 | 12M | n/a | n/a |
76
+
77
+ Price: $10.00 in, $50.00 out, $1.00 cache read, $12.50 cache write per 1M.
78
+ Context 1M. Knowledge cutoff 2026-04-30.
79
+ AA lists non-reasoning above low on cost per task.
80
+
81
+ ### Claude Fable 5.1 (Anthropic) - `anthropic/claude-fable-5-1`
82
+
83
+ | Level | Intelligence Index | Coding Agent Index | Cost per Index task | Index output tokens | Output speed t/s | TTFT s |
84
+ |---|---:|---:|---:|---:|---:|---:|
85
+ | max | 54 (estimated) | 70 (Claude Code) | n/a | n/a | 70 | 277.47 |
86
+ | xhigh | 53 | n/a | $5.98 | n/a | 60 | 124.87 |
87
+ | high | 51 | n/a | $3.91 | n/a | 57 | 23.70 |
88
+ | medium | 49 | n/a | $2.98 | n/a | 56 | 9.65 |
89
+ | low | 47 | n/a | $2.37 | n/a | 53 | 6.55 |
90
+
91
+ Price: $10.00 in, $50.00 out, $0.25 cache read per 1M; no published cache-write
92
+ price. Context 1M. All levels run with fallback.
93
+ AA publishes per-task output tokens instead of index totals here: low 22k,
94
+ medium 28k, high 38k, xhigh 61k. AA marks the max index score as estimated.
95
+
96
+ ### Claude Opus 5 (Anthropic) - `anthropic/claude-opus-5`
97
+
98
+ | Level | Intelligence Index | Coding Agent Index | Cost per Index task | Index output tokens | Output speed t/s | TTFT s |
99
+ |---|---:|---:|---:|---:|---:|---:|
100
+ | max | 51 | 67 (Claude Code) | $5.86 | 140M | 54.3 | 69.92 |
101
+ | xhigh | 50 | 68 (Claude Code) | $4.88 | 110M | 53.0 | 28.65 |
102
+ | high | 48 | 66 (Claude Code) | $3.61 | 81M | 54.0 | 16.96 |
103
+ | medium | 45 | 64 (Claude Code) | $2.19 | 49M | 53.6 | 3.79 |
104
+ | low | 40 | 59 (Claude Code) | $1.10 | 26M | 53.2 | 2.32 |
105
+
106
+ Price: $5.00 in, $25.00 out, $0.50 cache read, $6.25 cache write per 1M, with a
107
+ 5-minute cache TTL. Context 1M.
108
+ AA reports that its Opus 5 index run fell back to Opus 4.8 for part of the set.
109
+
110
+ ### GPT-5.6 Sol (OpenAI) - `openai-codex/gpt-5.6-sol`
111
+
112
+ | Level | Intelligence Index | Coding Agent Index | Cost per Index task | Index output tokens | Output speed t/s | TTFT s |
113
+ |---|---:|---:|---:|---:|---:|---:|
114
+ | max | 47 | 65 (Codex) | $1.99 | 90M | 69.8 | 132.10 |
115
+ | xhigh | 44 | 63 (Codex) | $1.18 | 51M | 64.8 | 50.59 |
116
+ | high | 42 | 64 (Codex) | $0.81 | 34M | 67.8 | 11.26 |
117
+ | medium | 39 | 62 (Codex) | $0.50 | 21M | 66.6 | 4.90 |
118
+ | low | 34 | 55 (Codex) | $0.26 | 13M | 67.1 | 2.69 |
119
+ | non-reasoning | 28 | 43 (Codex) | n/a | n/a | 65.6 | 1.13 |
120
+
121
+ Price: $4.00 in, $20.00 out per 1M, with a 90% cache-read discount and no
122
+ published numeric cache price. Context 1M.
123
+
124
+ ### GPT-5.6 Luna (OpenAI) - `openai-codex/gpt-5.6-luna`
125
+
126
+ | Level | Intelligence Index | Coding Agent Index | Cost per Index task | Index output tokens | Output speed t/s | TTFT s |
127
+ |---|---:|---:|---:|---:|---:|---:|
128
+ | max | 38 | 57 (Codex) | $0.18 | n/a | 121 | 168.22 |
129
+ | xhigh | 35 | 53 (Codex) | $0.09 | n/a | 113 | 60.22 |
130
+ | high | 33 | 52 (Codex) | n/a | n/a | 120 | 9.62 |
131
+ | medium | 26 | 42 (Codex) | n/a | n/a | 110 | 2.18 |
132
+ | low | 22 | 25 (Codex) | n/a | n/a | 119 | 1.78 |
133
+ | non-reasoning | 17 | 19 (Codex) | n/a | n/a | 120 | 0.76 |
134
+
135
+ Price: $0.20 in, $1.20 out, $0.02 cache read per 1M; no published cache-write
136
+ price. Context 1M. AA lists cost per task only for max and xhigh.
137
+
138
+ ## Why `task` runs Astra low
139
+
140
+ | Metric | Astra low | Sol high | Sol max | Opus 5 high |
141
+ |---|---:|---:|---:|---:|
142
+ | Intelligence Index | 46 | 42 | 47 | 48 |
143
+ | Cost per Index task | $0.82 | $0.81 | $1.99 | $3.61 |
144
+ | Output tokens per task | 4k | 13k | 29k | 46k |
145
+ | Index output tokens | 10M | 34M | 90M | 81M |
146
+ | Answer TTFT | 2.60 s | 11.26 s | 132.10 s | 16.96 s |
147
+ | End-to-end latency | 11.99 s | 18.64 s | 139.27 s | 26.22 s |
148
+ | Time per task | 84.45 s | 195.67 s | 411.54 s | 525.57 s |
149
+ | Terminal-Bench v4.0 | 42% | 21% | 40% | 46% |
150
+ | AA-Briefcase | 1253 | 1361 | 1475 | 1557 |
151
+ | AA-Omniscience | 41 | 20 | 22 | 34 |
152
+
153
+ Astra low beats the previous `task` model, Sol high, on intelligence, latency,
154
+ and token use at the same cost per task. Astra costs 2.5× per token and spends
155
+ about one third the tokens, so the price rise and the efficiency gain cancel:
156
+ this is a latency and token-budget win, not a cost saving.
157
+
158
+ Sol medium is the cheaper measured alternative, and it was not chosen: index
159
+ 39, Coding Agent Index 62 (Codex), $0.50 per task, 4.90 s TTFT. Against it,
160
+ Astra low costs 64% more per task and scores 7 index points higher, with no
161
+ published Astra coding-agent score at that level.
162
+
163
+ Two risks come with it. Astra low loses AA-Briefcase, the eval closest to this
164
+ kit's agent workload, and AA publishes no Coding Agent Index score for any Astra
165
+ level except max. Watch reviewer output, because the four reviewer agents
166
+ inherit `@task`. If review quality drops, pin those four agents to
167
+ `anthropic/claude-opus-5:high` rather than reverting the whole role.
168
+
169
+ ## Maintenance
170
+
171
+ - Refresh the snapshot from the AA release page of each family
172
+ (`/models/releases/<slug>`), the per-level model pages, and the harness
173
+ comparison pages under `/agents/coding-agents/comparisons/`.
174
+ - Record the index version with the numbers. AA changes index composition
175
+ between versions, so a score from another version is not a comparison.
176
+ - Update the capture date in the same commit as any number.
@@ -10,6 +10,7 @@ import plugins from "../../docs/plugins.md" with { type: "text" }
10
10
  import syncLayers from "../../docs/sync-layers.md" with { type: "text" }
11
11
  import install from "../../docs/install.md" with { type: "text" }
12
12
  import platforms from "../../docs/platforms.md" with { type: "text" }
13
+ import ompModels from "../../docs/omp-models.md" with { type: "text" }
13
14
 
14
15
  const TOPICS: Record<string, { summary: string; body: string }> = {
15
16
  "overview": { summary: "What docks-kit is and how the pieces fit", body: overview },
@@ -20,7 +21,8 @@ const TOPICS: Record<string, { summary: string; body: string }> = {
20
21
  "toolchain": { summary: "Verified-version floors and the doctor table", body: toolchain },
21
22
  "plugins": { summary: "enabledPlugins tri-state + optional plugin opt-ins", body: plugins },
22
23
  "install": { summary: "Install paths: repo checkout, bun add -g, POSIX/Windows installers", body: install },
23
- "platforms": { summary: "Platform support: Linux, macOS, and Windows on x64 and arm64", body: platforms }
24
+ "platforms": { summary: "Platform support: Linux, macOS, and Windows on x64 and arm64", body: platforms },
25
+ "omp-models": { summary: "omp role map and the Artificial Analysis snapshot behind it", body: ompModels }
24
26
  }
25
27
 
26
28
  const topic = Argument.string("topic").pipe(
@@ -1,7 +1,7 @@
1
1
  // Generated by cli/scripts/generate-sot-payload.ts. DO NOT EDIT.
2
2
  // Edit SoT/, notification.mp3, or package.json, then run: bun cli/scripts/generate-sot-payload.ts
3
3
 
4
- export const GENERATED_PACKAGE_VERSION = "0.16.2"
4
+ export const GENERATED_PACKAGE_VERSION = "0.16.3"
5
5
 
6
6
  export const GENERATED_PAYLOAD_TEXT = {
7
7
  "SoT/.agents/skills.txt": "# Universal AI-agent skill manifest intentionally empty.\n# Global skill discovery is opt-in: add one <owner>/<repo> slug per line.\n# EngineNative ignores comments and blank lines.\n",
@@ -17,8 +17,8 @@ export const GENERATED_PAYLOAD_TEXT = {
17
17
  "SoT/.codex/config.toml": "model = \"gpt-5.6-sol\"\nmodel_reasoning_effort = \"high\"\nplan_mode_reasoning_effort = \"high\"\nmodel_reasoning_summary = \"concise\"\nmodel_verbosity = \"low\"\npersonality = \"pragmatic\"\nweb_search = \"live\"\nproject_doc_max_bytes = 131072\napproval_policy = \"on-request\"\nsandbox_mode = \"workspace-write\"\napprovals_reviewer = \"auto_review\"\n\n[sandbox_workspace_write]\nnetwork_access = true\n\n[windows]\nsandbox = \"elevated\"\n\n[features]\nmemories = true\n\n[memories]\ndedicated_tools = true\nmax_rollout_age_days = 30\n\n[agents]\nmax_threads = 12\nmax_depth = 2\n\n[tui]\nstatus_line_use_colors = true\nstatus_line = [\n \"model-with-reasoning\",\n \"current-dir\",\n \"git-branch\",\n \"context-used\",\n \"five-hour-limit\",\n \"weekly-limit\",\n]\n\n[plugins.\"docks@docks\"]\nenabled = true\n\n[plugins.\"plan-lifecycle@docks\"]\nenabled = true\n",
18
18
  "SoT/.codex/plugins/marketplace.json": "{\n \"name\": \"docks\",\n \"interface\": {\n \"displayName\": \"DocksDocks\"\n },\n \"plugins\": [\n {\n \"name\": \"docks\",\n \"source\": {\n \"source\": \"git-subdir\",\n \"url\": \"https://github.com/DocksDocks/docks.git\",\n \"path\": \"./plugins/docks\",\n \"ref\": \"main\"\n },\n \"policy\": {\n \"installation\": \"AVAILABLE\",\n \"authentication\": \"ON_INSTALL\"\n },\n \"category\": \"Productivity\"\n },\n {\n \"name\": \"plan-lifecycle\",\n \"source\": {\n \"source\": \"git-subdir\",\n \"url\": \"https://github.com/DocksDocks/docks.git\",\n \"path\": \"./plugins/plan-lifecycle\",\n \"ref\": \"main\"\n },\n \"policy\": {\n \"installation\": \"AVAILABLE\",\n \"authentication\": \"ON_INSTALL\"\n },\n \"category\": \"Productivity\"\n }\n ]\n}\n",
19
19
  "SoT/.codex/rules/docks.rules": "prefix_rule(pattern=[\"pwd\"], decision=\"allow\")\nprefix_rule(pattern=[\"ls\"], decision=\"allow\")\nprefix_rule(pattern=[\"cat\"], decision=\"allow\")\nprefix_rule(pattern=[\"head\"], decision=\"allow\")\nprefix_rule(pattern=[\"tail\"], decision=\"allow\")\nprefix_rule(pattern=[\"wc\"], decision=\"allow\")\nprefix_rule(pattern=[\"nl\"], decision=\"allow\")\nprefix_rule(pattern=[\"grep\"], decision=\"allow\")\nprefix_rule(pattern=[\"sort\"], decision=\"allow\")\nprefix_rule(pattern=[\"uniq\"], decision=\"allow\")\nprefix_rule(pattern=[\"diff\"], decision=\"allow\")\nprefix_rule(pattern=[\"which\"], decision=\"allow\")\nprefix_rule(pattern=[\"date\"], decision=\"allow\")\nprefix_rule(pattern=[\"basename\"], decision=\"allow\")\nprefix_rule(pattern=[\"dirname\"], decision=\"allow\")\nprefix_rule(pattern=[\"realpath\"], decision=\"allow\")\nprefix_rule(pattern=[\"readlink\"], decision=\"allow\")\nprefix_rule(pattern=[\"jq\"], decision=\"allow\")\nprefix_rule(pattern=[\"tree\"], decision=\"allow\")\nprefix_rule(pattern=[\"cut\"], decision=\"allow\")\nprefix_rule(pattern=[\"tr\"], decision=\"allow\")\nprefix_rule(pattern=[\"echo\"], decision=\"allow\")\nprefix_rule(pattern=[\"printf\"], decision=\"allow\")\nprefix_rule(pattern=[\"printenv\"], decision=\"allow\")\nprefix_rule(pattern=[\"uname\"], decision=\"allow\")\nprefix_rule(pattern=[\"file\"], decision=\"allow\")\nprefix_rule(pattern=[\"stat\"], decision=\"allow\")\nprefix_rule(pattern=[\"du\"], decision=\"allow\")\nprefix_rule(pattern=[\"id\"], decision=\"allow\")\nprefix_rule(pattern=[\"whoami\"], decision=\"allow\")\n\nprefix_rule(pattern=[\"git\", \"status\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"diff\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"log\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"show\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"blame\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"rev-parse\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"ls-files\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"grep\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"ls-tree\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"branch\", \"--show-current\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"branch\", \"-vv\"], decision=\"allow\")\nprefix_rule(pattern=[\"git\", \"mv\"], decision=\"allow\")\n\nprefix_rule(pattern=[\"gh\", \"pr\", \"view\"], decision=\"allow\")\nprefix_rule(pattern=[\"gh\", \"pr\", \"list\"], decision=\"allow\")\nprefix_rule(pattern=[\"gh\", \"pr\", \"diff\"], decision=\"allow\")\nprefix_rule(pattern=[\"gh\", \"pr\", \"status\"], decision=\"allow\")\nprefix_rule(pattern=[\"gh\", \"pr\", \"checks\"], decision=\"allow\")\n\nprefix_rule(pattern=[\"docker\", \"ps\"], decision=\"allow\")\n\nprefix_rule(pattern=[\"git\", \"push\"], decision=\"prompt\")\nprefix_rule(pattern=[\"git\", \"reset\"], decision=\"prompt\")\nprefix_rule(pattern=[\"git\", \"clean\"], decision=\"prompt\")\nprefix_rule(pattern=[\"git\", \"merge\"], decision=\"prompt\")\nprefix_rule(pattern=[\"git\", \"rebase\"], decision=\"prompt\")\nprefix_rule(pattern=[\"git\", \"checkout\"], decision=\"prompt\")\n\nprefix_rule(pattern=[\"rm\"], decision=\"prompt\")\nprefix_rule(pattern=[\"mv\"], decision=\"prompt\")\nprefix_rule(pattern=[\"chmod\"], decision=\"prompt\")\nprefix_rule(pattern=[\"chown\"], decision=\"prompt\")\nprefix_rule(pattern=[\"kill\"], decision=\"prompt\")\nprefix_rule(pattern=[\"pkill\"], decision=\"prompt\")\n\nprefix_rule(pattern=[\"npm\", \"install\"], decision=\"prompt\")\nprefix_rule(pattern=[\"npm\", \"uninstall\"], decision=\"prompt\")\nprefix_rule(pattern=[\"pnpm\", \"add\"], decision=\"prompt\")\nprefix_rule(pattern=[\"pnpm\", \"remove\"], decision=\"prompt\")\nprefix_rule(pattern=[\"yarn\", \"add\"], decision=\"prompt\")\nprefix_rule(pattern=[\"yarn\", \"remove\"], decision=\"prompt\")\nprefix_rule(pattern=[\"pip\", \"install\"], decision=\"prompt\")\nprefix_rule(pattern=[\"pip\", \"uninstall\"], decision=\"prompt\")\nprefix_rule(pattern=[\"pip3\", \"install\"], decision=\"prompt\")\nprefix_rule(pattern=[\"pip3\", \"uninstall\"], decision=\"prompt\")\n\nprefix_rule(pattern=[\"docker\", \"run\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker\", \"rm\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker\", \"stop\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker\", \"volume\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker\", \"system\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker\", \"compose\", \"up\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker\", \"compose\", \"down\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker\", \"compose\", \"rm\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker\", \"compose\", \"stop\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker-compose\", \"up\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker-compose\", \"down\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker-compose\", \"rm\"], decision=\"prompt\")\nprefix_rule(pattern=[\"docker-compose\", \"stop\"], decision=\"prompt\")\n\n# `tail -f`/`--follow` never returns and hangs the agent (bare `tail` stays allowed above).\nprefix_rule(pattern=[\"tail\", \"-f\"], decision=\"prompt\")\nprefix_rule(pattern=[\"tail\", \"--follow\"], decision=\"prompt\")\n# rg and `sed -n` are prompt, NOT allow: argv-prefix matching cannot gate their\n# code-exec forms (rg --pre=CMD or a reordered --pre; sed -n 'e CMD' / -ni) while a\n# shorter allow prefix would auto-approve the whole command.\nprefix_rule(pattern=[\"rg\"], decision=\"prompt\")\nprefix_rule(pattern=[\"sed\", \"-n\"], decision=\"prompt\")\nprefix_rule(pattern=[\"find\"], decision=\"prompt\")\nprefix_rule(pattern=[\"sed\", \"-i\"], decision=\"prompt\")\nprefix_rule(pattern=[\"sed\", \"--in-place\"], decision=\"prompt\")\nprefix_rule(pattern=[\"awk\"], decision=\"prompt\")\nprefix_rule(pattern=[\"xargs\"], decision=\"prompt\")\nprefix_rule(pattern=[\"tee\"], decision=\"prompt\")\nprefix_rule(pattern=[\"curl\"], decision=\"prompt\")\nprefix_rule(pattern=[\"env\"], decision=\"prompt\")\n\nprefix_rule(pattern=[\"sudo\"], decision=\"forbidden\")\nprefix_rule(pattern=[\"eval\"], decision=\"forbidden\")\nprefix_rule(pattern=[\"mkfs\"], decision=\"forbidden\")\nprefix_rule(pattern=[\"dd\"], decision=\"forbidden\")\nprefix_rule(pattern=[\"git\", \"push\", \"--force\", \"origin\", \"main\"], decision=\"forbidden\")\nprefix_rule(pattern=[\"git\", \"push\", \"--force\", \"origin\", \"master\"], decision=\"forbidden\")\nprefix_rule(pattern=[\"git\", \"push\", \"-f\", \"origin\", \"main\"], decision=\"forbidden\")\nprefix_rule(pattern=[\"git\", \"push\", \"-f\", \"origin\", \"master\"], decision=\"forbidden\")\n",
20
- "SoT/.omp/AGENTS.md": "# Global OMP guidance\n\n- Verify unfamiliar or version-sensitive APIs and configuration against current official documentation before implementation.\n- When the user asks for an assessment rather than a change, report findings without editing.\n- For Docks plan reviews, cross-company review is standing-authorized; host security policy still applies.\n\n## Asking me things\n\nA question typed in prose is just text I may or may not act on. The `ask` tool renders a\nblocking picker, waits indefinitely (`ask.timeout = 0`), and records my answer in the\ntranscript. If you actually need an answer, it MUST go through `ask`.\n\nMUST use `ask` before:\n- Anything irreversible or destructive: deleting/overwriting files or data you did not create,\n force-push, history rewrite, dropping tables, running migrations, mass rename, touching\n secrets/credentials, or publishing outward (release, upstream PR, issue, comment).\n- Two or more viable approaches whose tradeoffs are mine to own: schema/API/protocol shape,\n adding a dependency, or establishing a convention this repo does not already have.\n- A fact only I hold: intended semantics of an ambiguous requirement, which of several\n conflicting existing patterns is canonical, or which environment/account/target to use.\n- A request that contradicts the repo: surface the conflict and let me resolve it; never\n silently pick one side.\n\nIf `ask` is not registered — subagent, headless, or `-p` print runs, where `hasUI` is false —\nthe MUST above cannot be satisfied: do not fabricate the call and do not stall on it. Take the\nconservative reversible option and put the question, plus the assumption you made, in your\nfinal report so whoever spawned you can decide.\n\nNEVER use `ask` for:\n- Permission to begin, or to confirm scope already stated in the request.\n- Anything a tool, grep, or doc can answer — go read it.\n- A cheap reversible choice — take the conservative option and say which you took.\n- Something already answered earlier in the conversation.\n\nBatch every open question into one `ask` call with multiple questions; do not serialize\nround trips. Being overruled ends the discussion — execute my call without relitigating.\n\n## Output Standard\n\nApply Simplified Technical English to all agent text. This includes responses, messages,\ndocumentation, comments, and interface text.\n\nReply in the language I use, and apply every rule below to that language.\n\nA rule that names English grammar applies only to English. The contraction ban is one\nsuch rule. In another language, follow the normal grammar of that language. Portuguese,\nSpanish, French, Italian, and German merge a preposition with an article, and that merge\nis required, not optional.\n\nTreat the word limits as approximate outside English. Some languages need more words to\ncarry the same content.\n\n- Use the simplest precise technical term.\n- Use each term consistently.\n- Expand an abbreviation at its first occurrence.\n- Explain a technical term when I ask for an explanation.\n- Write complete and grammatically correct sentences.\n- Use active voice and identify the actor.\n- Use the imperative form for instructions.\n- Put only one action in each instruction sentence.\n- Put a necessary condition before its instruction.\n- Use simple verb tenses.\n- Do not use contractions, idioms, or slang. Avoid humor and rhetorical questions.\n- Keep procedural sentences to 20 words or fewer.\n- Keep descriptive sentences to 25 words or fewer.\n- Keep each paragraph to one topic and six sentences or fewer.\n- Do not use more than three nouns together.\n- Use vertical lists for complex information.\n- Put a warning or caution before a related hazardous instruction.\n\n### Naming\n\n- Say what the thing does before you name it. Put the technical term after the plain\n description, once, in parentheses.\n- Do not use a technical term as the only name for something you just introduced.\n- Prefer the short common word. Use \"use\", not \"utilize\". Use \"set up\", not \"provision\".\n- Do not explain by metaphor alone. A metaphor may follow a literal statement.\n",
21
- "SoT/.omp/config.yml": "symbolPreset: unicode\n\ntheme:\n dark: titanium\n\nstatusLine:\n preset: default\n compactThinkingLevel: false\n showHookStatus: true\n sessionAccent: true\n transparent: false\n\nterminal:\n showProgress: false\n\ntui:\n textSizing: false\n tight: false\n\ndefaultThinkingLevel: high\n\ncycleOrder:\n - smol\n - default\n - slow\n\ntier:\n openai: none\n anthropic: none\n\nadvisor:\n enabled: true\n syncBacklog: \"1\"\n\ngithub:\n enabled: true\n\ntask:\n eager: always\n showResolvedModelBadge: true\n softRequestBudget: 200\n softRequestBudgetNotice: true\n batch: true\n enableLsp: true\n enableEffort: true\n maxEffort: high\n maxConcurrency: 16\n maxRecursionDepth: 2\n maxRuntimeMs: 3600000\n agentModelOverrides:\n reviewer: \"@task\"\n security-reviewer: \"@task\"\n code-reviewer: \"@task\"\n plan-reviewer: \"@task\"\n\nmodelRoles:\n smol: openai-codex/gpt-5.6-luna:medium\n advisor: openai-codex/gpt-5.6-sol:medium\n designer: anthropic/claude-opus-5:high\n plan: anthropic/claude-opus-5:xhigh\n commit: openai-codex/gpt-5.6-luna:medium\n task: openai-codex/gpt-5.6-sol:high\n vision: anthropic/claude-opus-5:medium\n tiny: openai-codex/gpt-5.6-luna:low\n default: anthropic/claude-opus-5:high\n slow: anthropic/claude-opus-5:xhigh\n switch_fable: anthropic/claude-fable-5:high\n\nmodelTags:\n switch_fable:\n name: Fable switch default\n hidden: true\n\ndisplay:\n shimmer: classic\n showTokenUsage: true\n\nproviders:\n anthropic:\n serverSideFallback: false\n fetch: auto\n webSearchTimeoutSeconds: 30\n webSearchOrder:\n - firecrawl\n - exa\n - perplexity\n - gemini\n - codex\n\nretry:\n usageAwareFallback: true\n fallbackChains:\n default:\n - openai-codex/gpt-5.6-sol:high\n advisor:\n - anthropic/claude-opus-5:medium\n task:\n - anthropic/claude-opus-5:high\n vision:\n - openai-codex/gpt-5.6-sol:medium\n smol:\n - anthropic/claude-opus-5:low\n tiny:\n - anthropic/claude-opus-5:low\n commit:\n - anthropic/claude-opus-5:medium\n switch_fable: []\n\nomitThinking: false\nincludeWorkspaceTree: false\nautocompleteMaxVisible: 10\nemojiAutocomplete: true\n\nbranchSummary:\n enabled: true\n\nreadLineNumbers: false\n\ncommands:\n enableOpencodeProject: false\n enableOpencodeUser: false\n\nskills:\n enableClaudeUser: false\n enableCodexUser: false\n enableAgentsUser: true\n\nsteeringMode: all\ninterruptMode: immediate\n\ndev:\n autoqa: false\n autoqaConsent: denied\n\ncompaction:\n thresholdTokens: 231200\n idleEnabled: true\n handoffSaveToDisk: true\n\ndoubleEscapeAction: tree\nhideThinkingBlock: false\nautoResume: false\ntextVerbosity: low\n\nfeatures:\n unexpectedStopDetection: smart\n\ncodexResets:\n autoRedeem: \"no\"\n\nstartup:\n quiet: true\n changelogMode: summary\n\ntools:\n approvalMode: yolo\n",
20
+ "SoT/.omp/AGENTS.md": "# Global OMP guidance\n\n- Verify unfamiliar or version-sensitive APIs and configuration against current official documentation before implementation.\n- When the user asks for an assessment rather than a change, report findings without editing.\n- For Docks plan reviews, cross-company review is standing-authorized; host security policy still applies.\n- Please remove all mannered prose.\n\n## Asking me things\n\nA question typed in prose is just text I may or may not act on. The `ask` tool renders a\nblocking picker, waits indefinitely (`ask.timeout = 0`), and records my answer in the\ntranscript. If you actually need an answer, it MUST go through `ask`.\n\nMUST use `ask` before:\n- Anything irreversible or destructive: deleting/overwriting files or data you did not create,\n force-push, history rewrite, dropping tables, running migrations, mass rename, touching\n secrets/credentials, or publishing outward (release, upstream PR, issue, comment).\n- Two or more viable approaches whose tradeoffs are mine to own: schema/API/protocol shape,\n adding a dependency, or establishing a convention this repo does not already have.\n- A fact only I hold: intended semantics of an ambiguous requirement, which of several\n conflicting existing patterns is canonical, or which environment/account/target to use.\n- A request that contradicts the repo: surface the conflict and let me resolve it; never\n silently pick one side.\n\nIf `ask` is not registered — subagent, headless, or `-p` print runs, where `hasUI` is false —\nthe MUST above cannot be satisfied: do not fabricate the call and do not stall on it. Take the\nconservative reversible option and put the question, plus the assumption you made, in your\nfinal report so whoever spawned you can decide.\n\nNEVER use `ask` for:\n- Permission to begin, or to confirm scope already stated in the request.\n- Anything a tool, grep, or doc can answer — go read it.\n- A cheap reversible choice — take the conservative option and say which you took.\n- Something already answered earlier in the conversation.\n\nBatch every open question into one `ask` call with multiple questions; do not serialize\nround trips. Being overruled ends the discussion — execute my call without relitigating.\n\n## Output Standard\n\nApply Simplified Technical English to all agent text. This includes responses, messages,\ndocumentation, comments, and interface text.\n\nReply in the language I use, and apply every rule below to that language.\n\nA rule that names English grammar applies only to English. The contraction ban is one\nsuch rule. In another language, follow the normal grammar of that language. Portuguese,\nSpanish, French, Italian, and German merge a preposition with an article, and that merge\nis required, not optional.\n\nTreat the word limits as approximate outside English. Some languages need more words to\ncarry the same content.\n\n- Use the simplest precise technical term.\n- Use each term consistently.\n- Expand an abbreviation at its first occurrence.\n- Explain a technical term when I ask for an explanation.\n- Write complete and grammatically correct sentences.\n- Use active voice and identify the actor.\n- Use the imperative form for instructions.\n- Put only one action in each instruction sentence.\n- Put a necessary condition before its instruction.\n- Use simple verb tenses.\n- Do not use contractions, idioms, or slang. Avoid humor and rhetorical questions.\n- Keep procedural sentences to 20 words or fewer.\n- Keep descriptive sentences to 25 words or fewer.\n- Keep each paragraph to one topic and six sentences or fewer.\n- Do not use more than three nouns together.\n- Use vertical lists for complex information.\n- Put a warning or caution before a related hazardous instruction.\n\n### Naming\n\n- Say what the thing does before you name it. Put the technical term after the plain\n description, once, in parentheses.\n- Do not use a technical term as the only name for something you just introduced.\n- Prefer the short common word. Use \"use\", not \"utilize\". Use \"set up\", not \"provision\".\n- Do not explain by metaphor alone. A metaphor may follow a literal statement.\n",
21
+ "SoT/.omp/config.yml": "symbolPreset: unicode\n\ntheme:\n dark: titanium\n\nstatusLine:\n preset: default\n compactThinkingLevel: false\n showHookStatus: true\n sessionAccent: true\n transparent: false\n\nterminal:\n showProgress: false\n\ntui:\n textSizing: false\n tight: false\n\ndefaultThinkingLevel: high\n\ncycleOrder:\n - smol\n - default\n - slow\n - fable\n\ntier:\n openai: none\n anthropic: none\n\nadvisor:\n enabled: true\n syncBacklog: \"1\"\n\ngithub:\n enabled: true\n\ntask:\n eager: always\n showResolvedModelBadge: true\n softRequestBudget: 200\n softRequestBudgetNotice: true\n batch: true\n enableLsp: true\n enableEffort: true\n maxEffort: high\n maxConcurrency: 16\n maxRecursionDepth: 2\n maxRuntimeMs: 3600000\n agentModelOverrides:\n reviewer: \"@task\"\n security-reviewer: \"@task\"\n code-reviewer: \"@task\"\n plan-reviewer: \"@task\"\n\nmodelRoles:\n smol: openai-codex/gpt-5.6-luna:medium\n advisor: openai-codex/gpt-5.6-sol:medium\n designer: anthropic/claude-opus-5:high\n plan: anthropic/claude-opus-5:xhigh\n commit: openai-codex/gpt-5.6-luna:medium\n task: openai-codex/gpt-6-astra:low\n vision: anthropic/claude-opus-5:medium\n tiny: openai-codex/gpt-5.6-luna:low\n default: anthropic/claude-opus-5:high\n slow: anthropic/claude-opus-5:xhigh\n fable: anthropic/claude-fable-5-1:medium\n switch_fable: anthropic/claude-fable-5-1:medium\n\nmodelTags:\n fable:\n name: Fable 5.1\n switch_fable:\n name: Fable switch default\n hidden: true\n\ndisplay:\n shimmer: classic\n showTokenUsage: true\n\nproviders:\n anthropic:\n serverSideFallback: false\n fetch: auto\n webSearchTimeoutSeconds: 30\n webSearchOrder:\n - firecrawl\n - exa\n - perplexity\n - gemini\n - codex\n\nretry:\n usageAwareFallback: true\n fallbackChains:\n default:\n - openai-codex/gpt-5.6-sol:high\n advisor:\n - anthropic/claude-opus-5:medium\n task:\n - anthropic/claude-opus-5:high\n vision:\n - openai-codex/gpt-5.6-sol:medium\n smol:\n - anthropic/claude-opus-5:low\n tiny:\n - anthropic/claude-opus-5:low\n commit:\n - anthropic/claude-opus-5:medium\n switch_fable: []\n fable: []\n\nomitThinking: false\nincludeWorkspaceTree: false\nautocompleteMaxVisible: 10\nemojiAutocomplete: true\n\nbranchSummary:\n enabled: true\n\nreadLineNumbers: false\n\ncommands:\n enableOpencodeProject: false\n enableOpencodeUser: false\n\nskills:\n enableClaudeUser: false\n enableCodexUser: false\n enableAgentsUser: true\n\nsteeringMode: all\ninterruptMode: immediate\n\ndev:\n autoqa: false\n autoqaConsent: denied\n\ncompaction:\n thresholdTokens: 231200\n idleEnabled: true\n handoffSaveToDisk: true\n\ndoubleEscapeAction: tree\nhideThinkingBlock: false\nautoResume: false\ntextVerbosity: low\n\nfeatures:\n unexpectedStopDetection: smart\n\ncodexResets:\n autoRedeem: \"no\"\n\nstartup:\n quiet: true\n changelogMode: summary\n\ntools:\n approvalMode: yolo\n",
22
22
  "SoT/.omp/intercom.json": "{\n \"brokerCommand\": \"bun\",\n \"brokerArgs\": []\n}\n",
23
23
  "SoT/.omp/mcp.json": "{\n \"$schema\": \"https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/src/config/mcp-schema.json\",\n \"disabledServers\": [\n \"chrome-devtools\",\n \"context7:context7\",\n \"openaiDeveloperDocs\"\n ]\n}\n"
24
24
  } as const
@@ -48,4 +48,4 @@ export const GENERATED_PAYLOAD_PATHS = [
48
48
  "notification.mp3"
49
49
  ] as const
50
50
 
51
- export const GENERATED_PAYLOAD_HASH = "ed3684c6a28c5caba682712ed828fd936592facb5f7d8b17c91a16f2af1de645"
51
+ export const GENERATED_PAYLOAD_HASH = "7239d3bb7d220a735d0688c439b95349c0cb10ba4baca9108829f0e5e0f54982"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docks-kit",
3
- "version": "0.16.2",
3
+ "version": "0.16.3",
4
4
  "description": "Portable AI coding agent config kit — SoT sync engine + typed CLI for Claude Code, Codex, and universal agent skills",
5
5
  "type": "module",
6
6
  "license": "MIT",