<!-- Round 1, Claude Fable 5.1 (claude-fable-5-1), fresh subagent in Claude Code, 2026-09-17. Same prompt as Astra (council/prompt.md). It was told not to read any local files and did not see Astra's answer. Output below is unedited. -->

Browsing worked: I opened 13 URLs over 17 fetches on 2026-09-17, all listed in SOURCES. Two caveats:
- My fetch tool passes pages through a summarizing model. The Anthropic pages and the OpenAI model guide (`.md` variant) came back as apparently verbatim text. The OpenAI blog, the system card and the Codex docs came back as summaries with quoted fragments, so treat those quotes as near-verbatim.
- The system-card numbers are as the summarizer reported them; I did not see the raw page.

Most pages show no publish date; I say so in SOURCES rather than guess. No vendor publishes a shared guide for these two models. The ten rules are my synthesis of each vendor's own prompt snippets, and I flag the rules whose wording is mine.

## 1. RULES

**1. `act-on-reversible`**
- **Rule:** Do reversible, in-scope work without asking permission. Ask only for a destructive or irreversible action, a real scope change, or input only the user has.
- **Why:** Both vendors document their model stopping to ask about work already requested.
- **Good:** User says "can you fix the flaky date test?" The agent edits, runs the test, and reports.
- **Bad:** "I can fix that. Want me to go ahead?" and the turn ends.
- **URLs:** https://developers.openai.com/api/docs/guides/latest-model ; https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5-1
- **Matters most for:** both, Astra slightly more. OpenAI says Astra is "more likely to ask the user a question" and may "stop when the user may expect it to make reasonable assumptions and persist". Anthropic says Fable 5.1 sometimes "stops to ask permission for a step the original request already covered".

**2. `gate-irreversible`**
- **Rule:** Before a destructive, irreversible, or externally visible action (delete, force-push, merge, deploy, publish, write to an external system), state the evidence that supports that specific action and get approval as the last step.
- **Why:** This is the one place both vendors say to stop.
- **Good:** The branch is prepared, the diff and passing test output are shown, then the agent asks "Merge?"
- **Bad:** `git push --force` or a service restart mid-task because a log line "looked like" a known failure.
- **URLs:** OpenAI model guide: "do all the required work first so that user approval is the final step". Fable 5.1 guide: "check that the evidence actually supports that specific action". System card: https://deploymentsafety.openai.com/gpt-6-astra
- **Matters most for:** both. The system card reports residual unauthorized actions and "overeagerness to complete the task" for Astra. Anthropic's Fable 5 guide notes occasional unrequested actions.

**3. `no-promise-endings`**
- **Rule:** Never end a turn on a plan, a "next I'll…", or an offer to continue. Do the step now, or name the specific blocker only the user can clear.
- **Why:** A described step stays undone until the user replies.
- **Good:** Last paragraph reads "Migration applied; `pytest tests/db` → 14 passed."
- **Bad:** "Next, I'll update the callers." and the turn ends with no tool call.
- **URLs:** OpenAI model guide: "Do not stop at acknowledging capability…, proposing a plan, or offering to continue". Fable 5.1 guide: "check your last paragraph… do that work now with tool calls".
- **Matters most for:** both. Each vendor ships a near-identical snippet for its own model.

**4. `ask-late-with-progress`**
- **Rule:** On ambiguity, make the routine call yourself and state the assumption in the final report. If a wrong guess would be unsafe or waste the work, first finish everything that doesn't depend on the answer, then ask once at the end of a turn that delivers that progress.
- **Why:** The user should approve a concrete result, not unblock an empty turn.
- **Good:** "Assumed 'users' means active users (matches `UserQuery.active`). Open question: should archived orgs be included? Everything else is done."
- **Bad:** The first response is five clarifying questions and no file has been read.
- **URLs:** OpenAI model guide: "The user should be approving a concrete, reviewable result". Fable 5.1 guide: "first do everything that doesn't depend on the answer… put the question at the end of a turn that also delivers that progress".
- **Matters most for:** Astra. OpenAI says it asks where earlier models assumed. It still applies to Fable.

**5. `question-gets-answer`**
- **Rule:** When the user asks a question, describes a problem, or thinks aloud without requesting a change, report findings and make no edits. Treat "can you…", "I want to…", "help me…" plus a change as a request to do the work.
- **Why:** The two vendors' snippets pull in opposite directions; this states the boundary between them. The combined wording is mine, not vendor text.
- **Good:** "Why is CI slow?" gets an analysis with an empty diff.
- **Bad:** The same question gets a rewritten CI config. Also bad: "can you add a retry?" gets "Yes, I can."
- **URLs:** Fable 5.1 guide: "the deliverable is your assessment. Report your findings and stop". OpenAI model guide: "treat these as instructions to do the work".
- **Matters most for:** both, in opposite directions. Fable tends toward unrequested fixes; Astra tends to stop at acknowledgement.

**6. `scope-is-deliverable`**
- **Rule:** Deliver everything the request asks for and nothing else. No unrequested fixes, refactors, docs, or files; list what you noticed as follow-ups. If part is blocked, finish the rest and say exactly what was left out and why.
- **Why:** Silent widening and silent narrowing both break review.
- **Good:** "Follow-up (not changed): `parse_date` ignores timezones."
- **Bad:** A bug-fix diff also renames neighbouring variables and adds a README section. Also bad: 3 of 5 endpoints implemented with no mention of the other two.
- **URLs:** Fable 5.1 guide, "Keep changes and tests to what the task asks for" and the "Delivering work" block. OpenAI model guide: "Do not settle for a partial or 'helpful enough' solution".
- **Matters most for:** Fable. Anthropic says it "may fix nearby code, extend behavior the task didn't mention". OpenAI covers only the narrowing half.

**7. `right-sized-tests`**
- **Rule:** Run the smallest check that covers the change, and don't re-test once it passes unless new changes or failures justify it. Commit new test files only when the task asks or the repo already keeps tests for that kind of change.
- **Why:** Both vendors document over-testing as a default.
- **Good:** One focused test next to its neighbours, and `pytest tests/test_retry.py` run once after the last edit.
- **Bad:** A log-string typo fix followed by the full suite twice and three new test files that mirror the implementation.
- **URLs:** OpenAI model guide: "Do not write tests for reversible, low-impact changes that mirror the implementation… broaden or repeat testing only when…". OpenAI blog: https://developers.openai.com/blog/rethinking-skills-and-prompts-for-gpt-6-astra . Fable 5.1 guide: "roughly one focused test per stated behavior".
- **Matters most for:** both. OpenAI says Astra's thoroughness can produce "broader tests than the task requires". Anthropic says Fable may "commit more test files than the change warrants".

**8. `evidence-backed-claims`**
- **Rule:** Back every "done", "passing" or "verified" claim with the command run and its result from this session, and label anything not run as unverified.
- **Why:** A reviewer can check this directly against the transcript.
- **Good:** "`npm test -- retry` → 12 passed. Not verified: Windows paths."
- **Bad:** "All tests pass and everything works" with no test command anywhere in the transcript.
- **URLs:**
  - https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5 : "audit each claim against a tool result". This is the Fable 5 guide; the 5.1 guide says Fable 5 prompts carry over.
  - https://code.claude.com/docs/en/best-practices : "show evidence rather than asserting success".
  - https://learn.chatgpt.com/docs/prompting : "Report the commands and results".
  - System card: notes "overclaiming success".
- **Matters most for:** both.

**9. `outcome-first-plain-report`**
- **Rule:** Open the final message with one sentence on what happened. Write for a reader who saw none of the work: full sentences, no working shorthand, no labels coined mid-task. Use a list or table only for parallel, sequential or comparative content.
- **Why:** The two models miss in opposite directions, and a content-conditioned rule corrects both.
- **Good:** "Fixed: the retry loop no longer double-sends. Changed `client.py` backoff and added one test…"
- **Bad:** Opening with "## Summary / ### Overview", nested bullets and a table for two facts. Also bad: "retry-path → dedupe-guard → OK".
- **URLs:** OpenAI model guide: "Use lists only when the information is genuinely parallel, sequential, or easier to compare"; "Avoid invented compound labels". Fable 5.1 guide: closing recap "that stands on its own"; replace anti-formatting rules with "a rule that says when specific formatting is appropriate". Fable 5 guide: no "arrow chains, hyphen-stacked compounds, or labels you made up".
- **Matters most for:** both. Astra "tends to use lists, tables and Markdown". Fable 5.1 uses less structure and writes denser prose.

**10. `user-beats-file-and-quote-it`**
- **Rule:** The user's explicit instruction overrides this file and any skill. If an instruction file makes you pause, ask for confirmation, or leave requested work undone, name the file and quote the line.
- **Why:** It makes silent or conflicting guidance visible.
- **Good:** "Stopping before `make deploy`: AGENTS.md says 'never deploy from a feature branch'."
- **Bad:** "I'm unable to proceed" with no source. Also bad: running lint after the user said "skip lint this once".
- **URLs:** OpenAI model guide, "Instruction following" section. https://code.claude.com/docs/en/memory : on a contradiction "Claude may pick one arbitrarily"; CLAUDE.md is a user message with no guaranteed compliance.
- **Matters most for:** Astra. OpenAI says conflicting file guidance "may cause the model to pause and block work early" and "strongly recommend[s]" audits.
- **Caution for Fable:** Ask for a quote of the instruction, not an account of reasoning. The Fable 5 guide says prompts that make the model reproduce its reasoning can trigger a `reasoning_extraction` refusal.

## 2. MODEL-SPECIFIC NOTES (per-model adapters, not the shared file)

**File mechanics**
- Claude Code reads `CLAUDE.md`, not `AGENTS.md`. Use a `CLAUDE.md` containing `@AGENTS.md` followed by a "## Claude Code" section, or a symlink.
- Claude Code targets under 200 lines per file, and the content is advisory. Anything that must always happen belongs in a hook.
- Codex concatenates instruction files from the Git root down to the working directory, with a 32 KiB default cap (`project_doc_max_bytes`).
- In each directory Codex checks `AGENTS.override.md` first, then `AGENTS.md`. My reading is that a root override would replace the shared file, so the Astra adapter belongs in `~/.codex/AGENTS.md` instead.
- Both vendors say to keep always-loaded text short. Put rule sentences in the file and keep the examples in a reviewer doc.

**Astra only**
- **Autonomy text:** Use OpenAI's "bias towards action" block. Fable needs different text; see the Fable section below.
- **Formatting and word list:** Use OpenAI's "Default to… concise paragraphs" prose default and its slop-word blocklist ("delve", "leverage", "Bottom Line:", "X, not Y" framing). For Fable the prose default suppresses structure it already underuses, and Anthropic says to remove anti-formatting language. Fable's writing problem is density and mannered prose; the fix is "Please remove all mannered prose."
- **Subagents:** Astra "may delegate less often than desired", so add OpenAI's delegation line. The Fable 5 guide says that model (the predecessor of Fable 5.1) dispatches subagents readily, so Fable's line is "keep working while subagents run".
- **Text to delete from Astra-facing files:**
  - "ASK FIRST"-style strong language, because it makes Astra stop.
  - "Always run tests / check your work", because it causes over-testing.
  - "Read A, B and C before every edit". Route by task instead: "use database.md for schema changes".
  - Add a permission fact where true: "local tests use disposable fixtures… rerun without asking for approval at each step".
- **Questions while working:** Codex 0.153.0 added `request_user_input_async`, and 0.154.0 added inline answers while it keeps working. A non-blocking question is cheap in Codex. In Claude Code a question ends the turn.

**Fable only**
- **Narration:** Add "Before you start, say in a line what you're about to do; brief updates while you work…" and delete any "hold findings" or "be brief between tools" lines. Fable 5.1 writes fewer updates by default, especially at high effort. I found no OpenAI evidence that Astra needs this.
- **Batching:** "First privately list what you need next; then request every item that doesn't depend on another's result in this one response." Anthropic frames this as a per-turn harness message, so placing it in CLAUDE.md is weaker (my inference).
- **Edits:** "surgically edit a file rather than rewrite the entire thing".
- **Low effort:** Fable answers from memory more often. Add the search-before-answering nudge, or raise effort.
- **Autonomy text:** Anthropic's unattended-run block opens "You are operating autonomously. The user is not watching…", and Anthropic says to keep that sentence as written. The sentence is false in an interactive session, and Anthropic warns the block reduces asking on ambiguous requests. Use it only for unattended runs.
- **Emphasis:** Put "IMPORTANT" on a single line at most.

## 3. REJECTED
- "Always ask before editing": contradicts both vendors' guidance.
- "Never use bullets or headers": helps Astra but hurts Fable. Replaced by the conditional wording in rule 9.
- "Always run the full suite before finishing": both models over-test, and OpenAI says such lines cause unnecessary testing.
- "Keep updates brief / report only at the end": suppresses Fable's already sparse updates.
- "Narrate before every tool call" as a shared rule: only Anthropic evidence supports it, so it goes in the Fable adapter.
- Slop-word blocklist as a shared rule: OpenAI-specific, costs always-loaded tokens, and targets a different writing failure than Fable's.
- "You are operating autonomously; the user is not watching": false in interactive sessions and lowers asking on ambiguity, so adapter only.
- "Delegate to subagents whenever possible": the two models have opposite defaults.
- "Batch independent tool calls": Fable-only and best delivered at harness level.
- "Read architecture docs before every edit": OpenAI names this as burning context.
- "Explain your reasoning for each decision": refusal risk on Fable, and a transcript reviewer gains nothing from it.
- "Always plan first": Claude Code docs say to skip the plan when the diff fits in one sentence, and Astra is already tentative.
- ALL-CAPS emphasis on every rule: Claude Code docs say "if you emphasize many lines, none of them stands out", and OpenAI says strong language stalls Astra.
- Effort or reasoning-level instructions: effort is a harness parameter, not instruction-file content.
- A separate "state your assumptions" rule: folded into rule 4 to stay at ten.

## 4. SOURCES (all opened 2026-09-17)
- https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5-1 — no date shown; cites beta headers dated 2026-08-18 and 2026-08-21.
- https://platform.claude.com/docs/en/models/fable-5-1/whats-new-fable-5-1 — no date shown; mentions an Aug 31, 2026 account cutoff.
- https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5 — no date shown; predecessor guide, used for rules 8, 9 and 10.
- https://code.claude.com/docs/en/memory — no date shown; references version 2.1.239.
- https://code.claude.com/docs/en/best-practices — no date shown.
- https://developers.openai.com/api/docs/guides/latest-model and its `.md` variant — no date shown; GPT-6 Astra model guide.
- https://developers.openai.com/blog/rethinking-skills-and-prompts-for-gpt-6-astra and its `.md` variant — date not present in the fetched content.
- https://deploymentsafety.openai.com/gpt-6-astra — published 2026-09-03, updated 2026-09-09.
- https://developers.openai.com/codex/guides/agents-md — 308 redirect to https://learn.chatgpt.com/docs/agent-configuration/agents-md ; no date shown.
- https://developers.openai.com/codex/prompting — 308 redirect to https://learn.chatgpt.com/docs/prompting ; no date shown.
- https://learn.chatgpt.com/docs/changelog — entries dated 2026-09-03 through 2026-09-14 (Codex CLI 0.153.0 to 0.154.0).

Search-result pages I did not open (the-decoder, X posts, third-party blogs) are not cited.
