agentleFS
mattiaceruttimattiacerutti/supernova/AGENTS.md

supernova

AGENTS.md194 starsChanged 22 days agoMITView on GitHub

Supernova is an opinionated development environment built on Pi. The Pi SDK owns agent execution; we build the desktop and browser experience, session workflows, and recovery around it. Understand the constraint, then choose the smallest change that makes the correct behavior clear. We want simple systems, not machinery that looks impressive. After understanding the problem, stop at the first option that meets the requirements:

  • Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.

    Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.

  • In this repository4 other files it gives its agents.

The file

Show its rules and text

We split this AGENTS.md into the rules it gives an agent

19 rules. About 1 is common, 16 are distinctive, and 2 are very specific to this project.

  • ≈1

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈16

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Correctness before convenience: Keep behavior predictable through reconnects, session restarts, and partial streams.

    line 8
  2. Distinctive:

    After understanding the problem, stop at the first option that meets the requirements:

    line 25
  3. Distinctive:

    Does the codebase already solve it?: Look for existing helpers, types, components, and patterns before writing replacements.

    line 28
  4. Distinctive:

    Does the standard library or platform cover it?: Prefer built-in behavior over custom machinery: CSS over JavaScript layout logic, native …

    line 29
  5. Distinctive:

    Does an installed dependency solve it?: Use it before adding another.

    line 30
  6. Distinctive:

    Only then, write custom code: Keep it as small and direct as correctness and readability allow.

    line 31
  7. Distinctive:

    No speculative features, configurability, or scaffolding for later.

    line 33
  8. Distinctive:

    Prefer removing unnecessary machinery over adding another layer.

    line 34
  9. Distinctive:

    Never simplify away trust-boundary validation, protection against data loss, security, accessibility, or explicitly requested behavior.

    line 36
  10. Distinctive:

    When a deliberate simplification has a known limit, document that limit and the condition for revisiting it near the code.

    line 37
  11. Distinctive:

    Read enough surrounding code to understand the change.

    line 42
  12. Distinctive:

    Don't improve adjacent code, comments, or formatting just because you're there.

    line 43
  13. Distinctive:

    Remove imports, variables, functions, and other code that your changes make unused.

    line 44
  14. Distinctive:

    Every changed line should serve the requested outcome.

    line 45
  15. Distinctive:

    Run relevant checks, fix failures caused by your changes, and repeat until the success criteria are met or you're genuinely blocked.

    line 53
  16. Common:

    Don't overwrite unrelated work or use live sessions, credentials, or workspace state as disposable test fixtures.

    line 58
  17. Distinctive:

    Use Bun for dependencies and scripts, TypeScript for code, and workspace packages for shared boundaries.

    line 70
  18. Very specific:

    When comparing other projects or checking upstream patterns, look in .context/ first.

    line 92
  19. Very specific:

    Add changelog entries for user-facing, release-relevant changes under ## [Unreleased] in CHANGELOG.md.

    line 100

≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
AGENTS.md

Supernova

Supernova is an opinionated development environment built on Pi. The Pi SDK owns agent execution; we build the desktop and browser experience, session workflows, and recovery around it.

What we care about

  • Speed is a feature. Long sessions, rapid streams, and dense timelines should stay responsive. Consider rendering, network, and runtime costs, not only the empty-screen experience.
  • Correctness before convenience. Keep behavior predictable through reconnects, session restarts, and partial streams. A simpler implementation is not a win if it loses work or hides failure.
  • Polish is part of the work. Loading states, keyboard interaction, scrolling, spacing, and smooth transitions belong to the feature, not a later cleanup pass.
  • Remote by design. The server owns execution, credentials, and workspace access. Paths refer to the server's machine. Desktop is a shell, not a second runtime.

How to work

Understand the constraint, then choose the smallest change that makes the correct behavior clear. We want simple systems, not machinery that looks impressive.

Think before coding

  • State assumptions that affect the result. If multiple interpretations would lead to different implementations, lay them out rather than silently choosing one.
  • Name uncertainty. When an ambiguity changes scope, behavior, or safety, ask before proceeding; don't code around something you haven't understood.
  • Surface tradeoffs and point out simpler approaches. Push back when the requested approach adds complexity without solving a real constraint.
  • Understand the actual flow before choosing a shortcut. For bugs, inspect callers and sibling paths, then fix the root cause at the shared boundary rather than patching only the reported symptom.

Simplicity first

After understanding the problem, stop at the first option that meets the requirements:

  1. Does this need to exist? Skip speculative work; explain what concrete need would justify it.
  2. Does the codebase already solve it? Look for existing helpers, types, components, and patterns before writing replacements.
  3. Does the standard library or platform cover it? Prefer built-in behavior over custom machinery: CSS over JavaScript layout logic, native capabilities over a new dependency, while preserving the app's design and accessibility conventions.
  4. Does an installed dependency solve it? Use it before adding another. Don't add a dependency for something a few clear lines can do.
  5. Only then, write custom code. Keep it as small and direct as correctness and readability allow.
  • No speculative features, configurability, or scaffolding for later. Extract shared behavior for real duplication, not hypothetical future callers. Avoid single-use factories and interfaces that add no meaningful boundary.
  • Prefer removing unnecessary machinery over adding another layer. Keep the diff and number of files small, but don't compress code into clever one-liners or bypass established ownership boundaries.
  • Handle real failure modes, not impossible scenarios already ruled out by the boundary. Don't preserve backward compatibility unless requested.
  • Never simplify away trust-boundary validation, protection against data loss, security, accessibility, or explicitly requested behavior. Among equally simple options, choose the one that handles real edge cases correctly.
  • When a deliberate simplification has a known limit, document that limit and the condition for revisiting it near the code. Obvious code needs no comment defending its simplicity.
  • Review the result for unnecessary machinery. If a substantially smaller implementation would be equally clear and correct, simplify it before calling the work done.

Surgical changes

  • Read enough surrounding code to understand the change; read files fully for audits and broad rewrites. Match existing style and conventions.
  • Don't improve adjacent code, comments, or formatting just because you're there. Refactor only where the requested change needs it.
  • Remove imports, variables, functions, and other code that your changes make unused. Flag unrelated dead code rather than deleting it.
  • Every changed line should serve the requested outcome. Ask before removing intentional functionality outside the agreed scope.
  • Code is the memory, not comments. Write a comment only for what the code cannot say: why, which invariant, which external quirk. Do not restate names or signatures, and do not trust a stale comment over the code; fix or delete it. See Coding standards.

Goal-driven execution

  • Turn the request into observable success criteria before implementing. “Make it work” is not a verification plan.
  • For a bug fix, reproduce the failure with a focused regression test, then make it pass. For validation, cover invalid inputs and the expected failures. For a refactor, verify that behavior is preserved before and after.
  • For multi-step work, give a short plan pairing each step with how you'll verify it. Keep routine, trivial edits lightweight.
  • Run relevant checks, fix failures caused by your changes, and repeat until the success criteria are met or you're genuinely blocked. Don't stop at the first implementation when verification is part of the task.
  • Report what you checked and what remains unverified. Scale verification to the risk; a typo fix does not need a full test run.

Working boundaries

Don't overwrite unrelated work or use live sessions, credentials, or workspace state as disposable test fixtures. Ask before destructive actions or restarting processes you didn't start. If a task conflicts with repository guidance, call out the conflict and get confirmation before overriding it.

Where code lives

PathOwns
apps/serverHeadless Node API, CLI, runtime composition, HTTP/WebSocket routing. Never hosts or bundles the UI.
apps/desktopElectron shell, bundled renderer loading, local API child, OS integration.
packages/webReact/Vite client. No native or filesystem assumptions.
packages/agent-runtimeNode-only Pi integration: feature modules, the session runtime, and service composition.
packages/contractsEnvironment-neutral Zod schemas, Chord service contracts, and serializable domain types.

Use Bun for dependencies and scripts, TypeScript for code, and workspace packages for shared boundaries. Run verification commands from the repository root; this is a Turborepo workspace.

Read what the task needs

This is the repository's only AGENTS.md. Shared and area-specific conventions live in docs/internal/; don't add nested instruction files. Read the relevant guide when working in its area, not the whole table before every edit.

When working on…Read
Product direction and feature tradeoffsProduct
Package boundaries, runtime ownership, desktop/browser hostingArchitecture
Coding hygiene, quality, file/folder structure, commentsCoding standards
React UI, styling, client state, server accessWeb
Runtime features, Pi integration, backend organizationAgent runtime
Shared schemas, service payloads, errors, exportsContracts
Sessions, streaming, reconnects, persistence, recoverySession runtime
Checkpoint capture, restore, Git preservationCheckpoint system
Local setup and verification commandsDevelopment
Writing, placing, and running testsTesting
Desktop icon assets and generationIcons
Changelog entries and publishing releasesRelease
Writing or reorganizing documentationDocumentation

When comparing other projects or checking upstream patterns, look in .context/ first. Available references, for example, include .context/pi; inspect the directory rather than assuming a mirror exists.

Documentation

docs/ contains guides for people using Supernova. docs/internal/ contains conventions, architectural decisions, and procedures for people and agents building it.

Code is the source of truth for implementation; docs preserve philosophy, design reasoning, coding standards, structural conventions, constraints, and procedures. Trim clear implementation duplication and repetition, not the substance or voice that teaches judgment. Keep each subject in one home and rewrite stale sections rather than appending work logs. See Documentation.

Add changelog entries for user-facing, release-relevant changes under ## [Unreleased] in CHANGELOG.md. Internal refactors, tests, and documentation-only changes don't need entries unless they affect released behavior or release operations.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.