ScaleTail
AGENTS.md2.2k starsChanged 19 days agoMITView on GitHub
ScaleTail is a collection of Docker Compose stacks. Each directory in services/ is one stack, which usually runs a self-hosted application behind a Tailscale sidecar container. From each changed service directory, validate Compose. The command gives each required variable a dummy value, as CI does, so you do not edit .env: It must exit with status 0. CI fails on "variable is not set" warnings. From the repository root, lint all Markdown with the rumdl version that .github/workflows/linting.yml pins in…
- Reads credentials
We split this AGENTS.md into the rules it gives an agent
7 rules. About 0 are common, 2 are distinctive, and 5 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.
5
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
- Very specific: line 14
Read the service's compose.yaml, .env, and README, including "Deviations from the standard setup".
- Distinctive: line 17
Keep changes focused on the requested service or documentation.
- Very specific: line 22
Add, rename, or remove a service: the services/<name>/ directory and its row in the root README.md.
- Very specific: line 28
Every .env file is tracked and published.
- Very specific: line 30
Start test stacks from a copy outside the repository, such as cp -R services/<name> /tmp/<name>, and put real values only in the copy.
- Distinctive: line 31
Before you commit, run git status and stage only the files you meant to change.
- Very specific: line 55
When you have an auth key, start the copied stack and test its main function through the Tailnet.
≈ “Common” is an estimate: at least 1 in 5 of the 36,368 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
Agent guidance
ScaleTail is a collection of Docker Compose stacks. Each directory in services/ is one stack, which usually runs a self-hosted application behind a Tailscale sidecar container.
Where the rules live
- CONTRIBUTING.md: how to add, update, verify, and submit a service. Follow it.
- templates/service-template/: the starting point for every service. Its comments explain each setting.
- documentation/standard-setup.md: the shared setup. A service README lists only what differs, under "Deviations from the standard setup".
- .github/workflows/: the Compose validation and Markdown lint that CI runs.
Before you edit
- Read the service's
compose.yaml,.env, and README, including "Deviations from the standard setup". - Confirm ports, commands, volumes, variables, and health checks in the image's upstream docs.
- Preserve documented exceptions. Some stacks use other Compose service keys or container names, and other containers or
.envvalues refer to those names. - Keep changes focused on the requested service or documentation.
- Apply the rules to new stacks and to the parts of an existing stack that you change. Existing stacks are brought in line over time, so do not fix the rest of a stack unless that is the task.
Files that change together
- Add, rename, or remove a service: the
services/<name>/directory and its row in the rootREADME.md. Insert a new row in alphabetical order by the bold name, and leave the other rows alone. - Make existing users act, such as with a new required secret, a moved volume, or a changed
SERVICE: add an "Upgrading" section to the service README.SERVICEalso names the Tailnet device, the containers, and most data folders. - Change the template: also update
documentation/standard-setup.mdandCONTRIBUTING.mdwhere they describe the same setting. Validate it fromtemplates/service-template/withSERVICE=dummy IMAGE_URL=dummy docker compose config --quiet, because the template leaves both values empty.
Secrets and local data
- Every
.envfile is tracked and published. Never commit an auth key, password, token, or other credential. - Leave each secret empty in
.env. When the stack cannot start without it, read it incompose.yamlas${VAR:?Set VAR in .env}, and add a# Required:comment above it in.envthat says what to set, such as how to generate it. KeepTS_AUTHKEYoptional, because only the first start needs it. - Start test stacks from a copy outside the repository, such as
cp -R services/<name> /tmp/<name>, and put real values only in the copy. A running stack writes./config,./ts/state(with the device key), and its data folders next tocompose.yaml. - Before you commit, run
git statusand stage only the files you meant to change.
Verification
From each changed service directory, validate Compose. The command gives each required variable a dummy value, as CI does, so you do not edit .env:
env $(grep -ohE '\$\{[A-Za-z0-9_]+:\?' compose.yaml .env | sed -E 's/^\$\{//; s/:\?$/=dummy/' | sort -u) docker compose config --quietIt must exit with status 0. CI fails on "variable is not set" warnings.
From the repository root, lint all Markdown with the rumdl version that .github/workflows/linting.yml pins in its version: input, and check your changes for whitespace errors:
version=$(sed -nE 's/.*version: "([0-9.]+)".*/\1/p' .github/workflows/linting.yml)
uvx "rumdl@$version" check --config .markdownlint.yml .
git diff --check origin/mainWithout uv, download that version from the rumdl releases and run rumdl check --config .markdownlint.yml ..
Lint the whole tree, because renaming a service breaks a link in the root README.md. git diff --check origin/main also covers staged and committed changes, but not untracked files, so stage new files first. In a fork, compare with the main branch of this repository instead, for example upstream/main.
When you have an auth key, start the copied stack and test its main function through the Tailnet. Run each health check command in its container with docker exec.
Report the checks you ran. State any checks that credentials, hardware, permissions, or unavailable tools prevented.
Pull requests
- Title the pull request
Service: what changes, such asUmami: new service. For several services, list them or useAll services:. For other areas, useCI:,Docs:, orTemplate:. - Fill in the pull request template. Maintainers apply the labels.
Trending
Less talk lately.thin dataabout the whole repository
Who's talking about tailscale-dev/ScaleTail
- @jaystapleton.ca“Moved Immich from tsdproxy to a ScaleTail template today. ScaleTail is a pretty amazing resource if you …”Bluesky · Jan 17, 2026 · 4 likes
- @chrisshort.net“tailscale-dev/ScaleTail #devopsish github.com/tailscale...”Bluesky · Oct 20, 2026 · 1 likes
- @tom-doerr.bsky.social“https://github.com/tailscale-dev/ScaleTail”Bluesky · Apr 20, 2026 · 1 likes
- traumadoc2b/bullwinkle“Add Tailscale”GitHub · Jul 5, 2026
- traumadoc2b/bullwinkle“Create new LXC for Paperless ngx”GitHub · Jul 4, 2026
The biggest 5 of 7 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 7
Talked about on GitHub and Bluesky (7 times).
On GitHub · 4
- Jul 5, 2026Add Tailscale — traumadoc2b/bullwinkle0 reactions
- Jul 4, 2026Create new LXC for Paperless ngx — traumadoc2b/bullwinkle0 reactions · 7 comments
- May 8, 2026release: v1.0.1 — jdam11/slimventory0 reactions
- Apr 15, 2026use wget instead of curl in tailscale healthcheck — WorldOfZero/homelab0 reactions
On Bluesky · 3
- Jan 17, 2026Moved Immich from tsdproxy to a ScaleTail template today. ScaleTail is a pretty amazing resource if you self-host anything - Docker Compose… — @jaystapleton.ca4 likes and reposts
- Oct 20, 2026tailscale-dev/ScaleTail #devopsish github.com/tailscale... — @chrisshort.net1 likes and repost
- Apr 20, 2026https://github.com/tailscale-dev/ScaleTail — @tom-doerr.bsky.social1 likes and repost
Other versions1 project uses a version of this.
Word for word · 1
- 2Tiny2Scale/ScaleTail★ 2.2k100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
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.
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 28,693 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.
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.

