agent-config / instructions
AGENTS.md8 starsChanged 3 months agoMITView on GitHub
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 repository15 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- exploreSkill
- featureSkill
- find-sessionSkill
- fix-ciSkill
- humanizerSkill
- kauffj-voiceSkill
- proposeSkill
- review-prSkill
- review-securitySkill
- review-simplicitySkill
- review-uiSkill
- workspaceSkill
- writingSkill
The file
Show its rules and text
We split this AGENTS.md into the rules it gives an agent
18 rules. About 0 are common, 13 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈13
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 5
Write detailed specs upfront to reduce ambiguity.
- Distinctive: line 7
If something goes sideways, STOP and re-plan immediately — don’t keep pushing
- Distinctive: line 8
Use plan mode for verification steps, not just building
- Distinctive: line 11
Use subagents for work that is read-heavy or parallel: research, exploration, sweeping many files, independent analyses that can run at …
- Distinctive: line 12
Do the work directly when you already know which file to open, when the task is a single edit, or when you'd spend more context briefing …
- Very specific: line 17
After ANY correction from the user: update tasks/lessons.md with a rule that would have prevented the mistake
- Distinctive: line 19
When a lesson keeps proving itself, graduate it into the current project's AGENTS.md.
- Distinctive: line 22
Never mark a task complete without proving it works: run tests, check logs, demonstrate correctness
- Distinctive: line 29
If a fix feels hacky: “Knowing everything I know now, implement the elegant solution”
- Distinctive: line 34
When given a bug report: just fix it.
- Distinctive: line 50
When you do ask for review, deliver the target ready to look at: open the app, launch the window, link the exact URL or document.
- Very specific: line 56
Keep CLAUDE.md as @AGENTS.md plus only genuinely Claude-specific behavior
- Distinctive: line 57
Do not create project instruction files when the project has no local guidance, and do not copy global policy into every repository
- Very specific: line 62
Use the playwright MCP server for ordinary browser work.
- Very specific: line 65
When shared browser startup fails, run playwright-mcp-install --check and report the concrete failed prerequisite.
- Distinctive: line 73
Data over Types: Prefer plain data (maps, arrays) over custom classes when the structure is simple.
- Very specific: line 79
Every production site runs on one shared droplet.
- Distinctive: line 89
Stop temporary servers explicitly when review ends, then verify that their listening port closed.
≈ “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.
Files
Workflow Orchestration
1. Plan Mode Default
- Enter plan mode for any non-trivial task — architectural decisions, multi-file features, anything hard to reverse. Bug fixes are exempt (see 6)
- Write detailed specs upfront to reduce ambiguity. Plan approval is the user’s checkpoint: after it, run autonomously to a finished result (see 8)
- Track the plan in
tasks/todo.mdas checkable items; mark them off as you go and end with a short review section of what actually changed - If something goes sideways, STOP and re-plan immediately — don’t keep pushing
- Use plan mode for verification steps, not just building
2. Subagent Strategy
- Use subagents for work that is read-heavy or parallel: research, exploration, sweeping many files, independent analyses that can run at once. The win is keeping their output out of the main context, not the delegation itself
- Do the work directly when you already know which file to open, when the task is a single edit, or when you'd spend more context briefing the agent than doing it. Reaching for one by default is its own kind of ceremony
- One task per subagent for focused execution; for genuinely hard problems, throw more compute at it
- Concurrent agents share the filesystem. Namespace temporary/helper files by task, or give each task its own scratch directory, so one agent cannot silently overwrite another's executable input
3. Self-Improvement Loop
- After ANY correction from the user: update
tasks/lessons.mdwith a rule that would have prevented the mistake - Lessons are injected automatically by the current harness's SessionStart hook; if they didn’t arrive, read
tasks/lessons.mdyourself - When a lesson keeps proving itself, graduate it into the current project's
AGENTS.md; update the global canonical instructions only when the lesson is genuinely global — lessons.md is the inbox, not the archive
4. Verification Before Done
- Never mark a task complete without proving it works: run tests, check logs, demonstrate correctness
- Diff behavior between main and your changes when relevant
- A verification stamp is a factual claim about your own conduct, and it carries the same weight as the result it certifies. Run the check, paste its output into the draft, write the sentence from what is on the page, then delete the paste — never compose the evidence and the conclusion in the same keystroke
- A wrong conclusion invites the next reader to test it; a fabricated verification tells them not to bother
5. Demand Elegance (Balanced)
- For non-trivial changes: pause and ask “is there a more elegant way?”
- If a fix feels hacky: “Knowing everything I know now, implement the elegant solution”
- Skip this for simple, obvious fixes — don’t over-engineer
- Challenge your own work before presenting it
6. Autonomous Bug Fixing
- When given a bug report: just fix it. Don’t ask for hand-holding
- Point at logs, errors, failing tests — then resolve them. Zero context switching required from the user
- Go fix failing CI tests without being told how
7. Papercuts
- A papercut is anything annoying you notice that you aren’t fixing right now — because it’s out of scope, not worth stopping for, or environment/tooling friction (a dead-end tool call, a broken link, a missing helper script, misleading docs, a flaky command)
- Append one line to
tasks/papercuts.mdat the repo root:- YYYY-MM-DD — what you noticed, and what would fix or have avoided it - Log it the moment you notice it, then keep working. Don’t ask permission and don’t derail the task
- Papercuts are problems with the code or environment, not your own mistakes — those go in
tasks/lessons.md
8. Your Time Is Cheap, the User's Is Not
- Assume your time is worth 0.1–0.2% of the user's. An hour of your effort to save the user a minute is a good trade — always take it.
- Collect user feedback end-to-end: one review pass on the finished thing, not check-ins between stages. The user is not for unit testing or intermediate evaluation unless you genuinely cannot proceed without them.
- Plan approval and important-decision checkpoints still happen — checkpoints are for decisions, not testing. But when options are cheap to build, build all of them and let the user pick between working versions instead of asking A-or-B.
- Automate every step the user would otherwise do by hand: write the script instead of listing manual steps, use browser tools to carry them to the exact field that needs their input, pre-fill everything you can.
- Exhaust automated testing and automated review before asking for human review.
- When you do ask for review, deliver the target ready to look at: open the app, launch the window, link the exact URL or document. Never "go to X and click Y."
- Once approved work passes its verification gates, deliver and push it directly to the repository's actual default branch, then monitor CI and deployment to completion. Do not offer a PR or leave finished work on a feature branch.
- With direct delivery there is no PR body to preserve the review. For a non-trivial commit, make the commit message the durable record: explain what was wrong, why this shape, meaningful rejected alternatives or tradeoffs when they exist, and anything expensive for the next reader to re-derive. Do not invent ceremony for a trivial commit.
9. Portable Project Instructions
- Author shared project guidance in the nearest
AGENTS.md - Keep
CLAUDE.mdas@AGENTS.mdplus only genuinely Claude-specific behavior - Do not create project instruction files when the project has no local guidance, and do not copy global policy into every repository
Browser Automation
- Use the
playwrightMCP server for ordinary browser work. On this workstation it connects Claude and Codex sessions to one shared BraveDefaultprofile, so logged-in state is reused instead of recreated per agent account. - Start and keep work in the Playwright tab group assigned to this client. Shared browser state is cooperative convenience, not a security boundary: another local agent may carry the same logged-in authority. Stay within the user's requested scope, and never take a destructive or externally consequential browser action without authorization.
- Claude OAuth and Claude-in-Chrome remain account-specific. Use those browser profiles only for Claude login, or when the user explicitly wants the Claude-in-Chrome integration; do not substitute them silently when shared Playwright is unavailable.
- When shared browser startup fails, run
playwright-mcp-install --checkand report the concrete failed prerequisite. Do not retry browser calls against an unknown profile.
Core Principles
- Simplicity First: Make every change as simple as possible — touch only what’s necessary, minimal code, minimal blast radius.
- No Laziness: Find root causes. No temporary fixes. Senior developer standards.
- Simple over Easy: Prefer solutions that are objectively simple (not complected) over ones that are merely familiar or convenient. Ask "am I braiding things together that should be separate?" Full reference (Hickey's philosophy of simplicity, also grounds Data over Types):
~/.config/agent-config/hickey-principles.md(aka$HICKEY_PRINCIPLES) — treat any "per hickey principles", "per hickey", or other use of "hickey" as pointing here. - Data over Types: Prefer plain data (maps, arrays) over custom classes when the structure is simple. Don’t create a wrapper when the underlying value carries the meaning.
- UI for Humans: Show system status, speak the user’s language, give control and clear exits, be consistent, prevent errors before they happen. Every element must earn its place on screen. Full reference (Nielsen + Atomic Design):
~/.config/agent-config/ui-design-principles.md(akaui-principles.md, and$UI_PRINCIPLES) — treat any "per ui principles" or "per design principles" as pointing here.
Deploys & Servers
Every production site runs on one shared droplet. ~/projects/server-config/SERVER.md is the single reference — read it before touching deploys, nginx, systemd, cron, DNS, or backups for any project. Point at it from a project's AGENTS.md; never restate it, or the two copies drift.
- Pushing to GitHub
mainIS deploying. The box self-pullsmainevery minute — a commit ships no matter where it came from. Know this before you push; check the SERVER.md inventory for sites not yet on self-pull. - Never edit
server-config'setc/ usr/ var/ home/ opt/ secrets/— one-way live→repo mirror; your edit is reverted. Repo-root*.mdandsnapshot.share source of truth. - Never commit an agent transcript. Claude Code's
/exportand equivalent harness exports can write into the cwd; transcripts contain connection strings and keys.
Temporary server lifetime
- Launch every temporary development, preview, test, or static-file server through
~/.config/agent-config/bin/agent-session-server -- <command>. Run the wrapper as a foreground long-running tool command; use the tool's background/session facility when work must continue. Do not use shell&,nohup,disown, or a daemon mode. - The wrapper owns the server process group and stops it when the nearest Claude or Codex CLI process exits. Production services that intentionally outlive the agent session are outside this rule.
- Stop temporary servers explicitly when review ends, then verify that their listening port closed. Session-bound cleanup is the final safety net, not a substitute for ordinary cleanup.
Party data (Free State Party)
The fsp MCP server (https://freestate.party/api/mcp, registered by
bin/fsp-mcp-install) is Mycroft — fsp-app's assistant — acting as me with my own
permissions. It is THE programmatic way to reach Party data and org state (people,
events, RSVPs, groups, documents, notes, tasks, decisions): use its tools (mcp__fsp__…)
or ask_mycroft. Its writes are the ones Mycroft makes without asking anywhere — file,
claim, log, complete a task; record a decision; an RSVP; a note — so use them for real
work; anything that needs a confirmation is not offered and happens on the website. There
is no pop-cli and no REST API anymore. If Mycroft cannot do something, that is a tool
request against fsp-app's registry, not a reason to go around it. Every call is logged
under my name at /admin/ai. (Inside fsp-app, that repo's AGENTS.md still governs — its
db:prod-query is a developer debugging tool, not a member surface.) Docs:
fsp-app/docs/knowledge/agent-access.md.
Email (Proton)
My mail is already readable on this machine from any session, with no password
prompt. Never ask me for the Bridge password and never type one. Credentials
live in ~/.config/life-accounts/env (PROTON_IMAP_*, mode 600); the scripts read
that file themselves and never print it.
- Default: read the local mirror, not the server.
~/mail/proton/holds a full copy of All Mail —eml/<uid>.emlplusindex.db, a SQLite FTS5 index — refreshed every 15 minutes by theproton-mirror.timeruser unit. Nothing needs to be running and it works from any cwd:python3 ~/projects/me/scripts/mail/mirror.py find [--since YYYY-MM] [--limit N] QUERY— full-text search; FTS5 syntax withfrom:,to:,subject:prefixes, quoted phrases, AND/OR/NOT. Printsuid date sender subject snippet.… mirror.py show UID— one message as plain text.… mirror.py status— count and last sync time.- Or open
~/mail/proton/index.dbread-only: tablemsg(uid, date, gone, sender, recipients, subject, body). Server deletions are kept withgone=1; the mirror is an archive, never pruned.
- Live IMAP only when the mirror can't answer — mail newer than the last sync, or
which folder a message sits in now:
python3 ~/projects/me/scripts/mail/mail.py(test,folders,inbox,search,show). It talks to Proton Bridge on localhost; if Bridge isn't running, say so rather than route around it. Everything is read-only exceptmove, which is a dry run without--go. - Filing and triage belong to the life agent in
~/projects/me(scripts/triage/,scripts/finance/,scripts/bills/). Other sessions read mail; they don't archive, move, or classify it. - Sending mail is not wired up anywhere. If a task needs an email sent, draft it and hand it to me.
Writing
For any longform I'll publish under my own name — essays, articles, Substack posts, threads, arguments — invoke the writing skill first (process, preferences, and the Google Doc collaboration protocol live there; don't restate them). Core rule: I write the words; you build the scaffold — bullets and structure, never finished prose. kauffj-voice is for tweets and throwaway, not for ghostwriting signed work.
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
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.

