seoverse
AGENTS.md4 starsChanged 10 days agoMITView on GitHub
OpenSEO also runs behind an Every App Gateway (AUTH_MODE=everyapp; how it works is in docs/maintainers/every-app.md).
1 other project uses a version of this.
Adopted by
Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data
Most recently taken up by
- every-app/open-seoword for word, first seen Oct 8, 2026
Other versions1 project uses a version of this.
Word for word · 1
- every-app/open-seo★ 27k100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
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 repository29 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- ai-prompt-researchSkill
- ai-visibility-auditSkill
- competitive-landscapeSkill
- competitor-analysisSkill
- create-repo-skillSkill
- deslopSkill
- evaluate-skillSkill
- keyword-clusteringSkill
- keyword-researchSkill
- link-prospectingSkill
- local-seoSkill
- merge-readySkill
- observability-triageSkill
- openseo-release-notesSkill
- openseo-review-web-contentSkill
- papercutsSkill
- review-briefSkill
- review-simplifySkill
- review-ui-statesSkill
- seo-auditSkill
- seo-coachSkill
- seo-project-setupSkill
- seo-reportSkill
- setup-openseoSkill
- simple-issue-descriptionSkill
- stageshowSkill
- test-auditSkill
- verify-local-mcpSkill
The file
Show its rules and text
We split this AGENTS.md into the rules it gives an agent
21 rules. About 0 are common, 14 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈14
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 5
Prefer simple, readable, flat code with minimal indirection.
- Distinctive: line 7
Search for existing implementations and installed libraries before creating new helpers or abstractions.
- Distinctive: line 9
Keep product data normalized and relationships explicit.
- Distinctive: line 11
Keep schema changes, queries, and mutations compatible with both SQLite and Postgres.
- Distinctive: line 12
Use idiomatic TypeScript. Use Zod to validate untrusted data and narrow runtime values at trust boundaries.
- Distinctive: line 13
Prefer established project helpers and libraries over hand-rolled implementations.
- Distinctive: line 14
Prefer idiomatic TanStack Query, Router, and Form patterns for server state, routing, and submitted forms.
- Very specific: line 22
Before running everyapp, read the everyapp skill.
- Very specific: line 23
Run the app with pnpm dev:everyapp (everyapp dev): both Workers behind a local gateway with a seeded dev user.
- Distinctive: line 30
Don't add tests just for the sake of it.
- Distinctive: line 31
Keep tests as simple as possible, and always review them looking for simplifications.
- Distinctive: line 32
Test behavior at the public entry point.
- Very specific: line 34
Never re-declare a production class in a test.
- Distinctive: line 38
Don't mock ORM builder chains.
- Distinctive: line 39
Don't export a function only so a test can reach it.
- Very specific: line 48
When a bump is warranted, keep plugins/openseo/.codex-plugin/plugin.json, plugins/openseo/.claude-plugin/plugin.json, and …
- Very specific: line 50
Run pnpm sync-plugin-skills after changing a shipped skill and include the updated plugin copy, even when no version bump is needed.
- Distinctive: line 55
Do not put internal working notes, content briefs, drafts, asset-sourcing notes, implementation logs, or agent handoffs in those …
- Very specific: line 56
Use docs/maintainers/ for engineering decisions, development workflows, and maintenance notes that should be shared and versioned.
- Very specific: line 57
Write PR descriptions in the simple-issue-description format, with no validation logs or per-file changelog.
- Distinctive: line 63
Do not mine an entire session for papercuts or start a broad cleanup unless the user explicitly asks.
≈ “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
Agent guidance
Engineering principles
- Prefer simple, readable, flat code with minimal indirection.
- Work on bugs a real user hit or would plausibly hit. Don't open a ticket or PR for an edge case found only by reading the code; flag it instead. Security holes and significant billing abuse are the exception.
- Search for existing implementations and installed libraries before creating new helpers or abstractions.
- Abstract when it prevents meaningful drift and makes the result simpler to maintain. Avoid speculative or one-use abstraction layers.
- Keep product data normalized and relationships explicit. Do not encode relational data in JSON or text merely to avoid joins.
- For new application-backed backend functionality, default to: TanStack server function → service → repository.
- Keep schema changes, queries, and mutations compatible with both SQLite and Postgres.
- Use idiomatic TypeScript. Use Zod to validate untrusted data and narrow runtime values at trust boundaries.
- Prefer established project helpers and libraries over hand-rolled implementations.
- Prefer idiomatic TanStack Query, Router, and Form patterns for server state, routing, and submitted forms.
- shadcn components in
src/client/components/ui/are built on Base UI, not Radix. Compose them with therenderprop, notasChild. - Specs under
docs/maintainers/specs/are public design records: what a feature does, how it works, the alternatives considered and why they lost. No line numbers, migration mechanics, test plans, incidents, costs, or internal infrastructure details.
Every App
OpenSEO also runs behind an Every App Gateway (AUTH_MODE=everyapp; how it works is in docs/maintainers/every-app.md).
- Before running everyapp, read the everyapp skill. It lives in the platform checkout beside this repository,
../private-every-app/packages/cli/skills/everyapp/SKILL.md;everyapp createcopies it into new apps, and this port reads it from there. - Run the app with
pnpm dev:everyapp(everyapp dev): both Workers behind a local gateway with a seeded dev user. The keys it needs locally go in.dev.vars, written by hand. - Deploy only through the Every App CLI:
pnpm everyapp install https://github.com/every-app/open-seofrom an Every App checkout (the npm CLI installed here cannot deploy). Never runcf deployorwrangler deployfor this mode.deploy:selfhostis the other self-hosting path (pnpm deployis the plainwrangler deployofwrangler.jsonc) anddeploy:postgresis app.openseo.so's production deploy; none of them is this one. - Declare resources (D1, KV, Durable Objects, Workflows, the audit Worker) and settings (
providers,capabilities,secrets, each with its need andwhy) ineveryapp.config.ts;cloudflare.config.tsbuilds the Workers from it. - The Gateway signs people in: read identity only through the SDK (
src/middleware/ensure-user/everyApp.ts), never from a client-supplied header or cookie, and treat every route listed underpublicineveryapp.config.tsas open to the internet.
Testing
- Don't add tests just for the sake of it. A test exists to enforce core behavior or a hard-to-spot edge case that could actually occur.
- Keep tests as simple as possible, and always review them looking for simplifications.
- Test behavior at the public entry point. Assert argument forwarding to a mocked collaborator only when that mapping is the contract (billing params, telemetry events).
- Statically import the module under test.
vi.mockis hoisted, so per-testawait import()andvi.resetModules()are banned unless module-level state must reset — comment why. - Never re-declare a production class in a test. Import the real one; if the module is too heavy to import, move the class to a leaf module first (see
ga4Errors.ts,gscErrors.ts). beforeEachsets default mock return values only. Vitest'sclearMocksalready resets call state — nomockReset/mockClearceremonies.- Fixtures contain only the fields the test asserts on or the types require. Shared shapes get a factory with overrides (see
ga4-test-fixtures.ts,tool-test-support.ts); a fixture longer than its test's assertions is a smell. - One test per invariant. Don't re-test Zod or a library, and don't repeat an output-schema round-trip in every happy path.
- Don't mock ORM builder chains. Test repositories through services or real SQL evaluation; chain mocks break on refactors that change no behavior.
- Don't export a function only so a test can reach it. Test through the public entry point (the service object, tool handler, or workflow); Knip fails CI on the orphaned export.
- Vitest's
clearMocksclears call history only. AmockResolvedValueormockImplementationset inside a test survives into the next one, so every persistent default belongs inbeforeEach. - A negative test must fail for the reason its name gives. If a different guard rejects first (hosted mode off, missing auth, an earlier validation), the test proves nothing about the behavior it names.
Plugin versions
- Bump the OpenSEO plugin version when a PR adds a new MCP tool, adds a new shipped skill, or substantially changes a shipped skill's workflow or instructions. Substantial skill changes include changing its required steps, tool choices, or expected output.
- Routine fixes, refactors, and changes to existing tools' implementation, behavior, schemas, or descriptions do not require a bump. Neither do minor skill edits, internal-only skills, tests, website or app changes, or routine plugin configuration edits. Use judgment for other major plugin changes; do not bump merely because a plugin-related file changed.
- The plugin points at the hosted MCP server, so server changes reach users on deploy without a plugin version bump. When a fix applies to both the app and an MCP tool, ship it to both.
- When a bump is warranted, keep
plugins/openseo/.codex-plugin/plugin.json,plugins/openseo/.claude-plugin/plugin.json, andplugins/openseo/.cursor-plugin/plugin.jsonon the same version. Default to a patch bump unless the maintainer requests a minor or major bump. - Bump once per PR relative to
origin/main, not once per edit or tool. For a PR that requires a bump, if main advances the plugin version before merge, update the branch to a version newer than main. Otherwise, keep main's version. The app'spackage.jsonversion follows its separate release process. - Run
pnpm sync-plugin-skillsafter changing a shipped skill and include the updated plugin copy, even when no version bump is needed. Call out plugin version and instruction changes for maintainer review.
Documentation audience
docs/(exceptdocs/maintainers/) andweb/content/docs/are public, user-facing documentation. Write only material that helps users understand, use, or self-host the product.- Do not put internal working notes, content briefs, drafts, asset-sourcing notes, implementation logs, or agent handoffs in those directories.
- Use
docs/maintainers/for engineering decisions, development workflows, and maintenance notes that should be shared and versioned. This directory is tracked in Git but is not part of the user-facing documentation site. Create notes only when requested or useful for future maintenance; never include secrets. - Write PR descriptions in the
simple-issue-descriptionformat, with no validation logs or per-file changelog. Continue using the dedicated papercut log for repository friction.
Log papercuts
When small, non-blocking repository friction occurs—a retried tool call, confusing setup step, flaky command, stale cache, misleading error, or non-obvious gotcha—use the papercuts skill and append it to .agents/PAPERCUTS.md in the moment. Continue the current task. Real bugs and tracked work are not papercuts, and sensitive data must never be logged.
Do not mine an entire session for papercuts or start a broad cleanup unless the user explicitly asks.
Preserve review learnings
Reviewer context lives in docs/maintainers/review-guidelines.md: the hard invariants (tenant scoping, dual-dialect persistence, billing seams, SSRF handling) and the false-positive controls that keep reviewers from flagging intentional behavior. After a merge-ready or other code review verifies a finding, add to that file only when the finding exposes a recurring or high-risk repository invariant that existing context and automated checks do not capture. Do not promote one-off bugs or preferences into permanent review rules.
Changes to AGENTS.md, .claude/CLAUDE.md, .agents/skills/**, .github/**, and docs/maintainers/review-guidelines.md alter the review control plane and must receive explicit maintainer review. CODEOWNERS requests that review; where repository settings allow, enable GitHub's requirement for code-owner approval.
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.

