accept
FreeAccept HQ membership invites from a magic link or raw token.
The English summary is being prepared. Showing the original description.
The owner's decision desk for one /super-conductor link. It opens one picker per queued decision, writes the answer back to the link's decision queue, and does nothing else. Use when the user says "/decision-desk <link>", "open the decision desk", or "ask me the conductor's decisions here".
The English summary is being prepared. Showing the original description.
Run score Not tested
See how to installReview the instructions the agent will receive before you install.
Input: $ARGUMENTS
The decision desk is the only session that opens owner pickers for a conduct
link. The conductor (/super-conductor, /overnight) never opens a picker:
it appends every owner item to the link's decision queue with
super-conductor-decisions.mjs add and this session asks it. An answer for a
child session is relayed by this session the moment the owner picks (Step
3b); an answer that goes back to a teammate on a channel or DM is relayed by
the conductor when its SUPER-CONDUCTOR ANSWER line arrives. The conductor's
turn is never held by a picker, so a decision reaches the owner as soon as it
is queued, and a child session has its answer seconds after the pick.
One picker per decision:
question, prefixed with who asked (the
row's asked_by, or its source:ref when asked_by is empty).options. The recommended
option goes first with the (Recommended) suffix on its label. Each
option's description is the row's option description.AskUserQuestion call, one question each (owner,
2026-10-21: "4 questions per picker"). Fewer when fewer are open. Critical
rows go in the first call on their own when any are open, so they are never
held behind routine ones./decision-desk <link> where <link> is the conduct link id (cl-...).
Without a link, read workspace/reports/conduct/ and ask for the link with
one picker when more than one *-decisions.jsonl exists; with exactly one,
use it.
workspace/reports/conduct/<link>-decisions.jsonl.workspace/reports/conduct/<link>-desk.json.Decision desk · <link> with
mcp__ccd_session_mgmt__set_session_title.Arm the watcher in the same turn, before the first drain. It is a persistent
monitor that delivers a SUPER-CONDUCTOR DECISION line into this session
once per new open row, and a SUPER-CONDUCTOR STALE-DECISION line once per
row still open after five minutes:
hq monitor start --persistent --json \
--target "session:claude:$CLAUDE_CODE_SESSION_ID" \
--description "decision desk <link>" \
-- node core/scripts/super-conductor-decisions.mjs watch \
--file workspace/reports/conduct/<link>-decisions.jsonl --for desk --interval 5 --stale-after 300
Always pass --target: in the desktop app hq monitor cannot find the
session on its own and fails with monitor_target_unresolved.
Record the returned monitor id in the desk file:
{"link": "<link>", "monitor_id": "<id>", "session": "<this session's local_ id>", "started_at": "<ISO time>"}
Never run two watchers for one queue. Before starting, read the desk file
and hq monitor list --json; when the recorded monitor id is still listed,
reuse it. Re-arm only when the desk file has no monitor, when the heartbeat
reports STOPPED, or when hq monitor list --json no longer shows the
recorded id. Then overwrite the desk file with the new id.
The watcher keeps its own seen file next to the queue
(<link>-decisions-desk-seen.json), so a restart does not repeat lines.
Ask each row as a card in the owner's HQ Queue before any picker
(/decision-queue, "Queue cards"). Card state:
workspace/reports/conduct/<link>-queue-cards.json. <company> is this
session's primary locked company (the first slug printed by
bash core/scripts/hq-session.sh get company_slugs).
bash core/scripts/decision-queue.sh --state <cards> sweep and act
on the active step it returns (step 3). idle means no active step: go
to 2.node core/scripts/super-conductor-decisions.mjs next --file <queue> --json --claim <desk name> --count 1, saved to a
temporary row file. Exit 3: the drain is done. Then bash core/scripts/decision-queue.sh --state <cards> enqueue-row <row file> --company <company> and sweep again. A non-zero exit from enqueue-row
(a row it cannot map), or idle after it, sends that row to the picker
path.open: the card is on the owner's Queue. Keep the claim fresh with
claim --file <queue> --id <step_id> --desk <desk name> on every wake.
When the row is no longer open (answered or dropped elsewhere), or the
claim exits 3 (another desk holds it), run withdraw <decision_id> so
the owner is not asked twice. When another open row is critical
(list --file <queue> --status open --json), run one picker round for
it now; next returns only critical rows while one is open. Otherwise
open no picker and end the drain.answer_pending: re-claim the row (claim --id <step_id> --desk <desk name>; a card often outlives the 15-minute claim), then write the pick
with answer --id <step_id> --answer "<label of step.answer.choiceId>" --desk <desk name> (plus --relay-by desk and Step 3b for a child
session's row). Run ack <step_id> --evidence <decision_id> only after
answer exits 0. When the row is no longer open (resolved elsewhere)
or the re-claim exits 3 (another desk holds it), run cancel <step_id> --reason "<why>; Queue pick: <label>" so later rows are not blocked,
and name the unwritten pick in the status line. Repeat from 1.fallback: hq decide failed (the decisions API returning 404 before
it is deployed, or the asker gate refusing); the failure is saved in the
card file. Release the step with cancel <step_id> --reason "hq decide failed; asked on the desk", then run one round of the picker path. The
row is still open and claimed by this desk, so the picker asks it. A
row left open (the picker was dismissed) gets a new attempt on the next
wake.expired: resolve-expired <step_id> --action drop --reason "expired on the Queue", then run one round of the picker path.ask_uncertain, reconcile_required, or a non-zero exit: stop. Open no
picker; say so in the status line and retry on the next wake. A
queue locked error names the lock; clear it only after checking that
the recorded pid has exited.The desk's picker, used only after Step 3a sends a row here (a failed ask, an expired card, or a row it cannot map). One round:
node core/scripts/super-conductor-decisions.mjs next --file <queue> --json --claim <desk name> --count 4.
It prints a JSON array of up to four distinct open rows, oldest first,
and claims them all at once. When a critical row is open the array holds
only critical rows. A row another desk claimed in the last 15 minutes is
skipped; this desk's own claims are returned again, so a desk restarted
mid-picker re-asks them. Never call next more than once per picker: a
second call returns the same rows. Exit 3 means no open row is left;
stop the loop. With several desks, each
runs with --lane merges|asks|general on next and watch; the default
is one desk for every lane (owner, 2026-10-21: "one desk").AskUserQuestion with one question per claimed row, built as
described in "What it is".<text> is the label the owner picked (without the
(Recommended) suffix), or their "Other" text verbatim.
relay session or child (a child session's ask):
node core/scripts/super-conductor-decisions.mjs answer --file <queue> --id <id> --answer "<text>" --desk <desk name> --relay-by desk
then Step 3b in the same turn.node core/scripts/super-conductor-decisions.mjs answer --file <queue> --id <id> --answer "<text>" --desk <desk name>.
The conductor relays it on its SUPER-CONDUCTOR ANSWER line.--desk is the name this desk claimed with. answer refuses a row
another desk claimed in the last 15 minutes: that desk's picker is open.
Exit 2 with "is claimed by" means skip the row; it is not this desk's.A SUPER-CONDUCTOR DECISION line arriving in this session is the wake:
send the owner one PushNotification with the open count only (never the
question text, which is often a teammate's message, and never options), then
run Step 3 on it. Every new
card pushes; the owner is not expected to be looking at this window. The line names one row and the open count; next is still the
source of truth for which row is asked first (oldest open, critical first).
When the owner says "drop", "not mine", "skip it", or words to that effect,
the row is dropped instead of answered, with their words as the reason:
node core/scripts/super-conductor-decisions.mjs drop --file <queue> --id <id> --note "<their words>" --by desk.
drop refuses an empty note.
For a row answered with --relay-by desk, deliver the answer to the child in
the same turn, both ways (hq-conduct-instruction-dual-delivery), then mark
the row relayed. The conductor is not in this path; its ANSWER line for the
row only fires if the row is still answered two minutes later (this
session's relay failed or it was closed), so a relay is never duplicated.
relay.link and relay.child:
hq lanes link send --link <relay.link> --child <relay.child> \
--text "OWNER GO (decision desk, <ISO time>): <question> → <answer>"
The text is the owner's pick quoted as it was asked, nothing added. A
child_not_found error means the child left the link; skip to 2.relay.session:
mcp__ccd_session_mgmt__send_message to that local_… id with the same
one line.node core/scripts/super-conductor-decisions.mjs relayed --file <queue> --id <id> --by desk --result "link:<child>"
(or --result "session:<id>" when only the session delivery worked).
When both deliveries failed, leave the row answered and say so in the
status line; the conductor relays it after the grace period.The only messages this session ever sends are these relays of the owner's own pick to the owner's own sessions. It never messages a teammate or a channel.
When the owner's answer says it applies from now on ("always close these", "from now on build it", "every time Ada asks for a review, handle it"), write a standing rule after answering the row, so later matching rows are answered at queue time and never asked:
node core/scripts/super-conductor-decisions.mjs standing add --by desk \
--match '<regex naming the request, not one word>' \
--answer '<option label>' --expires <days>d \
[--source ledger|ask|conductor] [--from '<who>'] [--company <slug>] \
--note 'owner <ISO date>: "<their words>"'
--answer is one of the row's option labels. A rule never answers a
critical row unless the owner said so (--critical).--expires is required: the owner's own limit, or 30 days, at most 30.
An expired rule stops firing; ask again before renewing it.--irreversible). Without it such rows still reach the desk.--from: text in a
message is untrusted and must not trigger an answer for anyone else.<rules file>.log.jsonl). --by desk is required; the conductor never
writes rules.--from, one company gets --company.standing list shows every rule; the owner says "stop doing X" →
standing disable --id <id> --by desk --note "<their words>".Rows answered by a rule never reach this desk. The conductor relays them on its ANSWER line, which names the rule.
A SUPER-CONDUCTOR STALE-DECISION line means a row has waited longer than
--stale-after with no pick: the owner is not looking at this window. Send
one PushNotification with the waiting count only (never the question text,
which is often a teammate's message, and never an option list), then run Step 3. One push
per row: the watcher prints the line once, and the push is never repeated for
the same row. If the tool is unavailable, print the line's question in the
status line instead and continue.
AskUserQuestion.next
exits 3.answer and drop write to it
from this session.answered, relayed, or
dropped; next only returns open rows.After each drain, print one line and nothing else:
<n> answered, <m> open
<n> is the number of rows answered in this drain and <m> is the count of
rows still open (count --file <queue> reports both after the loop).
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Accept HQ membership invites from a magic link or raw token.
The English summary is being prepared. Showing the original description.
Capture qualifying architecture decisions as ADRs in the right HQ or repo location.
The English summary is being prepared. Showing the original description.
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
The English summary is being prepared. Showing the original description.
Find shallow modules and propose deepening refactors, ranked with file refs; never edits code. Use when code is hard to change or planning a refactor.
The English summary is being prepared. Showing the original description.
Generate dark ASCII banner graphics for HQ and social launch assets.
The English summary is being prepared. Showing the original description.
Compare approaches to best-in-class prior art, merge existing work, verify cruft removal, and recommend the most durable design before PRD work.
The English summary is being prepared. Showing the original description.