Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/rjmurillo/ai-agents/ci-scriptsgit clone --depth 1 https://github.com/rjmurillo/ai-agentsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/rjmurillo/ai-agents/ci-scripts)<a href="https://agentmods.dev/instructions/rjmurillo/ai-agents/ci-scripts"><img src="https://agentmods.dev/badge/instructions/rjmurillo/ai-agents/ci-scripts.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.06486 | $0.06486 |
| Opus 5 | $0.03243 | $0.03243 |
| Sonnet 5 | $0.01297 | $0.01297 |
| Haiku 4.5 | $0.00649 | $0.00649 |
Grade A, and why
ai-agents ci-scripts.instructions.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 146 lines — stays where its author put it; the contents beside it link to each section on GitHub.
CI and Validation Script Rules
Scripts under scripts/validation/, build/, and .github/workflows/ gate every PR. A broken change here blocks the entire repository (see Issue #1711).
MUST
- Local run before commit. CI-critical scripts MUST be exercised locally before commit. Use
gh actfor workflows, directuv run pythoninvocation for validation scripts, and the actual test suite for helpers. - Shift-left validation. Before pushing, MUST run
uv run python scripts/validation/pre_pr.pyand resolve any failures. - Python for new scripts. New scripts MUST be Python per ADR-042. MUST NOT create new
*.shbash scripts. - Exit codes. Scripts MUST follow the exit code contract:
0=ok,1=logic,2=config,3=external,4=auth (AGENTS.md). - Tests required. New validation scripts MUST have tests under
tests/. Do not add CI tests to shipped skill directories. - Pin Actions to SHA. Workflow changes MUST pin every Action reference to a commit SHA.
- Verify worktree identity before writing. A script that resolves the repository root and then writes to it MUST confirm the current directory is inside the resolved root before the first write (
Path.cwd().resolve().is_relative_to(top_level)).git rev-parse --show-toplevelreports a claim, not a fact about where you are: a localcore.worktreevalue or aGIT_WORK_TREEenvironment variable redirects it to a directory you are not standing in, andgit statusthen reports every tracked file as deleted because it is looking somewhere else. Measured: an ordinarygit worktree addsets neither, a moved worktree still resolves correctly, and a worktree whose main checkout moved away fails closed with a non-zero exit. So the redirection is always something a person or a tool set on purpose, which is exactly why a script that inherits it has no way to notice. - Anchor helper resolution on the absolute top level. A resolver that walks candidate roots to find a repository helper MUST anchor its in-repo rung on
git rev-parse --show-toplevel, and MUST order that rung ahead of any out-of-repo root. A bare relative.clauderung only resolves when cwd happens to be the repository root; invoked from a subdirectory it falls through to a copy under~/.copilot/installed-pluginsor~/.claude/plugins/cache, which can be arbitrarily old.check_skill_resolver_anchoring.pyenforces this forSKILL.mdresolvers; the same requirement binds resolvers written anywhere else, where nothing enforces it for you. - Read the state you are asserting about, and name the ref. A claim about what the repository contains MUST be computed from a named ref:
git ls-tree -r -z --name-only HEADfor a path inventory, the fullgit ls-tree -r -z HEADwherever entry mode matters, andgit log HEADfor history. Use-z; paths are not newline-safe, and--name-onlyhides modes, so the trackedmemory_enhancementsymlink is indistinguishable from a regular file. Such a claim MUST NOT come fromgit log --allor from a directory walk.--allreads every ref the clone holds rather than the branch: at diagnosis this clone held 2054refs/remotes/pr/*refs whileremote.origin.fetchcovered only branch heads, and deleting one of them flipped a shipped test from failing to passing without changing a byte of the repository (Issue #3753). PreferHEADtoorigin/main, since a guard scoped to the base branch cannot see what the current change does. Reads of the working tree, the index, and untracked files remain correct and required wherever that state is itself the subject, as in regeneration drift and pre-commit checks. A ratchet baseline is a claim about a ref, so the measurement behind it MUST NOT read untracked state:Path.exists()counts gitignored build output that the author happens to have generated and CI never will, so the same commit scores differently on two machines. Measured 2026-08-07: a baseline recorded withbuild/audit/GENERATION-AUDIT.mdpresent landed one too low on four entries and turnedmainred for every open PR, while the identical command on the identical commit passed locally (Issue #4748). Their findings describe local state and MUST NOT be restated as claims about a ref: a directory walk reported three skills as unusable when what remained on disk was untracked residue from a deletion in PR #2359, and the resulting Issue #3420 was closed NOT_PLANNED. - Convert every failure signal into a non-zero exit before the step ends. When a
run:block moves into a Python module under ADR-006, the shell semantics it is replacing MUST be preserved at the boundary: underset -eany non-zero command aborted the step, so the module MUST return a non-zero code tosys.exitfor the same conditions. Returning a findings list, an error string,None, orFalseto a caller that ignores it converts a red step into a green one, and the extraction is then a silent-pass detector rather than a check. Six confirmed instances are tracked in Issue #4068. A green step whose behavior changed in this direction is worse than the shell it replaced, because the shell failed loudly and the module reports success. Verify by running the module against input known to be bad and reading$?, not by reading the log. - Convert every detected violation into a non-zero exit. A script that detects a violation and prints a message but exits 0 has the same observable behavior as a script that found nothing. Hooks and CI steps read the exit code; they do not parse output. If the script found a problem, it MUST exit non-zero. If it found nothing to check (empty input set, no files matched), it MUST exit 0 and SHOULD print a count of examined items so a caller can tell the difference between "zero violations in N items" and "zero violations because nothing was examined".
- Distinguish a run that did nothing from a run that succeeded. A workflow, checker, or gate that early-returns when there is no work MUST NOT report that outcome the same way it reports completed work, or the signal inverts: the job goes green exactly when it is idle and red exactly when it acts, and the failure hides inside a mostly-green history. Always print the examined count alongside the violation count: "0 violations in 381 files" is verifiable; "OK" is not. A mutation harness MUST report DID-NOT-APPLY when the target literal is absent so that a moved or renamed target does not become an undetected surviving mutant.
- A PR introducing a gate MUST demonstrate the gate passing against the full corpus before merge. A unit test over fixtures proves the checker's logic; it proves nothing about whether the existing corpus satisfies the gate. Those are separate claims and only the second determines whether main goes red. The PR body or a PR comment MUST quote the output of the gate's own command run against the full corpus on the PR branch. A gate that ships with known outstanding violations blocks every subsequent push by every contributor and must not merge. Measured cost: two violations in a single episode file blocked the entire repository for a multi-hour window after PR #4219 merged, driving three hook-bypass attempts, each of which is a policy violation under ADR-086:95-98 (Issue #4262).
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 146 lines · 6,486 tokens per session scan A 69b8a65ab702
ai-agents ci-scripts.instructions.md is an instructions file published in the GitHub repository rjmurillo/ai-agents (45 stars, last pushed today), licensed MIT. It adds 6,486 tokens to every session, about $0.0324 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other instructions, from other repositories
abtars AGENTS.md
AGENTS.md instructions for aksika/abtars, covering agents.md, quick commands, architecture, model-call chokepoint: spin(spec) (#1271) and external dependency: abmind.
Alex_Skill_Mall mall-maintenance-rules.instructions.md
Always-on routing for Mall maintenance work — fires the right Mall skill at the right moment. Distinguishes Mall-owned automation from out-of-scope editorial work.
gameforge AGENTS.md
Instructions for robcost/gameforge, covering general guidelines for working with nx, scaffolding & generators and when to use nxdocs.
vscode buildNext.instructions.md
Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).
spec-kit AGENTS.md
AGENTS.md instructions for github/spec-kit, covering agents.md, about spec kit and specify, quickstart — add a new integration in 5 steps, integration architecture and integrationmanifest — file tracking.
codex AGENTS.md
AGENTS.md instructions for openai/codex, covering rust/codex-rs, the codex-core crate, code review rules, crate api surface and model visible context.