Files
Codewhale/web/data/features.generated.json
CodeWhale BotandClaude Sonnet 5.5 542e57e6d7 feat(settings): model thinking shows by default; a saved choice is kept (CW-7876)
Thinking traces are first-class: show_thinking now defaults to true in the
runtime Settings and the config schema, while thinking_default_expanded stays
false (live while streaming, collapsed once the answer starts). Docs, the
features.toml row, the zh-Hans docs, the config panel goldens and the derived
web json follow. A show_thinking value already present in settings.toml is
read as an explicit choice and kept. Note that earlier saves wrote the old
default into that file, so only installs without the key get the new default;
whether to migrate those is a founder decision recorded in the review packet.

Checks: farm tests run 20261112T061929Z-ENG-TUI-rebased-tests-d67557, 7557
passed / 10 skipped, exit 0, including feature_registry (2 passed); clippy run
20261112T061950Z-ENG-TUI-rebased-clippy-50d460 clean, exit 0; check-facts OK.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-11-13 10:11:08 -08:00

1439 lines
41 KiB
JSON

{
"format": "codewhale.features.v1",
"source": {
"path": "docs/features.toml",
"sha256": "f0dda0668311fca8041f9f2ae579f0db0de1f34dd74124e622fbe20639c10ed3"
},
"features": [
{
"id": "undo-range",
"name": "Request range undo",
"summary": "/undo select rewinds a chosen request and its file changes; Runtime clients can preview and confirm an exact turn range.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/GUIDE.md",
"registryLine": 40
},
{
"id": "unix-uninstall",
"name": "Receipt-owned uninstall",
"summary": "Remove a receipt-owned release install or print its package manager's command; data kept unless --purge-data.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/INSTALL.md",
"registryLine": 50
},
{
"id": "install-cleanup",
"name": "Installation cleanup",
"summary": "doctor --all expands diagnostics; --installs lists owners, --fix recovers old copies and --restore reverses it.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "unreleased",
"flag": null,
"docs": "docs/INSTALL.md#clean-up-old-copies",
"registryLine": 60
},
{
"id": "auto-update",
"name": "Automatic updates",
"summary": "Release-binary installs download updates in the background and apply them at the next start; update --rollback undoes.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "unreleased",
"flag": null,
"docs": "docs/INSTALL.md#automatic-updates",
"registryLine": 70
},
{
"id": "cloud-computer-dispatch",
"name": "Cloud computer conversations",
"summary": "Dispatch, inspect, continue and stop one account cloud conversation from terminal and desktop, saved whales included.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/CLOUD_DISPATCH.md",
"registryLine": 80
},
{
"id": "shell-tool",
"name": "Shell tool",
"summary": "Runs shell commands for the agent through the approval gate and sandbox.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.1.0",
"flag": "shell_tool",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 90
},
{
"id": "local-code-execution",
"name": "Local code execution",
"summary": "Runs Python and Node with the shared execution policy and explicitly approved per-call elevation.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/TOOL_SURFACE.md#local-code-execution",
"registryLine": 101
},
{
"id": "subagents",
"name": "Sub-agents",
"summary": "Delegates bounded work to background child agents with their own budgets.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": "0.1.0",
"flag": "subagents",
"docs": "docs/SUBAGENTS.md",
"registryLine": 110
},
{
"id": "web-search",
"name": "Web search",
"summary": "Searches and fetches the web for the agent, including DeepSeek Search (web.run, with the web_search alias).",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.1.0",
"flag": "web_search",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 121
},
{
"id": "apply-patch",
"name": "apply_patch",
"summary": "Edits files with structured patches the user can review and undo.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.1.0",
"flag": "apply_patch",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 132
},
{
"id": "mcp-client",
"name": "MCP connectors",
"summary": "A plugin kind: connects MCP servers, exposes permitted tools and records connection status for the model.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": "0.1.0",
"flag": "mcp",
"docs": "docs/MCP.md",
"registryLine": 143
},
{
"id": "mcp-tool-approval",
"name": "MCP tool approval rules",
"summary": "Global per-tool Always, Ask and Off rules stay bound to the current server and preserve required consent.",
"status": "experimental",
"surfaces": {
"tui": "partial",
"api": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/MCP.md",
"registryLine": 154
},
{
"id": "exec-policy",
"name": "Execution policy",
"summary": "Decides allow, ask or deny for each tool call from layered permission rules.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.1.0",
"flag": "exec_policy",
"docs": "docs/AUTHORIZATION_ORDER.md",
"registryLine": 164
},
{
"id": "vision-model",
"name": "Vision model",
"summary": "Routes image analysis to a separate vision-capable model configured in [vision_model].",
"status": "flagged",
"surfaces": {
"tui": "stable"
},
"since": "0.8.32",
"flag": "vision_model",
"docs": "docs/CONFIGURATION.md",
"registryLine": 175
},
{
"id": "verify-tool",
"name": "verify tool",
"summary": "Lets the agent ask for an adversarial self-critique of its own work.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.9.2",
"flag": "verify_tool",
"docs": "docs/CONFIGURATION.md#feature-flags",
"registryLine": 186
},
{
"id": "code-mode",
"name": "Code mode",
"summary": "execute_tools programs compose MCP, plugin and native tool calls under the normal gate.",
"status": "experimental",
"surfaces": {
"tui": "stable"
},
"since": "0.10.0",
"flag": "code_mode",
"docs": "docs/TOOL_SURFACE.md#code-mode-execute_tools",
"registryLine": 197
},
{
"id": "extension-host",
"name": "Extension host",
"summary": "Runs reviewed TypeScript/JavaScript tools, commands and bounded Git review scopes through Engine approvals in a sidecar.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"web": "none",
"api": "preview"
},
"since": "0.10.1",
"flag": "extension_host",
"docs": "docs/EXTENSIONS.md",
"registryLine": 208
},
{
"id": "finance-host",
"name": "Finance host",
"summary": "Routes opted-in finance tools through the bundled Native host under the existing permission and sandbox gates.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "finance_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 219
},
{
"id": "data-host",
"name": "Data host",
"summary": "Routes opted-in data validation through the bundled Native host with owned input and output bounds.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "data_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 230
},
{
"id": "speech-host",
"name": "Speech host",
"summary": "Routes opted-in speech tools through the bundled Native host while Rust retains credentials and permissions.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "speech_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 241
},
{
"id": "pdf-host",
"name": "PDF host",
"summary": "Routes opted-in PDF extraction through the bundled Native host with the same Rust path and size guards.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "pdf_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 252
},
{
"id": "ocr-host",
"name": "OCR host",
"summary": "Routes opted-in image OCR through the bundled Native host under existing media and permission guards.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "ocr_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 263
},
{
"id": "github-host",
"name": "GitHub host",
"summary": "Routes opted-in GitHub operations through the bundled Native host while Rust retains credentials and approvals.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "github_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 274
},
{
"id": "web-search-host",
"name": "Web search host",
"summary": "Routes opted-in web search through the bundled Native host with the existing Rust credential and network gates.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "web_search_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 285
},
{
"id": "web-extract-host",
"name": "Web extract host",
"summary": "Routes opted-in web extraction through the bundled Native host with owned URL and response bounds.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "web_extract_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 296
},
{
"id": "review-host",
"name": "Review host",
"summary": "Routes opted-in review tools through the bundled Native host while Rust retains route and permission authority.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": "review_host",
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 307
},
{
"id": "modes",
"name": "Modes",
"summary": "Plan and Work modes; Plan is a stop on the Shift+Tab dial, Operate parses as Work; a finished plan offers work.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/MODES.md",
"registryLine": 320
},
{
"id": "permission-postures",
"name": "Permission postures",
"summary": "One Shift+Tab dial: Ask, Accept Edits (default), Plan, Auto-Review, Full Access; cards default to Deny.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/MODES.md#permission-posture",
"registryLine": 329
},
{
"id": "sandbox",
"name": "Command sandbox",
"summary": "Seatbelt on macOS; verified bubblewrap on Linux by default. Sandboxed PTYs require util-linux setsid.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/SANDBOX.md",
"registryLine": 338
},
{
"id": "providers",
"name": "Providers",
"summary": "Provider routes including Tinker, Runcrate and Tencent TokenHub, with scoped facts, limits and price estimates.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/PROVIDERS.md",
"registryLine": 347
},
{
"id": "model-routing",
"name": "Auto model routing",
"summary": "Picks a model per turn under Auto; /router sets up the router.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/CONFIGURATION.md#auto-model-routing-auto-autorouter",
"registryLine": 356
},
{
"id": "model-catalog-refresh",
"name": "Model catalog refresh",
"summary": "Refresh public model facts and exact provider rosters during use; failures retain the last good snapshot.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": "0.10.3",
"flag": null,
"docs": "docs/CATALOG_REFRESH.md",
"registryLine": 365
},
{
"id": "output-limit-answer-recovery",
"name": "Answerless output-limit recovery",
"summary": "Opt-in bounded answer retries after an output-limit stop, including Fleet, with request-scoped nudge receipts.",
"status": "flagged",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/CONFIGURATION.md#reasoning-only-recovery-reasoning_only",
"registryLine": 375
},
{
"id": "fleet",
"name": "Fleet",
"summary": "Runs and supervises groups of worker agents with receipts and a pre-spend check.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/FLEET.md",
"registryLine": 385
},
{
"id": "environment-placement",
"name": "Environment-aware Fleet placement",
"summary": "Places Fleet tasks by environment requirements and connects explicitly configured workers through Tailscale.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": null,
"flag": null,
"docs": "docs/ENVIRONMENTS.md#environment-aware-fleet-placement-preview",
"registryLine": 394
},
{
"id": "workflows",
"name": "Workflows",
"summary": "Checked-in .workflow.js scripts coordinate agents step by step.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/WORKFLOW_AUTHORING.md",
"registryLine": 403
},
{
"id": "automatic-workflows",
"name": "Automatic workflows",
"summary": "Turns a broad request into a compact Workflow plan without writing a script.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/AUTOMATIC_WORKFLOWS.md",
"registryLine": 412
},
{
"id": "goals",
"name": "Goals",
"summary": "/goal keeps the agent on one objective across turns; optional [goal] judges can independently check complete or blocked.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/CONFIGURATION.md#goal-loop-goal",
"registryLine": 421
},
{
"id": "thread-scheduled-turns",
"name": "Reminders into the same thread",
"summary": "send_later, automations and /v1/triggers deliver scheduled turns; a run parked on a human answer pauses its wall clock.",
"status": "experimental",
"surfaces": {
"api": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/RUNTIME_API.md",
"registryLine": 430
},
{
"id": "task-suggestions",
"name": "Suggested tasks",
"summary": "The tasks tool's suggest action offers the person a task as a Start/Hide card; it starts nothing and needs no approval.",
"status": "experimental",
"surfaces": {
"desktop": "preview"
},
"since": "unreleased",
"flag": null,
"docs": null,
"registryLine": 440
},
{
"id": "todos",
"name": "Todo list",
"summary": "The agent keeps a visible todo list for multi-step work.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/TOOL_SURFACE.md",
"registryLine": 449
},
{
"id": "composer-queue-steer",
"name": "Queue and steer",
"summary": "Queue messages while a turn runs, or steer the running turn.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/KEYBINDINGS.md",
"registryLine": 458
},
{
"id": "receipts",
"name": "Receipts",
"summary": "/receipts lists files, commands, calls, approvals and failures; the API serves the same receipt as JSON or Markdown.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": "0.10.1",
"flag": null,
"docs": "docs/RECEIPTS.md",
"registryLine": 467
},
{
"id": "preview-request",
"name": "Request preview",
"summary": "/preview-request shows the redacted outbound request and bounded route-omission facts without sending it.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/PREVIEW_REQUEST.md",
"registryLine": 477
},
{
"id": "present-handoff",
"name": "Present final files",
"summary": "Declare existing workspace files as final deliverables with a read-only handoff receipt.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "partial"
},
"since": "unreleased",
"flag": null,
"docs": null,
"registryLine": 486
},
{
"id": "show-data",
"name": "Charts in the transcript",
"summary": "Read-only show_data tool: display sparklines, labelled bars or trends, with matching text summaries.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "partial"
},
"since": "unreleased",
"flag": null,
"docs": null,
"registryLine": 495
},
{
"id": "read-media",
"name": "read_media",
"summary": "Reads and preprocesses images for vision-capable models with size and privacy guards.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/READ_MEDIA.md",
"registryLine": 504
},
{
"id": "clipboard-image-preview",
"name": "Clipboard image paste preview",
"summary": "Attaches an image from the clipboard and previews it as a truecolor cell thumbnail above the composer.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/READ_MEDIA.md",
"registryLine": 513
},
{
"id": "clipboard-image-prune",
"name": "Pasted image cleanup",
"summary": "codewhale sessions prune-images reports pasted clipboard images no saved session still names; --apply deletes them.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/READ_MEDIA.md#pasted-image-storage",
"registryLine": 522
},
{
"id": "memory",
"name": "User memory",
"summary": "Opt-in local store of preferences and conventions that persists across sessions.",
"status": "flagged",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/MEMORY.md",
"registryLine": 532
},
{
"id": "skills",
"name": "Skill plugins",
"summary": "A plugin kind: trusted instruction packages with bundle policy, invocation controls and configurable index limits.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/SKILLS.md",
"registryLine": 543
},
{
"id": "plugins",
"name": "Plugins",
"summary": "Everything you add is a plugin: installs, reviews and trusts bundles, shows status, restores missing reviewed snapshots.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/PLUGINS.md",
"registryLine": 552
},
{
"id": "computer-use",
"name": "Computer Use",
"summary": "Reviewed app control: one approval covers background and foreground use, fresh targets, bounded batches.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": null,
"flag": null,
"docs": "docs/PLUGIN_BUNDLES.md",
"registryLine": 561
},
{
"id": "script-tools",
"name": "Script tools",
"summary": "Scripts in ~/.codewhale/tools become approval-gated tools; [tools.overrides] disables built-ins, never replaces them.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/CONFIGURATION.md#script-tools-and-overrides",
"registryLine": 570
},
{
"id": "claude-plugin-compat",
"name": "Claude plugin compatibility",
"summary": "Loads Claude Code plugin bundles and skill folders where their features are supported.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/CLAUDE_PLUGIN_COMPAT.md",
"registryLine": 579
},
{
"id": "claude-settings-import",
"name": "Claude settings import",
"summary": "/import-claude plans a reviewable import of Claude Code settings and servers.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": null,
"registryLine": 588
},
{
"id": "hooks",
"name": "Hook plugins",
"summary": "A plugin kind: runs user commands on session and tool events, with an execution receipt after shell tools.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/HOOKS.md",
"registryLine": 596
},
{
"id": "lsp",
"name": "LSP diagnostics",
"summary": "Feeds language-server diagnostics to the agent; custom servers can be added.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/LSP_PHP_CUSTOM.md",
"registryLine": 605
},
{
"id": "runtime-api",
"name": "Runtime API",
"summary": "Local API: replay-safe thread creation, events, approvals, project trust, workspace leases, Unix sockets, device tokens.",
"status": "stable",
"surfaces": {
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/RUNTIME_API.md",
"registryLine": 614
},
{
"id": "runtime-watch-events",
"name": "Attested watch events",
"summary": "Master-bearer watch turns retain typed non-person provenance, exact replay and read-only operation recovery.",
"status": "experimental",
"surfaces": {
"api": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/RUNTIME_API.md",
"registryLine": 623
},
{
"id": "compatibility-tool-free-turns",
"name": "Compatibility turn admission",
"summary": "Initialized local controls use the held Runtime for tool-free turns, loaded-thread paging, names; clients use HTTP/SSE.",
"status": "stable",
"surfaces": {
"api": "stable"
},
"since": "0.10.2",
"flag": null,
"docs": "docs/RUNTIME_API.md#compatibility-execution-limits",
"registryLine": 633
},
{
"id": "runtime-provider-keys",
"name": "Runtime provider keys",
"summary": "Runtime API provider keys: durable or process-only memory, with a session-only policy that disables stored fallback.",
"status": "stable",
"surfaces": {
"api": "stable"
},
"since": "0.10.2",
"flag": null,
"docs": "docs/RUNTIME_API.md#put-v1providersidkey--write-only-credential",
"registryLine": 643
},
{
"id": "headless-exec",
"name": "Headless exec",
"summary": "codewhale exec runs one headless turn from a script and streams JSON.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/RUNTIME_API.md",
"registryLine": 653
},
{
"id": "github-review",
"name": "GitHub PR review",
"summary": "codewhale review --pr N writes an advisory review; posting to GitHub is opt-in.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/GITHUB_APP.md",
"registryLine": 662
},
{
"id": "web-client",
"name": "Local browser client",
"summary": "codewhale web opens the embedded browser client on 127.0.0.1 over the Runtime API.",
"status": "stable",
"surfaces": {
"web": "stable"
},
"since": null,
"flag": null,
"docs": "docs/WEB.md",
"registryLine": 673
},
{
"id": "keybindings",
"name": "Keybindings",
"summary": "Terminal key bindings, documented from the keybinding catalog.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/KEYBINDINGS.md",
"registryLine": 682
},
{
"id": "settings",
"name": "Settings",
"summary": "/config and codewhale config edit settings declared once in the settings schema.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": "docs/CONFIGURATION.md",
"registryLine": 691
},
{
"id": "whats-new-notice",
"name": "What's new after an update",
"summary": "Says once, on the first start after an update, what changed and links that version's release notes.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.10.2",
"flag": null,
"docs": "docs/CONFIGURATION.md#whats-new-after-an-update",
"registryLine": 700
},
{
"id": "themes",
"name": "Themes",
"summary": "/theme picks a built-in theme; user themes follow a JSON schema.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/schemas/user-theme.schema.json",
"registryLine": 710
},
{
"id": "chat-color",
"name": "Chat color",
"summary": "/color gives one chat's composer box its own color, kept with that session.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.10.2",
"flag": null,
"docs": "docs/GUIDE.md",
"registryLine": 719
},
{
"id": "localization",
"name": "Localization",
"summary": "Interface text in 15 locales, including tool activity, file receipts and language-aware transcript caches.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/LOCALIZATION.md",
"registryLine": 729
},
{
"id": "voice",
"name": "Voice input",
"summary": "/voice, /voicecontrol and /voicesend use the selected ASR backend without switching providers.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "stable"
},
"since": null,
"flag": null,
"docs": null,
"registryLine": 738
},
{
"id": "pet",
"name": "Pet",
"summary": "Shared whale activity and reply views; desktop and app-server turns can follow an idle existing companion.",
"status": "stable",
"surfaces": {
"tui": "stable",
"api": "partial"
},
"since": null,
"flag": null,
"docs": "docs/PET_MODE.md",
"registryLine": 746
},
{
"id": "overview",
"name": "Home dashboard",
"summary": "/overview shows the home dashboard.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/PROVIDERS.md",
"registryLine": 755
},
{
"id": "account-login",
"name": "Account login",
"summary": "Cancellable account sign-in inside the TUI; account sign-out preserves local model connections and work.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": null,
"registryLine": 764
},
{
"id": "account-computer-files",
"name": "Account computer files",
"summary": "Save computer files as account versions, restore with revision checks, and download verified bytes.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": "0.10.2",
"flag": null,
"docs": null,
"registryLine": 772
},
{
"id": "context-anchors",
"name": "Context anchors",
"summary": "/anchor pins a fact that survives compaction.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": null,
"registryLine": 781
},
{
"id": "window-pin",
"name": "Pin window",
"summary": "/pin keeps the terminal window on top.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": null,
"registryLine": 789
},
{
"id": "structured-copy",
"name": "Structured copy",
"summary": "/structcopy copies one session object as redacted JSON.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": null,
"registryLine": 797
},
{
"id": "conversation-export",
"name": "Conversation export",
"summary": "/export saves a redacted conversation as Markdown, HTML or JSON, to the clipboard or an auto-named file.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "unreleased",
"flag": null,
"docs": "docs/GUIDE.md#exporting-a-conversation",
"registryLine": 805
},
{
"id": "live-thinking",
"name": "Live thinking",
"summary": "Model thinking shows live in the transcript, then collapses under a Thought header; /verbose shows it in full.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": null,
"registryLine": 815
},
{
"id": "local-model-reasoning",
"name": "Local model reasoning compatibility",
"summary": "The vLLM Chat route sends reviewed model-template effort values instead of assuming a universal ladder.",
"status": "stable",
"surfaces": {
"tui": "stable",
"web": "stable",
"api": "stable"
},
"since": "unreleased",
"flag": null,
"docs": "docs/LOCAL_MODEL_REASONING.md",
"registryLine": 823
},
{
"id": "workbar",
"name": "Workbar",
"summary": "/workbar places the tasks, agents and context bar on any edge or hides it.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": null,
"registryLine": 833
},
{
"id": "terminal-dock",
"name": "Terminal dock",
"summary": "/workbar terminal shows workspace PTYs with live output, human input, session selection and a fresh shell; macOS/Linux.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.10.2",
"flag": null,
"docs": null,
"registryLine": 841
},
{
"id": "telemetry",
"name": "Telemetry",
"summary": "Anonymous aggregate usage counts, disclosed at first launch, with a saved off switch.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/TELEMETRY.md",
"registryLine": 852
},
{
"id": "docker",
"name": "Docker image",
"summary": "Runs Codewhale in a container, with an opt-in toolbox image.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": null,
"flag": null,
"docs": "docs/DOCKER.md",
"registryLine": 861
},
{
"id": "termux",
"name": "Android (Termux)",
"summary": "arm64 release archive for Termux on Android.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": null,
"flag": null,
"docs": "docs/TERMUX.md",
"registryLine": 870
},
{
"id": "harmonyos-native",
"name": "HarmonyOS (native)",
"summary": "Signed arm64 release archive for native HarmonyOS and OpenHarmony.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": null,
"flag": null,
"docs": "docs/HarmonyOS.md",
"registryLine": 879
},
{
"id": "chatgpt-plan-sign-in",
"name": "Sign in with ChatGPT",
"summary": "Official OAuth and the selected account catalog serve ChatGPT plan requests, with distinct token-verification errors.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "partial",
"web": "none"
},
"since": "0.10.1",
"flag": null,
"docs": "docs/PROVIDERS.md#sign-in-with-chatgpt",
"registryLine": 888
},
{
"id": "plugin-oauth-providers",
"name": "Reviewed plugin OAuth providers",
"summary": "Reviewed plugins sign in with /connect <id> and out with /disconnect; the host owns PKCE, models and approvals.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "partial",
"web": "none"
},
"since": "0.10.1",
"flag": null,
"docs": "docs/PLUGIN_PROVIDERS.md",
"registryLine": 898
},
{
"id": "orcarouter-sign-in",
"name": "Sign in with OrcaRouter",
"summary": "OrcaRouter provider: sk-orca- API key or OAuth 2.0 + PKCE sign-in, plus a live chat model catalog.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "preview",
"web": "none"
},
"since": "0.10.1",
"flag": null,
"docs": "docs/PROVIDERS.md",
"registryLine": 908
},
{
"id": "merch-interest",
"name": "Merch interest list",
"summary": "The community website collects private merch opt-ins, material preferences and optional item-price feedback.",
"status": "experimental",
"surfaces": {
"tui": "none",
"web": "none",
"api": "none"
},
"since": "unreleased",
"flag": null,
"docs": "web/lib/merch/README.md",
"registryLine": 919
},
{
"id": "local-whale-voice",
"name": "Local whale voice",
"summary": "Edit SOUL.md for a local whale and inspect the personality captured for each turn.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/RUNTIME_API.md#local-whale-voice",
"registryLine": 929
},
{
"id": "profile-constitution",
"name": "Profile constitution",
"summary": "Account preferences are captured per turn and previewed by the Engine.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"api": "preview"
},
"since": "0.10.1",
"flag": null,
"docs": "docs/RUNTIME_API.md#profile-constitution",
"registryLine": 939
},
{
"id": "plugin-shell-install",
"name": "Plugin shell installation",
"summary": "codewhale install uses the reviewed bundle installer with local, GitHub and version-pinned npm sources.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": "0.10.2",
"flag": null,
"docs": "docs/PLUGINS.md",
"registryLine": 949
},
{
"id": "herdr-agent-state",
"name": "Herdr agent state",
"summary": "Reports idle, working or blocked to the Herdr multiplexer and reopens the session after a restart.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "0.10.2",
"flag": null,
"docs": null,
"registryLine": 959
},
{
"id": "instruction-budgets",
"name": "Instruction budgets",
"summary": "Global and project standing instructions get separate token budgets, with every trim or skip reported.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "unreleased",
"flag": null,
"docs": "docs/CONFIGURATION.md#instruction-budget-instruction_budget-6526",
"registryLine": 968
},
{
"id": "github-action-review",
"name": "GitHub Action review",
"summary": "Generate pinned workflows for automatic or authorized mention reviews; publish findings with recorded evidence.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "docs/GITHUB_ACTION.md",
"registryLine": 978
},
{
"id": "telegram-agent",
"name": "Telegram agent bridge",
"summary": "Use an Engine from Telegram with durable prompt recovery, human-owned approvals and retained replies.",
"status": "experimental",
"surfaces": {
"api": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "integrations/telegram-bridge/README.md",
"registryLine": 988
},
{
"id": "dingtalk-agent",
"name": "DingTalk agent bridge",
"summary": "Connect an internal DingTalk app to the same Engine with scoped identity and durable message recovery.",
"status": "experimental",
"surfaces": {
"api": "preview"
},
"since": "unreleased",
"flag": null,
"docs": "integrations/dingtalk-bridge/README.md",
"registryLine": 998
},
{
"id": "compaction-archive-recall",
"name": "Compaction archive recall",
"summary": "context_archive_search and context_archive_get read the pre-compaction transcript a summary replaced.",
"status": "experimental",
"surfaces": {
"tui": "preview"
},
"since": "unreleased",
"flag": null,
"docs": null,
"registryLine": 1008
},
{
"id": "usage-statistics",
"name": "Usage statistics",
"summary": "Read-only native usage subtotals and execution diagnostics; missing coverage stays explicit.",
"status": "experimental",
"surfaces": {
"tui": "partial"
},
"since": "unreleased",
"flag": null,
"docs": "docs/CONFIGURATION.md#usage-and-execution-statistics",
"registryLine": 1017
},
{
"id": "cache-call-receipts",
"name": "Per-call cache receipts",
"summary": "/cache calls shows bounded native receipts with frozen prices, selected currency and missing cache telemetry.",
"status": "experimental",
"surfaces": {
"tui": "partial"
},
"since": "unreleased",
"flag": null,
"docs": "docs/CONFIGURATION.md#usage-and-execution-statistics",
"registryLine": 1027
},
{
"id": "local-proxy-fallback",
"name": "Local proxy fallback",
"summary": "Long-lived clients go direct while a loopback proxy port refuses connections, then resume proxying.",
"status": "experimental",
"surfaces": {
"tui": "partial",
"api": "partial"
},
"since": "unreleased",
"flag": null,
"docs": "docs/INSTALL.md#a-local-proxy-that-closed-after-the-session-started",
"registryLine": 1037
},
{
"id": "rate-limit-recovery",
"name": "Bounded HTTP rate-limit retries",
"summary": "Bound HTTP transport retries for 429 independently of network retries and honor provider reset minima.",
"status": "experimental",
"surfaces": {
"tui": "preview",
"web": "partial",
"api": "partial"
},
"since": null,
"flag": null,
"docs": "docs/rate-limit-retries.md",
"registryLine": 1047
},
{
"id": "custom-responses-profile",
"name": "Custom Responses profile",
"summary": "A custom provider with wire = responses can name an allowlisted responses_profile; omitted means standard.",
"status": "stable",
"surfaces": {
"tui": "stable"
},
"since": "unreleased",
"flag": null,
"docs": "docs/CONFIGURATION.md",
"registryLine": 1056
}
]
}