{"content": "there are new messages in your inbox \u2014 journal message unread, then journal message read <n> for each; answer message 11157, message 11159, message 11160 before you write anything \u2014 answer each by opening a turn with [!reply:<n>]. a reply, a reaction, or journal message processed <n>; message 11110 file Screenshot 2026-09-25 at 16.39.56.png needs tags \u2014 inspect the attachment, then journal message tag 11110 \"Screenshot 2026-09-25 at 16.39.56.png\" \"<a few words describing what it shows>\"; message 11143 file Screenshot 2026-09-25 at 17.28.18.png needs tags \u2014 inspect the attachment, then journal message tag 11143 \"Screenshot 2026-09-25 at 17.28.18.png\" \"<a few words describing what it shows>\"; message 11143 file Screenshot 2026-09-25 at 17.28.31.png needs tags \u2014 inspect the attachment, then journal message tag 11143 \"Screenshot 2026-09-25 at 17.28.31.png\" \"<a few words describing what it shows>\"; sequence 9, Writing a document, is still at step 2 of 6 - carry on with it \u2014 finish the step and journal sequence next 9 --about doc:62; if it no longer applies, journal sequence abandon 9 --about doc:62 --why \"<why>\"; sequence 9, Writing a document - step 2 of 6 has waited two minutes - Write\u2026 \u2014 the user is waiting on this step; do it now. Write the chapters one at a time and in order with journal doc section 62 \"<chapter>\" \"<body>\"; the user sees each one appear where you are. Cut a chapter that turned out empty with journal doc cut 62 \"<chapter>\". Then journal sequence next 9 --about doc:62. When it is done: journal sequence next 9 --about doc:62", "meta": {"from": "journal"}}
{"content": "1 new message 11162 - answer by opening your turn with [!reply:11162]", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document - step 2 of 6 has waited two minutes - Write\u2026 \u2014 the user is waiting on this step; do it now. Write the chapters one at a time and in order with journal doc section 62 \"<chapter>\" \"<body>\"; the user sees each one appear where you are. Cut a chapter that turned out empty with journal doc cut 62 \"<chapter>\". Then journal sequence next 9 --about doc:62. When it is done: journal sequence next 9 --about doc:62", "meta": {"from": "journal"}}
{"content": "answer message 11157, message 11159, message 11160 before you write anything \u2014 answer each by opening a turn with [!reply:<n>]. a reply, a reaction, or journal message processed <n>", "meta": {"from": "journal"}}
{"content": "answer message 11157, message 11159, message 11160 before you write anything \u2014 answer each by opening a turn with [!reply:<n>]. a reply, a reaction, or journal message processed <n>", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 906ms last (113ms of it working), against a budget of 50ms. Seen 116 times.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/agent is slower than its budget \u2014 398ms last (53ms of it working, 2ms collecting garbage), against a budget of 50ms. Seen 28 times.", "meta": {"from": "journal"}}
{"content": "fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.; rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.", "meta": {"from": "journal"}}
{"content": "the reply tag does this in one step \u2014 [!reply:N] makes the turn itself the reply; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.", "meta": {"from": "journal"}}
{"content": "rule 35 \u2014 Write clean code - one funnel per kind of operation, never the same\u2026 \u2014 Every kind of operation has one funnel: one method that creates, one that saves, one that refuses, one that formats. A second method that does the same thing under another name splits the behaviour, and the two drift apart. Before writing a method, search for the one that already does it and extend that. scripts/checks/funnels.py finds bodies written twice.; hook POST /api/hook/claude is slower than its budget \u2014 1143ms last (52ms of it working, 2ms collecting garbage), against a budget of 50ms. Seen 34 times.", "meta": {"from": "journal"}}
{"content": "answer message 11155, message 11156 before you write anything \u2014 answer each by opening a turn with [!reply:<n>]. a reply, a reaction, or journal message processed <n>", "meta": {"from": "journal"}}
{"content": "1 new message 11165 - answer by opening your turn with [!reply:11165]", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document - step 2 of 6 has waited two minutes - Write\u2026 \u2014 the user is waiting on this step; do it now. Write the chapters one at a time and in order with journal doc section 62 \"<chapter>\" \"<body>\"; the user sees each one appear where you are. Cut a chapter that turned out empty with journal doc cut 62 \"<chapter>\". Then journal sequence next 9 --about doc:62. When it is done: journal sequence next 9 --about doc:62; command message reply is slower than its budget \u2014 116ms last (52ms of it working), against a budget of 50ms. Seen 29 times.; request POST /api/run is slower than its budget \u2014 131ms last (64ms of it working), against a budget of 50ms. Seen 42 times.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/agent/34/edits is slower than its budget \u2014 880ms last (76ms of it working, 2ms collecting garbage), against a budget of 50ms. Seen 10 times.", "meta": {"from": "journal"}}
{"content": "fact 20 \u2014 A slim supervisor holds the agent and a worker reloads on every build \u2014 Since 2.118.0 (2026-09-23). src/supervisor.py is standard library only and never reloads: journal claude hands its process over to it (os.execv), and it owns the pty and the agent process, relays the terminal, writes the printed and screen captures, listens on the typist socket, restarts the agent in the same session from a relaunch command written to its runtime folder while a restart is pending, and stops it with escalation while draining the pty (an agent cannot finish exiting on macOS while its output is unread). It starts engine/worker.py and starts it again whenever it exits: RELOAD on a new build, RELAUNCH to restart the agent, STOP to end, HEAL or a quick crash to roll back a build through journal heal. The worker holds everything else: seating the session, the start-up confirm typed through the typist, services, viewer, update check, check-in, and the one-time relaunch of sessions launched before engine/terminal.py LAUNCH. engine/terminal.py holds only journal-side helpers. The server (serve.py) still runs the engines and re-execs itself on a .py change. When the agent exits, the supervisor runs journal ended, which puts set-aside hooks back and stops the server when no session is left.; request GET /api/main/dashboard is slower than its budget \u2014 398ms last (122ms of it working), against a budget of 50ms. Seen 123 times.; 1 new message 11167 - answer by opening your turn with [!reply:11167]", "meta": {"from": "journal"}}
{"content": "rule 45 \u2014 No prose words as names in code - said, says, heard, spoke, told\u2026 \u2014 Messages 1360 and 1698. The user has said more than once that code must not read like prose: a variable, attribute, property or function is named for what it holds or does (text, command, labels, lines), never with a verb from a story. 'says' on the Design type (1360) and 'said = call.said.lower()' in features/recital.py (1698) are the examples. Rule 27 states the naming rule; this one carries the words, so writing one of them whispers it. Before writing a name, ask whether a reader who has never seen the code would know what it holds.", "meta": {"from": "journal"}}
{"content": "1 new message 11169 - answer by opening your turn with [!reply:11169]", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 3 of 6 - Put it in a collection \u2014 If a collection the user keeps fits what you wrote, add it: journal collection add <collection n> doc:62. Look with journal collection all first; skip this when none fits, and never make a collection just for it. Then journal sequence next 9 --about doc:62. Take it up first with journal sequence follow 9 --about doc:62; when it is done: journal sequence next 9 --about doc:62", "meta": {"from": "journal"}}
{"content": "law L1 \u2014 Every subagent dispatch names its model and chooses the least\u2026 \u2014 Use a fast, economical model for mechanical work with a known answer, a capable general model for careful implementation, and the strongest model only when the task turns on difficult judgement. Inheriting the orchestrator's model is not a model choice. If the dispatch API cannot accept a model, that operation is exempt.", "meta": {"from": "journal"}}
{"content": "command message process is slower than its budget \u2014 87ms last (53ms of it working), against a budget of 50ms. Seen 1 time.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 4 of 6 - Link what it relates to \u2014 Link the rows it answers or was built on, such as the to-dos, plans, documents, reports or messages it is about, with journal doc link 62 \"<row>\" for each. Leave out rows it only mentions in passing. Then journal sequence next 9 --about doc:62. Take it up first with journal sequence follow 9 --about doc:62; when it is done: journal sequence next 9 --about doc:62", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 5 of 6 - Offer the next step \u2014 If it asks the user to decide or approve something, give it buttons: journal doc update 62 --set buttons='[{\"label\": \"Accept this proposal\", \"say\": \"I accept this proposal\"}, {\"label\": \"Change it first\", \"say\": \"I want changes first\"}]'. A button with say sends those words to you as the user's message; one naming a type, n and action runs that command. Skip this when nothing waits on the user. Then journal sequence next 9 --about doc:62. Take it up first with journal sequence follow 9 --about doc:62; when it is done: journal sequence next 9 --about doc:62; sequence 9, Writing a document, step 6 of 6 - Answer with it \u2014 Say in one or two plain lines what it concludes, then its reference on a line of its own, like `doc 41` or `report 98`. Finish with journal sequence next 9 --about doc:62. Take it up first with journal sequence follow 9 --about doc:62; when it is done: journal sequence next 9 --about doc:62", "meta": {"from": "journal"}}
{"content": "your message 11171 names 1848 without saying what they are \u2014 put the type before each number, like message 1712 or to-do 644, so the chat links it: journal message edit 11171 \"<the text>\"; auto mode is on and work 1578 stands still while todo 1846 is ready \u2014 if work 1578 waits on the user, decide it yourself when you can; otherwise put the question on its row with journal todo ask, end or park the work, and start todo 1846. Stop only when nothing ready is left.", "meta": {"from": "journal"}}
{"content": "work 1578 is still open \u2014 end it or park it before you stop: journal work end 1578 --how \"<what landed>\", or journal work park 1578 \"<why it waits>\"", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; rule 37 \u2014 Close every to-do explicitly with todo done or a Journal commit\u2026 \u2014 Ending work does not close its row. A to-do is closed by journal todo done <n> --how, or by a commit whose message carries Journal: todos done <n> at column 0, several numbers separated by commas. A row left open after its work landed misleads the next session and auto mode.; 1 new message 11172 - answer by opening your turn with [!reply:11172]", "meta": {"from": "journal"}}
{"content": "rule 48 \u2014 The viewer is built from its component library, and pages only\u2026 \u2014 Message 4258. Every visual piece the viewer shows more than once, or that a user would recognise as the same kind of thing (a dialog, a side panel or inspector, a dropdown, a list row, a switch, a button), is one component in web/src/kit, extracted aggressively, and every page composes those components instead of building its own copy. Before writing markup or styles in a page, look for the kit component that already does it and extend it with a prop; a second hand-built version is a bug. The side panel that animated in but not out, while a separate skill panel did both, is the example.", "meta": {"from": "journal"}}
{"content": "1 new message 11174 - answer by opening your turn with [!reply:11174]; doc 62 updated", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat; 1 new message 11175 - answer by opening your turn with [!reply:11175]", "meta": {"from": "journal"}}
{"content": "todo 1846, Sequences start, advance and end as they should, is unblocked\u2026 \u2014 journal todo start 1846 when it is next; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1818, The viewer asks for the summary one request at a time, is still\u2026 \u2014 it is blocked because: Performance work waits for the user's word (2026-09-25). If it is not any more, journal todo unblock 1818. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.; fact 25 \u2014 A designer's install packs the whole tree, half-done server edits\u2026 \u2014 2026-09-25: Eames and Saul run python3 src/journal.py --root .journal upgrade after their viewer builds; it packs every file in src, so a server handler I was halfway through writing went live and raised on every PostToolUse hook. While designers work in parallel, keep server edits whole between tool calls (write and test in the scratchpad first), and reinstall after reverting anything.; rule 42 \u2014 Every user-facing text passes the formatters before it leaves the\u2026 \u2014 Not only a brief. A title, an abstract, an outcome and every section body are read by a person, so each goes through the same formatters on its way to the viewer \u2014 chat turns, activity items, to-do rows, inspector pages, docs alike. One field formatted out of five is not a rule, it is an accident, and it is how a raw tag ended up in the activity list after the tags feature had been stripping them for weeks. When a new field carries words a person reads, it joins the list in the same place.", "meta": {"from": "journal"}}
{"content": "sequence 2, Building a plan, step 1 of 4 - Name the goal \u2014 Settle with the user what is true when the plan is done, and set it as the plan's goal. Take it up first with journal sequence follow 2 --about plan:18; when it is done: journal sequence next 2 --about plan:18; plan 18 is building - add its phases \u2014 journal plan phase 18 \"<title>\" --when \"<complete when>\" for each phase, --checkpoint where the user should look; then journal plan stage 18 todos; 1 new message 11177 - answer by opening your turn with [!reply:11177]", "meta": {"from": "journal"}}
{"content": "rule 52 \u2014 A chat mark for something the user did sits on the user's side \u2014 Message 10960 (2026-09-25): marks for the user's own actions, such as answering a question, are right-aligned like the user's messages. A mark is put there by giving its card side=user.; rule 44 \u2014 Release only when the user says so, never after every change \u2014 Message 5929 (2026-09-23): stop releasing constantly. Work is committed on a branch and released only when the user says so. For now nothing is released until every Code Commandments sin is fixed. This replaces message 1067's order to push and tag every update at once.; rule 46 \u2014 Only commit and push once the whole journal is proven to boot \u2014 Messages 2178 and 2179. A release that has not been started for real can crash every project that installs it, as 2.78.3 did for Codex and 2.84.0 did to project records. Before every commit and push: the full suite passes, including tests/test_it_boots.py, which installs a packed copy into a fresh project, launches Claude and Codex from it, writes a project record, upgrades again and checks the record survives. When a change touches launching, installing or upgrading, also start a real journal in a scratch project and close it properly afterwards, leaving no process behind.; rule 51 \u2014 Every finished feature is committed, pushed and released with a new\u2026 \u2014 Message 9207 (2026-09-24): when a new feature is ready, commit, push and publish a new tag. This is the user's standing word for releasing, so rule 44's only-when-the-user-says is met by it for finished features; fixes in between wait for the next feature or a patch the user asks for.; hook POST /api/hook/claude is slower than its budget \u2014 112ms last (55ms of it working, 2ms collecting garbage), against a budget of 50ms. Seen 35 times.", "meta": {"from": "journal"}}
{"content": "sequence 2, Building a plan, step 2 of 4 - Add the phases \u2014 Add every phase in order with journal plan phase 18 \"<title>\" --when \"<complete when>\", and --checkpoint where the user should look before it goes on. Take it up first with journal sequence follow 2 --about plan:18; when it is done: journal sequence next 2 --about plan:18", "meta": {"from": "journal"}}
{"content": "plan 19 is building - add its phases \u2014 journal plan phase 19 \"<title>\" --when \"<complete when>\" for each phase, --checkpoint where the user should look; then journal plan stage 19 todos", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.; plan 18 is at its to-dos \u2014 file each phase's rows and put them under it with journal plan todos 18 <phase> <rows...>; when every phase has rows, journal plan ready 18", "meta": {"from": "journal"}}
{"content": "every phase of plan 18 has its to-dos \u2014 journal plan ready 18 hands it to the user, who approves it", "meta": {"from": "journal"}}
{"content": "the user approved plan 18, Sequences that always finish - start it \u2014 journal plan start 18 makes it active and parks a plan that runs; then work its first phase's rows in order; sequence 2, Building a plan, step 3 of 4 - File the rows \u2014 journal plan stage 18 todos, then file the to-dos and put each under its phase with journal plan todos 18 <phase> <rows>. Take it up first with journal sequence follow 2 --about plan:18; when it is done: journal sequence next 2 --about plan:18; plan 18 updated", "meta": {"from": "journal"}}
{"content": "sequence 2, Building a plan, step 4 of 4 - Hand it over \u2014 When every phase has rows, journal plan ready 18. Only the user approves it; you start it when they have. Take it up first with journal sequence follow 2 --about plan:18; when it is done: journal sequence next 2 --about plan:18", "meta": {"from": "journal"}}
{"content": "1 new message 11179 - answer by opening your turn with [!reply:11179]", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1818, The viewer asks for the summary one request at a time, is still\u2026 \u2014 it is blocked because: Performance work waits for the user's word (2026-09-25). If it is not any more, journal todo unblock 1818. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/family is slower than its budget \u2014 575ms last (373ms of it working, 46ms collecting garbage), against a budget of 50ms. Seen 13 times.; request GET /api/main/dashboard is slower than its budget \u2014 246ms last (205ms of it working), against a budget of 50ms. Seen 131 times.; fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).; rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.", "meta": {"from": "journal"}}
{"content": "the viewer sent POST /api/main/todo/tasks twice at once \u2014 two requests to POST /api/main/todo/tasks were in flight at once POST /api/main/todo/tasks Seen 1 time.; request GET /api/main/agent/34/subagent/a74f3db07decb93e4/transcript is slower t \u2014 211ms last (102ms of it working, 1ms collecting garbage), against a budget of 50ms. Seen 2 times.; the viewer asked GET /api/main/work for more than a page \u2014 GET /api/main/work asked for 30 rows GET /api/main/work Seen 1 time.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/agent is slower than its budget \u2014 251ms last (53ms of it working, 8ms collecting garbage), against a budget of 50ms. Seen 29 times.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "law L2 \u2014 Every subagent is bound to a concrete job; never dispatch a generic\u2026 \u2014 Use the most specific available agent type whose declared purpose matches the assignment. On providers without agent types, give the dispatch a concrete task name and bounded prompt. If no suitable specialization exists, keep the work in the main agent instead of manufacturing an unscoped helper.; law L4 \u2014 Follow-up work goes back to the subagent that did the first part\u2026 \u2014 A subagent that drew a design, wrote the code or ran the research keeps what it learned. When the user asks for a change to its work, continue that subagent with a message rather than dispatching a new one that has to rediscover everything; start fresh only when the earlier one is gone or the new work is unrelated.; law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.", "meta": {"from": "journal"}}
{"content": "1 new message 11182 - answer by opening your turn with [!reply:11182]", "meta": {"from": "journal"}}
{"content": "rule 40 \u2014 A feature is named for what it is, never for its machinery \u2014 Messages 599, 600 and 703. A feature is a capability the user would name and would think of switching off. File tracking, a write gate, a phrase bank, a tree diff are services used inside a feature, not features of their own: they live in the feature they serve. Before adding a directory under features/, say what the user would call it; if the answer names a mechanism, it belongs inside something else. Report 16 holds the grouping this implies.", "meta": {"from": "journal"}}
{"content": "plugin 18 completed", "meta": {"from": "journal"}}
{"content": "rule 27 \u2014 Name a declaration with the word a reader already knows \u2014 An attribute, a variable or a field gets the ordinary programming word for what it holds, not an evocative one. was, heard and alone were poetry; aliases, notify_actions and urgent_actions are what they are. The test: could a reader who has never seen this codebase guess what it holds from the name alone? Prose belongs in the help text and the abstract, where it is read as prose. This does not license abbreviations \u2014 a plain word in full, not a short one.", "meta": {"from": "journal"}}
{"content": "the viewer threw Cannot read properties of undefined (reading 'replace') \u2014 Cannot read properties of undefined (reading 'replace') / TypeError: Cannot read properties of undefined (reading 'replace') at http://127.0.0.1:8420/assets/main-vizx_Jza.js:19:108358 at me (http://127.0.0.1:8420/assets/tokens-8Pe3PyED.js:13:13623) at http://127.0.0.1:8420/assets/main- Seen 3 times.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/family is slower than its budget \u2014 141ms last (100ms of it working, 1ms collecting garbage), against a budget of 50ms. Seen 15 times.; request GET /api/main/dashboard is slower than its budget \u2014 259ms last (232ms of it working, 2ms collecting garbage), against a budget of 50ms. Seen 140 times.", "meta": {"from": "journal"}}
{"content": "the viewer sent POST /api/main/todo/tasks twice at once \u2014 two requests to POST /api/main/todo/tasks were in flight at once POST /api/main/todo/tasks Seen 2 times.; the viewer asked GET /api/main/work for more than a page \u2014 GET /api/main/work asked for 30 rows GET /api/main/work Seen 2 times.; request GET /api/main/agent/14/subagent/a09950f8bf6f1a9b8/transcript is slower t \u2014 214ms last (74ms of it working), against a budget of 50ms. Seen 1 time.", "meta": {"from": "journal"}}
{"content": "request POST /api/main/message is slower than its budget \u2014 120ms last (74ms of it working), against a budget of 50ms. Seen 23 times.; 1 new message 11189 - answer by opening your turn with [!reply:11189]", "meta": {"from": "journal"}}
{"content": "fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.; 1 new message 11190 - answer by opening your turn with [!reply:11190]", "meta": {"from": "journal"}}
{"content": "your command ran 34s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "rule 49 \u2014 A dialog whose content grows keeps one fixed height, and its content\u2026 \u2014 Message 5361, after asking more than once: a dialog that shows output as it arrives (install, update, logs) opens at its final height and never jumps; only its content scrolls.", "meta": {"from": "journal"}}
{"content": "fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.", "meta": {"from": "journal"}}
{"content": "journal-sequences changed since you loaded them \u2014 load one again when you next need it; only the every-start skills are held for", "meta": {"from": "journal"}}
{"content": "your command ran 31s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "1 new message 11199 - answer by opening your turn with [!reply:11199]", "meta": {"from": "journal"}}
{"content": "your command ran 35s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "hook POST /api/hook/claude is slower than its budget \u2014 1139ms last (56ms of it working, 3ms collecting garbage), against a budget of 50ms. Seen 37 times.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 68ms last (50ms of it working), against a budget of 50ms. Seen 143 times.", "meta": {"from": "journal"}}
{"content": "1 new message 11202 - answer by opening your turn with [!reply:11202]", "meta": {"from": "journal"}}
{"content": "your command ran 32s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "fact 20 \u2014 A slim supervisor holds the agent and a worker reloads on every build \u2014 Since 2.118.0 (2026-09-23). src/supervisor.py is standard library only and never reloads: journal claude hands its process over to it (os.execv), and it owns the pty and the agent process, relays the terminal, writes the printed and screen captures, listens on the typist socket, restarts the agent in the same session from a relaunch command written to its runtime folder while a restart is pending, and stops it with escalation while draining the pty (an agent cannot finish exiting on macOS while its output is unread). It starts engine/worker.py and starts it again whenever it exits: RELOAD on a new build, RELAUNCH to restart the agent, STOP to end, HEAL or a quick crash to roll back a build through journal heal. The worker holds everything else: seating the session, the start-up confirm typed through the typist, services, viewer, update check, check-in, and the one-time relaunch of sessions launched before engine/terminal.py LAUNCH. engine/terminal.py holds only journal-side helpers. The server (serve.py) still runs the engines and re-execs itself on a .py change. When the agent exits, the supervisor runs journal ended, which puts set-aside hooks back and stops the server when no session is left.", "meta": {"from": "journal"}}
{"content": "rule 35 \u2014 Write clean code - one funnel per kind of operation, never the same\u2026 \u2014 Every kind of operation has one funnel: one method that creates, one that saves, one that refuses, one that formats. A second method that does the same thing under another name splits the behaviour, and the two drift apart. Before writing a method, search for the one that already does it and extend that. scripts/checks/funnels.py finds bodies written twice.; rule 47 \u2014 The journal sets itself up once, when the server starts, never per\u2026 \u2014 Messages 2220 and 2224. Discovering features and their handlers, seating the feature rows and the rename sweep happen once, at server boot, and again only when a feature is switched on or off, a plugin changes or an environment is added: features.load keeps a set-up generation per journal (SEATED) and redoes the work only when that generation moves. A command, a request or a hook uses what is already there; nothing in their path may rediscover handlers or rescan folders. A cost that repeats per call is a bug to fix, not a budget to raise.; rule 48 \u2014 The viewer is built from its component library, and pages only\u2026 \u2014 Message 4258. Every visual piece the viewer shows more than once, or that a user would recognise as the same kind of thing (a dialog, a side panel or inspector, a dropdown, a list row, a switch, a button), is one component in web/src/kit, extracted aggressively, and every page composes those components instead of building its own copy. Before writing markup or styles in a page, look for the kit component that already does it and extend it with a prop; a second hand-built version is a bug. The side panel that animated in but not out, while a separate skill panel did both, is the example.", "meta": {"from": "journal"}}
{"content": "rule 44 \u2014 Release only when the user says so, never after every change \u2014 Message 5929 (2026-09-23): stop releasing constantly. Work is committed on a branch and released only when the user says so. For now nothing is released until every Code Commandments sin is fixed. This replaces message 1067's order to push and tag every update at once.; rule 46 \u2014 Only commit and push once the whole journal is proven to boot \u2014 Messages 2178 and 2179. A release that has not been started for real can crash every project that installs it, as 2.78.3 did for Codex and 2.84.0 did to project records. Before every commit and push: the full suite passes, including tests/test_it_boots.py, which installs a packed copy into a fresh project, launches Claude and Codex from it, writes a project record, upgrades again and checks the record survives. When a change touches launching, installing or upgrading, also start a real journal in a scratch project and close it properly afterwards, leaving no process behind.; rule 51 \u2014 Every finished feature is committed, pushed and released with a new\u2026 \u2014 Message 9207 (2026-09-24): when a new feature is ready, commit, push and publish a new tag. This is the user's standing word for releasing, so rule 44's only-when-the-user-says is met by it for finished features; fixes in between wait for the next feature or a patch the user asks for.", "meta": {"from": "journal"}}
{"content": "auto mode is on and work 1583 stands still while todo 1845 is ready \u2014 if work 1583 waits on the user, decide it yourself when you can; otherwise put the question on its row with journal todo ask, end or park the work, and start todo 1845. Stop only when nothing ready is left.; fact 25 \u2014 A designer's install packs the whole tree, half-done server edits\u2026 \u2014 2026-09-25: Eames and Saul run python3 src/journal.py --root .journal upgrade after their viewer builds; it packs every file in src, so a server handler I was halfway through writing went live and raised on every PostToolUse hook. While designers work in parallel, keep server edits whole between tool calls (write and test in the scratchpad first), and reinstall after reverting anything.; rule 36 \u2014 Clean, DRY, idiomatic before it is committed, never after it is\u2026 \u2014 The user should never be the one who finds duplication, dead code, a clumsy name or a pattern the codebase does not use. Read the diff before every commit as a reviewer would, and fix what is not clean then, not in a follow-up after a complaint.; work 1583 is still open, with nothing logged \u2014 journal work log 1583 \"<what was decided or done, and why>\" \u2014 then journal work end 1583 --how \"<what landed>\", or journal work park 1583 \"<why it waits>\"; rule 39 \u2014 Use only registered exclamation response tags \u2014 A tag like [!reply:12] runs a command, and only the tags in the tags.runs setting are registered. An invented tag does nothing and shows as raw text in the chat. Use the registered ones (reply, log, end, todo, fact, rule) and nothing else.", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.", "meta": {"from": "journal"}}
{"content": "your command ran 31s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "work 1583 is still open \u2014 end it or park it before you stop: journal work end 1583 --how \"<what landed>\", or journal work park 1583 \"<why it waits>\"", "meta": {"from": "journal"}}
{"content": "your wait for the full test suite before the 2.186.0 release is over, because\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "hook POST /api/hook/claude is slower than its budget \u2014 218ms last (54ms of it working, 7ms collecting garbage), against a budget of 50ms. Seen 38 times.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Write the orchestrating sequence, is still blocked - is it still? \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "commit b6cc40124 closed to-do 1844, to-do 1845, to-do 1874 and ended work\u2026 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.; 1 new message 11211 - answer by opening your turn with [!reply:11211]", "meta": {"from": "journal"}}
{"content": "your command ran 30s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "rule 52 \u2014 A chat mark for something the user did sits on the user's side \u2014 Message 10960 (2026-09-25): marks for the user's own actions, such as answering a question, are right-aligned like the user's messages. A mark is put there by giving its card side=user.", "meta": {"from": "journal"}}
{"content": "command message reply is slower than its budget \u2014 547ms last (73ms of it working), against a budget of 50ms. Seen 30 times.", "meta": {"from": "journal"}}
{"content": "todo 1875 next; you committed work - if a meaningful piece landed, write an update \u2014 journal report changes, then journal report recap \"<one or two sentences>\"; it is pinned at the bottom of the chat. Skip it when the work is small.", "meta": {"from": "journal"}}
{"content": "rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.", "meta": {"from": "journal"}}
{"content": "question 150 completed", "meta": {"from": "journal"}}
{"content": "rule 42 \u2014 Every user-facing text passes the formatters before it leaves the\u2026 \u2014 Not only a brief. A title, an abstract, an outcome and every section body are read by a person, so each goes through the same formatters on its way to the viewer \u2014 chat turns, activity items, to-do rows, inspector pages, docs alike. One field formatted out of five is not a rule, it is an accident, and it is how a raw tag ended up in the activity list after the tags feature had been stripping them for weeks. When a new field carries words a person reads, it joins the list in the same place.", "meta": {"from": "journal"}}
{"content": "law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.", "meta": {"from": "journal"}}
{"content": "1 new message 11214 - answer by opening your turn with [!reply:11214]", "meta": {"from": "journal"}}
{"content": "fact 18 \u2014 cProfile inflates the slow-request profiles about tenfold \u2014 The faults feature writes a profile when a request passes its budget, and the profile is taken with cProfile, which adds per-call overhead. On 2026-09-22 /api/summary profiled at 58ms with 48ms inside Resource.fork's deep copy; with the profiler off the same call ran in 2 to 7ms. Read the profile for where the time goes in relative terms, then time the call with curl before changing anything.", "meta": {"from": "journal"}}
{"content": "1 new message 11216 - answer by opening your turn with [!reply:11216]", "meta": {"from": "journal"}}
{"content": "fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.", "meta": {"from": "journal"}}
{"content": "fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).; rule 27 \u2014 Name a declaration with the word a reader already knows \u2014 An attribute, a variable or a field gets the ordinary programming word for what it holds, not an evocative one. was, heard and alone were poetry; aliases, notify_actions and urgent_actions are what they are. The test: could a reader who has never seen this codebase guess what it holds from the name alone? Prose belongs in the help text and the abstract, where it is read as prose. This does not license abbreviations \u2014 a plain word in full, not a short one.", "meta": {"from": "journal"}}
{"content": "your command ran 35s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "hook POST /api/hook/claude is slower than its budget \u2014 68ms last (51ms of it working, 6ms collecting garbage), against a budget of 50ms. Seen 39 times.", "meta": {"from": "journal"}}
{"content": "your chat talked about the journal's workings - \"reading it\" \u2014 the user sees replies, reactions, pills and reads themselves; say what the work is instead", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 62ms last (61ms of it working), against a budget of 50ms. Seen 145 times.", "meta": {"from": "journal"}}
{"content": "your wait for the whole suite before releasing 2.186.1 is over, because you\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "1 new message 11228 - answer by opening your turn with [!reply:11228]", "meta": {"from": "journal"}}
{"content": "your command ran 30s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself; work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; commit 8032923ad closed to-do 1875 and ended work 1585 \u2014 The rows and the work are done; take the next one.", "meta": {"from": "journal"}}
{"content": "the todo tag does this in one step \u2014 [!todo=\"the title\"] files it with the turn as its brief; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "todo 1762 next; command message reply is slower than its budget \u2014 158ms last (64ms of it working), against a budget of 50ms. Seen 31 times.", "meta": {"from": "journal"}}
{"content": "the user put \u2764\ufe0f on message 11229 - act on it if it asks for something, such as a go-ahead. It needs no reply, and the chat never mentions it", "meta": {"from": "journal"}}
{"content": "rule 40 \u2014 A feature is named for what it is, never for its machinery \u2014 Messages 599, 600 and 703. A feature is a capability the user would name and would think of switching off. File tracking, a write gate, a phrase bank, a tree diff are services used inside a feature, not features of their own: they live in the feature they serve. Before adding a directory under features/, say what the user would call it; if the answer names a mechanism, it belongs inside something else. Report 16 holds the grouping this implies.", "meta": {"from": "journal"}}
{"content": "rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.; rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.; rule 47 \u2014 The journal sets itself up once, when the server starts, never per\u2026 \u2014 Messages 2220 and 2224. Discovering features and their handlers, seating the feature rows and the rename sweep happen once, at server boot, and again only when a feature is switched on or off, a plugin changes or an environment is added: features.load keeps a set-up generation per journal (SEATED) and redoes the work only when that generation moves. A command, a request or a hook uses what is already there; nothing in their path may rediscover handlers or rescan folders. A cost that repeats per call is a bug to fix, not a budget to raise.", "meta": {"from": "journal"}}
{"content": "your command ran 31s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.; fact 25 \u2014 A designer's install packs the whole tree, half-done server edits\u2026 \u2014 2026-09-25: Eames and Saul run python3 src/journal.py --root .journal upgrade after their viewer builds; it packs every file in src, so a server handler I was halfway through writing went live and raised on every PostToolUse hook. While designers work in parallel, keep server edits whole between tool calls (write and test in the scratchpad first), and reinstall after reverting anything.", "meta": {"from": "journal"}}
{"content": "your wait for the suite run on the speed fixes is over, because you are\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "your wait for the commit and install of the speed fixes is over, because you\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.", "meta": {"from": "journal"}}
{"content": "your chat talked about the journal's workings - \"To-do 1879 is done\" \u2014 the user sees replies, reactions, pills and reads themselves; say what the work is instead", "meta": {"from": "journal"}}
{"content": "your command ran 34s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "1 new message 11242 - answer by opening your turn with [!reply:11242]", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "rule 42 \u2014 Every user-facing text passes the formatters before it leaves the\u2026 \u2014 Not only a brief. A title, an abstract, an outcome and every section body are read by a person, so each goes through the same formatters on its way to the viewer \u2014 chat turns, activity items, to-do rows, inspector pages, docs alike. One field formatted out of five is not a rule, it is an accident, and it is how a raw tag ended up in the activity list after the tags feature had been stripping them for weeks. When a new field carries words a person reads, it joins the list in the same place.", "meta": {"from": "journal"}}
{"content": "rule 39 \u2014 Use only registered exclamation response tags \u2014 A tag like [!reply:12] runs a command, and only the tags in the tags.runs setting are registered. An invented tag does nothing and shows as raw text in the chat. Use the registered ones (reply, log, end, todo, fact, rule) and nothing else.; rule 51 \u2014 Every finished feature is committed, pushed and released with a new\u2026 \u2014 Message 9207 (2026-09-24): when a new feature is ready, commit, push and publish a new tag. This is the user's standing word for releasing, so rule 44's only-when-the-user-says is met by it for finished features; fixes in between wait for the next feature or a patch the user asks for.", "meta": {"from": "journal"}}
{"content": "fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.", "meta": {"from": "journal"}}
{"content": "fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "your command ran 30s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "law L1 \u2014 Every subagent dispatch names its model and chooses the least\u2026 \u2014 Use a fast, economical model for mechanical work with a known answer, a capable general model for careful implementation, and the strongest model only when the task turns on difficult judgement. Inheriting the orchestrator's model is not a model choice. If the dispatch API cannot accept a model, that operation is exempt.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; 1 new message 11250 - answer by opening your turn with [!reply:11250]", "meta": {"from": "journal"}}
{"content": "law L4 \u2014 Follow-up work goes back to the subagent that did the first part\u2026 \u2014 A subagent that drew a design, wrote the code or ran the research keeps what it learned. When the user asks for a change to its work, continue that subagent with a message rather than dispatching a new one that has to rediscover everything; start fresh only when the earlier one is gone or the new work is unrelated.; law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.; rule 27 \u2014 Name a declaration with the word a reader already knows \u2014 An attribute, a variable or a field gets the ordinary programming word for what it holds, not an evocative one. was, heard and alone were poetry; aliases, notify_actions and urgent_actions are what they are. The test: could a reader who has never seen this codebase guess what it holds from the name alone? Prose belongs in the help text and the abstract, where it is read as prose. This does not license abbreviations \u2014 a plain word in full, not a short one.", "meta": {"from": "journal"}}
{"content": "rule 49 \u2014 A dialog whose content grows keeps one fixed height, and its content\u2026 \u2014 Message 5361, after asking more than once: a dialog that shows output as it arrives (install, update, logs) opens at its final height and never jumps; only its content scrolls.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 127ms last (53ms of it working), against a budget of 50ms. Seen 151 times.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "law L2 \u2014 Every subagent is bound to a concrete job; never dispatch a generic\u2026 \u2014 Use the most specific available agent type whose declared purpose matches the assignment. On providers without agent types, give the dispatch a concrete task name and bounded prompt. If no suitable specialization exists, keep the work in the main agent instead of manufacturing an unscoped helper.; rule 44 \u2014 Release only when the user says so, never after every change \u2014 Message 5929 (2026-09-23): stop releasing constantly. Work is committed on a branch and released only when the user says so. For now nothing is released until every Code Commandments sin is fixed. This replaces message 1067's order to push and tag every update at once.", "meta": {"from": "journal"}}
{"content": "your command ran 31s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "your wait for the suite on the 2.187.0 changes is over, because you are\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting; work 1584 in hand \u2014 The journal engine serves requests and commands slowly \u2014 if this is not what you are doing, end it or park it and start the work you are in", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 1 of 6 - Lay out the chapters \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:63. Put every chapter you plan on the document before writing any of them: journal doc section 63 \"<chapter>\" \"Being written.\" for each, in order. Put the document's reference on a line of its own in the chat, like `doc 41`, so the user can open it and watch. Then journal sequence next 9 --about doc:63.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 2 of 6 - Write each chapter \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:63. Write the chapters one at a time and in order with journal doc section 63 \"<chapter>\" \"<body>\"; the user sees each one appear where you are. Cut a chapter that turned out empty with journal doc cut 63 \"<chapter>\". Then journal sequence next 9 --about doc:63.", "meta": {"from": "journal"}}
{"content": "rule 38 \u2014 Never change the git branch until the user says so, by name \u2014 The work happens on the branch the user named. That was main until message 5929 and question 80 (2026-09-23), which moved the sins work to the branch sins. Do not create, switch to or merge any other branch unless the user names it in their own words.; rule 45 \u2014 No prose words as names in code - said, says, heard, spoke, told\u2026 \u2014 Messages 1360 and 1698. The user has said more than once that code must not read like prose: a variable, attribute, property or function is named for what it holds or does (text, command, labels, lines), never with a verb from a story. 'says' on the Design type (1360) and 'said = call.said.lower()' in features/recital.py (1698) are the examples. Rule 27 states the naming rule; this one carries the words, so writing one of them whispers it. Before writing a name, ask whether a reader who has never seen the code would know what it holds.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 3 of 6 - Put it in a collection \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:63. If a collection the user keeps fits what you wrote, add it: journal collection add <collection n> doc:63. Look with journal collection all first; skip this when none fits, and never make a collection just for it. Then journal sequence next 9 --about doc:63.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 4 of 6 - Link what it relates to \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:63. Link the rows it answers or was built on, such as the to-dos, plans, documents, reports or messages it is about, with journal doc link 63 \"<row>\" for each. Leave out rows it only mentions in passing. Then journal sequence next 9 --about doc:63.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 5 of 6 - Offer the next step \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:63. If it asks the user to decide or approve something, give it buttons: journal doc update 63 --set buttons='[{\"label\": \"Accept this proposal\", \"say\": \"I accept this proposal\"}, {\"label\": \"Change it first\", \"say\": \"I want changes first\"}]'. A button with say sends those words to you as the user's message; one naming a type, n and action runs that command. Skip this when nothing waits on the user. Then journal sequence next 9 --about doc:63.", "meta": {"from": "journal"}}
{"content": "sequence 9, Writing a document, step 6 of 6 - Answer with it \u2014 Finishing this sequence comes before anything else you do; everything else waits until it is finished or abandoned. Take it up first with journal sequence follow 9 --about doc:63. Say in one or two plain lines what it concludes, then its reference on a line of its own, like `doc 41` or `report 98`. Finish with journal sequence next 9 --about doc:63.; work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.", "meta": {"from": "journal"}}
{"content": "todo 1762 next", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
{"content": "todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1876, Proposal to improve the Orchestrating a board sequence, is still\u2026 \u2014 it is blocked because: waits for the user to pick an option in doc 63. If it is not any more, journal todo unblock 1876. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "your chat talked about the journal's workings - \"reply to you went out\" \u2014 the user sees replies, reactions, pills and reads themselves; say what the work is instead", "meta": {"from": "journal"}}
{"content": "fact 18 \u2014 cProfile inflates the slow-request profiles about tenfold \u2014 The faults feature writes a profile when a request passes its budget, and the profile is taken with cProfile, which adds per-call overhead. On 2026-09-22 /api/summary profiled at 58ms with 48ms inside Resource.fork's deep copy; with the profiler off the same call ran in 2 to 7ms. Read the profile for where the time goes in relative terms, then time the call with curl before changing anything.; fact 25 \u2014 A designer's install packs the whole tree, half-done server edits\u2026 \u2014 2026-09-25: Eames and Saul run python3 src/journal.py --root .journal upgrade after their viewer builds; it packs every file in src, so a server handler I was halfway through writing went live and raised on every PostToolUse hook. While designers work in parallel, keep server edits whole between tool calls (write and test in the scratchpad first), and reinstall after reverting anything.; rule 43 \u2014 A request or hook over its budget is fixed before the next release \u2014 Comment 1151 on this rule. When the faults feature reports a request, a hook or a command slower than its budget, file it as a to-do at once. It does not jump ahead of the work in hand, but no version is published while one is still open: profile it, fix it, and verify the new time before the release goes out. The budget is 50ms, because everything runs locally against files.", "meta": {"from": "journal"}}
{"content": "rule 41 \u2014 Keep moving, run the whole suite before every commit, never wait \u2014 The full suite runs in about seven seconds: .venv/bin/python -m pytest -q --timeout=300 -n auto. Run it before every commit instead of picking tests by name. Group rows that sit in the same code into one sitting: write them all, test once, commit once. And never wait, not for a subagent, a build, or an answer you can carry on without. Dispatch it and keep working. If you truly are waiting on something, say so in the work log.", "meta": {"from": "journal"}}
{"content": "fact 13 \u2014 This live session runs the installed copy in .journal/journal.pyz \u2014 The running journal (server, hooks, CLI) runs from .journal/journal.pyz with its viewer and skills in .journal/src, never from the repo. A change in the repo reaches it only through python3 src/journal.py --root .journal upgrade, which packs the zip again. A commit alone changes nothing that is running.", "meta": {"from": "journal"}}
{"content": "law L3 \u2014 Read narrowly - grep for the line, sed a range, head the file; never\u2026 \u2014 Everything a tool returns stays in the context for good and is paid for on every turn after it. Search before you read, read the range you need, and cap output with grep, head or tail. Read a whole file only when you need all of it.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1876, Proposal to improve the Orchestrating a board sequence, is still\u2026 \u2014 it is blocked because: waits for the user to pick an option in doc 63. If it is not any more, journal todo unblock 1876. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "rule 35 \u2014 Write clean code - one funnel per kind of operation, never the same\u2026 \u2014 Every kind of operation has one funnel: one method that creates, one that saves, one that refuses, one that formats. A second method that does the same thing under another name splits the behaviour, and the two drift apart. Before writing a method, search for the one that already does it and extend that. scripts/checks/funnels.py finds bodies written twice.; rule 47 \u2014 The journal sets itself up once, when the server starts, never per\u2026 \u2014 Messages 2220 and 2224. Discovering features and their handlers, seating the feature rows and the rename sweep happen once, at server boot, and again only when a feature is switched on or off, a plugin changes or an environment is added: features.load keeps a set-up generation per journal (SEATED) and redoes the work only when that generation moves. A command, a request or a hook uses what is already there; nothing in their path may rediscover handlers or rescan folders. A cost that repeats per call is a bug to fix, not a budget to raise.", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1876, Proposal to improve the Orchestrating a board sequence, is still\u2026 \u2014 it is blocked because: waits for the user to pick an option in doc 63. If it is not any more, journal todo unblock 1876. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "your command ran 35s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "your wait for the suite before releasing 2.188.0 is over, because you are\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1876, Proposal to improve the Orchestrating a board sequence, is still\u2026 \u2014 it is blocked because: waits for the user to pick an option in doc 63. If it is not any more, journal todo unblock 1876. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.", "meta": {"from": "journal"}}
{"content": "fact 24 \u2014 An answer followed by tool calls can be missing from Claude's\u2026 \u2014 Seen 2026-09-24 for messages 9391-9404: text blocks opening with [!reply:n] that were followed by tool calls never appeared in the session's jsonl (only thinking and tool_use rows did), so the journal never saw them and the replies were lost. When a turn goes on after answering, send the answer with journal message reply <n> \"<text>\" instead of the tag.; rule 52 \u2014 A chat mark for something the user did sits on the user's side \u2014 Message 10960 (2026-09-25): marks for the user's own actions, such as answering a question, are right-aligned like the user's messages. A mark is put there by giving its card side=user.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 3621ms last (761ms of it working), against a budget of 50ms. Seen 152 times.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/agent/34/edits is slower than its budget \u2014 820ms last (70ms of it working, 6ms collecting garbage), against a budget of 50ms. Seen 11 times.", "meta": {"from": "journal"}}
{"content": "the todo tag does this in one step \u2014 [!todo=\"the title\"] files it with the turn as its brief; it runs only when it opens the last text of your turn", "meta": {"from": "journal"}}
{"content": "rule 40 \u2014 A feature is named for what it is, never for its machinery \u2014 Messages 599, 600 and 703. A feature is a capability the user would name and would think of switching off. File tracking, a write gate, a phrase bank, a tree diff are services used inside a feature, not features of their own: they live in the feature they serve. Before adding a directory under features/, say what the user would call it; if the answer names a mechanism, it belongs inside something else. Report 16 holds the grouping this implies.", "meta": {"from": "journal"}}
{"content": "your message 11277 names 583 without saying what they are \u2014 put the type before each number, like message 1712 or to-do 644, so the chat links it: journal message edit 11277 \"<the text>\"; fact 9 \u2014 Every public method on a controller becomes a journal command \u2014 The CLI is generated from the controllers: each public method of Controller, or of a typed controller, turns into journal <noun> <method>. A helper added to the base class therefore becomes a command on every type \u2014 which is how journal <type> handled and journal <type> refuse came to exist, from the CRUD funnel and the refusal funnel. An internal helper on a controller is named with a leading underscore, as _shaped and _status already are, or it ships as a command nobody meant.", "meta": {"from": "journal"}}
{"content": "your wait for the suite on the boot warm-up changes is over, because you are\u2026 \u2014 say journal work await \"<what you wait for>\" again if you are still only waiting", "meta": {"from": "journal"}}
{"content": "your command ran 32s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1876, Proposal to improve the Orchestrating a board sequence, is still\u2026 \u2014 it is blocked because: waits for the user to pick an option in doc 63. If it is not any more, journal todo unblock 1876. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; the await tag on did not run \u2014 ! nothing is open: journal work start \"<the work>\" first - add what is missing to the tag itself; commit 46556f30e closed to-do 1886 and ended work 1591 \u2014 The rows and the work are done; take the next one.; you committed work - if a meaningful piece landed, write an update \u2014 journal report changes, then journal report recap \"<one or two sentences>\"; it is pinned at the bottom of the chat. Skip it when the work is small.", "meta": {"from": "journal"}}
{"content": "fact 23 \u2014 Every upgrade brings system sequences and their triggers in line\u2026 \u2014 install.py runs ship_sequences after the migrations on each upgrade, so features/sequences/shipped.py is the whole source: change its wording and the next upgrade updates every journal, no migration needed. Shipped rows carry system=True and are read-only for everyone but SYSTEM (controllers/base.py _shipped).", "meta": {"from": "journal"}}
{"content": "1 new message 11281 - answer by opening your turn with [!reply:11281]", "meta": {"from": "journal"}}
{"content": "rule 42 \u2014 Every user-facing text passes the formatters before it leaves the\u2026 \u2014 Not only a brief. A title, an abstract, an outcome and every section body are read by a person, so each goes through the same formatters on its way to the viewer \u2014 chat turns, activity items, to-do rows, inspector pages, docs alike. One field formatted out of five is not a rule, it is an accident, and it is how a raw tag ended up in the activity list after the tags feature had been stripping them for weeks. When a new field carries words a person reads, it joins the list in the same place.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/dashboard is slower than its budget \u2014 104ms last (57ms of it working), against a budget of 50ms. Seen 160 times.; 1 new message 11285 - answer by opening your turn with [!reply:11285]; doc 63 updated", "meta": {"from": "journal"}}
{"content": "report 52 cites nothing it was built on \u2014 you read doc:63 just now: journal report link 52 \"<ref>\" for whichever it came from", "meta": {"from": "journal"}}
{"content": "work 1212, Fix the findings the new code-commandments rules raise, is still\u2026 \u2014 it was parked because: The user set the code-commandments findings aside; they wait for the user's go, on the sins branch. journal work resume 1212 picks it up again.; todo 1372, Resources scoped to an environment or the whole project, is still\u2026 \u2014 it is blocked because: The user said to keep scopes as they are for now (message 8987). If it is not any more, journal todo unblock 1372. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1587, Codex's approval prompt shows in the chat with Allow and Deny, is\u2026 \u2014 it is blocked because: Needs a real Codex approval prompt on screen to confirm its words; the Codex sessions here run without approvals. If it is not any more, journal todo unblock 1587. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1623, Every feature skill teaches using the journal, never its internals\u2026 \u2014 it is blocked because: Waits for the user's go (question 146: 'Don't start acting on it yet'). If it is not any more, journal todo unblock 1623. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1652, Agents learn that journal search covers history and messages, is\u2026 \u2014 it is blocked because: Waits for a discussion with the user (message 9776). If it is not any more, journal todo unblock 1652. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1735, Remove the bug-report sequence once the Go Rewrite board is done\u2026 \u2014 it is blocked because: waits until the Go Rewrite board in code-commandments is finished. If it is not any more, journal todo unblock 1735. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1876, Proposal to improve the Orchestrating a board sequence, is still\u2026 \u2014 it is blocked because: waits for the user to pick an option in doc 63. If it is not any more, journal todo unblock 1876. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1877, Apply the accepted changes to the orchestrating sequence, is still\u2026 \u2014 it is blocked because: waits for the user to accept the orchestrating proposal. If it is not any more, journal todo unblock 1877. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; todo 1734, Judge today's changed files against the code commandments, is still\u2026 \u2014 it is blocked because: Waiting for every open to-do list item to be completed. If it is not any more, journal todo unblock 1734. If it is, tell the user in the chat what it waits on, in their terms, and propose how to clear it.; law L1 \u2014 Every subagent dispatch names its model and chooses the least\u2026 \u2014 Use a fast, economical model for mechanical work with a known answer, a capable general model for careful implementation, and the strongest model only when the task turns on difficult judgement. Inheriting the orchestrator's model is not a model choice. If the dispatch API cannot accept a model, that operation is exempt.; law L4 \u2014 Follow-up work goes back to the subagent that did the first part\u2026 \u2014 A subagent that drew a design, wrote the code or ran the research keeps what it learned. When the user asks for a change to its work, continue that subagent with a message rather than dispatching a new one that has to rediscover everything; start fresh only when the earlier one is gone or the new work is unrelated.; law L5 \u2014 Every subagent dispatch names the agent - a human name, a little\u2026 \u2014 A name is how the user and the chat tell subagents apart and how they are messaged later; an id or a task line is not a name. Start the dispatch's description with the name, a colon, then the task, such as \"Dr. Einstein: profile the slow hooks\" or \"Coco Rams: draw the plan card\". A designer can borrow from famous designers, a researcher from famous scientists, mixed up for fun.", "meta": {"from": "journal"}}
{"content": "1 new message 11288 - answer by opening your turn with [!reply:11288]", "meta": {"from": "journal"}}
{"content": "rule 48 \u2014 The viewer is built from its component library, and pages only\u2026 \u2014 Message 4258. Every visual piece the viewer shows more than once, or that a user would recognise as the same kind of thing (a dialog, a side panel or inspector, a dropdown, a list row, a switch, a button), is one component in web/src/kit, extracted aggressively, and every page composes those components instead of building its own copy. Before writing markup or styles in a page, look for the kit component that already does it and extend it with a prop; a second hand-built version is a bug. The side panel that animated in but not out, while a separate skill panel did both, is the example.", "meta": {"from": "journal"}}
{"content": "report 52 updated", "meta": {"from": "journal"}}
{"content": "request GET /api/main/family is slower than its budget \u2014 370ms last (273ms of it working, 19ms collecting garbage), against a budget of 50ms. Seen 19 times.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/message is slower than its budget \u2014 70ms last (66ms of it working), against a budget of 50ms. Seen 1 time.", "meta": {"from": "journal"}}
{"content": "rule 27 \u2014 Name a declaration with the word a reader already knows \u2014 An attribute, a variable or a field gets the ordinary programming word for what it holds, not an evocative one. was, heard and alone were poetry; aliases, notify_actions and urgent_actions are what they are. The test: could a reader who has never seen this codebase guess what it holds from the name alone? Prose belongs in the help text and the abstract, where it is read as prose. This does not license abbreviations \u2014 a plain word in full, not a short one.", "meta": {"from": "journal"}}
{"content": "the viewer sent GET /api/summary twice at once \u2014 two requests to GET /api/summary were in flight at once GET /api/summary Seen 1 time.", "meta": {"from": "journal"}}
{"content": "request GET /api/main/comment is slower than its budget \u2014 218ms last (167ms of it working), against a budget of 50ms. Seen 1 time.", "meta": {"from": "journal"}}
{"content": "rule 49 \u2014 A dialog whose content grows keeps one fixed height, and its content\u2026 \u2014 Message 5361, after asking more than once: a dialog that shows output as it arrives (install, update, logs) opens at its final height and never jumps; only its content scrolls.", "meta": {"from": "journal"}}
{"content": "law L2 \u2014 Every subagent is bound to a concrete job; never dispatch a generic\u2026 \u2014 Use the most specific available agent type whose declared purpose matches the assignment. On providers without agent types, give the dispatch a concrete task name and bounded prompt. If no suitable specialization exists, keep the work in the main agent instead of manufacturing an unscoped helper.", "meta": {"from": "journal"}}
{"content": "your command ran 30s in the foreground and was moved to the background \u2014 carry on with other work; you are told when it ends. Start a command you expect to take long in the background yourself", "meta": {"from": "journal"}}
{"content": "the hook hit an error \u2014 journal: the hook hit an error and kept going; the last of it is below and the whole of it is in .journal/runtime/engine.log. Fix it, then say so. the hook got no answer from the server 1 times (codes 000)", "meta": {"from": "journal"}}
{"content": "chat etiquette - a line from the journal is an instruction, not a message\u2026 \u2014 keep a turn that only handles a journal line out of the chat with [!internal]; what the user needs to know still goes to the chat", "meta": {"from": "journal"}}
