Agr Release
computerlovetech/agr
Release process for the agr package. An agent skill from computerlovetech/agr.
A skill your agent uses when deploying or operating an app on Fly.io — writing fly.toml, placing Machines in regions near users, attaching Volumes, managing secrets, or picking a scaling lever…
$ npx skills add ericrisco/rsc-harness --skill fly-io -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness fly-io --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/fly-io .claude/skills/fly-io && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "fly-io" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/fly-io into .claude/skills/fly-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fly-io", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/fly-ioType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill fly-io -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness fly-io --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/fly-io .agents/skills/fly-io && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "fly-io" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/fly-io into .agents/skills/fly-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fly-io", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill fly-io -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness fly-io --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/fly-io .cursor/skills/fly-io && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "fly-io" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/fly-io into .cursor/skills/fly-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fly-io", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/fly-io--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill fly-io -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness fly-io --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/fly-io .gemini/skills/fly-io && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "fly-io" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/fly-io into .gemini/skills/fly-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fly-io", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness fly-ioInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill fly-io -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/fly-io .github/skills/fly-io && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "fly-io" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/fly-io into .github/skills/fly-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fly-io", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill fly-io -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness fly-io --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/fly-io .opencode/skills/fly-io && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "fly-io" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/fly-io into .opencode/skills/fly-io/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fly-io", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
fly-ioA skill your agent uses when deploying or operating an app on Fly.io — writing fly.toml, placing Machines in regions near users, attaching Volumes, managing secrets, or picking a scaling lever…
Fly Io is an agent skill from ericrisco/rsc-harness. Use when deploying or operating an app on Fly.io — writing fly.toml, placing Machines in regions near users, attaching Volumes, managing secrets, or picking a scaling lever (autostop/autostart, scale count, fly-replay). NOT choosing which host to deploy on (that is deployment), NOT a git-push PaaS with no regions model (that is railway).
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/fly-toml.md`).
It sits in DevOps & Cloud, covering Deployment. It works with Git. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
flyFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
STRIPE_KEYSESSION_SECRETOLD_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Fly Io loads about 2.8k tokens when it runs, and up to ~4.9k if it reads all its reference files. Until then it costs about 88 tokens; SKILL.md has 1,097 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,097 words, ~2,827 tokens.
.claude/skills/fly-io/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.You are deploying an app to Fly.io: a fly.toml, Machines (Firecracker microVMs) placed in regions close to users, optional region-pinned Volumes, secrets, and the right scaling lever. Get the mental model right first, then the config follows. If none of that placement control matters, ../railway/SKILL.md is the git-push PaaS with no Machines/regions model.
primary_region, and config in fly.toml. Why: every command targets an app.[processes], e.g. web, worker) split one image into roles. Why: a web group takes traffic, a worker group does not — they bind services and VMs separately.fly-replay headers. Why: it is what makes "global" cheap — you do not run a load balancer.fly launch # detects framework, generates fly.toml + Dockerfile, creates the app
fly secrets set DATABASE_URL=postgres://... # restarts every Machine; never put this in [env]
fly deploy # builds image, runs release_command, rolls out Machines
fly scale count 2 --region iad,ams # place Machines in Virginia + Amsterdamfly launch is interactive and writes a starter fly.toml. Treat that file as a draft — review it against the next section before the first real deploy. Run fly status and fly logs after any deploy.
app = "my-api"
primary_region = "iad" # 3-letter region code: iad, ord, ams, syd, gru, nrt...
[build]
# dockerfile = "Dockerfile" # Fly builds from your Dockerfile; see ../docker/SKILL.md
[deploy]
release_command = "npm run migrate" # one-shot Machine that runs BEFORE the new version goes live
strategy = "rolling" # rolling | bluegreen | canary | immediate
[processes]
web = "node server.js"
worker = "node worker.js"
[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = "stop" # "off" | "stop" | "suspend" — set WITH auto_start_machines
auto_start_machines = true
min_machines_running = 0 # 0 = scale to zero; honored only in primary_region
processes = ["web"]
[http_service.concurrency]
type = "requests"
soft_limit = 200 # Proxy starts spreading load past this
hard_limit = 250 # Proxy stops sending past this
[[vm]] # formerly [[compute]]
size = "shared-cpu-1x"
memory = "512mb"
cpu_kind = "shared" # "shared" | "performance"
processes = ["web"]
[[mounts]]
source = "data" # volume NAME, created with `fly volumes create data`
destination = "/data"
processes = ["web"]
initial_size = "1gb"Full field surface ([[services]] vs [http_service], health checks, [[statics]], [[files]], all VM sizes, [restart], [metrics]) lives in references/fly-toml.md — read it when you need a key that is not above. Custom domains, certs and registrar-level DNS are ../domains-dns/SKILL.md.
Pick the branch first, then run the commands.
| Your app is... | Strategy | How |
|---|---|---|
| Stateless (no local disk; DB elsewhere) | Replicate the Machine into more regions | fly scale count 2 --region iad,ams,syd |
| Stateful with a Volume | Keep writes in primary_region, add read replicas + fly-replay | see references/multi-region.md |
| Needs one extra box now | Clone a single Machine (gets a fresh volume) | fly machine clone <id> --region syd |
fly platform regions # list region codes + names
fly scale count web=2 --region ams # per-process, per-region count
fly scale show # what runs where, right nowRules:
fly scale count N --region a,b is the per-region count, not a total. Why: count 2 --region iad,ams means 2 in each, i.e. 4 Machines.syd, not a bigger VM. Latency is distance, not CPU.A Fly Volume is a local NVMe disk pinned to one Machine in one region. There is no automatic replication between volumes. Encrypted at rest by default (--no-encryption to opt out — almost never do).
fly volumes create data --region iad --size 3
fly volumes listfly scale count on a group with a [[mounts]] creates a new empty volume per new Machine — it does not copy your data. This is the #1 stateful gotcha.# Bad: expecting two web Machines to "share" /data — they each get their own empty disk
[[mounts]]
source = "data"
destination = "/data"
processes = ["web"] # then `fly scale count web=3` => 3 separate, unsynced disks# Good: one writer with the volume; replicas are stateless and read via the DB/fly-replay
[[mounts]]
source = "data"
destination = "/data"
processes = ["writer"] # a single-Machine process group; scale `web` separately, statelessReplication is your app's job (LiteFS, app-level streaming, or a managed DB), never the volume's. See references/multi-region.md.
fly secrets set STRIPE_KEY=sk_live_... SESSION_SECRET=... # one rollout
fly secrets list # shows NAME + digest + timestamp — never the value
fly secrets unset OLD_KEYfly secrets set updates every Machine and restarts them — it resets the ephemeral filesystem. Why: batch your sets into one command so you trigger one rollout, not five.process.env.STRIPE_KEY.[[files]] with secret_name — see references/fly-toml.md.# Bad: secret baked into the image / committed config
[env]
STRIPE_KEY = "sk_live_51H..." # in git, in the image layers, leaked# Good: out of the repo, out of the image, encrypted in Fly's vault
fly secrets set STRIPE_KEY=sk_live_51H...Treat secret hygiene as non-negotiable — see ../secure-coding/SKILL.md.
| Lever | What it does | Reach for it when |
|---|---|---|
auto_stop_machines / auto_start_machines | Fly Proxy stops/starts a pre-created pool by load; never creates/destroys | Bursty or idle traffic; cut cost on quiet hours |
fly scale count | You set how many Machines exist per region/process | Steady baseline capacity; geographic spread |
fly-autoscaler (superfly/fly-autoscaler) | Scales Machine count off any Prometheus metric | Queue depth / custom-metric driven autoscaling |
fly-replay header | App returns fly-replay so Proxy replays the request elsewhere | Forward writes to primary region; route by tenant |
Key distinction: autostop ≠ autoscaler. Autostop only toggles Machines that already exist; it never changes the count. The metrics autoscaler is what actually adds/removes Machines. Set auto_stop_machines and auto_start_machines together — configuring one without the other is undefined behavior.
fly-replay is the multi-region write-forwarding pattern: read-replicas serve local reads, a write replies with fly-replay: region=<primary> and the Proxy re-runs the request there. Full header forms and the primary/replica split are in references/multi-region.md. These are the Fly levers only; platform-agnostic scaling theory (queues, sharding, load shedding) is ../scaling/SKILL.md.
auto_stop_machines = "stop" is the default cost play.min_machines_running = 0) trades cost for a cold start on the next request. If the first-request latency hurts, set min_machines_running = 1 to keep one warm. Note: min_machines_running is honored only in the primary region."suspend" resumes faster than "stop" (keeps memory snapshot) but is supported on fewer setups — verify before relying on it.After writing or editing a fly.toml, run the checker:
scripts/verify.sh path/to/fly.toml # defaults to ./fly.tomlIt prefers fly config validate when flyctl is on PATH, else does structural checks (app, primary_region, an internal_port, and the autostop-pair lint). Read-only; exits nonzero on any FAIL.
| Anti-pattern | Why it bites | Do instead |
|---|---|---|
Secrets in [env] or the Dockerfile | Committed to git, baked into image layers | fly secrets set |
fly scale count on a [[mounts]] group expecting shared data | Each new Machine gets an empty volume | Single writer + stateless replicas + DB/fly-replay |
Setting only auto_stop_machines | Half-configured autostop is undefined | Set start + stop keys together |
| Assuming autostop changes Machine count | It only toggles a fixed pool | Use fly scale count or fly-autoscaler |
| One Machine in production | No HA; a host blip = downtime | ≥2 Machines per group |
| Bigger VM to fix far-away latency | Distance, not CPU, is the cost | Add a Machine in the user's region |
| Volume in a different region than its Machine | Cannot attach across regions | Create the volume in the Machine's region |
| Treating Fly Postgres as managed | Fly Postgres is unmanaged; you operate it | Route to it here; operate it via ../postgresdb/SKILL.md |
min_machines_running in a non-primary region | Ignored outside primary | Keep warm capacity via scale count there |
fly deploy with no release_command for a schema change | New code hits an old schema mid-rollout | release_command runs the migration first |
© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in skills/fly-io of ericrisco/rsc-harness.
Open the folder on GitHubat commit 92fde8f
Fly Io next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Fly Io this skillericrisco/rsc-harness | 156 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Agr Releasecomputerlovetech/agr | 451 | — | ~1.6k | Automated safety check: Pass | MIT | |
| GitOps with ArgoCD and Fluxwshobson/agents | 40k | 11 repos | ~1.5k | Automated safety check: Pass | MIT | |
| Demo Local Rolloutcarverauto/serviceradar | 921 | — | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Homerail Install Opsxiaotianfotos/homerail | 991 | — | ~2k | Automated safety check: Pass | MIT | |
| Buzz Self Hostingtonbistudio/buzz-skills | 274 | — | ~2.2k | Automated safety check: Notes | MIT |
computerlovetech/agr
Release process for the agr package. An agent skill from computerlovetech/agr.
wshobson/agents
Sets up GitOps continuous delivery for Kubernetes with ArgoCD or Flux, covering installation, repository layout, sync policies, progressive delivery and secrets.
carverauto/serviceradar
Build unpublished sha-... An agent skill from carverauto/serviceradar.
xiaotianfotos/homerail
Install, configure, start, verify, update, and troubleshoot a local-source HomeRail deployment for AI-agent use.
tonbistudio/buzz-skills
A skill your agent uses when helping a user set up, debug, or operate a self-hosted Buzz relay through Docker Compose.
yc-software/qm
Update a QM source fork by merging upstream, or upgrade a package deployment dependency, and open a PR.
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Works with
Categories
A skill your agent uses when deploying or operating an app on Fly.io — writing fly.toml, placing Machines in regions near users, attaching Volumes, managing secrets, or picking a scaling lever…. Fly Io is an agent skill from ericrisco/rsc-harness.toml, placing Machines in regions near users, attaching Volumes, managing secrets, or picking a scaling lever (autostop/autostart, scale count, fly-replay).
Fly Io fits situations like: operating an app on Fly.io — writing fly.toml; placing Machines in regions near users; attaching Volumes; managing secrets.
Run `npx skills add ericrisco/rsc-harness --skill fly-io -a claude-code`. Or copy the skill folder (skills/fly-io in ericrisco/rsc-harness) into .claude/skills/fly-io in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill fly-io -a codex`. Or copy the skill folder (skills/fly-io in ericrisco/rsc-harness) into .agents/skills/fly-io in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill fly-io -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/fly-io, .gemini/skills/fly-io, .github/skills/fly-io and .opencode/skills/fly-io in your project.
Going by SKILL.md and its folder, Fly Io needs a shell for the scripts in its folder, the command-line tools its instructions call (fly) and credentials named STRIPE_KEY, SESSION_SECRET and OLD_KEY. Our summary lists: A Bash shell; Docker; A credential in STRIPE_KEY; A credential in SESSION_SECRET.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Fly Io is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Fly Io: Agr Release (computerlovetech/agr, 451 stars), GitOps with ArgoCD and Flux (wshobson/agents, 40k stars), Demo Local Rollout (carverauto/serviceradar, 921 stars) and Homerail Install Ops (xiaotianfotos/homerail, 991 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.