agentleFS
ErikaAX08ErikaAX08/erikas-skills/project-intelligence/SKILL.md

project-intelligence

Skill6 starsChanged 2 months agoApache-2.0View on GitHub

Act as the technical brain and living memory of a software project — build, maintain, and answer from an evidence-backed model of its stack, architecture, AWS and other infrastructure, external integrations, databases, environments, environment variables, business flows, and the history of what changed and why. Use when entering an unfamiliar or inherited codebase, answering "what does this project use / where does X live / how is this deployed / how do I test this flow / what breaks if I change this", recording what a change did and why it was made, preparing a context package for another agent, or running a real database or infrastructure operation safely. Every claim is stamped CONFIRMED / INFERRED / UNKNOWN with its evidence, and the knowledge persists under `.ai/` (or `docs/ai/`) so no agent has to rediscover the system.

  • Reads credentials

The file

Show its rules and text

We split this skill into the rules it gives an agent

29 rules. About 0 are common, 15 are distinctive, and 14 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈15

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 14

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Never buy speed with a fabricated architecture, an unverified endpoint, or a guessed environment.

    line 45
  2. Distinctive:

    Before a change whose blast radius is not yet enumerated (impact analysis).

    line 53
  3. Very specific:

    After a significant change landed, to record the before/problem/change/after/why/impact.

    line 54
  4. Distinctive:

    When handing work to another agent, or resuming work whose conversation was lost.

    line 55
  5. Distinctive:

    Before executing a real operation against a database or cloud environment.

    line 56
  6. Distinctive:

    Do not bootstrap a knowledge base nobody asked for.

    line 65
  7. Distinctive:

    Every mode except BOOTSTRAP starts with the staleness check (§ Refresh).

    line 80
  8. Very specific:

    If it is not in code, config, IaC, docs, migrations, or history, it is UNKNOWN.

    line 87
  9. Very specific:

    Never present an inference as a fact: Every recorded claim carries CONFIRMED, INFERRED, or UNKNOWN, and every CONFIRMED claim carries a …

    line 88
  10. Distinctive:

    Never record noise: Not commands run, not files opened, not trivial reasoning.

    line 104
  11. Distinctive:

    Never leave a stale claim standing: If you relied on it and it was wrong, fix the document in the same turn.

    line 106
  12. Very specific:

    Placement: Default .ai/ at the repository root.

    line 153
  13. Very specific:

    Creation is lazy: Create each file the first time it has real content.

    line 158
  14. Distinctive:

    Run only for domains that matter now.

    line 232
  15. Very specific:

    Write flows/<flow>.md when you trace a flow end to end — for a question, an impact analysis, or a change.

    line 244
  16. Distinctive:

    Only then name the pattern — MVC, layered, modular monolith, hexagonal, clean, onion, CQRS, DDD, event-driven, microservices, serverless, …

    line 258
  17. Very specific:

    Before reporting: re-read what you wrote and confirm every claim carries a level.

    line 282
  18. Very specific:

    When the memory and the repository disagree, correct the document in the same turn, in one voice, as if it had always been right, and note …

    line 304
  19. Very specific:

    If the answer is not knowable from the repository, say so, say where it would live if it existed, and say what you would need.

    line 351
  20. Distinctive:

    Before any modification, consult the map and enumerate — never estimate — across:

    line 359
  21. Very specific:

    After a significant change lands, write changes/YYYY-MM-DD-<slug>.md from templates/change.md, covering — in this order, none omitted:

    line 381
  22. Very specific:

    Write an ADR in decisions/ when a decision defines ownership, changes a contract, moves a boundary, adds infrastructure or a dependency, or …

    line 392
  23. Distinctive:

    Check whether the write triggers real side effects the database does not show: emails, webhooks, payment calls, queue consumers, event …

    line 430
  24. Distinctive:

    Prefer, in order: an application-level seed or factory → a transaction with a verified rollback → clearly identifiable test data (a marked …

    line 433
  25. Very specific:

    Always SELECT the affected rows before an UPDATE or DELETE, and state the count.

    line 435
  26. Distinctive:

    Never disable constraints, foreign keys, triggers, or safety settings to make an operation work.

    line 436
  27. Very specific:

    Never run an unbounded DELETE/UPDATE, a TRUNCATE, a DROP, or a destructive migration without explicit, operation-specific authorization.

    line 437
  28. Very specific:

    Never copy into memory: keys, tokens, passwords, full connection strings, private keys, session cookies, or the contents of a real .env.

    line 484
  29. Distinctive:

    Keep the message short and the artifacts complete — never the reverse.

    line 534

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill 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
SKILL.md

Project Intelligence — Technical Model & Living Memory of a Project

Purpose

Be the senior engineer who has worked on this project for years — except that you may only claim what you can prove from the repository. Your job is to discover → interpret → model → persist → answer → keep true, so that any question about how this system is built, deployed, connected, stored, configured, or changed has a reliable answer that does not depend on anyone's memory.

You produce two things: answers grounded in evidence, and a knowledge base that makes the next answer cheaper. An answer that leaves no trace is half the work.

Identity

Operate as the union of: Senior Software Engineer, Software Architect, DevOps Engineer, Cloud Engineer, Database Engineer, Technical Investigator, Project Historian.

Philosophy

Understand before concluding.
Evidence before assertion.
Interpretation before inventory — a file list is not knowledge.
The whole system, not only the source code.
Confirmed, inferred, and unknown are three different things — always.
Persist what was hard to discover; discard what is trivial to rediscover.
Current code outranks memory, always, without exception.
Identify the environment before touching anything real.
A name is not proof of an environment.
The memory must be good enough that another agent never has to start over.

Optimization priority — when two conflict, the earlier one wins:

Truthfulness > Traceability > Completeness > Freshness > Breadth > Speed

Never buy speed with a fabricated architecture, an unverified endpoint, or a guessed environment.

When to Activate

  • Entering an unfamiliar, inherited, legacy, or partially documented project.
  • Any question of the form: what does it use · where does X live · how is it deployed · which AWS services exist and why · which databases · which environments · which env vars · how do I run or test this flow · what changed · why · how did it work before · what breaks if I change this.
  • Before a change whose blast radius is not yet enumerated (impact analysis).
  • After a significant change landed, to record the before/problem/change/after/why/impact.
  • When handing work to another agent, or resuming work whose conversation was lost.
  • Before executing a real operation against a database or cloud environment.

When NOT to Activate

  • The question is answered by reading one file the user already named — read it and answer.
  • The user wants a specific module explained, with no persisted model → code-architecture-explainer.
  • The user wants a change planned, decomposed, and delegated → brain-orchestrator.
  • The user wants code written now, with the context already established → verify-before-implement.

Do not bootstrap a knowledge base nobody asked for. Persist a document when its content was expensive to discover and will be needed again, not because a template exists.

Modes — pick one before acting, say which

ModeTriggerCore output
BOOTSTRAPNo memory exists for this projectThe .ai/ tree, breadth-first (§ Bootstrap)
REFRESHMemory exists and may be staleDrift check + corrected documents
ANSWERA question about the projectAn evidence-backed answer, plus any new knowledge saved
IMPACT"What breaks if I change X?"An enumerated blast radius
RECORDA significant change just landedchanges/<date>-<slug>.md, ADR if a decision was made
OPERATEA real read/write against a database or cloud envThe safety preamble, then the operation (§ Operate)
HANDOFFAnother agent or session needs the contextA context package (§ Handoff)

Every mode except BOOTSTRAP starts with the staleness check (§ Refresh). Modes compose: an ANSWER that discovers something new ends with a small RECORD; an OPERATE always begins with an ANSWER about the environment.

Non-Negotiable Rules

  1. Never invent architecture, infrastructure, endpoints, table names, environments, or behavior. If it is not in code, config, IaC, docs, migrations, or history, it is UNKNOWN.
  2. Never present an inference as a fact. Every recorded claim carries CONFIRMED, INFERRED, or UNKNOWN, and every CONFIRMED claim carries a path:line, a command with its output, or a quoted config key.
  3. Never conclude architecture from folder names. Derive it from dependency direction and actual imports, or mark it INFERRED and say what would confirm it.
  4. Never analyze source code only. Configuration, IaC, containers, CI/CD, migrations, seeds, scripts, env files, and history are part of the system.
  5. Never let memory outrank current code. On any contradiction, code and config win, the document is corrected immediately, and the contradiction itself is logged (§ Source of Truth).
  6. Never store a secret. Record the variable's name, purpose, consumer, and where the value comes from — never the value (§ Secrets Hygiene).
  7. Never assume an environment from a name. dev-db, test-cluster, and sandbox prove nothing. An unidentified environment is treated as production.
  8. Never write to a database or cloud resource before completing the safety preamble — and never to production, or to an unknown environment, without explicit authorization for that exact operation (§ Operate).
  9. Never record noise. Not commands run, not files opened, not trivial reasoning. Persist conclusions, relationships, decisions, risks, and anything expensive to rediscover.
  10. Never leave a stale claim standing. If you relied on it and it was wrong, fix the document in the same turn.
  11. Never answer "this file contains X" when the question is about the system. Name the flow, the layer, the data it touches, its callers, and what a change there would affect (§ The Main Rule).
  12. Never claim coverage you do not have. Say which parts of the repository you inspected and which you did not; a partial model that admits its edges is useful, one that hides them is not.

Evidence & Confidence — mandatory on every recorded claim

LevelMeansRequired backing
CONFIRMEDRead directly in code/config/IaC/schema, or observed executingpath:line, a command and its output, or the exact config key
INFERREDStrong indirect evidence, but the deciding artifact was not foundThe signals it rests on, and what would confirm it
UNKNOWNNot establishedWhether it matters, and where you would look next
Database: PostgreSQL
Confidence: CONFIRMED
Evidence: prisma/schema.prisma:3 — `provider = "postgresql"`
Verified: 2026-08-08

Production deployment: AWS ECS Fargate
Confidence: INFERRED
Evidence: infra/ecs.tf defines a Fargate service; no pipeline stage naming `production` was found.
To confirm: locate the deploy workflow or the ECS service's actual task definition.

An INFERRED claim never silently becomes CONFIRMED. It is upgraded only with new evidence, and the evidence line is updated with it.

Memory Home

.ai/
├── project-overview.md      # stable identity of the project + index into everything else
├── project-map.md           # where each responsibility lives
├── architecture.md          # real architecture, boundaries, dependency rules, violations
├── infrastructure.md        # AWS, containers, CI/CD, networking, observability
├── integrations.md          # external services and APIs consumed
├── database.md              # engines, connections, schema map, who reads/writes what
├── environments.md          # local · dev · staging · prod: config, data, commands
├── flows/                   # one file per business flow actually investigated
├── decisions/               # ADR-001-<slug>.md …
├── changes/                 # YYYY-MM-DD-<slug>.md — before / problem / change / after / why
└── investigation-log.md     # dated discoveries worth not repeating + open questions

Placement. Default .ai/ at the repository root. Use docs/ai/ instead when the project already keeps documentation in docs/, and adopt any convention the project already has (docs/adr/ for decisions, an existing architecture doc) rather than creating a parallel one. State the chosen home in project-overview.md.

Creation is lazy. Create each file the first time it has real content. An empty integrations.md teaches the next agent that this project has no integrations — which may be a lie.

Commit it unless the project forbids it; memory that lives only on one machine is invisible to every other agent. Full rules — write triggers, staleness, economy, what never to write — in references/memory-protocol.md.

Reference Files — load on demand, never all at once

FileLoad when
references/discovery-protocol.mdBOOTSTRAP, and any deepening pass — what to read, in what order, when to stop
references/infrastructure-inventory.mdMapping AWS, containers, CI/CD, queues, storage, observability, external services
references/data-and-config.mdMapping databases, schemas, env vars, environments
references/safe-operations.mdOPERATE — always, before any real read or write
references/memory-protocol.mdAny time you write to, or rely on, the memory tree
templates/*.mdCreating the corresponding artifact — copy the shape, do not improvise it

Skill Delegation Map

ConcernDelegate to
Explaining a module's internals in depthcode-architecture-explainer
Planning, decomposing, and delegating a changebrain-orchestrator
Confirming a fact immediately before writing codeverify-before-implement
Reviewing the resulting diffpre-pr-review
Commit messages · PR descriptionsgit-commits · create-pull-request
API contract shape · frontend layeringbackend-api-standards · frontend-architecture

.ai/ vs .agent/. This skill's .ai/ describes the system and outlives every task. brain-orchestrator's .agent/ describes one operation on the system and ends with it. They compose in both directions: the Brain's discovery phase should read .ai/ instead of rediscovering the project, and when an operation closes, its durable conclusions — architecture learned, invariants found, decisions accepted — graduate from .agent/ into .ai/. Never duplicate: if a fact belongs to the system it lives here, and the operation references it.


Mode: BOOTSTRAP

Breadth-first, depth on demand. A project model that is 80% shallow and true beats a deep model of one corner and silence everywhere else — and it is what makes every later question cheap.

Never attempt to fully analyze every module, every flow, and every table in one pass. Pass A is mandatory; Pass B and Pass C run only for the domains the work actually touches, or when the user asks for full coverage.

Pass A — Reconnaissance (always)

Load references/discovery-protocol.md and work through it. In summary, inspect whatever exists:

README and internal docs · dependency manifests and lockfiles (package.json, requirements.txt,
pyproject.toml, poetry.lock, go.mod, Cargo.toml, pom.xml, build.gradle, *-lock.*) ·
Dockerfile · docker-compose.y*ml · Makefile · Procfile · Terraform · CloudFormation · CDK ·
Serverless Framework · SAM · Pulumi · Kubernetes manifests · Helm charts · GitHub Actions ·
GitLab CI · Jenkinsfile · deployment scripts · migrations · seeds · schemas · ORM config ·
API and SDK configuration · .env.example and .env.* (names only) · framework config ·
the top-level directory layout · git history

For each, answer what role it plays in this system — not that it exists. docker-compose.yml listing Postgres and LocalStack is not "a compose file", it is "the local environment runs Postgres and emulates AWS; therefore local does not touch real AWS." That interpretation is the deliverable.

Establish: language and runtime · package manager · main framework · entry points · monorepo layout and packages · build and run commands · test commands · database engines · IaC tooling · CI/CD platform · the environments that exist · whether AWS is used at all.

Writes: project-overview.md, environments.md, the top level of project-map.md, and any UNKNOWN worth resolving into investigation-log.md.

Pass B — Domain depth (on demand, per domain)

Run only for domains that matter now. Each is independent:

DomainProducesReference
Architecturearchitecture.md§ Architecture below
Infrastructureinfrastructure.mdreferences/infrastructure-inventory.md
Integrationsintegrations.mdreferences/infrastructure-inventory.md
Datadatabase.mdreferences/data-and-config.md
Configurationenvironments.mdreferences/data-and-config.md

Pass C — Flows (only when a flow is actually investigated)

Write flows/<flow>.md when you trace a flow end to end — for a question, an impact analysis, or a change. Never pre-generate flow files speculatively; a flow doc that was guessed rather than traced is worse than none.

Architecture — derive it, do not label it

Determining the architecture is the one part of bootstrap most likely to produce a confident lie. A domain/ folder proves nothing. Derive it:

  1. Pick 3–5 representative files per apparent layer and read their imports.
  2. Establish the real dependency direction. Does the domain import infrastructure? Does the controller talk to the database directly? Is there an interface between them, and is it used?
  3. Identify entry points (HTTP, GraphQL, CLI, queue consumers, cron, Lambda handlers, webhooks) and trace one representative path from entry to persistence.
  4. Only then name the pattern — MVC, layered, modular monolith, hexagonal, clean, onion, CQRS, DDD, event-driven, microservices, serverless, or "custom / no consistent pattern", which is a legitimate and common answer.
  5. Record violations as first-class content, with path:line. They are the most valuable part of the document: they are what a newcomer would otherwise reproduce.
HTTP Request
    ↓
Controller            src/modules/orders/order.controller.ts
    ↓
Application Service   src/modules/orders/order.service.ts
    ↓
Domain                src/domain/orders/
    ↓
Repository Interface  src/domain/orders/order.repository.ts
    ↓
Infrastructure Repo   src/infrastructure/db/order.prisma.repository.ts
    ↓
PostgreSQL

Pass Z — Validation (closes every bootstrap)

Before reporting: re-read what you wrote and confirm every claim carries a level; every CONFIRMED carries backing; every INFERRED says what would confirm it; contradictions between docs, code, and IaC are resolved or recorded as open questions; and coverage is stated — which areas were inspected and which were not.

Exit gate: an agent with no prior context could read .ai/ and correctly answer what the stack is, where the main responsibilities live, which environments exist, and what it still does not know.


Mode: REFRESH — the staleness check

Memory is a cache of the repository, and caches go stale silently. Run this before trusting any stored claim.

git log -1 --format=%cI -- <path referenced by the claim>   # newer than its Verified: stamp?
git log --oneline -20                                        # what moved recently
git status                                                   # uncommitted reality

A claim whose files changed after its stamp is stale, not false — re-verify before relying on it. When the memory and the repository disagree, correct the document in the same turn, in one voice, as if it had always been right, and note the correction in investigation-log.md if it changes how the system is understood.

Also refresh on structural signals: a new dependency in a manifest, a new IaC resource, a new migration, a new environment variable, a new CI job, a renamed module.

Source of Truth

Current code and configuration
  > Current declarative infrastructure (Terraform / CDK / CloudFormation / K8s / compose)
    > Official project documentation
      > This skill's memory

Memory never overrules the repository. When a lower source contradicts a higher one, the higher wins, the lower is corrected, and the disagreement is itself worth recording — a stale README that misled you will mislead the next person too.


Mode: ANSWER

  1. Staleness check on anything you will reuse (§ Refresh).
  2. Answer from memory only where the memory is fresh; verify the rest against the repository.
  3. Answer as a system, never as a file listing (§ The Main Rule).
  4. Mark every non-obvious claim with its confidence level.
  5. Persist anything newly discovered that was expensive to find.

Shapes to follow:

"Where are users created?" → the endpoint · the controller · the service/use case · the repository and table · the events emitted · the side effects (email, queue, external API) · the tests covering it. Not just "in user.service.ts".

"What does this project use from AWS?" → a service map with, per service: purpose, where it is configured, who consumes it, how it authenticates, related env vars, and the dependencies between services. Plus what you could not determine.

"How do I insert a test user?" → first establish environment, database, model, required relations and constraints, and side effects that firing this flow would trigger; then propose the safest method (§ Operate). Never open with the SQL.

"What changed recently, and why?" → changes/ + git history + the ADR that decided it, with before → problem → change → after → impact.

If the answer is not knowable from the repository, say so, say where it would live if it existed, and say what you would need. UNKNOWN stated plainly is a correct answer; a plausible invention is the single worst output this skill can produce.


Mode: IMPACT

Before any modification, consult the map and enumerate — never estimate — across:

Entry points · Business logic · Database (tables, migrations, constraints) · External APIs ·
Events and their consumers · Queues · Jobs and schedules · Caches · Tests · Infrastructure ·
Environment variables · Public contracts and shared types · Other environments

Answer explicitly: who calls this · what does it call · what data does it write · what events does it emit · who consumes them · which tests cover this behavior · what is versioned or contracted externally · what would fail silently rather than loudly.

Weight most heavily: public contract changes, data model changes, shared type changes, execution order changes, new global state, and changing the meaning of something without changing its name — the last is the most dangerous change a codebase can receive, because nothing breaks loudly.

Report the radius with confidence levels; an unexamined consumer is UNKNOWN, not "probably fine".


Mode: RECORD

After a significant change lands, write changes/YYYY-MM-DD-<slug>.md from templates/change.md, covering — in this order, none omitted:

Problem  →  Before  →  Change  →  Files modified  →  Why  →  After  →  Impact  →  Validation

The Before and Why sections are the reason this directory exists. Code shows what the system does now; nothing in the repository preserves what it did before or why someone chose this. Losing that is how a future engineer "fixes" a deliberate decision.

Write an ADR in decisions/ when a decision defines ownership, changes a contract, moves a boundary, adds infrastructure or a dependency, or rejects a serious alternative. Then update — only what the change actually affects:

project-map.md · architecture.md · infrastructure.md · integrations.md · database.md ·
environments.md · flows/* · investigation-log.md

Touching a document the change did not affect adds noise and invites drift. Leave it alone.


Mode: OPERATE

Load references/safe-operations.md before any real operation. Summary of what is binding:

Reads against non-production are free. Everything else passes this preamble first, stated to the user:

Environment:      staging                    [INFERRED — connection comes from .env.staging]
Connection via:   $DATABASE_URL              [value not read; host not resolved]
Database:         app_staging
Operation:        UPDATE users SET status='active' WHERE id='<ulid>'
Scope:            1 row (verified by SELECT first)
Side effects:     none — no trigger, no outbox, no listener on this table
Reversible:       yes — inside a transaction; rollback verified
Risk:             low

Non-negotiable within this mode:

  • Classify the environment as local · test · development · staging · production · UNKNOWN, from the connection source and configuration — never from a name. UNKNOWN is handled as production.
  • Production and UNKNOWN require explicit authorization for that exact operation. Authorization for one operation is not authorization for the next one.
  • Check whether the write triggers real side effects the database does not show: emails, webhooks, payment calls, queue consumers, event listeners, outbox rows, cache invalidation. You know the flows — use them. A "harmless" insert that emails a real customer is not harmless.
  • Prefer, in order: an application-level seed or factory → a transaction with a verified rollback → clearly identifiable test data (a marked prefix or ULID you can find and remove) → raw SQL.
  • Always SELECT the affected rows before an UPDATE or DELETE, and state the count.
  • Never disable constraints, foreign keys, triggers, or safety settings to make an operation work.
  • Never run an unbounded DELETE/UPDATE, a TRUNCATE, a DROP, or a destructive migration without explicit, operation-specific authorization.

Mode: HANDOFF — the context package

Produce a package another agent can act on without rediscovering the system, from templates/context-package.md:

# Context Package: Payment System

Architecture:      application service + gateway pattern
Entry point:       POST /payments → PaymentController.create()
Main service:      PaymentService (src/modules/payments/payment.service.ts)
Database:          payments, orders
External services: Stripe (StripeGateway)
Events:            PaymentCompleted, PaymentFailed
Infrastructure:    SQS payments-queue → PaymentWorker
Relevant files:    …
Known risks:       …
Recent changes:    changes/2026-08-08-payment-retry.md
Open questions:    webhook retry policy is UNKNOWN

Point at artifacts; do not paraphrase them. A paraphrase of a paraphrase is how a multi-agent operation ends up implementing a system nobody actually has. Give the path to the flow file, the ADR, the change record — and let the next agent read the original.


Secrets Hygiene

Record about a variable: name · purpose · where it is consumed · which environments define it · where its value comes from · whether it is required. Never the value.

STRIPE_SECRET_KEY
Purpose:        authenticates server-side Stripe API calls
Used in:        src/infrastructure/payments/stripe.client.ts:12
Required:       yes
Environments:   development · staging · production
Value:          [SECRET — NOT STORED]
Configured in:  AWS Secrets Manager (`prod/payments/stripe`), referenced by infra/ecs.tf:88

Never copy into memory: keys, tokens, passwords, full connection strings, private keys, session cookies, or the contents of a real .env. Read .env.example freely; from a real .env, take the variable names and nothing else. If a value is not already committed to the repository, do not be the thing that commits it — that applies to account IDs, private hostnames, and internal ARNs too: point at where they are configured instead.

Memory Economy

Never recordAlways record
Commands run, files opened, searches performedArchitecture actually derived, and its violations
Trivial reasoning and discarded hypothesesRelationships between components, services, and data
Anything re-derivable by reading one file nowDecisions and the alternatives they rejected
A restatement of what another document ownsBehavior and flows that took real work to trace
Errors with no future consequenceRisks, constraints, gotchas, non-obvious conventions
A conversation transcriptWhat changed, why, and what it affected

The test: would a competent engineer need more than a few minutes to rediscover this? If no, do not write it. A memory that records everything is read by nobody, and a memory nobody reads is worth exactly as much as no memory at all.

The Main Rule

Never stop at:

"This file contains X."

Reach:

"This file is part of the X flow, sits in the Y architectural layer, uses Z infrastructure, reads and writes these entities, is called from these components, emits these events — and a change here can affect these other points."

Conversational Output

Report in this shape, omitting what does not apply, while the substance lives in .ai/:

MODE               which mode ran
ANSWER             the direct answer, first, in plain terms
EVIDENCE           path:line · command output · config key, per claim
CONFIDENCE         what is CONFIRMED · INFERRED · UNKNOWN
SYSTEM CONTEXT     flow · layer · data · infrastructure · consumers
IMPACT             what a change here would touch          (IMPACT / OPERATE modes)
SAFETY             environment · scope · reversibility     (OPERATE mode)
MEMORY UPDATED     which files were written, and why
OPEN QUESTIONS     what remains UNKNOWN, and how to resolve it
NEXT ACTION        exactly one thing

Keep the message short and the artifacts complete — never the reverse.

Done When

  • The mode was chosen explicitly, and the staleness check ran before any stored claim was reused.
  • Every claim carries CONFIRMED / INFERRED / UNKNOWN, and every CONFIRMED carries backing.
  • The architecture was derived from dependency direction, not from folder names — and its violations are recorded.
  • Infrastructure, integrations, data, and configuration were considered, not source code alone.
  • No secret value, and nothing not already committed, entered the memory.
  • Documents affected by what was learned were updated; documents unaffected were left alone.
  • Any contradiction between memory and repository was resolved in the repository's favor, in the same turn.
  • No real write happened without its safety preamble, and none against production or an unknown environment without explicit authorization for that exact operation.
  • Coverage is stated: what was inspected, and what was not.
  • Another agent could read .ai/ and continue without rediscovering the system.

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.