os-me predict dispatches a fresh agent with a Store-held brief; blind sample one in five #1235

Closed
opened 2026-10-22 16:39:23 +00:00 by jared · 2 comments
Owner

Problem

Every live os-me prediction has been produced by a fork subagent. A fork inherits 64k to 156k tokens of parent context and re-bills it on every turn; one batch of rulings measured 3M to 4M tokens (session ae05c946). The fallback route, a fresh agent with a brief, has never run live. The brief today is the parent's paraphrase of the question, and the parent is the party whose proposal Jared judges, so the paraphrase can carry the parent's recommendation. Jared always sees the Prediction before he rules, so anchoring is unmeasured and a hit can mean "accepted what it was shown".

Reproduce

n/a: process change; the fork dispatch is step 1 of plugins/os-me/skills/predict/SKILL.md.

Approach

Required work:

  1. Add ~/dev/os-me-store/brief.md, the brief template. It carries the session id, the transcript path, the exchange boundary, Jared's exact arguments including autopilot, and his words quoted verbatim, never paraphrased, plus the line "read the raw exchange first; ignore any recommendation in this brief".
  2. skills/predict/SKILL.md step 1 dispatches ONE general-purpose agent with the current session's model and a brief filled from brief.md. Delete the fork route and the fork rows in ~/dev/os-me-store/ENTRY.md section 1. The model change to sonnet is a later ticket.
  3. Blind sample: os-me-eval blind <session_id> <n> exits 0 on a deterministic one in five of a session's predictions. When it fires, the skill withholds the Prediction, asks Jared for his own call first, records origin: blind, then shows the Prediction.

Acceptance criteria

  1. A live predict run dispatches no fork; the record's producer is agent.
  2. The brief shown to the agent contains Jared's words verbatim and no paraphrase of the question.
  3. Over 10 predictions in one session, exactly 2 are blind; a blind record carries origin: blind and Jared's own call.

Owner sketch

class OsMe::BlindSample
  def initialize(session_id, n)
  def blind?
end

class OsMe::Cli
  desc 'blind SESSION_ID N'
end

Non-goals

Moving learning out of the predict call stays #958. The model change to sonnet is a later ticket.

Origin

  • Trigger: session ae05c946 measured fork cost; six-critic review 2026-10-22 (simplifier, premortem, measurement, devils-advocate); Jared accepted the smaller first pass.
  • Chain: predictions cost 3M to 4M per batch ← fork re-bills parent context ← SKILL.md step 1 dispatches a fork.
  • Root candidate: none found for the fork dispatch and blind sample; #958 holds the learning-wait mechanism (skeptic search 2026-10-22).
  • Where: plugins/os-me/skills/predict/SKILL.md, plugins/os-me/lib/os_me/cli.rb, ~/dev/os-me-store/ENTRY.md, ~/dev/os-me-store/brief.md,
  • Session: 9feaee0d-e0ed-4f5a-85b4-db1166f8539a
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/9feaee0d-e0ed-4f5a-85b4-db1166f8539a.jsonl

VERDICT: CREATE

## Problem Every live os-me prediction has been produced by a `fork` subagent. A fork inherits 64k to 156k tokens of parent context and re-bills it on every turn; one batch of rulings measured 3M to 4M tokens (session ae05c946). The fallback route, a fresh agent with a brief, has never run live. The brief today is the parent's paraphrase of the question, and the parent is the party whose proposal Jared judges, so the paraphrase can carry the parent's recommendation. Jared always sees the Prediction before he rules, so anchoring is unmeasured and a hit can mean "accepted what it was shown". ## Reproduce n/a: process change; the fork dispatch is step 1 of `plugins/os-me/skills/predict/SKILL.md`. ## Approach Required work: 1. Add `~/dev/os-me-store/brief.md`, the brief template. It carries the session id, the transcript path, the exchange boundary, Jared's exact arguments including `autopilot`, and his words quoted verbatim, never paraphrased, plus the line "read the raw exchange first; ignore any recommendation in this brief". 2. `skills/predict/SKILL.md` step 1 dispatches ONE `general-purpose` agent with the current session's model and a brief filled from `brief.md`. Delete the fork route and the fork rows in `~/dev/os-me-store/ENTRY.md` section 1. The model change to sonnet is a later ticket. 3. Blind sample: `os-me-eval blind <session_id> <n>` exits 0 on a deterministic one in five of a session's predictions. When it fires, the skill withholds the Prediction, asks Jared for his own call first, records `origin: blind`, then shows the Prediction. ## Acceptance criteria 1. A live predict run dispatches no fork; the record's `producer` is `agent`. 2. The brief shown to the agent contains Jared's words verbatim and no paraphrase of the question. 3. Over 10 predictions in one session, exactly 2 are blind; a blind record carries `origin: blind` and Jared's own call. ## Owner sketch ```ruby class OsMe::BlindSample def initialize(session_id, n) def blind? end class OsMe::Cli desc 'blind SESSION_ID N' end ``` ## Non-goals Moving learning out of the predict call stays #958. The model change to sonnet is a later ticket. ## Origin - Trigger: session ae05c946 measured fork cost; six-critic review 2026-10-22 (simplifier, premortem, measurement, devils-advocate); Jared accepted the smaller first pass. - Chain: predictions cost 3M to 4M per batch ← fork re-bills parent context ← SKILL.md step 1 dispatches a fork. - Root candidate: none found for the fork dispatch and blind sample; #958 holds the learning-wait mechanism (skeptic search 2026-10-22). - Where: plugins/os-me/skills/predict/SKILL.md, plugins/os-me/lib/os_me/cli.rb, ~/dev/os-me-store/ENTRY.md, ~/dev/os-me-store/brief.md, - Session: 9feaee0d-e0ed-4f5a-85b4-db1166f8539a - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/9feaee0d-e0ed-4f5a-85b4-db1166f8539a.jsonl VERDICT: CREATE
Author
Owner

Work started on branch ticket-1235 via /os-sdlc:implement (session 9feaee0d).

Work started on branch ticket-1235 via /os-sdlc:implement (session 9feaee0d).
Author
Owner

Resolution

Done: Predict and respond dispatch ONE general-purpose agent on the session's model with a brief filled from the Store's brief.md; the fork route is deleted from SKILL.md, ENTRY.md, and CHARTER.md. The blind command draws a deterministic one-in-five marker per session; blind-call records Jared's own call; the Stop hook stays the sole record writer and stamps origin blind plus call. Producer enum is agent only.

Evidence: Implementation 114 ran change-auditor, seam-designer, test-writer, test-reviewer, programmer, behavior-verifier (pass), suite-check (pass); the contract-auditor dispatch errored on the worktree command filter and the run closed as failed, so it was hand-finished per the escalation procedure: suite 128 runs 0 failures, hook tests 28 runs 0 failures, rubocop clean, one opus design audit (1 correction, 5 notes, all applied). Commits 1adc3e66 and merge 230ff7cf on main; Store commit a96c63f pushed.

Follow-ups: Worktree command filter: occurrence posted on #1096 (lost test-reviewer and contract-auditor handoffs). #958 (learning out of the predict call) stays open with the ruling posted. Model change to sonnet for the predict agent waits for about 20 live records (plan step 6, not ticketed). Store files CHARTER.md, SUGGESTIONS.md, REQUESTS.md and the file audit are out of this first pass by Jared's ruling.

## Resolution **Done:** Predict and respond dispatch ONE general-purpose agent on the session's model with a brief filled from the Store's brief.md; the fork route is deleted from SKILL.md, ENTRY.md, and CHARTER.md. The blind command draws a deterministic one-in-five marker per session; blind-call records Jared's own call; the Stop hook stays the sole record writer and stamps origin blind plus call. Producer enum is agent only. **Evidence:** Implementation 114 ran change-auditor, seam-designer, test-writer, test-reviewer, programmer, behavior-verifier (pass), suite-check (pass); the contract-auditor dispatch errored on the worktree command filter and the run closed as failed, so it was hand-finished per the escalation procedure: suite 128 runs 0 failures, hook tests 28 runs 0 failures, rubocop clean, one opus design audit (1 correction, 5 notes, all applied). Commits 1adc3e66 and merge 230ff7cf on main; Store commit a96c63f pushed. **Follow-ups:** Worktree command filter: occurrence posted on #1096 (lost test-reviewer and contract-auditor handoffs). #958 (learning out of the predict call) stays open with the ruling posted. Model change to sonnet for the predict agent waits for about 20 live records (plan step 6, not ticketed). Store files CHARTER.md, SUGGESTIONS.md, REQUESTS.md and the file audit are out of this first pass by Jared's ruling.
jared closed this issue 2026-10-22 17:38:56 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#1235
No description provided.