boring-but-good
AGENTS.md1 starsChanged 13 days agoApache-2.0View on GitHub
Shell-script and workflow skills that give coding agents the ability to interact with engineering systems. Publishable skills live under skills/<skill-name>/, and each has a SKILL.md. Pi extensions live separately under extensions/<extension-name>/. Some skills keep executables in a scripts/ folder, others keep them at the skill root, and several are prose only. This file deliberately does not inventory the skills or the test suites. Run ls skills and read tests/test-all.sh for the current list: every previous attempt to keep an inventory…
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,843 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 repository19 other files it gives its agents.
- ai-chatSkill
- argocdSkill
- code-reviewSkill
- commitSkill
- dependency-trackSkill
- financeSkill
- handoffSkill
- java-21-to-25-migrationSkill
- jenkinsSkill
- jiraSkill
- perplexitySkill
- pr-readySkill
- researchSkill
- shipSkill
- skanetrafikenSkill
- sonarqubeSkill
- tddSkill
- to-tasksSkill
- verifySkill
The file
We split this AGENTS.md into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
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
- Distinctive: line 21
All tests against live servers must be strictly read-only: No creating, updating, deleting, or modifying anything.
- Distinctive: line 35
If you add a live test, verify the full call chain to confirm nothing writes to the server.
- Very specific: line 39
Run: bash tests/test-all.sh.
- Very specific: line 41
Run npm --prefix extensions run validate for the full Pi extension unit and typecheck suite.
≈ “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
boring-but-good
Shell-script and workflow skills that give coding agents the ability to interact with engineering
systems. Publishable skills live under skills/<skill-name>/, and each has a SKILL.md. Pi
extensions live separately under extensions/<extension-name>/. Some skills keep executables
in a scripts/ folder, others keep them at the skill root, and several are prose only.
This file deliberately does not inventory the skills or the test suites. Run ls skills and read
tests/test-all.sh for the current list: every previous attempt to keep an inventory here went
stale and misled the next reader. tests/ is the suite runner.
Architecture
- Config loaders (
_config.sh): Read credentials from~/.boring/<skill>/files. Environment variables take precedence over files (if [ -z "$VAR" ] && [ -f file ]). - API helpers (
_api.sh): Wrap curl with auth, retry logic (transient failures: codes 7/28/52/56), structured error messages, and HTTP status capture. Jenkins, SonarQube, and ArgoCD share this pattern. Dependency-Track inlines it indtrack-api.sh. - Jira is different: Uses go-jira CLI instead of curl. Auth is via keychain, not token files. Scripts wrap
jira request -M METHOD ENDPOINT;_config.shexplicitly resolves the macOS login keychain when go-jira's legacy implicit lookup cannot see it in SSH/non-GUI sessions. There is no_api.shfor it. - to-tasks is workflow-only: It has no scripts or credentials of its own. It tells agents to propose task changes, ask whether the destination is Jira or local, get explicit approval, then use the
jiraskill or write local task files.
CRITICAL: Tests must NEVER have side effects
All tests against live servers must be strictly read-only. No creating, updating, deleting, or modifying anything. This is non-negotiable.
The live test sections in tests/test-*.sh run only when the corresponding service is configured on the machine. Every API call in those sections must be a GET or equivalent read-only operation:
- Jenkins:
GET /api/json(server info) - SonarQube:
GET /api/system/status(health check) - Dependency-Track:
GET /v1/project(list projects) - Jira:
GET /rest/api/3/myself,GET .../project/...,GET .../priority,POST .../search/jql(search is read-only),GET .../issue/...,GET .../transitions - ArgoCD:
GET /api/v1/session/userinfo(health check),GET .../applications(list apps),GET .../projects(list projects) - The "invalid type detection" test calls
jira-create.shbut it exits at type validation before any write API call
The setup suite reaches no server at all. Keep it offline; do not add a live section to it without re-auditing this rule.
If you add a live test, verify the full call chain to confirm nothing writes to the server.
Tests
Run: bash tests/test-all.sh. It invokes every suite in tests/ and aggregates the results.
Run npm --prefix extensions run validate for the full Pi extension unit and typecheck suite.
The Jira arg-validation mock: go-jira may not be installed. The tests create a stub jira binary (just exit 1) and a mock $HOME with ~/.jira.d/config.yml so _config.sh passes. This lets scripts reach their own argument validation code. The stub isn't testing go-jira, it's bypassing the "go-jira not installed" gate.
dtrack-metrics-refresh.sh is the only script with valid no-arg behavior (portfolio-wide refresh). It's tested separately from the arg-validation loop.
Conventions
set -eis per skill, not universal. The curl-based action scripts (jenkins, sonarqube, dependency-track, argocd) useset -eo pipefail, and those four suites assert it withgrep -q 'set -e'. Their_config.shfiles use plainset -e. The jira scripts andsetup.shuse neither, and no suite requires it there. One exception is asserted in reverse:jenkins-test-failures.shmust not haveset -e(it handles 404s with|| true), andtests/test-jenkins.shfails if it gains one. Check the skill's own suite before adding or removing the line.- Shebangs are mixed. Both
#!/bin/bashand#!/usr/bin/env bashare in use;setup.shandskills/pr-ready/pr-state.shtake theenvform. Match the directory you are editing. Scripts should also passzsh -n, which the jira and argocd suites check. - Config:
~/.boring/<skill>/with separate files per value (not a single config file) - Error messages follow: what failed, then context, then common causes, then recovery commands
- curl-based tools have retry logic with exponential backoff for transport failures
_config.shfiles respect pre-set env vars (tests use this to inject fake URLs)
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.

