Repository navigation
AGENTS
This file is the shared source of truth for every agent working on RISE
(Cursor, Grok, Claude Code, Codex, and any other agent that reads AGENTS.md)
and for humans. It is loaded into every session, so it holds only what applies
to every task. The full frameworks live in skills:
- Superpowers workflow:
.agents/skills/(pinned in.agents/skills/SOURCE.txt) - First-principles engineering:
.cursor/skills/elon-principles/SKILL.md - Karpathy coding guidelines:
.cursor/skills/karpathy-guidelines/SKILL.md
Precedence: the human partner's direct instructions, then this file, then skills, then your defaults.
Before any response or action, including clarifying questions, read
.agents/skills/using-superpowers/SKILL.md and follow it. If a skill in
.agents/skills/ could apply, read it and follow it exactly. Announce "Using
[skill] to [purpose]". If the skill has a checklist, make one todo per item.
Skip a skill workflow only when the human partner has said to.
- Reduce the problem to what must be true. Everything else, including existing code, convention, and "how it is usually done", is a recommendation.
- Apply these steps in order. Never skip ahead:
- Question every requirement. Name who needs it and why.
- Delete the part or process that fails that question.
- Simplify what is left. Never optimize something that should not exist.
- Shorten the cycle time.
- Automate last. Never automate a broken process.
- Compare the complexity of the result with the complexity of the essential work. A large gap means layers, wrappers, or dependencies to delete.
- The tests, tooling, and process that produce a feature matter as much as the feature. If a foundation is wrong, rebuild it rather than patch it.
- State your assumptions. When a request has more than one reading, name the readings instead of silently picking one.
- Decide and proceed when the choice is reversible and the answer follows from the request, the code, or a sensible default. Stop and ask when the choice is hard to reverse, changes what the user gets, or you are confused.
- Write the minimum code that solves the problem. No speculative features, single-use abstractions, unrequested configuration, or handling for impossible cases.
- Touch only what the task needs. Match the surrounding style. Do not refactor or reformat adjacent code. Remove only what your own change made unused; mention other dead code instead of deleting it.
- Turn the task into a check you can run: reproduce a bug in a test, then make it pass. Loop until the check passes. Never claim a result you did not see.
- Keep status short. Lead with bad news and what it blocks.
- Use plain words. Spell out abbreviations a newcomer would not know.
- One owner per part, task, and pull request.
Run the decision, feature, plan, or problem through this list and say plainly where it fails:
- Was every requirement questioned, and what was deleted before anything was simplified or added?
- Does every layer, dependency, and line earn its place?
- Were the fundamentals understood before the details?
- Is the result verified by something that ran, not by reasoning alone?
- Is the experience for the reader of RISE, and for the next contributor, flawless?
The non-obvious things. Standard commands live in package.json scripts and
the Contributing section of README.md. Known pitfalls and the reasons behind
unusual decisions live in docs/PROJECT-KNOWLEDGE.md.
RISE is a vanilla-JS single-page app built with Vite. Reading and
browser-local work stay client-side. Its production Cloudflare Worker serves
the app and a static public catalog built from src/content/decision-catalog.json.
RISE spends no shared inference: reader recommendations use the reader's own
OpenRouter account or pinned Kev on the reader's computer. Former shared model
routes return 410. RISE in ChatGPT is Composer: the host model composes one
sealed Current in a single MCP tool call, the Worker admits it, and RISE
presents it under the reader's control. Dive and realtime Live are out of
current scope; the live Realtime page stays switched off by default. See
docs/USER-OWNED-AI.md, docs/plans/LIVE-MCP.md and
the Composer decision.
- Node: the repo pins
20.19.0(.nvmrc,.node-version);enginesalso allows>=22.12.0. - Install dependencies with
npm ci. - Run
npm run audio:hydratebefore local recitation, the full unit suite, or browser tests. It restores ignored WAV files from the pinned audio branch. - The full test suite needs two system tools:
ffmpegand a Playwright Chromium browser. If Chromium is already installed (cloud agent images usually carry one), use it; otherwise runnpx playwright install chromium, or add--with-depsif Chromium cannot launch because shared libraries are missing. Without these tools the two tests noted below fail or skip rather than being stubbed.
- The full unit suite (
npm run test:run) runs for minutes. Two paths need the system tools above:tools/render/encode-mp4.test.jshands real bytes toffmpeg, andtools/render/chamber-paint.test.jslaunches Playwright Chromium against a live Chamber stage. - Browser tests (
npm run test:e2e) are self-contained:scripts/playwright-global-setup.mjsbuilds the app and startsvite previewon127.0.0.1:4317withVITE_RISE_ARCHIVE_REVIEW=1. Do not start a server manually. They run Chromium only, one worker, with autoplay forced on (Web Audio).npm run test:e2e:gateis the fast subset; run it before pushing. - There is no lint script. The pull request
CIjob runs, in one job:node scripts/ci-hygiene.mjs,npm run security:audit,npm run security:compat,npm run docs:diagram(which must leavedocs/specs/ARCHITECTURE.mdunchanged), a fixed set of fast unit tests includingsrc/core/system-design.test.js,npx vite build, andnpm run measure:first-load, which holds whatdist/index.htmlfetches to a ratcheting brotli budget declared in the script, then the browser gate (npm run test:e2e:gate, a few minutes). It runs for every pull request, including prose-only changes. The fast unit test list, and the number of files it must collect, are invitest.fast.config.js. - After a merge, the
CIjob runs again onmainand uploads thedist/it built; theproductionjob waits for it and deploys that artifact without rebuilding. The full unit, Scriptorium, and sharded browser suites run onmainafter that and on manual dispatch; they do not hold deployment. -
docs/specs/ARCHITECTURE.md§3 carries a generated import graph between<!-- BEGIN GENERATED DIAGRAM -->markers. Editscripts/build-architecture-diagram.mjs, never the diagram. The rest of that file is hand-written and guarded bysrc/core/system-design.test.js. - This file is published to the repository wiki by
scripts/build-wiki.mjs. Any relative Markdown link in it must point at a file in the tree, or the wiki build fails. - The main-branch ruleset requires one check and no human approval:
CI. It also requires every review thread resolved. Never make a check that only runs after merge required; it blocks pull requests forever. -
Codex feedback(.github/workflows/codex-feedback.yml) is not a check. It runs when Codex submits a review with unresolved findings and answers them under the Reviewer findings contract above. It is not required and must never be.
-
.mcp.jsoninvokes private MasterMind usage accounting. Install itstools/githits-usagepackage with Node 24 and runinstall.mjs. Before starting the agent, load the absoluteGITHITS_USAGE_NODEexecutable andGITHITS_USAGE_HOMEtool directory from ignoreddata/environment.json. Headless agents also setGITHITS_API_TOKEN; interactive OAuth uses the private bridge. SeeCLAUDE.md. Never commit credentials or restore a direct unaccounted hosted fallback. - Use it for the exact source and docs of the dependency version in
package-lock.json, and for vulnerability, changelog, and upgrade checks before bumping a dependency. - It indexes public open-source code only. Never send it private RISE code, tokens, secrets, or personal data; it cannot answer questions about this repository.
- Before selecting work, read the product library and tracker and the applicable Reader or Composer + RiseSDK direction. Shared foundation work has its own lane.
- Run
npm run roadmap:check; claim one task indocs/product/tasks/with one owner, and honor dependencies and acceptance criteria. Coordinate before replacing another owner. - Update the task record in the same PR as the work, using the validated CLI described in the product library. Link exact PR/commit/test evidence and separately record human observations. Keep branch, merged, deployed and accepted distinct; a green build cannot pass human gates.
- Review recent unmapped changes and link them to tasks when justified. Do not automatically complete tasks from PR status or copy historical test counts as current evidence.
- The local read-only team dashboard runs with
npm run roadmap:dev; product discussions are indexed underdocs/product/. Hosting follows a separate content/access review.
- For independent backend and client changes, use separate worktrees and branches. Agree on the endpoint shape and error behavior before coding.
- Give one agent
worker/*and its tests, anothersrc/*and its tests, and a third read-only review when useful. Each coding agent owns one narrow pull request. - Keep
.github/workflows/*,wrangler.production.jsonc, the lockfile, integration, and production verification with the coordinating agent. - Merge through the required
CIcheck, then verify the exact live release. Do not add an agent service or another required check for fan-out.
Codex reviews every pull request and opens a review thread per finding. The author agent, not a human, answers every thread, with exactly one of two replies, then resolves it:
-
Fixed in <short sha>: <one line>after the smallest correct change and the narrowest test that proves it. Commit asCodex: <what changed>. -
Not a defect: <one-line reason>when the finding is style, naming, preference, or speculative hardening. A defect is something that would ship a bug, a security hole, data loss, a broken build, or a failing test.
A thread left unanswered is a merge blocker, not an opinion. When the author
session is gone, .github/workflows/codex-feedback.yml answers in its place
(Sonnet, bounded turns, two rounds per pull request) and arms auto-merge.
Humans review the product at the live site, not the pull request.
-
npm run devserves onhttp://localhost:5173/. The Vite dev server also mounts dev-only middleware (CuriaPOST /__curia/apply, Export-MP4) that does not exist in the production build. - Quickest path through the core reading experience: Home → Library →
Keystones (or open
/try-rise) → pick a canonical reading (e.g. Meditations) → Enter reading. Text then streams over time with generative visuals; the Page control switches to a paginated text view. - The app persists state in the browser (localStorage and IndexedDB), so a reload may land directly on Home and skip the first-run intro.
- Cursor Cloud: the base image already carries
ffmpegand Chromium's system libraries, so the startup script only needsnpm ciandnpx playwright install chromium(nosudoor apt). - Claude Code on the web: Chromium is preinstalled and Playwright is
configured to find it. Do not run
npx playwright install.
Published from AGENTS.md. Edits made here are overwritten on the next push to main.
Start here
- COMPOSER-FIRST-ROADMAP
- VISION
- PROJECT-KNOWLEDGE
- ARCHITECTURE
- SYSTEM-DESIGN-REVIEW-2026-08-22
- ACCOUNT-SAVES
- RELEASING
- PLUS-CUSTOMER-LIFECYCLE
- AGENTS
Release
Pilot
- LIVE-CURRENT
- LIVE-HANDOFF
- LIVE-MCP
- DIRECTORY-SCREENSHOTS
- INSPECTOR-RUN-2026-10-10
- CLAUDE-RUN-2026-10-10
- CREATIVE-CONTROL-EVALS
- PERCEPTION-EVAL
- SOUND-LEVELS
- WORDING
- RUN-2026-10-08
- COMPOSER-INSTRUMENTS
- CHATGPT-DEMO
- EMBED-WITNESS
- RISE-GATE0
- CHATGPT-HOST-2026-10-04
- LIVE-002-HOST-2026-10-05
- EMBED-STAGE-HOST-2026-10-07
- RELEASE-GATES-2026-10-07
- EMBED-SAFETY-2026-10-05
- LIVE-GEMINI
- LIVE-EVALUATION
- LIVE-RED-TEAM
- CURRENT-CONSOLIDATION
- RISE-CHANGES
The Archive - texts and their editing
- ARCHIVE-CANON-SPEC
- ARCHIVE-CLEANSING-SPEC
- CORPUS-REVIEWER-PROMPT
- TYPESETTING-CANON
- PHRASE-CHUNKING-STUDY
- CHUNKER-AWARENESS-STUDY
- LIBRARY-SPEC
- SOL-PD-ACQUISITIONS-DOSSIER-LITERATURE-2026-07-28
Authoring - scores, rooms, and rendering
- EXPERIENCE-PROGRAM-SPEC
- LIVE-CURRENT-EVENTS-V1
- RISE-CURRENT-V1-SLICE
- RISE-SDK
- SCRIPTORIUM-SPEC
- WORKSHOP-COMPOSITION-STUDIO-SPEC
- AGENT-COMPOSITION-AND-RENDER-SPEC
- NARRATION-LANE-SPEC
- RECITATION-SPEC
- SCRIPTORIUM-STRENGTHENING-SPEC
Reading surfaces
- PAGE-MODE-SPEC
- RHYTHMIC-VISUAL-PRESENCE-SPEC
- LATERAL-TRAVERSAL-SPEC
- CONTINUOUS-FIELD-SPEC
- JEV-VARIANCE
- INVOCATION-SKINS
- PHASE-2-SAFETY-SPEC
- SPATIAL-CHAMBER-SPEC
- Premium_Mobile_Chamber
Imagery - what may be shown, and on whose authority
- MUSEUM-ATLAS
- SOURCE-CURATION-SPEC
- SOURCE-EXPANSION-SPEC
- ATRIUM-IMAGERY-SPEC
- PERICOPE-IMAGERY-SPEC
- icon-museum-request-draft
- TEXT-ATTUNED-IMAGERY-SPEC
The Chapel
Direction and unbuilt work
Affect and the Emotions room
Reading decision service and retired gate
Product direction and team tracking
- README
- READER-DIRECTION
- CONSOLIDATED-READER
- COMPOSER-FIRST-ROADMAP
- TRACKER-DESIGN
- 2026-10-03-direction-decisions
- 2026-10-04-composer-decision
- 2026-10-05-consolidated-reader-decisions
- 2026-10-05-embed-stage-decision
- 2026-10-06-score-speech-service-roadmap
- 2026-10-07-current-with-a-look
- 2026-10-07-reader-control-and-replay
- 2026-10-05-one-colour-vocabulary-design
- 2026-10-07-chrome-follows-theme
- 2026-10-07-gallery-follows-with-works
- 2026-10-05-canonical-home-design
- 2026-10-04-reader-evidence
- 2026-10-original-performance-roadmap
- 2026-10-08-voice-hardening-2-findings
- 2026-10-09-feelings-sounds-parked
- 2026-10-10-connector-directory-readiness
- 2026-10-10-connector-submission-packet