@hearsay-tools/squawk 0.17.0-dev.5682 → 0.17.0-dev.5685

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +111 -111
  2. package/package.json +4 -4
package/README.md CHANGED
@@ -678,7 +678,7 @@ it. A native question opens the same kind of wait. When the work is
678
678
  done and verified, the agent calls `cezar_done` (an optional `summary`), and the task
679
679
  finishes at the end of that turn: its open waits are cancelled and the summary is
680
680
  written as a note. In a workflow step that is not the last, `cezar_done` finishes that step
681
- and Cezarion starts the next one. `cezar_done` refuses while owned workers are live or uncollected,
681
+ and Squawk starts the next one. `cezar_done` refuses while owned workers are live or uncollected,
682
682
  a worker question is unanswered or a question to you is still pending, and says what to do first. An
683
683
  autonomous task does not wait for you until its automatic-wake budget is spent.
684
684
 
@@ -776,49 +776,49 @@ no one-click comparison page, automatic winner selection or automatic loser clea
776
776
 
777
777
  Every task has two settings, both on by default:
778
778
 
779
- - **Allow cezar workers**: the task's agent may start Cezar workers and resume them. Each worker is a separate paid agent session. The worker limits below cap resources, not spending.
780
- - **Allow task messaging**: the task's agent may list, message and wait on other tasks in this project with `cez message`.
779
+ - **Allow Squawk workers**: the task's agent may start Squawk workers and resume them. Each worker is a separate paid agent session. The worker limits below cap resources, not spending.
780
+ - **Allow task messaging**: the task's agent may list, message and wait on other tasks in this project with `hsq message`.
781
781
 
782
- Set them in the new-task form, in the task's header menu at any time, with `cez task start` or `cez run` and `--no-workers` / `--no-messaging`, or in an automation's `task.allowWorkers` / `task.allowMessaging`. A task created before these settings existed counts as on for both. The cockpit and headless `cez run` start one private loopback listener; each eligible session receives the absolute bundled Node/CLI invocation and its own environment credentials. No `cez` installation on the agent's PATH, config file, separate daemon, or remembered port is needed. If the listener cannot start, ordinary tasks keep working without delegation tools.
782
+ Set them in the new-task form, in the task's header menu at any time, with `hsq task start` or `hsq run` and `--no-workers` / `--no-messaging`, or in an automation's `task.allowWorkers` / `task.allowMessaging`. A task created before these settings existed counts as on for both. The cockpit and headless `hsq run` start one private loopback listener; each eligible session receives the absolute bundled Node/CLI invocation and its own environment credentials. No `hsq` installation on the agent's PATH, config file, separate daemon, or remembered port is needed. If the listener cannot start, ordinary tasks keep working without delegation tools.
783
783
 
784
- Turning **Allow cezar workers** off refuses new `spawn` and `--resume` at once, including through a session's existing credential and for a spawn still waiting to be accepted. The task keeps messaging, waiting on, inspecting, collecting, stopping and destroying the workers it already has, and work already accepted finishes. Turning **Allow task messaging** off refuses peer discovery, new peer waits and new peer messages in both directions; a reply to a request accepted earlier still lands, and messages between a task and its own workers are never blocked. A root task with both off, no worker receipt and no open peer request gets no credential; worker sessions, and roots with a worker receipt (also a deleted worker's, so its retained result stays collectable) or an open peer request, keep theirs. Native subagents inside one session are not Cezar workers, and these settings do not change them. These settings are cooperative supervision, not process isolation.
784
+ Turning **Allow Squawk workers** off refuses new `spawn` and `--resume` at once, including through a session's existing credential and for a spawn still waiting to be accepted. The task keeps messaging, waiting on, inspecting, collecting, stopping and destroying the workers it already has, and work already accepted finishes. Turning **Allow task messaging** off refuses peer discovery, new peer waits and new peer messages in both directions; a reply to a request accepted earlier still lands, and messages between a task and its own workers are never blocked. A root task with both off, no worker receipt and no open peer request gets no credential; worker sessions, and roots with a worker receipt (also a deleted worker's, so its retained result stays collectable) or an open peer request, keep theirs. Native subagents inside one session are not Squawk workers, and these settings do not change them. These settings are cooperative supervision, not process isolation.
785
785
 
786
- `CEZ_DELEGATION` is retired and has no effect. A caller that set `CEZ_DELEGATION=1` needs no change. A caller that relied on it being unset turns the settings off per task, for example `cez run --no-workers --no-messaging "<task>"`.
786
+ `CEZ_DELEGATION` is retired and has no effect. A caller that set `CEZ_DELEGATION=1` needs no change. A caller that relied on it being unset turns the settings off per task, for example `hsq run --no-workers --no-messaging "<task>"`.
787
787
 
788
788
  The provisioned command has these forms (the session instructions supply the absolute invocation):
789
789
 
790
790
  ```sh
791
- cez worker spawn --baseline parent-head --request-id <UUID> 'Implement the assigned change'
792
- cez worker spawn --baseline parent-head --request-id <UUID> --runner codex --effort high --context-file ./selected-context.txt 'Review the parser'
793
- cez worker spawn --baseline parent-head --request-id <UUID> --workflow review 'Review the parser change'
794
- cez worker list # All own workers, revisions and cleanup resources (fetches pages automatically)
795
- cez worker inspect <worker-id>
796
- cez worker steer <worker-id> 'Consider this additional constraint'
797
- cez worker diff <worker-id>
798
- cez worker collect <worker-id>
799
- cez worker wait <worker-id> --mode one --timeout-seconds 600
800
- cez worker wait <first-id> <second-id> --mode any --timeout-seconds 600
801
- cez worker wait <first-id> <second-id> --mode all --timeout-seconds 600
802
- cez worker cancel-wait <wait-id>
803
- cez message request <recipient-run-id> 'Please check this decision' --id <message-UUID>
804
- cez worker resume <worker-id> 'Correct the returned result' --id <new-message-UUID>
805
- cez message progress <recipient-run-id> 'Parser tests pass' --id <message-UUID>
806
- cez message follow-up <recipient-run-id> 'Include empty input' --id <message-UUID> --request-id <request-UUID>
807
- cez message reply <recipient-run-id> 'Checked; empty input is covered' --id <message-UUID> --request-id <request-UUID>
808
- cez message conversation <recipient-run-id>
809
- cez message wait --request <request-UUID> --request <another-request-UUID> --mode all
810
- cez message wait --peer <task-id> --timeout-seconds 1800 # Wake on that peer task's next message, or when it settles
811
- cez message inbox
812
- cez message tasks --all
813
- cez message cancel-wait <wait-id>
814
- cez message cancel-request <request-UUID>
815
- cez worker stop <worker-id>
816
- cez worker destroy <worker-id>
791
+ hsq worker spawn --baseline parent-head --request-id <UUID> 'Implement the assigned change'
792
+ hsq worker spawn --baseline parent-head --request-id <UUID> --runner codex --effort high --context-file ./selected-context.txt 'Review the parser'
793
+ hsq worker spawn --baseline parent-head --request-id <UUID> --workflow review 'Review the parser change'
794
+ hsq worker list # All own workers, revisions and cleanup resources (fetches pages automatically)
795
+ hsq worker inspect <worker-id>
796
+ hsq worker steer <worker-id> 'Consider this additional constraint'
797
+ hsq worker diff <worker-id>
798
+ hsq worker collect <worker-id>
799
+ hsq worker wait <worker-id> --mode one --timeout-seconds 600
800
+ hsq worker wait <first-id> <second-id> --mode any --timeout-seconds 600
801
+ hsq worker wait <first-id> <second-id> --mode all --timeout-seconds 600
802
+ hsq worker cancel-wait <wait-id>
803
+ hsq message request <recipient-run-id> 'Please check this decision' --id <message-UUID>
804
+ hsq worker resume <worker-id> 'Correct the returned result' --id <new-message-UUID>
805
+ hsq message progress <recipient-run-id> 'Parser tests pass' --id <message-UUID>
806
+ hsq message follow-up <recipient-run-id> 'Include empty input' --id <message-UUID> --request-id <request-UUID>
807
+ hsq message reply <recipient-run-id> 'Checked; empty input is covered' --id <message-UUID> --request-id <request-UUID>
808
+ hsq message conversation <recipient-run-id>
809
+ hsq message wait --request <request-UUID> --request <another-request-UUID> --mode all
810
+ hsq message wait --peer <task-id> --timeout-seconds 1800 # Wake on that peer task's next message, or when it settles
811
+ hsq message inbox
812
+ hsq message tasks --all
813
+ hsq message cancel-wait <wait-id>
814
+ hsq message cancel-request <request-UUID>
815
+ hsq worker stop <worker-id>
816
+ hsq worker destroy <worker-id>
817
817
  ```
818
818
 
819
- Use `cez message --help` for messaging commands. Use `cez worker --help` to list worker operations and flags, or `cez worker <operation> --help` for one operation. Explicit help prints human-readable text and exits successfully without an active delegation session. Commands otherwise return bounded JSON and a nonzero exit on failure or incomplete cleanup. Spawn requires a committed baseline (`parent-head` or an explicit ref) and pins its SHA at acceptance; dirty parent edits are excluded. Optional `--context '<text>'` or `--context-file <UTF-8-file>` supplies selected context, not the parent's conversation. The two flags are mutually exclusive, and combined task/context text is limited to 100,000 characters. The API also accepts up to 32 pinned-baseline file or parent-attachment references, with at most 8 MiB of copied attachments. Inspect reports worker-local input locations. Reuse a request ID only with the same task, baseline, context, runner, model, effort and workflow when retrying a lost response. `--runner` and its alias `--backend` count as the same field, so a retry may switch spelling. A parent holds at most 32 outstanding workers: accepted, live, or not yet verifiably destroyed. A verified destroy (`cez worker destroy`, or **Clean up** on a finished worker in the cockpit's Workers list) frees a slot; incomplete cleanup keeps its slot until a retry completes. A parent can create at most 1,024 workers in total; past that, start a new task. These limits bound disk resources and runaway spawning, not spending: a worker can be resumed with Continue, and destroying it does not undo charges already made. Cost stays bounded by `maxParallel` and by stopping the parent. There are at most 32 undelivered steering messages per worker.
819
+ Use `hsq message --help` for messaging commands. Use `hsq worker --help` to list worker operations and flags, or `hsq worker <operation> --help` for one operation. Explicit help prints human-readable text and exits successfully without an active delegation session. Commands otherwise return bounded JSON and a nonzero exit on failure or incomplete cleanup. Spawn requires a committed baseline (`parent-head` or an explicit ref) and pins its SHA at acceptance; dirty parent edits are excluded. Optional `--context '<text>'` or `--context-file <UTF-8-file>` supplies selected context, not the parent's conversation. The two flags are mutually exclusive, and combined task/context text is limited to 100,000 characters. The API also accepts up to 32 pinned-baseline file or parent-attachment references, with at most 8 MiB of copied attachments. Inspect reports worker-local input locations. Reuse a request ID only with the same task, baseline, context, runner, model, effort and workflow when retrying a lost response. `--runner` and its alias `--backend` count as the same field, so a retry may switch spelling. A parent holds at most 32 outstanding workers: accepted, live, or not yet verifiably destroyed. A verified destroy (`hsq worker destroy`, or **Clean up** on a finished worker in the cockpit's Workers list) frees a slot; incomplete cleanup keeps its slot until a retry completes. A parent can create at most 1,024 workers in total; past that, start a new task. These limits bound disk resources and runaway spawning, not spending: a worker can be resumed with Continue, and destroying it does not undo charges already made. Cost stays bounded by `maxParallel` and by stopping the parent. There are at most 32 undelivered steering messages per worker.
820
820
 
821
- An incomplete destroy reports the remaining resources and a reason. Cezarion retries that recorded request after a delay, including after the project's context recovers on server restart. It removes the owned checkout only after process termination and ownership are verified. If the reason persists, inspect the worker process, Git worktree lock and ownership receipt; correct the blocker and use `cez worker destroy <worker-id>` or the cockpit Destroy action to retry immediately. Cezarion leaves ambiguous or replaced resources in place for operator review.
821
+ An incomplete destroy reports the remaining resources and a reason. Squawk retries that recorded request after a delay, including after the project's context recovers on server restart. It removes the owned checkout only after process termination and ownership are verified. If the reason persists, inspect the worker process, Git worktree lock and ownership receipt; correct the blocker and use `hsq worker destroy <worker-id>` or the cockpit Destroy action to retry immediately. Squawk leaves ambiguous or replaced resources in place for operator review.
822
822
 
823
823
  `--workflow <name>` runs a catalog workflow inside the worker: the built-in `quick-task` or any `.ai/cezar/workflows/*.yaml` by name, with its agent and check steps, `skill:` bodies and `onFail` loops, so a repo's `review.yaml` becomes a dedicated reviewer. Omitted `--workflow` runs `quick-task` exactly as before. `--runner`, `--model` and `--effort` fill only the steps that leave those fields unset; a step's own `allowedTools`/`bashAllowlist` narrow the parent's grants and never widen them. An unknown name is refused. Agent steps may mix runners: at spawn every agent step is resolved and pinned separately, so an implement-with-codex, review-with-claude chain runs each step under its own runner, account, model, effort and grants. A step's optional `agentProfile` names the account it runs under (an id the registry does not know is refused); same-runner steps otherwise inherit the parent's account and other runners resolve their project/default one. Run-level columns show the first agent step.
824
824
 
@@ -826,7 +826,7 @@ Explicit default-account model pins are checked against a fresh, nonempty host c
826
826
 
827
827
  Omitted `--runner` inherits the parent's active runner. Same-runner workers inherit omitted model/account/effort; `--runner <claude|codex|opencode|pi|cursor|omp>` selecting another runner resolves that runner's project/default account and model without forwarding another provider's settings. `--backend` is a permanent alias of `--runner`; giving both with different values is refused as `invalid_input`. Worker `inspect` and `collect` still report the selected runner in a field named `backend`. `--model <model>` selects a supported model, subject to existing locks. `--effort <low|medium|high|xhigh|max>` pins reasoning effort on same-runner and mixed-runner spawn; omitted `--effort` still inherits the parent pin on same-runner spawn and drops it on mixed-runner spawn. Accepted identity and grants remain fixed across queuing, restart and Continue, including explicit empty grants. Changing or deleting an account registry entry does not rebind a worker. Missing accepted identity evidence or account homes, incompatible Claude state-file layouts, and conflicting later model locks refuse execution explicitly. Credentials and vendor configuration are never copied; each worker receives its own delegation credential, and unspecified native models stay unspecified.
828
828
 
829
- Wait registers immediately. End the parent turn to release scheduler capacity; Cezarion resumes it on a selected settled outcome or the finite deadline. `any` is the default, `one` requires exactly one worker, and `all` waits for every selected worker. Review, completion, failure, cancellation with proven termination, and destruction are outcomes. Timeout defaults to 600 seconds (1–1800 accepted). `cancel-wait` is idempotent for the retained wait ID and cannot cancel a newer wait. Timeout and wait cancellation report partial outcomes and unresolved workers, never cancel workers, and never automatically re-wait. Steering is attributed agent input and cannot answer a pending human question.
829
+ Wait registers immediately. End the parent turn to release scheduler capacity; Squawk resumes it on a selected settled outcome or the finite deadline. `any` is the default, `one` requires exactly one worker, and `all` waits for every selected worker. Review, completion, failure, cancellation with proven termination, and destruction are outcomes. Timeout defaults to 600 seconds (1–1800 accepted). `cancel-wait` is idempotent for the retained wait ID and cannot cancel a newer wait. Timeout and wait cancellation report partial outcomes and unresolved workers, never cancel workers, and never automatically re-wait. Steering is attributed agent input and cannot answer a pending human question.
830
830
 
831
831
  Parents and owned workers can converse in both directions; a worker may address only its parent. `send --kind request` opens a reply obligation whose ID is the message ID; `send --kind progress` (or `progress`) does not. Follow-ups clarify an existing request; only an explicit correlated `reply` settles it as replied. Retry a message with the same ID and exact payload, including deadline duration; changed payloads are rejected. Acceptance, provider delivery, reply, and task completion are separate facts, visible in the task transcript and `conversation` JSON.
832
832
 
@@ -834,7 +834,7 @@ Messages allow 100,000 characters each, with at most 32 undelivered inputs per r
834
834
 
835
835
  Messages reach a live recipient as soon as they are accepted, including mid-turn: Claude, Codex, Pi, OMP and OpenCode steer them into the running turn, and the model reads them at its next step. Cursor delivers at the turn boundary, because a second prompt would cancel its running turn. Pending conversations go together, in order, up to 32 messages and 100,000 formatted characters per batch; a single valid message is never split. Every message keeps its ID, sender, delivery receipt and request outcome; receipts show queued, delivered and read (when the agent's harness can tell) separately. A pending human question holds messages until it is answered, then they follow right behind the answer. The thread's Details distinguish creation, delivery confirmation and event-recording times.
836
836
 
837
- Sending a message to a review or terminal participant reports `not-delivered` and `continuation-required`, with the reason and next command; the CLI exits 1. An active parent can use `cez worker resume` to continue its settled done/review/failed worker with that message as the new instruction. No human Continue is needed for this parent-controlled action. A retry with the same payload and ID never creates another continuation; resuming after a rejected message requires a new ID. Stopped or destroyed workers need a new worker. Workers cannot resume parents, and conversation never answers a pending human question. Durable IDs deduplicate accepted queue entries and event replay, but a crash between provider acceptance and its durable delivery checkpoint can leave transport delivery ambiguous; this is not an exactly-once execution guarantee.
837
+ Sending a message to a review or terminal participant reports `not-delivered` and `continuation-required`, with the reason and next command; the CLI exits 1. An active parent can use `hsq worker resume` to continue its settled done/review/failed worker with that message as the new instruction. No human Continue is needed for this parent-controlled action. A retry with the same payload and ID never creates another continuation; resuming after a rejected message requires a new ID. Stopped or destroyed workers need a new worker. Workers cannot resume parents, and conversation never answers a pending human question. Durable IDs deduplicate accepted queue entries and event replay, but a crash between provider acceptance and its durable delivery checkpoint can leave transport delivery ambiguous; this is not an exactly-once execution guarantee.
838
838
 
839
839
  Collect returns the worker's execution revision, status/outcome, `settled` and `partial` flags, and typed availability for assistant summary, HEAD, bounded diff and artifact descriptors. Missing evidence is explicit; running output is partial. An available `diff.path` points to a **JSON result file** containing `{ result, diffSnapshot }`; its `diffSnapshot` field holds the patch. Read and review that field before applying any changes. The latest collected result is stored under the parent and survives restart. Collection acknowledges observation, not Git integration or successful work. Review desired worker commits and deliberately integrate them into the parent before destroying their worktrees/branches; there is no automatic merge.
840
840
 
@@ -842,41 +842,41 @@ Parent completion requires collection of every worker's latest settled execution
842
842
 
843
843
  Stop requests cancellation; `stopping` does not prove termination. Destroy checkpoints obtainable results, waits up to 30 seconds for proven termination, and removes only verified owned resources. An `incomplete` response lists remaining resources; resolve the cause and retry explicitly. Cleanup order is: collect/integrate desired results, destroy owned resources, explicitly delete child histories through the cockpit/API, then delete parent history. Parent-owned summaries and bounded diff snapshots remain until parent deletion, including after child-history deletion; general artifact bytes are not archived. Branch/path strings and SHAs become historical descriptors after removal, not promises of available Git objects or files. The human cleanup endpoint `POST /api/v1/p/<projectId>/runs/<worker-id>/worker-destroy` stays available when delegation is disabled. The CLI bounds each HTTP request to 45 seconds and rejects endpoint/auth/origin overrides and redirects.
844
844
 
845
- Provisioned root tasks and workers may use native subagents, and each mechanism has its own purpose. Use native subagents for work that needs no separate worktree: research, code reading and focused analysis, for example a subagent that reads the parser and summarizes its error handling. Native subagents need no worker creation, worktree, collection or destruction. Use Cezarion workers for work that needs its own worktree, its own commits or a tracked lifecycle. Workers may use native subagents too, but cannot spawn Cezarion workers. An agent may message its own subagents with its runner's tools; it reaches another Cezarion task only through `cez message`. Where a runner's native tool for reaching another session is separate from subagent messaging, a per-run adapter control turns it off: Codex's cross-thread message board, and an OpenCode plugin that refuses a `task` call whose `task_id` names a session outside the caller's own session tree. Claude sessions refuse messages from other sessions on every launch. Known limitations: a Claude session Cezarion starts can still list and message Claude sessions that Cezarion did not start, and sessions on other machines; an OpenCode session that an older Cezarion created under delegation keeps its `task` deny on Continue and restart recovery, because OpenCode cannot remove a session permission rule (new OpenCode sessions allow subagents). These controls are cooperative same-user supervision, not isolation ([Governed delegation controls](AGENT_PROTOCOL.md#governed-delegation-controls-d1)). When the listener is unavailable, ordinary tools/settings stay unchanged. The listener binds to `127.0.0.1`, including hosted cockpit mode. Its session credentials authorize only what that session may do: a root manages its own workers and messages peer roots in the same project, subject to the task's settings and relationship checks; a worker addresses only its parent. This is cooperative local-agent supervision; same-user unrestricted shell and custom tools are not hard isolation. Workers cannot spawn Cezarion workers or message peers through Cezarion. Review remains a human gate with no automatic acceptance. Never read, echo, forward, or persist the generated token.
845
+ Provisioned root tasks and workers may use native subagents, and each mechanism has its own purpose. Use native subagents for work that needs no separate worktree: research, code reading and focused analysis, for example a subagent that reads the parser and summarizes its error handling. Native subagents need no worker creation, worktree, collection or destruction. Use Squawk workers for work that needs its own worktree, its own commits or a tracked lifecycle. Workers may use native subagents too, but cannot spawn Squawk workers. An agent may message its own subagents with its runner's tools; it reaches another Squawk task only through `hsq message`. Where a runner's native tool for reaching another session is separate from subagent messaging, a per-run adapter control turns it off: Codex's cross-thread message board, and an OpenCode plugin that refuses a `task` call whose `task_id` names a session outside the caller's own session tree. Claude sessions refuse messages from other sessions on every launch. Known limitations: a Claude session Squawk starts can still list and message Claude sessions that Squawk did not start, and sessions on other machines; an OpenCode session that an older Squawk created under delegation keeps its `task` deny on Continue and restart recovery, because OpenCode cannot remove a session permission rule (new OpenCode sessions allow subagents). These controls are cooperative same-user supervision, not isolation ([Governed delegation controls](AGENT_PROTOCOL.md#governed-delegation-controls-d1)). When the listener is unavailable, ordinary tools/settings stay unchanged. The listener binds to `127.0.0.1`, including hosted cockpit mode. Its session credentials authorize only what that session may do: a root manages its own workers and messages peer roots in the same project, subject to the task's settings and relationship checks; a worker addresses only its parent. This is cooperative local-agent supervision; same-user unrestricted shell and custom tools are not hard isolation. Workers cannot spawn Squawk workers or message peers through Squawk. Review remains a human gate with no automatic acceptance. Never read, echo, forward, or persist the generated token.
846
846
 
847
- ## From the terminal: `cez task` and `cez message`
847
+ ## From the terminal: `hsq task` and `hsq message`
848
848
 
849
- `cez task` starts, watches and steers tasks **in the running cockpit** from a shell — for you, or
849
+ `hsq task` starts, watches and steers tasks **in the running cockpit** from a shell — for you, or
850
850
  for a bot driving one. Every command prints one JSON object and exits with a code the caller can
851
851
  branch on, so nothing has to parse prose. It never starts a server: it finds the cockpit whose
852
852
  project registry holds this checkout (ports 4321–4370; a task worktree resolves to its parent
853
- project), or you point it at one with `--url` / `CEZ_URL`.
853
+ project), or you point it at one with `--url` / `HSQ_URL` (`CEZ_URL` fallback).
854
854
 
855
855
  ```text
856
- cez task [--url <origin> | --repo <dir>] <operation> …
856
+ hsq task [--url <origin> | --repo <dir>] <operation> …
857
857
  ```
858
858
 
859
859
  The shared `--url`, `--repo` and `--help`/`-h` flags also work before the operation;
860
860
  `--url` and `--repo` accept both `--flag value` and `--flag=value`. A shared flag repeated
861
861
  before the operation or on both sides is a usage error. Operation flags stay after the
862
- operation. `cez task --help <operation>` shows that operation's help without discovery.
863
- An explicit `--url` wins over `CEZ_URL`; `--repo` selects the checkout to discover.
862
+ operation. `hsq task --help <operation>` shows that operation's help without discovery.
863
+ An explicit `--url` wins over `HSQ_URL` (`CEZ_URL` fallback); `--repo` selects the checkout to discover.
864
864
 
865
- `cez task send` is human input. It can answer a pending human question. It refuses
866
- inside a task (`CEZ_TASK_ID` is set). Agents use `cez message` for task messages,
865
+ `hsq task send` is human input. It can answer a pending human question. It refuses
866
+ inside a task (`HSQ_TASK_ID` (`CEZ_TASK_ID` fallback) is set). Agents use `hsq message` for task messages,
867
867
  including peer and parent/worker conversations; see [Owned workers](#owned-workers).
868
868
 
869
869
  ```bash
870
- id=$(cez task start --task-file - <<'EOF' | jq -r .id
871
- Fix the `cez task` docs. Keep $(example) and "quotes" literal.
870
+ id=$(hsq task start --task-file - <<'EOF' | jq -r .id
871
+ Fix the `hsq task` docs. Keep $(example) and "quotes" literal.
872
872
  EOF
873
873
  )
874
- cez task wait "$id" --timeout-seconds 900 # 0 done/review/needs you · 1 failed · 3 timeout
875
- cez task list # currentStepId (running), pullRequestUrl (done/review), capped error (failed)
876
- cez task status "$id" # slim JSON: status, attention, question, branch, handoffUrl…
877
- cez task send "$id" 'Use the retry helper instead' # delivered live, queued before start
878
- cez task send "$id" --resume 'Continue with the next step' # resumed: reopen a settled session
879
- cez task log "$id" --follow --timeout-seconds 300 # JSON lines until it needs you or ends
874
+ hsq task wait "$id" --timeout-seconds 900 # 0 done/review/needs you · 1 failed · 3 timeout
875
+ hsq task list # currentStepId (running), pullRequestUrl (done/review), capped error (failed)
876
+ hsq task status "$id" # slim JSON: status, attention, question, branch, handoffUrl…
877
+ hsq task send "$id" 'Use the retry helper instead' # delivered live, queued before start
878
+ hsq task send "$id" --resume 'Continue with the next step' # resumed: reopen a settled session
879
+ hsq task log "$id" --follow --timeout-seconds 300 # JSON lines until it needs you or ends
880
880
  ```
881
881
 
882
882
  `list --status` accepts comma-separated values: `queued`, `running`, `waiting`, `review`,
@@ -889,18 +889,18 @@ a closed session returns `delivery: not-delivered` and the `next` command. For m
889
889
  shell-sensitive messages use `send <id> --text-file <path|->` (`-` reads stdin); the quoting
890
890
  rules below apply to messages too.
891
891
 
892
- Use `--task-file PATH` to read a saved task (for example, `cez task start --task-file task.md`),
892
+ Use `--task-file PATH` to read a saved task (for example, `hsq task start --task-file task.md`),
893
893
  or `--task-file -` to read stdin as above. The quoted heredoc delimiter (`<<'EOF'`) keeps
894
894
  backticks and `$()` literal in the task text.
895
895
 
896
896
  POSIX shells, including Bash, expand backticks and `$()` in double-quoted arguments before
897
- cez receives the text. **Do not put raw backticks in double-quoted task arguments.** This can
897
+ hsq receives the text. **Do not put raw backticks in double-quoted task arguments.** This can
898
898
  execute parts of your prompt as shell commands and leave holes in the stored task, including
899
899
  when starting tasks through SSH and `bash -lc`. Prefer a task file or stdin with a quoted
900
900
  heredoc delimiter. A single-quoted positional argument still works for short tasks:
901
- `cez task start 'Fix the typo'`.
901
+ `hsq task start 'Fix the typo'`.
902
902
 
903
- `cez task start --task-file task.md --skill <name>` names one skill as the task's agent step;
903
+ `hsq task start --task-file task.md --skill <name>` names one skill as the task's agent step;
904
904
  `--skill` and `--workflow` are mutually exclusive. The CLI checks `GET /skills` first and
905
905
  includes a `warning` in its JSON result if the skill is missing or the catalog cannot be
906
906
  checked; it still starts the run. Like a cockpit skill start, if the skill is missing at
@@ -909,13 +909,13 @@ the cockpit composer's recent picks or skill-usage ranking.
909
909
  Without either flag, `start` still runs `quick-task`.
910
910
 
911
911
  `--runner <claude|codex|opencode|pi|cursor|omp>` picks the runner, as in a workflow step and
912
- `cez discover --runner`; `--model` and `--effort` pin the rest. `--backend` is a permanent
912
+ `hsq discover --runner`; `--model` and `--effort` pin the rest. `--backend` is a permanent
913
913
  alias of `--runner` with no warning. Giving both with different values exits 64.
914
914
 
915
915
  `--archive-when-done` archives the task after **Done**. `--auto-merge-pr` merges its
916
916
  PR after **Done** only when current-head CI and GitHub rules pass. It can mark a
917
917
  draft PR ready. Both controls are off by default. They also appear as switches in
918
- the task composer and task details. With both on, Cezarion merges before it archives;
918
+ the task composer and task details. With both on, Squawk merges before it archives;
919
919
  without a PR, it archives on Done. Pending or blocked completion actions show their
920
920
  reason in task details. Use `status <id> --full` to read the saved `archiveWhenDone`,
921
921
  `autoMergePr` and `completionAction` fields. Existing task choices can be changed
@@ -933,7 +933,7 @@ Use `archive <id>` to hide a task from `list`, `unarchive <id>` to restore it, a
933
933
  Exit codes:
934
934
  `0` ok (`wait`/`start --wait`/`log --follow`: the task ended `done`/`review` or stopped for attention), `1` task
935
935
  failed/cancelled or a message was not delivered, `2` no cockpit or the cockpit refused (its `error`
936
- is passed through), `3` timed out, `64` usage error. `cez task --help` lists every flag.
936
+ is passed through), `3` timed out, `64` usage error. `hsq task --help` lists every flag.
937
937
 
938
938
  **When a task needs you.** `status`, `list`, `wait` and the final `log --follow` line carry `attention` and `attentionLabel`,
939
939
  derived by the same function the cockpit's Needs You uses, so the CLI and the cockpit cannot
@@ -956,12 +956,12 @@ disagree. Read those rather than the raw status:
956
956
  `--autonomous` runs, or a bot that wants an outcome:
957
957
 
958
958
  ```bash
959
- cez task wait "$id" # stops when the task needs you, or ends
960
- cez task wait "$id" --until settled # done/review/failed/cancelled only
961
- cez task start --task-file task.md --wait # returns as soon as the agent parks
962
- cez task start --task-file task.md --wait --autonomous --until settled # runs to completion
963
- cez task log "$id" --follow # streams until the task needs you, or ends
964
- cez task log "$id" --follow --until settled # streams until done/review/failed/cancelled
959
+ hsq task wait "$id" # stops when the task needs you, or ends
960
+ hsq task wait "$id" --until settled # done/review/failed/cancelled only
961
+ hsq task start --task-file task.md --wait # returns as soon as the agent parks
962
+ hsq task start --task-file task.md --wait --autonomous --until settled # runs to completion
963
+ hsq task log "$id" --follow # streams until the task needs you, or ends
964
+ hsq task log "$id" --follow --until settled # streams until done/review/failed/cancelled
965
965
  ```
966
966
 
967
967
  *Migrating from `--until settled`.* Before 0.16, `wait` and `start --wait` defaulted to
@@ -971,7 +971,7 @@ parked within seconds. The default is now `attention`. A bot that polls for term
971
971
  run in the `wait` output (and the `start --wait` object) now carries `attention` +
972
972
  `attentionLabel`, and the output's top level says which `until` was in force, so a caller can tell
973
973
  "parked for follow-up" (`status: waiting`, `attention: waiting`) from "finished" (`status: done`,
974
- `attention: none`) without knowing Cezarion's status vocabulary.
974
+ `attention: none`) without knowing Squawk's status vocabulary.
975
975
 
976
976
  *`log --follow` (#931).* `log --follow` used to stop on a terminal status only, so tailing an
977
977
  interactive task streamed until `--timeout-seconds` and exited 3 after the agent had parked. It
@@ -988,20 +988,20 @@ each such webhook when it enters a state that webhook selects: **Needs you**, **
988
988
  **Waiting** (a timer) and **Any other wait** when you tick them. A question that puts the task in
989
989
  Needs you is `task.question`; every other entry is `task.status`, and the body's `state` names the
990
990
  state. `task.subscribed` (when it opts in, at start or on hand-off) and **Send test** always go out.
991
- Each body carries the same slim projection `cez task status` prints, under `task`. `cez task start`
991
+ Each body carries the same slim projection `hsq task status` prints, under `task`. `hsq task start`
992
992
  opts in whenever the project has a webhook (`--no-notify` to skip it); the cockpit's New task form
993
993
  has a **Notify webhook** toggle; and a running task's **Hand off** button (or
994
- `cez task notify <id> --message '…'`) turns it on later with a note for the bot. `notify` (and
994
+ `hsq task notify <id> --message '…'`) turns it on later with a note for the bot. `notify` (and
995
995
  `send --notify`) on a worker's id is a usage error that names the parent to notify instead;
996
996
  `notify --off` still works on one. The note goes to
997
997
  the webhook only, never to the agent. Delivery is best-effort: 10 s timeout, 3 attempts, and a
998
- failure shows in the thread without touching the task. The token is stored in `~/.cezar` and never
999
- sent back to a browser. Under `CEZ_DRY_RUN=1` nothing is sent; the payload is logged in the thread.
998
+ failure shows in the thread without touching the task. The token is stored in `<config>` and never
999
+ sent back to a browser. Under `HSQ_DRY_RUN=1` (`CEZ_DRY_RUN` fallback) nothing is sent; the payload is logged in the thread.
1000
1000
 
1001
1001
  A project can hold several webhooks, each with its own states, and each body names the webhook it
1002
1002
  went to under `webhook`. One failing webhook never delays or stops another.
1003
1003
 
1004
- ### Reports from agents: `cez webhook`
1004
+ ### Reports from agents: `hsq webhook`
1005
1005
 
1006
1006
  Turn on **Let agents send reports** for a webhook, and agents in that project can send it a report
1007
1007
  on demand: a friction report to a triage bot instead of a new GitHub issue, for example. Agents see
@@ -1010,32 +1010,32 @@ instructions ("Send friction you hit with tools here instead of filing a GitHub
1010
1010
  without that switch cannot be reached this way.
1011
1011
 
1012
1012
  ```sh
1013
- cez webhook list # the webhooks open to agents
1014
- cez webhook send 'Friction reports' --message-file report.md --title 'Squeal skipped an edit'
1015
- cez webhook send <name|id> --message 'Short report' [--data '{"severity":"low"}']
1013
+ hsq webhook list # the webhooks open to agents
1014
+ hsq webhook send 'Friction reports' --message-file report.md --title 'Squeal skipped an edit'
1015
+ hsq webhook send <name|id> --message 'Short report' [--data '{"severity":"low"}']
1016
1016
  ```
1017
1017
 
1018
1018
  The body is `event: "agent.report"` with `webhook`, `title`, the Markdown `message`, your `data`,
1019
1019
  and the reporting task's `runId`, thread `url` and `task` projection. The command prints the
1020
1020
  outcome as JSON and exits 0 delivered, 1 not delivered, 2 refused or no cockpit, 64 usage.
1021
1021
 
1022
- ### Automations from a task: `cez automation`
1022
+ ### Automations from a task: `hsq automation`
1023
1023
 
1024
- `cez automation` creates and manages automations (on by default; `CEZ_AUTOMATIONS=0` disables them) on the cockpit that
1024
+ `hsq automation` creates and manages automations (on by default; `HSQ_AUTOMATIONS=0` (`CEZ_AUTOMATIONS` fallback) disables them) on the cockpit that
1025
1025
  runs the task, so an agent asked to "do X every morning" or "whenever a PR opens" sets up an
1026
- automation instead of a cron job. Like `cez task`, it prints one JSON object per invocation and
1026
+ automation instead of a cron job. Like `hsq task`, it prints one JSON object per invocation and
1027
1027
  exits 0 ok, 1 check failed, 2 refused or no cockpit, 3 check timed out, 64 usage.
1028
1028
 
1029
1029
  ```sh
1030
- cez automation schema # the definition reference (needs no cockpit)
1031
- cez automation add --name 'Weekday triage' --cron '0 7 * * 1-5' --prompt 'Triage new issues'
1032
- cez automation add --name 'Review PRs' --on pull_request.opened --every 5m --label bug --prompt-file p.md
1033
- cez automation add --name 'Agent triage' --on issue.labeled --changed-label needs-agent --prompt 'Triage #{{github.number}}'
1034
- cez automation create --file def.json [--enable] # full JSON form; stdin when no flag is given
1035
- cez automation update <id> --json '{"task":{"prompt":"…"}}'
1036
- cez automation add --name 'Check the rollout' --at 2026-10-29T09:00 --tz Europe/Warsaw --prompt 'Check the rollout'
1037
- cez automation add --name 'Follow up' --in 7d --latest-start 6h --prompt 'Follow up on the migration'
1038
- cez automation check <id> [--execute] · run <id> · list [--archived include|only] · show <id> · enable <id> · pause <id> · cancel <id> · delete <id>
1030
+ hsq automation schema # the definition reference (needs no cockpit)
1031
+ hsq automation add --name 'Weekday triage' --cron '0 7 * * 1-5' --prompt 'Triage new issues'
1032
+ hsq automation add --name 'Review PRs' --on pull_request.opened --every 5m --label bug --prompt-file p.md
1033
+ hsq automation add --name 'Agent triage' --on issue.labeled --changed-label needs-agent --prompt 'Triage #{{github.number}}'
1034
+ hsq automation create --file def.json [--enable] # full JSON form; stdin when no flag is given
1035
+ hsq automation update <id> --json '{"task":{"prompt":"…"}}'
1036
+ hsq automation add --name 'Check the rollout' --at 2026-10-29T09:00 --tz Europe/Warsaw --prompt 'Check the rollout'
1037
+ hsq automation add --name 'Follow up' --in 7d --latest-start 6h --prompt 'Follow up on the migration'
1038
+ hsq automation check <id> [--execute] · run <id> · list [--archived include|only] · show <id> · enable <id> · pause <id> · cancel <id> · delete <id>
1039
1039
  ```
1040
1040
 
1041
1041
  `add` and `create` send the same body and create the automation **paused** unless `--enable` is
@@ -1046,7 +1046,7 @@ and echoes the revision it read, so a concurrent edit in the cockpit is refused
1046
1046
  overwritten. Mutating commands print the automation's cockpit page as `url`.
1047
1047
 
1048
1048
  `add` accepts `--archive-when-done` and `--auto-merge-pr` with the same behavior as
1049
- `cez task start`. The JSON keys are `task.archiveWhenDone` and `task.autoMergePr`.
1049
+ `hsq task start`. The JSON keys are `task.archiveWhenDone` and `task.autoMergePr`.
1050
1050
  Both are optional booleans and default to off. The automation editor has the same
1051
1051
  switches. Editing these choices affects future tasks only; it does not change tasks
1052
1052
  the automation already launched. Enabling an automation or making its tasks autonomous
@@ -1069,17 +1069,17 @@ receipts prevent those repeated observations from launching duplicate tasks.
1069
1069
  A **one-time schedule** (**Once** in the editor, `--at` or `--in` on `add`, `"schedule":
1070
1070
  {"type": "once", "at": "2026-10-29T09:00", "timeZone": "Europe/Warsaw"}` in JSON) starts one
1071
1071
  ordinary task at a wall-clock time in an explicit IANA zone. It is created paused like every
1072
- automation; **Enable** arms it. When it is due, Cezarion starts the task and moves the schedule to
1072
+ automation; **Enable** arms it. When it is due, Squawk starts the task and moves the schedule to
1073
1073
  **Archived** with a link to that task; **Run now** does the same at once, so it never runs twice.
1074
1074
  **Cancel** archives it without a task. An archived schedule cannot change, and the list hides it
1075
- until you pick the **Archived** filter. Cezarion must be running at the due time. If it was not,
1075
+ until you pick the **Archived** filter. Squawk must be running at the due time. If it was not,
1076
1076
  the schedule starts on the next boot only within its **Latest start** (no limit by default; 10
1077
1077
  minutes to 30 days); after that it is marked **Missed** and stays until you edit, cancel or run it.
1078
1078
  A launch that fails marks it **Failed**, and nothing retries on its own; **Retry** or **Run now**
1079
1079
  relaunches the same receipt, so one schedule starts at most one task. Agents can create and manage
1080
1080
  one-time schedules with the `cezar_schedule_task` and `cezar_scheduled_tasks` tools, which exist
1081
- by default unless `CEZ_AUTOMATIONS=0` and also create schedules paused unless the user asked for them to run.
1082
- These tools take and answer the due time in UTC, like every other time in a Cezar tool; the
1081
+ by default unless `HSQ_AUTOMATIONS=0` (`CEZ_AUTOMATIONS` fallback) and also create schedules paused unless the user asked for them to run.
1082
+ These tools take and answer the due time in UTC, like every other time in a Squawk tool; the
1083
1083
  schedule keeps a wall time in the cockpit's time zone, so the cockpit shows it in local time.
1084
1084
 
1085
1085
  Automation list counters use two windows. **Launched** counts every stored task with that
@@ -1088,8 +1088,8 @@ archived tasks. Restarting or compacting automation logs and receipts does not c
1088
1088
  deleting a task removes it from the count. **Matches**, **Duplicates** and **Errors** describe
1089
1089
  only that automation's latest 100 activity-log rows. Recent activity remains a separate log view.
1090
1090
 
1091
- The address comes from `CEZ_COCKPIT_URL` and `CEZ_PROJECT_ID`, which the cockpit puts in a task's
1092
- environment. Without them, only an explicit `--url`, `--repo` or `CEZ_URL` looks for a cockpit;
1091
+ The address comes from `HSQ_COCKPIT_URL` (`CEZ_COCKPIT_URL` fallback) and `HSQ_PROJECT_ID` (`CEZ_PROJECT_ID` fallback), which the cockpit puts in a task's
1092
+ environment. Without them, only an explicit `--url`, `--repo` or `HSQ_URL` (`CEZ_URL` fallback) looks for a cockpit;
1093
1093
  otherwise the command exits 2 and never starts a server. With automations off, the cockpit's `409`
1094
1094
  is relayed verbatim (exit 2).
1095
1095
 
@@ -1123,7 +1123,7 @@ back, its failing output is appended to the retried agent's prompt so the next
1123
1123
  attempt can see what broke.
1124
1124
 
1125
1125
  Agent steps have no wall-clock limit by default, including steps before a check or
1126
- another agent. This applies to cockpit tasks, owned workers and `cez run`, on every
1126
+ another agent. This applies to cockpit tasks, owned workers and `hsq run`, on every
1127
1127
  runner. Non-final agent steps still close after their turn and advance the chain.
1128
1128
  An authored agent step may opt into `timeoutMs`: an integer from `0` to `2147483647`
1129
1129
  milliseconds, with `0` disabling the cap. A positive limit measures the entire
@@ -1150,14 +1150,14 @@ skills: [reproduce, root-cause, implement, self-review]
1150
1150
 
1151
1151
  ## How it runs agents
1152
1152
 
1153
- Cezarion shells out to your locally installed, logged-in agent CLI —
1153
+ Squawk shells out to your locally installed, logged-in agent CLI —
1154
1154
  **your subscription, no API key**. With the default Claude Code backend that
1155
1155
  means headless `stream-json` mode, tool access via `--allowedTools`, with
1156
1156
  unapproved tools denied without prompting (`--permission-mode dontAsk`) inside
1157
1157
  the task's worktree — but note the zero-config default list (`Read`, `Edit`,
1158
1158
  `Write`, `Grep`, `Glob`, `Bash`) grants unrestricted `Bash` unless a step sets
1159
1159
  `bashAllowlist`, so treat a run as having full shell access in its worktree,
1160
- not a sandboxed allowlist. Set `CEZ_APPROVAL_GATE=1` to opt into Claude's
1160
+ not a sandboxed allowlist. Set `HSQ_APPROVAL_GATE=1` (`CEZ_APPROVAL_GATE` fallback) to opt into Claude's
1161
1161
  interactive approval UI. Codex, OpenCode and Cursor are driven through their
1162
1162
  own native protocols and don't honor `allowedTools` at all; OpenCode's own
1163
1163
  permission config decides what it asks. pi and OMP map `allowedTools` onto
@@ -1167,7 +1167,7 @@ locks down. Nothing runs on a server you don't own.
1167
1167
 
1168
1168
  Live Preview lets Chromium use host graphics when available. Chromium selects the
1169
1169
  backend and falls back to software when hardware is unavailable or blocked. This
1170
- needs no Cezarion setting or VirGL-specific setup. On Linux, GPU access may also
1170
+ needs no Squawk setting or VirGL-specific setup. On Linux, GPU access may also
1171
1171
  need a working display in the cockpit process environment. JPEG streaming is
1172
1172
  unchanged; GPU rendering does not guarantee hardware frame encoding.
1173
1173
 
@@ -1175,7 +1175,7 @@ Useful environment variables:
1175
1175
 
1176
1176
  | Var | Effect |
1177
1177
  |---|---|
1178
- | `HSQ_*` aliases below | Ordinary settings prefer a defined HSQ value, including empty. Home, hosted-mode REMOTE and native shell controls use the separate rules below. Both home locators and inherited controller authority are removed from child environments, even in full-env mode. |
1178
+ | `HSQ_*` settings (`CEZ_*` fallback) | Ordinary settings prefer a defined HSQ value, including empty. Home, hosted-mode REMOTE and native shell controls use the separate rules below. Both home locators and inherited controller authority are removed from child environments, even in full-env mode. |
1179
1179
  | `CEZ_DELEGATION` | Retired (hearsay-tools/cezarion#2784); has no effect. Workers and task messaging are per-task settings, both on by default. See [Owned workers](#owned-workers). |
1180
1180
  | `HSQ_DELEGATION_URL`, `CEZ_DELEGATION_URL`, `HSQ_DELEGATION_TOKEN`, `CEZ_DELEGATION_TOKEN` | Internal generated session values; do not configure or copy them. Tokens rotate on Continue/restart and are revoked when the session/controller closes. |
1181
1181
  | `HSQ_REMOTE`, `CEZ_REMOTE` | Hosted mode: exact `1` under either name disables local handoff and local settings administration. Empty or `0` cannot cancel the other name's hosted-mode pin. Server installers pin both names. |
@@ -1197,39 +1197,39 @@ Useful environment variables:
1197
1197
  | `HSQ_DESKTOP_NODE` / `CEZ_DESKTOP_NODE` | Native-shell Node executable. The HSQ name wins when present. Empty selects `node` on PATH. |
1198
1198
  | `HSQ_DESKTOP_NO_UPDATE=1` / `CEZ_DESKTOP_NO_UPDATE=1` | Disable signed native-shell updates. The HSQ name wins when present. Debug builds already disable updates. |
1199
1199
  | `HSQ_DESKTOP_DEBUG_IPC` / `CEZ_DESKTOP_DEBUG_IPC` | Debug builds only: exercise native title-bar IPC after loading the cockpit. The HSQ name wins when present. |
1200
- | `HSQ_URL`, `CEZ_URL` | Cockpit origin for `cez task` and operator `cez discover` (e.g. a hosted `HSQ_REMOTE`, `CEZ_REMOTE` cockpit). Unset, they find the local cockpit serving this checkout on ports 4321–4370. Parent discovery uses its delegation controller instead. |
1201
- | `HSQ_COCKPIT_URL`, `CEZ_COCKPIT_URL`, `HSQ_PROJECT_ID`, `CEZ_PROJECT_ID` | Set by the cockpit in every agent's environment once it listens: the bound origin and the run's project. `cez automation` calls that address; a headless `cez run` sets neither. Do not configure them. |
1200
+ | `HSQ_URL`, `CEZ_URL` | Cockpit origin for `hsq task` and operator `hsq discover` (e.g. a hosted `HSQ_REMOTE`, `CEZ_REMOTE` cockpit). Unset, they find the local cockpit serving this checkout on ports 4321–4370. Parent discovery uses its delegation controller instead. |
1201
+ | `HSQ_COCKPIT_URL`, `CEZ_COCKPIT_URL`, `HSQ_PROJECT_ID`, `CEZ_PROJECT_ID` | Set by the cockpit in every agent's environment once it listens: the bound origin and the run's project. `hsq automation` calls that address; a headless `hsq run` sets neither. Do not configure them. |
1202
1202
  | `HSQ_DRY_RUN=1`, `CEZ_DRY_RUN=1` | Use bundled mocks for all five agent backends — the cockpit works offline for demos and development. Explicit backend binary overrides still win. |
1203
- | `HSQ_AGENT_MODELS_LOCKED=1`, `CEZ_AGENT_MODELS_LOCKED=1` | Globally lock each runner to the model configured in its native Claude/Codex/OpenCode settings while keeping runner selection available. Exact `1` also delegates authentication and provider enablement to those native agents, so Cezarion skips its credential probes and provider-disable preferences. Existing Cezarion presets are preserved but ignored, and an environment change requires a restart. The config-file equivalent is `"modelsLocked": true` in global `~/.cezar/config.json` or one repository's `.ai/cezar/config.json`; config-file locks do not disable provider checks. |
1203
+ | `HSQ_AGENT_MODELS_LOCKED=1`, `CEZ_AGENT_MODELS_LOCKED=1` | Globally lock each runner to the model configured in its native Claude/Codex/OpenCode settings while keeping runner selection available. Exact `1` also delegates authentication and provider enablement to those native agents, so Squawk skips its credential probes and provider-disable preferences. Existing Squawk presets are preserved but ignored, and an environment change requires a restart. The config-file equivalent is `"modelsLocked": true` in global `<config>/config.json` or one repository's `.ai/cezar/config.json`; config-file locks do not disable provider checks. |
1204
1204
  | `HSQ_APPROVAL_GATE=1`, `CEZ_APPROVAL_GATE=1` | Opt into Claude's interactive approval UI; by default, unapproved tools are denied without interrupting the run. Ignored when `HSQ_CLAUDE_PERMISSION_MODE`, `CEZ_CLAUDE_PERMISSION_MODE` is a recognized value (`dontAsk`, `acceptEdits`, or `bypass`). |
1205
1205
  | `HSQ_CLAUDE_PERMISSION_MODE`, `CEZ_CLAUDE_PERMISSION_MODE` | Claude agent-run permission flag: `dontAsk` (default), `acceptEdits`, or `bypass`. `bypass` passes `--dangerously-skip-permissions` and omits `--permission-mode`. Unset or unknown keeps today's `dontAsk` / `HSQ_APPROVAL_GATE`, `CEZ_APPROVAL_GATE` path. Provider verification commands are never given this flag. |
1206
1206
  | `HSQ_CLAUDE_SETTING_SOURCES`, `CEZ_CLAUDE_SETTING_SOURCES` | When set, Claude agent runs also pass `--setting-sources <value>` (e.g. `user,project,local`). Unset or empty omits the flag. Provider verification is never given this flag. |
1207
1207
  | `HSQ_ARCHIVE_ON_MERGE=1`, `CEZ_ARCHIVE_ON_MERGE=1` | Archive settled task families after all associated pull requests merge. Off by default; only `1` enables this environment default. Saved project settings override global Tasks settings, which override the environment. Runs in the background while the cockpit is open, including unopened projects, without starting agents. Unarchive preserves restored tasks until a later merge. |
1208
- | `HSQ_AUTOMATIONS=0`, `CEZ_AUTOMATIONS=0` | Disable **automations** (GitHub polls and schedules). On by default; only the exact value `0` disables them. Unset, empty, `1` and other values keep them on. The Automations view and agent schedule tools are available by default. New automations start paused; each enabled automation launches an ordinary task per match or occurrence while Cezarion is open. Schedules need no GitHub remote. With `0`, nothing polls or fires, automation endpoints answer `409`, and the nav item and schedule tools are hidden. Read at boot: restart after changing it. Existing enabled definitions resume after an upgrade unless you set `HSQ_AUTOMATIONS=0`, `CEZ_AUTOMATIONS=0` before restart. Definitions, receipts and high-watermarks are retained; unset the flag and restart to resume without migration. |
1208
+ | `HSQ_AUTOMATIONS=0`, `CEZ_AUTOMATIONS=0` | Disable **automations** (GitHub polls and schedules). On by default; only the exact value `0` disables them. Unset, empty, `1` and other values keep them on. The Automations view and agent schedule tools are available by default. New automations start paused; each enabled automation launches an ordinary task per match or occurrence while Squawk is open. Schedules need no GitHub remote. With `0`, nothing polls or fires, automation endpoints answer `409`, and the nav item and schedule tools are hidden. Read at boot: restart after changing it. Existing enabled definitions resume after an upgrade unless you set `HSQ_AUTOMATIONS=0`, `CEZ_AUTOMATIONS=0` before restart. Definitions, receipts and high-watermarks are retained; unset the flag and restart to resume without migration. |
1209
1209
  | `HSQ_VOICE=1`, `CEZ_VOICE=1` | Turn on **voice mode** (experimental): the ⌘K palette understands a sentence such as “open the next finished task” or “answer yes”, and the server asks Jev (TypeSafe) to turn it into one action that the cockpit shows and runs. Needs `TYPESAFE_API_KEY` (read by the server only; `HSQ_DRY_RUN=1`, `CEZ_DRY_RUN=1` uses a fake engine instead). Off by default, and only the exact value `1` enables it — without it the voice endpoints answer `409` and the palette is unchanged. Read at boot, so restart after changing it. |
1210
- | `HSQ_PREVIEW=1`, `CEZ_PREVIEW=1` | Turn on **live preview** (experimental): agents register a dev server with the `cezar_preview_serve` tool, and the cockpit opens it in a headless Chromium on the host, docked next to the task. Cezarion first runs a registered command after you press Run and open. Agents can then use `cezar_preview_stop({ port, restart?: boolean })` to stop or restart their own Cezarion-started server with that unchanged approval; changed command, cwd or path needs Run and open again. Adopted servers cannot be stopped by this tool. Each agent session also gets `HSQ_PREVIEW_CDP_URL`, `CEZ_PREVIEW_CDP_URL`, a cockpit address through which it drives the same browser (`agent-browser --cdp "$CEZ_PREVIEW_CDP_URL" --pin-tab …`) while you watch; Chromium itself opens no debug port. Off by default, and only the exact value `1` enables it — without it the tool is not listed, its route and the preview WebSocket refuse, and `capabilities.preview` is `false`. Read at boot, so restart after changing it. |
1210
+ | `HSQ_PREVIEW=1`, `CEZ_PREVIEW=1` | Turn on **live preview** (experimental): agents register a dev server with the `cezar_preview_serve` tool, and the cockpit opens it in a headless Chromium on the host, docked next to the task. Squawk first runs a registered command after you press Run and open. Agents can then use `cezar_preview_stop({ port, restart?: boolean })` to stop or restart their own Squawk-started server with that unchanged approval; changed command, cwd or path needs Run and open again. Adopted servers cannot be stopped by this tool. Each agent session also gets `HSQ_PREVIEW_CDP_URL`, `CEZ_PREVIEW_CDP_URL`, a cockpit address through which it drives the same browser (`agent-browser --cdp "$CEZ_PREVIEW_CDP_URL" --pin-tab …`) while you watch; Chromium itself opens no debug port. Off by default, and only the exact value `1` enables it — without it the tool is not listed, its route and the preview WebSocket refuse, and `capabilities.preview` is `false`. Read at boot, so restart after changing it. |
1211
1211
  | `HSQ_PREVIEW_NO_SANDBOX=1`, `CEZ_PREVIEW_NO_SANDBOX=1` | Launch the preview's Chromium with `--no-sandbox`. Off by default and never added automatically, not even for root or in a container; use it only where Chromium's sandbox cannot start, and only for pages you trust. Only the exact value `1` applies. Read at boot. |
1212
- | `HSQ_AUTOSAVE=1`, `CEZ_AUTOSAVE=1` | Re-enable the periodic (90 s) autosave commit in task worktrees. Off by default (open-mercato/cezar#471) — turn-end and pre-PR flushes always run, so branches still end complete. Every autosave names its trigger in the commit subject (`cezar autosave (periodic)` vs `(turn end)` / `(run finalize)` / `(pre-PR)`), so the flushes you keep are distinguishable from the timer you disabled. The turn-end / run-finalize flushes and the timer commit only while HEAD is the task's own `cez/<id8>` branch; on a branch the agent checked out they leave the work uncommitted, and the closing flush says so in the handoff's cezar records block, not its Progress log (hearsay-tools/cezarion#1004, hearsay-tools/cezarion#1809). A turn-end / run-finalize commit is reported there too, with its `git reset --soft` fold-back command, and the timer's commits share one line per run of consecutive periodic commits (count, first and latest sha), with no cockpit note. The pre-PR flush is unchanged. |
1212
+ | `HSQ_AUTOSAVE=1`, `CEZ_AUTOSAVE=1` | Re-enable the periodic (90 s) autosave commit in task worktrees. Off by default (open-mercato/cezar#471) — turn-end and pre-PR flushes always run, so branches still end complete. Every autosave names its trigger in the commit subject (`cezar autosave (periodic)` vs `(turn end)` / `(run finalize)` / `(pre-PR)`), so the flushes you keep are distinguishable from the timer you disabled. The turn-end / run-finalize flushes and the timer commit only while HEAD is the task's own `cez/<id8>` branch; on a branch the agent checked out they leave the work uncommitted, and the closing flush says so in the handoff's Cezar records block, not its Progress log (hearsay-tools/cezarion#1004, hearsay-tools/cezarion#1809). A turn-end / run-finalize commit is reported there too, with its `git reset --soft` fold-back command, and the timer's commits share one line per run of consecutive periodic commits (count, first and latest sha), with no cockpit note. The pre-PR flush is unchanged. |
1213
1213
  | `HSQ_CLAUDE_BIN=/path/to/claude`, `CEZ_CLAUDE_BIN=/path/to/claude` | Override the Claude executable for model discovery and execution. A set `HSQ_CLAUDE_BIN` wins over `CEZ_CLAUDE_BIN`; an explicit binary argument wins over both. |
1214
1214
  | `HSQ_CODEX_BIN=/path/to/codex`, `CEZ_CODEX_BIN=/path/to/codex` | Override which `codex` binary is used. |
1215
1215
  | `HSQ_OPENCODE_BIN=/path/to/opencode`, `CEZ_OPENCODE_BIN=/path/to/opencode` | Override which `opencode` binary is used. |
1216
1216
  | `HSQ_PI_BIN=/path/to/pi`, `CEZ_PI_BIN=/path/to/pi` | Override which `pi` binary is used. |
1217
1217
  | `HSQ_OMP_BIN=/path/to/omp`, `CEZ_OMP_BIN=/path/to/omp` | Override which `omp` (Oh My Pi) binary is used. |
1218
1218
  | `HSQ_CURSOR_BIN=/path/to/agent`, `CEZ_CURSOR_BIN=/path/to/agent` | Override the Cursor CLI (`agent`) executable. |
1219
- | `CLAUDE_CONFIG_DIR`, `CODEX_HOME`, `PI_CODING_AGENT_DIR`, `OMP_PROFILE` | The agents' **own** variables, honoured where the vendor documents one. Setting one moves that agent's **default account** — the config folder (for omp, the profile) Cezarion discovers. A *second* login of the same CLI is deliberately not an environment setting, since one process-wide value cannot differ per project: add it under **Settings → Agent accounts** and pick it per project. |
1219
+ | `CLAUDE_CONFIG_DIR`, `CODEX_HOME`, `PI_CODING_AGENT_DIR`, `OMP_PROFILE` | The agents' **own** variables, honoured where the vendor documents one. Setting one moves that agent's **default account** — the config folder (for omp, the profile) Squawk discovers. A *second* login of the same CLI is deliberately not an environment setting, since one process-wide value cannot differ per project: add it under **Settings → Agent accounts** and pick it per project. |
1220
1220
  | `HSQ_BROWSE_ROOT=~/`, `CEZ_BROWSE_ROOT=~/` | Default root for **Add project → Open local folder…**. The picker cannot navigate above it; a saved workspace value overrides the environment default and must name an existing folder. |
1221
1221
  | `HSQ_PROJECTS_DIR=~/cezar/projects`, `CEZ_PROJECTS_DIR=~/cezar/projects` | Default destination for **Clone from GitHub** and **New project**. Saved workspace settings override it, and missing directories are created recursively. |
1222
1222
  | `HSQ_PROJECT_WARMUP=0`, `CEZ_PROJECT_WARMUP=0` | Prepare each registered project only when it is first opened. By default the cockpit prepares every other registered project in the background once it listens, one at a time, most recently opened first: the run store opens and interrupted runs resume, so the first click on a project does not wait. A project another live cockpit serves is skipped. |
1223
1223
  | `HSQ_AUTONOMOUS_DEFAULT=0`, `CEZ_AUTONOMOUS_DEFAULT=0` | Seed the New Task Autonomous default (`0` or `1`). Without a seed, skills default on and workflows off; a saved global Resources setting overrides it. |
1224
1224
  | `HSQ_WORKTREE_DEFAULT=1`, `CEZ_WORKTREE_DEFAULT=1` | Seed the New Task Worktree default (`0` or `1`). Without a seed, eligible runs default on; a saved global Resources setting overrides it. |
1225
- | `HSQ_DISABLE_REPO_LOCK=1`, `CEZ_DISABLE_REPO_LOCK=1` | **Dangerous escape hatch:** allow any run executing in the repository root — an explicit `worktree=false` run, non-Git degradation, or a continuation whose worktree cannot be restored — to proceed without Cezarion’s repository-root lease. Agents can overwrite each other’s files or Git state; isolated worktree runs are unaffected. Off by default; only the exact value `1` enables it. |
1225
+ | `HSQ_DISABLE_REPO_LOCK=1`, `CEZ_DISABLE_REPO_LOCK=1` | **Dangerous escape hatch:** allow any run executing in the repository root — an explicit `worktree=false` run, non-Git degradation, or a continuation whose worktree cannot be restored — to proceed without Squawk’s repository-root lease. Agents can overwrite each other’s files or Git state; isolated worktree runs are unaffected. Off by default; only the exact value `1` enables it. |
1226
1226
  | `HSQ_SINGLE_PROJECT=1`, `CEZ_SINGLE_PROJECT=1` | Opt into a launch-project-only cockpit: only the exact value `1` enables it. Project add, edit, checkout, folder browsing, and removal are refused and only the launch project is shown. Off by default; stored registry rows are retained, so unsetting it and restarting restores the full multi-project workspace without migration or data loss. |
1227
1227
  | `HSQ_HIDE_TOKEN_USAGE=1`, `CEZ_HIDE_TOKEN_USAGE=1` | Hide raw input/output token counts throughout the browser cockpit while leaving backend-reported cost visible. Only the exact value `1` enables it; telemetry and API payloads are unchanged, and a restart is required after changing it. |
1228
1228
  | `HSQ_HIDE_COST=1`, `CEZ_HIDE_COST=1` | Hide backend-reported monetary cost throughout the browser cockpit while leaving raw input/output token counts visible. Only the exact value `1` enables it; telemetry and API payloads are unchanged, and a restart is required after changing it. |
1229
1229
  | `HSQ_HIDE_TOKEN_METRICS=1`, `CEZ_HIDE_TOKEN_METRICS=1` | Legacy master switch that hides both token usage and cost. It takes precedence over the two independent flags; only the exact value `1` enables it, payloads are unchanged, and a restart is required. |
1230
1230
  | `GITHUB_TOKEN` | Fallback for GitHub reads/PRs when `gh` isn't authenticated. |
1231
- | `HSQ_HOME=/path/to/home` | Reserved for the split home layout behind the disabled release switch. Once enabled, selects `config/`, `state/`, `data/`, `cache/`, and `run/` below this directory and takes precedence over `CEZ_HOME`. Both home locators are always removed from child environments. |
1232
- | `HSQ_ENV_PASSTHROUGH=A,B`, `CEZ_ENV_PASSTHROUGH=A,B` | Forward these extra host env vars to spawned agents. `CEZ_HOME` and `HSQ_HOME` are always removed, including in full-env mode. By default agents get a least-privilege env (safe shell/toolchain vars + the backend's own auth + `GITHUB_TOKEN` + `CEZ_*`), not your full environment — use this to add a var an agent needs. A dev server live preview starts gets the same env without the backend's auth and `GITHUB_TOKEN`, plus these names. |
1231
+ | `HSQ_HOME=/path/to/home` (`CEZ_HOME` fallback) | Selects `config/`, `state/`, `data/`, `cache/`, and `run/` below this directory. With neither set, uses the [platform roots](docs/migration.md#home-directories). A non-default `CEZ_HOME` keeps its permanent one-root fallback; an explicit legacy-default `CEZ_HOME` uses the platform roots. Both home locators are removed from child environments. |
1232
+ | `HSQ_ENV_PASSTHROUGH=A,B`, `CEZ_ENV_PASSTHROUGH=A,B` | Forward these extra host env vars to spawned agents. `CEZ_HOME` and `HSQ_HOME` are always removed, including in full-env mode. By default agents get a least-privilege env (safe shell/toolchain vars + the backend's own auth + `GITHUB_TOKEN` + `HSQ_*` and matching `CEZ_*` aliases), not your full environment — use this to add a var an agent needs. A dev server live preview starts gets the same env without the backend's auth and `GITHUB_TOKEN`, plus these names. |
1233
1233
  | `HSQ_AGENT_ENV_FULL=1`, `CEZ_AGENT_ENV_FULL=1` | Escape hatch: give spawned agents, and dev servers live preview starts, the full host environment except `CEZ_HOME` and `HSQ_HOME` (pre-hardening behavior). Off by default; only set it if you understand that this hands every host secret to the agent process. |
1234
1234
  | `HSQ_AGENT_TMPDIR=0`, `CEZ_AGENT_TMPDIR=0` | Stop giving each task its own temp directory and hand agents the host `TMPDIR` again (pre-open-mercato/cezar#785 behavior). On by default: every run gets `TMPDIR`/`TEMP`/`TMP` pointing at `.ai/cezar/t/<task-id8>` (`.ai/cezar/tmp/<task-id>` before hearsay-tools/cezarion#1022), created and write-probed before the agent spawns, kept across session close, Continue, and restart while the task is live, and reaped at terminal completion or history deletion (hearsay-tools/cezarion#515) — and kept short enough for unix-socket paths: a checkout so deep that `.ai/cezar/t/<task-id8>` would leave no room under the kernel's socket-path limit for Chromium's singleton socket resolves it to a `cez-agent-…` directory under the system temp dir instead (hearsay-tools/cezarion#387), with its location recorded so host temp-environment changes cannot move live scratch. So concurrent tasks stop sharing one directory and a task refuses to start rather than run against a temp directory that silently swallows its shell output (see Troubleshooting below). Only an exact `0` disables it, and it disables the whole thing — the pre-spawn check included, so this stays an escape hatch you can actually take. |
1235
1235
  | `HSQ_REDACT_SECRETS=0`, `CEZ_REDACT_SECRETS=0` | Disable scrubbing of credential values/token shapes from the on-disk state (the NDJSON transcript and the free-text fields of the run records in `runs.db`). On by default; leave it on. Controller-generated delegation tokens are always scrubbed. Best-effort defense-in-depth, not a guarantee: it catches known token shapes and the values of your own secret-named env vars, so a credential in neither category can still get through. |
@@ -1259,11 +1259,11 @@ df -i "${TMPDIR:-/tmp}" # a tmpfs can exhaust inodes long before
1259
1259
  Under quota the file is *created* and the write then fails, so the backend reads
1260
1260
  back a zero-byte capture file and hands the agent an empty result.
1261
1261
 
1262
- **Fix.** Since open-mercato/cezar#785 Cezarion gives each task its own `TMPDIR` under
1262
+ **Fix.** Since open-mercato/cezar#785 Squawk gives each task its own `TMPDIR` under
1263
1263
  `.ai/cezar/t/<task-id8>` and write-probes it before spawning, so a broken temp
1264
1264
  directory fails the task with `agent temp directory is not writable: …` on the
1265
1265
  task thread instead of corrupting its work. If you see that error, free space on
1266
- the disk holding the repo. `CEZ_AGENT_TMPDIR=0` turns the whole mechanism off —
1266
+ the disk holding the repo. `HSQ_AGENT_TMPDIR=0` (`CEZ_AGENT_TMPDIR` fallback) turns the whole mechanism off —
1267
1267
  per-task directory and pre-spawn check alike — and hands agents the host
1268
1268
  `TMPDIR` again, which is the way out if the check itself is wrong on your
1269
1269
  platform.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hearsay-tools/squawk",
3
- "version": "0.17.0-dev.5682",
3
+ "version": "0.17.0-dev.5685",
4
4
  "description": "Local cockpit for running and tracking AI agent tasks in your repo. Uses your logged-in `claude` CLI and `gh` — zero config, zero database.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -60,8 +60,8 @@
60
60
  "devDependencies": {
61
61
  "@babel/parser": "^8.0.8",
62
62
  "@babel/types": "^8.0.8",
63
- "@open-mercato/cezar-api-client": "0.17.0-dev.5682",
64
- "@open-mercato/cezar-contract": "0.17.0-dev.5682",
63
+ "@open-mercato/cezar-api-client": "0.17.0-dev.5685",
64
+ "@open-mercato/cezar-contract": "0.17.0-dev.5685",
65
65
  "@types/node": "^24.19.1",
66
66
  "@types/ws": "^8.18.1",
67
67
  "esbuild": "^0.28.1",
@@ -78,5 +78,5 @@
78
78
  "publishConfig": {
79
79
  "access": "public"
80
80
  },
81
- "gitHead": "9cea6f73e8e1ebc9b4132e9f69410173250a853a"
81
+ "gitHead": "9a155ef3a4cc28460fb08436f834308d79b58630"
82
82
  }