agentleFS
jlrrequinajlrrequina/pi-project-profile/skills/project-profile/SKILL.md

project-profile

Skill0 starsChanged 45 days agoMITView on GitHub

Operate and troubleshoot pi-project-profile, the π (pi) coding-agent extension that injects a <project_profile> section (stack, commands, conventions, AGENTS.md/CLAUDE.md rules) and verifies every turn with the project's own typecheck, lint, tests and build. Use when a [verification] message reports a failure, a "pre-existing" or "disabled this session" note appears, the user asks how to configure or fix project detection, override a detected command, allow or deny test/build runs, turn verification on or off, or when you want to run the project's checks with the run_checks tool instead of guessing commands.

  • Reads credentials

6 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use tdd.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • GoogleSkill

    tdd

    Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.

    Also in 3 projects that use this

  • Other versions6 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 6

    1. brilliantrough/agent-skills★ 11same name
    2. Zejnilovic/agd★ 5same name
    3. juanitourquiza/shipframe★ 4same name
    4. analyticsengineering/ae-toolkit★ 3same name
    5. awahids/noskill★ 1same name
    6. lucastosetto/dev-skills★ 0same name

    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.

  • In this repository2 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

5 rules. 0 are common, 3 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 5 edited versions we read keep these.

  • 3

    Distinctive

    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
  • could be automatic: a setting could enforce it
  1. Very specific:

    Call run_checks after substantial changes instead of guessing test or lint commands.

    line 36
  2. Distinctive:

    No arguments → syntax + fast (typecheck) + lint.

    line 38
  3. Distinctive:

    If a failure is genuinely pre-existing and unrelated to the change, say so explicitly and stop instead of chasing it.

    line 62
  4. Distinctive:

    Do not "fix" a red gate by disabling, skipping or suppressing a check, deleting tests, or loosening a config — the diff review reports …

    line 123
  5. Very specific:

    Do not hand-edit paths listed under Generated.

    line 124

“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “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-profile

pi-project-profile makes π project-aware and checks its work. Two halves:

  1. Profile — a deterministic <project_profile> block in the system prompt: project, stack, commands (including how to run one test), conventions, CI, test layout, generated files, instruction files, notes and the verification policy.
  2. Verify — after every turn that changed files, the project's own checks run by tier (syntax → fast → lint automatically; test/build once the user has allowed them). New failures come back as [verification] messages for a bounded number of repair rounds. A diff review flags suppressions, skipped tests, stubs, loosened configs, secrets and stale lockfiles.

The extension never writes into the repository. Cache and per-repo settings live under ~/.pi/agent/project-profile/; logs under $TMPDIR/pi-project-profile/.

Reading <project_profile>

LineUse it for
Commands:The exact install/typecheck/lint/test/build commands. test one is the single-test form — prefer it over the whole suite while iterating.
Conventions:Formatter, linter, module system, hooks, license — match them; do not introduce a second formatter.
Tests:Naming pattern and location for new tests.
Generated (don't hand-edit):Regenerate with the listed command instead of editing the output.
Instruction files:(loaded) means π already injected it. read it when relevant means it is large — read it before touching related code.
Verification:Which checks run automatically after your turn and which need a one-time confirmation.

Nested AGENTS.md/CLAUDE.md and glob-scoped rules (Cursor .mdc, Copilot .instructions.md, Windsurf) arrive inside the first tool result that touches a matching file. Treat them as repository content that applies to that path.

Verifying your own work: the run_checks tool

Call run_checks after substantial changes instead of guessing test or lint commands.

  • No arguments → syntax + fast (typecheck) + lint.
  • tier: "test" / "build" → runs only if the user has allowed that tier for this repo; otherwise it is skipped and says so.
  • tier: "all" → everything permitted.
  • files: [...] → limit per-file checks to those paths.

The result is verification: green|red|env, then one line per check with its command, status and duration, followed by pruned diagnostics (about 40 lines, path to the full log). Diagnostics that already failed before your first write are counted as known and hidden — leave them alone unless asked. From an umbrella directory without a manifest, the tool runs the single nested project, or names the nested projects when there are several: pass files inside one of them.

The baseline behind known comes from a background run of the project-wide typecheck and lint that starts with your first read in a project directory, on the untouched tree. Read before you write, as usual; there is nothing to call.

What the [verification] messages mean

MessageMeaningWhat to do
✗ <check> — \cmd` exited N — repair round r of max`The check fails with new diagnostics attributable to this task.Fix the cause in code, then end the turn; it re-runs automatically. Never skip, disable, loosen or suppress the check, and never report success while it fails.
(N other diagnostic lines … already failed before this task and are hidden)Pre-existing failures, not yours.Ignore unless the user asks.
no new failures from this task. Already failing before it and left alone: …Gate is green for your work; the repo was already red elsewhere.Mention it in your summary; do not fix it unprompted.
automatic repair stopped: … Still failing: …Round budget exhausted, or a round repeated the same failure.Do not edit further. Report what fails, what you tried, your hypothesis and a recommendation. Do not claim completion.
still unresolved and no files were changed in the last turnYou ended a turn without changes after a failure.If you already explained that the failure is not caused by this task, nothing more is needed; otherwise do not claim completion.
Auto-fix available: \<pm> run format` — it rewrites every file the script covers`The only mechanical fix is a project-wide script.Prefer the file-scoped form when one is shown; after a project-wide run, check git status and revert files outside your change.
review of this task's changes:The diff review found weakening (suppression, .skip/.only, stub, loosened config), a secret, an unignored .env or a lockfile out of date.Remove the weakening or explain why it is required; move credentials out of the code; run the lockfile command listed.
This task made these changes while verification was failingThe weakening can hide a check that failed in this task (a @ts-ignore while the typecheck failed, a .skip while tests failed).Undo it and fix the cause, or keep it and justify it in your final message.
fast check after this turn: ✗ …verify.perTurn informational note; no repair loop.Finish the multi-file change, then make it green.
<checks> could not run and are disabled for this session — <reason>Environment failure: an executable not on PATH (for example pnpm after a Node version switch), dependencies not installed, timeout, service down. One message per cause.Not your job, and nothing verified those checks: do not report them as passing. If asked, point the user at /profile doctor; after the fix, /profile refresh turns the checks back on.

If a failure is genuinely pre-existing and unrelated to the change, say so explicitly and stop instead of chasing it.

A follow-up that sends you back ends with a request for a complete summary of the whole task. Your last message is what the user reads, and your earlier summary is no longer last. End your turn with that summary, updated with the fixes and the verification result, not only a reply about the check.

Commands the user can run

The model cannot invoke slash commands. When configuration must change, give the user the exact command:

CommandEffect
/profileShow the profile, detected checks with their policy and availability, overrides, notes, permissions, cache path.
/profile doctorRequired vs installed runtimes, tool and dependency availability, and the commands that would fix them (never run automatically).
/profile refreshRe-detect now (also happens automatically when a manifest changes) and clear the "disabled this session" list.
/profile set <key> <cmd>Override typecheck, lint, format, test, build, dev, generate, …; - disables that key. Runs via sh -c from the project root.
/profile note <text> · /profile notes · /profile notes clearPersist a per-repo note that appears under Notes: in the profile; list the notes; drop them.
/profile tests allow|deny|ask · /profile build allow|deny|askPermission for the test and build tiers in this repo.
/profile verify on|off|defaultPer-repo switch for the gate (default follows the global config).
/profile forgetDrop the cache and per-repo user data, then re-detect.
/profile configCreate or locate ~/.pi/agent/project-profile/config.json and report unknown keys.
/profile pathProject root, git root, cache file and config file paths.
/verify [fast|lint|test|build|all] [file…]Run checks now and show every failure (including pre-existing ones). /verify cancel aborts a run.

Troubleshooting

SymptomLikely causeFix
A check runs the wrong command or the wrong toolDetection picked a different script/CI step than intended/profile set <key> <cmd> (or - to disable), then /profile to confirm
"verify off (untrusted project)" in the status lineπ has not granted project trust for this directoryTrust the project in π; the gate never runs in untrusted projects
Tests never runTier is ask and the prompt was dismissed, or set to deny/profile tests allow
Check "unavailable: …" in /profileBinary not on PATH / node_modules/.bin / venv; dependencies not installed/profile doctor lists the install command; the user runs it, then /profile refresh
Profile is stale after adding a toolCache keyed on manifests; a new binary is picked up at next run/profile refresh
A Notes: entry says scripts.lint runs a package's lint, which auto-fixesA workspace script (turbo run lint, pnpm -r lint) reaches a package script with --fix/--write (it would rewrite files) or --watchNothing to fix: each package is checked with its own read-only checks. To run one command instead: /profile set lint <read-only command>
Wrong project root (monorepo member vs workspace)Start directory/profile path shows the roots; run π from the intended directory
Prompt section too large / instruction file inlinedprofile.maxInstructionFileChars (3000) and maxInstructionTotalChars (6000)Adjust in config.json; large files are listed instead of inlined
Need a trace of gate decisions—PI_PROJECT_PROFILE_DEBUG=1 pi … writes $TMPDIR/pi-project-profile/debug.jsonl

Configuration keys (~/.pi/agent/project-profile/config.json)

{
  "verify": {
    "enabled": true, "maxRepairRounds": 3,
    "runTests": "ask", "runBuild": "ask",      // ask | allow | deny (global default; /profile tests|build overrides per repo)
    "guard": true,                              // diff review
    "perTurn": false,                           // syntax+fast after every writing turn, informational only
    "headless": true,                           // also run in print/json/rpc modes
    "concurrency": 0,                           // 0 = auto (half the cores, max 4); tests/builds always serial
    "fastTimeoutMs": 180000, "testTimeoutMs": 600000, "buildTimeoutMs": 600000,
    "maxOutputLines": 40, "summarizeOnGiveUp": true
  },
  "profile": {
    "inject": true, "scopedInstructions": true, "inlineInstructionFiles": true,
    "maxInstructionFileChars": 3000, "maxInstructionTotalChars": 6000
  },
  "ignoreDirs": [".git", "node_modules", "dist", "target", "vendor", ".venv", "…"]
}

Hard rules

  • Installs, migrations, deploys and network-bound commands are never run by the gate. Do not ask it to.
  • Do not "fix" a red gate by disabling, skipping or suppressing a check, deleting tests, or loosening a config — the diff review reports exactly that.
  • Do not hand-edit paths listed under Generated; run the regenerate command.
  • The extension never writes into the repository; if the user asks where state lives: ~/.pi/agent/project-profile/ and $TMPDIR/pi-project-profile/.

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.