VOICE: Thread voice - talk to the exact running agent conversation from the business workspace and the phone

Updated just now.

2026-09-22 — Thread voice will let Nick open one running agent conversation on the business dashboard or on his phone and talk to that agent by voice. Nick was asked whether a Claude session could be authorised to write the few lines that start a program, because a safety fence refuses to let an outside vendor model put that power into a file it created from nothing, and he answered yes. So the file the relevant record now exists, and it starts a disposable Claude session for the test harnesses to run against. Its probe was run and failed for one measured reason, confirmed by reading the code rather than trusting the report: the script answers every first-run question with the Escape key, but the folder-trust question needs the Enter key, so the session cancels itself. A fix for that one function is dispatched. Separately, a checker on a different model FAILED the Codex conversation-list reader and was right twice over. Every conversation name was falling back to a raw identifier, because the index file names its field thread_name while the code checked four other spellings, so of the conversations the index can name, 16 of 16 were wrong. And the proof that had passed it was too weak to catch that: it asserted only that a name was present, and it passed a module the checker wrote which opened nothing and invented 247 rows. Both are now fixed: the one-line name fix is applied and the proof re-derives names from the live index and was proved to reject the real broken version and the invented one.

2026-09-22 — Thread voice will let Nick open one running agent conversation on the business dashboard or on his phone and talk to that agent by voice. This pass reopened the part that lists his conversations in the Codex coding assistant alongside his Claude ones in the same running-work list. That part was shut because reading the coding assistant's conversation database through the sqlite3 command line requires starting a child process, and the vendor fence refuses an outside vendor model a shell spawn inside a file that vendor created from nothing. Measuring Node version 24.19.0 showed its built-in sqlite reader opens that same conversation database read-only with no child process at all, and returns current turn timestamps rather than a frozen snapshot. So the module file the relevant record was re-dispatched to an outside vendor model on that basis and is being written now, and that measurement is recorded in THREAD-VOICE/PLAN.md. One file remains shut by that same fence and needs Nick to decide: the file the relevant record, which starts a disposable Claude session for the test harnesses to run against, must itself spawn a process, so a person has to write those few lines before an outside model can write the rest. Nick replies 1 to authorise the session named claude-2-0-fa to write those few lines on his word, which is the recommendation, or replies 2 to leave that file unwritten until he has looked at it himself.

2026-09-22 — Thread voice will let Nick open one running agent conversation on the business dashboard or on his phone and talk to that agent by voice. Step 2 part a is built and waiting as pull request 698 on the deck-business repository: an opened agent conversation now carries the handle saying which running session it is, and only Nick and Chantelle receive it. An independent checking model re-ran the check script named the relevant record, passed the code change, and then broke that check script itself by building a version of the file that hands the handle to every signed-in person, so the check script was rewritten until it rejected two separate leak shapes. Step 1 must build eleven test harnesses plus one helper module that starts a disposable Claude session for those harnesses to test against. That helper module cannot be built by any available worker. The outside vendor models are refused because the vendor fence blocks a shell spawn inside a file an outside model created from nothing. The Anthropic models are refused because the work-type gate blocks all builder work on them. The vendor fence names its own remedy: a person writes the few lines that spawn the process, and an outside model may then edit that file freely. Nick is being asked to decide that in tonight's update. Harness files needing no shell spawn are being built now, starting with the relevant record. Two earlier diagnoses in this build were wrong and are corrected in THREAD-VOICE/PLAN.md: the outside vendor models were never unavailable, and the 120000 millisecond vendor timeout was cutting off models that needed longer to answer.

2026-09-22 — Nick can open a running piece of work on the business dashboard, and from today that screen knows which exact conversation it belongs to. That is the first thing that has to be true before he can type or talk into it, and it is now true for him and Chantelle only, while the list of running work deliberately carries nothing that could address a conversation, so a teammate sees no way in. It had to be written by a small one-off script instead of by any of the usual helper models, because the file holds a line that reads a login password out of the settings and every safety check refuses to let a model read that file at all. Six low-cost helpers are now writing the equipment that will prove everything after this: a way to start a disposable conversation to test against, a check that an answer is matched to the question that caused it, and a reader that lists his Codex conversations beside his Claude ones. Nothing counts as finished until a second, different model re-runs the test itself, and that already earned its place today: the second model broke the first test and it had to be made stricter.

8% overall0 of 14 steps finished
  1. Proof harnesses and the throwaway-session helper, red first5%

    ⚠️ only 1 of 2 required verifications recorded so far

    How we know

    Definition of done: the eleven named harnesses and the helper exist; each self-test goes red on its seeded failure; the correlation harness is red against today's code

    Proof: the eleven-name existence check in the STEP 1 block, then each harness with --selftest, then the correlation harness red on untouched code

    Verified: NOT started. No harness file and no helper module exist yet. The disposable-session helper module, which every isolated harness imports, cannot be built by any available worker: it must spawn the expect program and the claude command line, the vendor fence refuses a shell spawn inside a file an outside model created from nothing, and the work-type gate refuses all builder work on Anthropic models. The vendor fence names its own remedy: a person writes the few lines that spawn the process, then an outside model edits that file. Its measured preconditions are recorded in THREAD-VOICE/PLAN.md beside this step.

  2. business workspace thread rows carry the pointer; business workspace composer replies UI35%

    ⚠️ only 1 of 2 required verifications recorded so far

    How we know

    Definition of done: a business workspace reply, signed in as Nick, lands in the target session's transcript with its message ID within 5 s and the composer shows the accepted state; a team member gets no pointer

    Proof: the relevant item

    Verified: One part of three, and the step is NOT closed. The opened conversation now carries the handle that says which running agent it is, for Nick and Chantelle only; the list of running work still carries none; the file still runs. Checked 2026-09-22 by a different model, which passed the change itself and FAILED the test around it - it built a version handing that handle to every signed-in person and the test still said PASS. The test is now stricter and rejects that version. The typing box and the word telling him what happened are not built yet.

  3. Correlate replies by message ID0%
    How we know

    Definition of done: two overlapping messages each get their own reply; the prefix/time heuristic is gone

    Proof: the relevant item

  4. Delivery state word on the thread row UI0%
    How we know

    Definition of done: the row moves taken → answering → answered from the transcript and both panels show the same word

    Proof: the relevant item

  5. The desk on top of a thread, family app: mouth rule, spoken-turn note, ten turns UI0%
    How we know

    Definition of done: an 800-word reply spoken as its first 50 words verbatim with full text on screen; ten spoken turns each delegated, delivered with msg_id, chained and spoken verbatim; barge-in; clean switch

    Proof: the relevant item and the relevant item

  6. The desk on top of a thread, business workspace: live-session proxy, hostname gate, Talk control UI0%
    How we know

    Definition of done: ten spoken turns from the business workspace pass the STEP 5 bounds

    Proof: the relevant item

  7. Idle wake measured as a rate on throwaway sessions0%
    How we know

    Definition of done: five idle throwaway sessions probed; wake rate and times recorded; idle rows marked trusted or changed

    Proof: the relevant item

  8. Agent manner on spoken turns measured0%
    How we know

    Definition of done: SPOKEN line present in 18 of 20 with median ≤50 words; detail present 18 of 20; control median recorded

    Proof: the relevant item

  9. Codex conversations as Status rows UI70%
    How we know

    Definition of done: one live row per Codex conversation touched in 7 days, titles resolved, same-title rows separate

    Proof: the relevant item

    Verified: NOT YET. The module file the relevant record does not exist and is being written now by an outside vendor model. What changed this pass is that it became buildable at all: reading the coding assistant's conversation database through the sqlite3 command line needs a child process, which the vendor fence refuses inside a file an outside model created from nothing. · The module file the relevant record is built and now passes the strengthened proof: 248 rows, the frozen row shape, and 16 of 16 conversations that the index can name now correctly named. A second checker on a different model is attacking both the fix and the strengthened proof now. The remaining part of this step, one call merging those rows into the running-work feed built by the relevant record, is not written yet, so the step is not closed.

  10. Codex phase two hinge: shared daemon, desktop attach, queue visibility, native thread voice — recorded0%
    How we know

    Definition of done: a dated record saying works-via-<topology> or unsupported-on-this-version with what was tried

    Proof: the relevant item

  11. The desk on top of a Codex thread UI0%
    How we know

    Definition of done: ten spoken turns into a daemon-owned Codex thread from the business workspace pass the STEP 5 bounds, or NOT MEASURABLE with the reason recorded

    Proof: the relevant item

  12. Reply text in the business workspace thread view within 5 s UI0%
    How we know

    Definition of done: reply text visible in the open business workspace thread within 5 s, no duplicate after the rebuild

    Proof: the relevant item

  13. Browser drive of the whole UX map, business workspace and family UI0%
    How we know

    Definition of done: every applicable row U1–U16 passes in a real logged-in browser with a screenshot each

    Proof: the relevant item

  14. Postmortem0%
    How we know

    Definition of done: a POSTMORTEM section exists in this file

    Proof: the relevant item → 3