claude-code-growth-os
AGENTS.md21 starsChanged 2 months agoMITView on GitHub
The instruction file for every AI coding agent working in this repository — Claude Code, Codex, Copilot, Cursor, Gemini CLI. It is the one place the working conventions live. Claude Code reads it through an @AGENTS.md import in CLAUDE.md, which adds the few Claude-only notes on top. This is a public, generic growth-OS kit built on Claude Code — a markdown + bash system for running marketing, sales, product, and retention as one motion. It ships as a reusable template.…
- Reads credentials
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,700 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 repository21 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- account-healthSkill
- calendar-followupSkill
- churn-saveSkill
- cold-outreachSkill
- content-repurposeSkill
- event-to-pipelineSkill
- example-skillSkill
- expansion-signalSkill
- follow-upSkill
- inbox-digestSkill
- lead-qualifySkill
- marketing-feedbackSkill
- meeting-prepSkill
- onboarding-handoffSkill
- product-signalSkill
- qbr-prepSkill
- retention-feedbackSkill
- status-updateSkill
- support-signalSkill
- triageSkill
The file
We split this AGENTS.md into the rules it gives an agent
4 rules. About 0 are common, 1 is distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
No code. No build system. Markdown playbooks in ops/, rituals as slash commands in .claude/commands/, skills in .claude/skills/.
- Distinctive: line 36
One ritual at a time: Don't port your whole working life on day one.
- Very specific: line 62
Every entry point (session start, each ritual, each cloud routine) uses the spec in .claude/rules/todo-single-source.md.
- Very specific: line 97
All bash, with python3 used only to read a hook payload.
≈ “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
AGENTS.md — Claude Code Growth OS
The instruction file for every AI coding agent working in this repository —
Claude Code, Codex, Copilot, Cursor, Gemini CLI. It is the one place the working
conventions live. Claude Code reads it through an @AGENTS.md import in
CLAUDE.md, which adds the few Claude-only notes on top.
Purpose
This is a public, generic growth-OS kit built on Claude Code — a markdown + bash system for running marketing, sales, product, and retention as one motion. It ships as a reusable template. Your own live state lives in your private copy of this kit; this repo carries only the fictional demo/ data.
No code. No build system. Markdown playbooks in ops/, rituals as slash commands in .claude/commands/, skills in .claude/skills/.
Repository map
The full directory layout is in docs/repo-map.md. Read it
when you need to find something; it is a listing, not a rule.
Content Layers
| Layer | Lives in | Owner | Purpose |
| Playbooks | ops/ | Daily routines (read/write) | What's true now — live pipeline, customers, priorities, log |
| Rituals | .claude/commands/ | Human (invoke) | How to run the day — the recurring task the command executes |
| Skills | .claude/skills/ | Human (invoke) / agent | On-demand depth — account health, outreach, meeting prep |
| Rules | .claude/rules/ | Always-on | How to behave safely — CRM guardrails, to-do list spec |
| Reference | docs/ | Human (read) | Why this works — methodology, operating model, connecting a CRM |
Never mix layers. Live values stay in ops/; templates and playbooks stay in docs/; reusable task logic stays in .claude/commands/ or .claude/skills/.
Key conventions
- Markdown is the source of truth. Operating playbooks live in
ops/as plain markdown. Edit them like docs; commit them like code. - Both sides of the bowtie have a surface. The left side is
ops/pipeline.md(deals); the right side isops/customers.md(the post-sale account book) andops/roadmap-signals.md(product's triage queue). The renewal motion starts at day 60, not day 85. - Rituals are commands. A recurring task — a morning briefing, an end-of-day wrap-up — is a slash command in
.claude/commands/. Invoke it by name. - One ritual at a time. Don't port your whole working life on day one. Pick the task you dread most, make it a command, run it daily for a week, then add the next.
- Commit often. Your ops get a history.
git log ops/is your audit trail. - A ritual that died must not look like a quiet day. Every scheduled ritual ends by recording its own outcome —
routine-state.sh ok <ritual>on a clean finish,routine-state.sh fail <ritual> "<what blocked it>"otherwise. The failure marker stays inops/runs/until a good run clears it, and session start reads it. Recording a failure is the ritual finishing correctly; leaving nothing behind is the failure. The cadence each ritual is judged against is a row in.claude/scripts/routines.tsv— delete the rows you do not run. - Count it, don't assert it.
bash .claude/scripts/status.shcounts what the repo actually contains — ops freshness, ritual state, the size of your own rulebook — and says plainly what it cannot count without the network instead of guessing.--htmlrenders it as a page. A number written into a document is a number that was true once. - Two machines, two merge rules. If you run this locally and in the cloud, both append to the same logs on the same day.
.gitattributessetsmerge=unionon the append-only logs so two entries stack instead of conflicting; snapshot files (ops/priorities.md,ops/pipeline.md) are left on the default merge and have one writer at a time, because a snapshot merged from two machines describes neither. - Straight answers. When a session evaluates your work — a plan, a draft, a pipeline read — the assistant's first duty is an accurate assessment, not an agreeable one. Verdict first, then reasons; plain disagreement before you decide; alignment once you have decided. Hedges express real uncertainty, never politeness.
- Plain language first. The plain statement carries the meaning; the specialist term is a label attached after it, never the sentence itself. This applies to internal output too — headings in your playbooks, PR titles, commit messages, the summary a ritual hands back — not just customer-facing copy. Avoid the audience exemption ("they're technical, they'll know it"): that is what you grant yourself at the moment you most want the jargon. The test is mechanical — delete the specialist word and see whether the sentence still stands. If it collapses, the word was doing the sentence's job. A position nobody can restate from memory is not governing anything.
And the conventions specific to this kit's shape:
Generic by design
This kit ships with <placeholder> values for anything installation-specific (CRM endpoints, calendar IDs, field names). Wire the real values into .claude/settings.local.json (gitignored) or a private skill — never commit them here.
No code
This is a markdown + bash system. Never create .js, .ts, .json, or .html files in ops/, docs/, or .claude/commands/. Shell scripts in .claude/hooks/ and .claude/scripts/ are the only non-markdown exception.
Commit ops/ like code
ops/ files are mutable state. Commit them often — git log ops/ is the audit trail. Each routine writes ops/ and commits at end-of-run so tomorrow's session opens consistent.
Rules are the single source of truth for their concern
A rule in .claude/rules/ owns its domain. Commands and cloud routines point to the rule — they don't re-derive its logic. See .claude/rules/README.md.
CRM lives in one lane
Deals → CRM (via MCP). Tasks → task tool. Priorities → ops/priorities.md (derived). Never create CRM tasks from a ritual — that forks the to-do list. See .claude/rules/crm-usage.md.
To-do list has one canonical render spec
Every entry point (session start, each ritual, each cloud routine) uses the spec in .claude/rules/todo-single-source.md. Don't re-derive the grouping or filtering inside a command.
Available Commands
| Command | Cadence | Role |
/morning-briefing | Daily (morning) | Recap yesterday, surface priorities, set today's top three |
/midday-checkin | Daily (mid-day) | Mark what's done, flag what's slipping, protect the afternoon |
/end-of-day | Daily (close) | Daily-log entry, tomorrow's Top 3, CRM persist + audit log |
/weekly-review | Weekly | Patterns across both sides of the bowtie, next week's one priority |
/retention-report | Monthly | Roll the customer book up to NRR/GRR, churn by reason, expansion |
/capture | Ad-hoc | Drop a raw note into inbox/notes.md now; triage it later |
/reconcile | Ad-hoc | Catch drift when more than one session writes the same files |
/demo-briefing | Ad-hoc | The morning ritual run safely on the fictional demo/ data |
Hooks
| Hook | Event | Purpose |
session-start.sh | SessionStart | Surface ops/priorities.md + latest ops/feedback-log.md signals |
pre-compact.sh | PreCompact | Re-inject priorities + latest log entry before compaction |
irreversible-fence.sh | PreToolUse (mcp__*) | Block a connector call that sends, shares, deletes, publishes, cancels, or commits you to someone; drafting passes through. What counts as irreversible is two editable lists at the top of .claude/scripts/fence-check.py — name the tools your own stack exposes. LO_FENCE_OVERRIDE=1 opens it for one session |
protect-files.sh | PreToolUse (Edit|Write) | Block writes to .env*, *.key, *.secret, *.token, credentials.* |
verify-after-change.sh | PostToolUse (Edit|Write) | Link-check the changed file + run .claude/scripts/verify.sh if present — advisory, never blocks |
run-state-surface.sh | SessionStart | Read ops/runs/ and name any ritual that is failing or overdue — counted off disk each time, silent when everything is current |
instructions-loaded-log.sh | InstructionsLoaded | Append every session's loaded instruction files and their size to .claude/logs/ — so "the size of your own rulebook" is a number you read, not one you remember |
stop-reminder.sh | Stop | Nudge /end-of-day if today is not yet logged |
pre-commit-guard.sh | git pre-commit | Block commits that contain likely secrets (install once: ln -s ../../.claude/hooks/pre-commit-guard.sh .git/hooks/pre-commit) |
web-bootstrap.sh | SessionStart (cloud only) | Install shellcheck on cloud/web sessions; no-op locally |
Because your state lives in files, SessionStart reliably reloads priorities and the latest log entry next session, so the thread is always recoverable. PreCompact re-injection is best-effort and version-dependent; SessionStart is the guaranteed reload.
All bash, with python3 used only to read a hook payload. No API keys, no MCP
required. The full thinking is in docs/methodology.md.
Scheduling
Three layers — run the rituals without your machine awake:
- Local — cron (Linux) or launchd (macOS). Setup in
.claude/scheduling/README.md. - Cloud Routines — Anthropic-hosted Claude Code sessions triggered on a schedule. Runbook in
.claude/scheduling/cloud-routines.md. - GitHub Actions CI backstop — deterministic checks only (
.claude/scripts/checks/growth-os-checks.sh).
Source-of-Truth Hierarchy
.claude/rules/crm-usage.md— canonical for CRM access protocol and write guardrails.claude/rules/todo-single-source.md— canonical for to-do list query and render specdocs/operating-model.md— canonical for the bowtie model and six handoffsdocs/connecting-a-crm.md— canonical for CRM projection loop mechanicsAGENTS.md(this file) — canonical for project conventions and session protocol
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.

