OrchestKit · CC adoption · 2026-08-29 · operator page
276 changelog lines across seven published releases, ten version numbers past what cc-watch marks as known, plus 80 Claude Code bookmarks from your X feed. Six places where the plugin can turn that into leverage, ranked, with three decisions at the bottom.
if: condition; 0 use prompt, agent or http typesUpstream published seven versions in the window (242, 244 and 249 never existed). Snapshots exist for 243, 245, 246, 247, 248 and 250 (245 and 250 are single "Bug fixes" lines). 2.1.251, the largest release of the run with 71 bullets and two new hook events, has no snapshot, no entry in cc-adoption-gaps.json, and no issues. The pipeline auto-filed 13 issues on 08-28 for 243 to 248 and stopped.
Ork registers 30 events and 150 handlers, every one of them type: command; two matchers carry an if: condition (hooks.json:190, :662). Claude Code now offers prompt/agent/http/mcp_tool handler types, asyncRewake, agent-frontmatter hooks:, and treats a malformed JSON stdout as a hook error instead of plain text.
| CC change | Version | OrchestKit move |
|---|---|---|
PreModelSwitch can block or confirm a switch | new 2.1.251 | One hook enforces the standing rule "no Fable spend without consent": block a switch to a Fable/Mythos id unless an env or session flag says it was asked. Prerequisite: the three event allowlists (tests/hooks/test-hook-structure.sh:56, tests/schemas/test-plugin-schema.sh:93, spec/cc-output-keys.spec.yml) reject the name today. |
| Hooks README registry drift | ork | src/hooks/README.md says CwdChanged and FileChanged are "not hooked" in seven places while hooks.json registers two handlers each. (A peer agent also flagged the WorktreeRemove forwarder as dead; the docs say it fires on subagent worktree removal, so with 25 isolation: worktree agents it is live. Kept.) |
Hook if: matcher conditions | fixed 2.1.243 | 23 PreToolUse Bash guards run on every Bash call and spend the 50 ms e2e budget; only two matchers use if: today. Move the command-shape test into if: so most calls never spawn node. |
asyncRewake on async hooks | docs | 106 of 150 handlers are async and none can wake the session; a background verifier (the #3779 verdict class) could interrupt with its finding instead of waiting for the next turn. |
Non-JSON {…} stdout is a hook error | breaking 2.1.248 | Audit all 150 handlers for any path that prints a brace-leading string (debug output, partial JSON on exception). Issue #3770 exists; it needs the sweep, not a note. |
| SessionStart resume carries staleness + re-cache cost | new 2.1.251 | The 20 SessionStart handlers reload context unconditionally; gate the heavy loaders on the staleness field. |
type: prompt / agent handlers | docs | Candidates: the destructive-command guard and the branch-name guard that today regex the command string (memory: git validator worktree false positive). |
Four releases added cache and cost controls: promptCacheTtl and subagentPromptCacheTtl (243), per-agent experimental.cacheTtl (248), a /cost prompt-cache line with a matching status line object (251), a Loops breakdown in /usage (243), and modelPricing for contracted rates (243). Ork's 36 agents set none of these, and its cost estimates still use list price.
experimental.cacheTtl: "1h" to the agents that run inside workflows or wait on CI (audit-full, eval-runner, ci-cd-engineer, code-quality-reviewer). Measure with the new /cost line before and after.prompt_cache object into ork:analytics and hook-timing so "hit ratio" becomes a tracked number, not a guess (memory: cc-economics puts RTK at 0.5% of spend because cache reads dwarf input 386:1; now that ratio is observable).modelPricing in the cost estimator so org rates flow through instead of list price.The Workflow tool now costs about 1k tokens of prompt instead of 5.7k, with the authoring guide in a bundled workflow-authoring skill (248). /loop dynamic mode and ScheduleWakeup are available everywhere and stable across resume. A subagent that hits maxTurns returns a partial result with a hint to continue via SendMessage (246). Cross-session messaging works on every provider (248), and a teammate's final answer now arrives in its idle notification (251).
brainstorm and review-pr to workflow scripts; they are the two fan-outs users actually run (user profile: brainstorm is a top-3 skill).CLAUDE_CODE_SUBAGENT_MODEL is now a default, not an override (251): any ork doc that calls it a force-switch is wrong.SendFeedback (247) exists as a tool; ork's own hook failures could draft one instead of only logging to hook-timing.2.1.248 added --restricted (no command tools, file tools fenced to cwd, user and project settings ignored). 2.1.251 blocks symlink swaps in Read/Write/Edit, applies Read(...) deny rules through symlinked Grep/Glob paths, rejects plugin commands that point outside the plugin directory, and stops project settings from setting CLAUDE_CONFIG_DIR or TMPDIR. 2.1.246 warns on allow rules shaped Bash(git * main) because they also match options inserted before the subcommand.
| Change | Version | Where ork is exposed |
|---|---|---|
| Wildcard-before-subcommand allow rules warned | 2.1.246 | Lint src/settings/*.settings.json permission rules for that shape before the warning shows up in users' startup output. |
| Sandbox cleanup deleted a dotfile-managed settings symlink | 2.1.247 | #3769 is filed; close it with a note, it was a CC bug, not an ork surface. |
--restricted / CLAUDE_CODE_RESTRICTED=1 | 2.1.248 | Run the plugin smoke test under it in CI: every hook that shells out will fail loudly, which is the point (#3774). |
Project settings env no longer sets TMPDIR / CLAUDE_CONFIG_DIR | 2.1.251 | Grep ork settings and hooks for any reliance on those keys coming from project scope. |
| Plugin command paths outside plugin dir rejected | 2.1.251 | The build assembles plugins/ork from src/; verify no generated command resolves through a symlink out of the tree. |
sandbox.enabled to retire the regex egress guard | open | #3322, still the right fix; the 251 sandbox output-file change makes the regex guard even less load-bearing. |
80 of 278 bookmarks are about Claude Code or its neighbourhood; 53 were saved since mid-July. They cluster into five themes, and three of them map onto things ork already half-has.
| Signal | Ork today | Capitalize |
|---|---|---|
| Warp: a second agent reviews feedback and opens a PR against the Skill; humans merge (Anthropic write-up, 08-28) | skill-autoheal bot already regens and pushes to PR branches | Frame it as the same loop and write it up; ork has the pattern in production, the write-up has the audience. |
| @trq212 ELI5 skill, 33k bookmarks: "HTML artifact with big pictures and few words" | User-level glyph front door has the novice page route; ork:glyph is chat-only | Promote the two-dial router into ork:glyph v3 so /ork:glyph --eli5 exists for every user (decision below). |
| "New rules of context engineering for Claude 5" (80% of the CC system prompt removed) | 106 SKILL.md files written for the old prompt regime; skill-authoring rule caps at 500 lines | Read the article, then run skill-fitness with a "does this skill over-instruct a Claude 5 model" rubric. |
| @ClaudeCodeLog posts every release with highlights within hours | cc-watch parses the same CHANGELOG, files issues, lags 10 versions | Fix the lag (beat 1), then the auto-filed issue bodies are already the content @ClaudeCodeLog sells. |
| Grok Bot: named bots with routines, approval before consequential actions, one shared trust zone | /loop, routines via /schedule, ork agents with background: true | Content angle, not a build: ork already has the safer shape (per-worktree isolation, confirm-gated skills). |
if: conditions and prompt-type hooks now, or after the JSON audit?ork:glyph?Today: ork:glyph is the chat ASCII engine (budget, vocabulary, tokens.json); the user-level glyph skill routes audience × surface and owns the novice explainer page. This page was produced by that route.
experimental.cacheTtl: "1h" on the four long-running agents; read prompt_cache into analytics.if: conditions on the 23 PreToolUse Bash guards; measure e2e in hook-timing.jsonl.