dotfiles-core
AGENTS.md0 starsChanged 18 days agoMITView on GitHub
Shell, prompt, and git configuration for macOS (zsh), Windows Git Bash, WSL (bash), and Windows PowerShell. Two machines, three platforms, four rc files. README.md is the document for people; this is the working contract. Exit 0 or the change is not done. It validates the manifest, every relative markdown link, every repository path named in the markdown, every runnable script being named by the markdown, shellcheck at severity error, and a parse pass over every shell file. A change under…
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 repository2 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- site/llms.txtllms.txt
The file
We split this AGENTS.md into the rules it gives an agent
3 rules. About 0 are common, 0 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 44
No dependencies: No language runtime, no package manager, no jq.
- Very specific: line 51
Nothing private in a tracked file: No identity, token, employer name, or machine-specific path.
- Very specific: line 77
Every script's header block is its usage, and -h prints it.
≈ “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
AGENTS.md
Shell, prompt, and git configuration for macOS (zsh), Windows Git Bash, WSL
(bash), and Windows PowerShell. Two machines, three platforms, four rc files.
README.md is the document for people; this is the working contract.
The gate
bash ./scripts/check.shExit 0 or the change is not done. It validates the manifest, every relative
markdown link, every repository path named in the markdown, every runnable
script being named by the markdown, shellcheck at severity error, and a parse
pass over every shell file. A change under site/ also passes
bash ./scripts/check-site.sh: page structure, internal links, and no inline
style or script. There is no other test command and no build step. CI runs both
scripts, and additionally applies, unlinks, and restores the real installers
against a throwaway home directory on macOS, Ubuntu, and Windows.
Single source of truth
scripts/modules.conf decides what is linked where. To change what gets
installed, edit that file and nothing else: scripts/install.sh,
scripts/install.ps1, and scripts/check.sh all read it. One link per line,
pipe separated:
module | source | target | platformsPlatform keys are macos, gitbash, wsl, windows. The README's
"Installation manifest" table restates it for people, so it moves in the same
change; the gate fails if a path named there stops existing.
Constraints
- bash 3.2. macOS still ships it. No associative arrays, no
mapfile, no${var^^}. Acaseinside$( ... )needs a leading(on every pattern: 3.2 scans for the closing paren without understanding case, so an unbalanced)ends the substitution early and the file stops parsing. It is a syntax error, so it fails on macOS and nowhere else. - POSIX
shundershared/shell/. zsh and bash both source those files. A bashism belongs in the platform rc file instead. - No dependencies. No language runtime, no package manager, no
jq. A repository that configures shells should not need one to check itself. This is what keepsshared/claude/to two declarative files: a change proven in a denser private tree lands here only when it needs no runtime, names no identity or machine path, and is correct without hooks, skills, or MCP. - LF only, enforced by
.gitattributes. A CRLF in a sourced file is a syntax error. - Nothing private in a tracked file. No identity, token, employer name, or
machine-specific path. Every rc file sources an untracked
*.localsibling last, and that is where those belong.
Writing to disk
Dry run is the default everywhere, and --apply, or -Apply in PowerShell, is
the only thing that writes. Keep it that way for anything new. Do not test with
--apply against a real home directory: bash ./scripts/test-install.sh runs
the real write path against a throwaway one, and scripts/test-install.ps1 does
the same for PowerShell.
Nothing is ever deleted. A target that already exists is renamed to
<target>.bak.<timestamp> before a link replaces it.
Layout
shared/shell/ POSIX sh, sourced by all four shells
shared/git/ gitconfig and the global ignore file
shared/claude/ the two files Claude Code reads at user scope
macos/ zshrc, bootstrap
windows/ bashrc, bash_profile, PowerShell profile, starship
wsl/ bashrc, bootstrap, wsl.conf examples
scripts/ installers, doctors, install tests, the gate, the manifest
site/ static page for dotfiles.marcopontili.com, deployed from mainEvery script's header block is its usage, and -h prints it. The PowerShell
scripts use comment-based help, so Get-Help covers those.
README
It is short on purpose. Adding a section means cutting one.
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.

