publish
Skill2 starsChanged 15 days agoMITView on GitHub
How the sandbox image reaches ghcr.io/hyperstructure/sandbox, and the kernel of fctl's Firecracker sandboxes ghcr.io/hyperstructure/sandbox-kernel, and how to rebuild or repair them. Covers what starts the Image workflow (fctl releases, merges, Claude Code releases, the weekly rebuild), its tags and labels, running it by hand, checking a published image with or without Docker, and what to do when a run fails or the schedule stops. Use when asked to publish, rebuild or check the image, after merging a change to it, or when an fctl release has no image.
60 other projects use a version of this.
Adopted by
Most recently taken up by
- jskswamy/skillstheir own version, first seen Nov 8, 2026
- ai-search-guru/getcito-worlds-first-open-source-aio-aeo-or-geo-tooltheir own version, first seen Nov 8, 2026
- Mharbulous/probanda-devtheir own version, first seen Nov 8, 2026
- will-17173/telegram-clitheir own version, first seen Nov 8, 2026
- pche-broken-artist/forge-of-thoughttheir own version, first seen Nov 6, 2026
- agent-tower/coretheir own version, first seen Nov 5, 2026
Used with
Projects with it also use create, render and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkillcreate
Also in 4 projects that use this
suxrobGMSkillrender
Generate raster images (PNG, JPEG, WebP) from natural language prompts using Python rendering engines. Covers graphics, charts, layouts, and procedural art. Not for SVG output.
Also in 3 projects that use this
JaimeGBASkillingest
Digest an external source (article, paper, transcript, URL, book chapter) and integrate its content into the knowledge base
Also in 6 projects that use this
genomewalkerSkillexplore
RLM-style recursive memory exploration - dynamically navigate the memory graph
Also in 4 projects that use this
GoogleSkilltranslate
Translates a common phrase into one or more languages.
Also in 3 projects that use this
VercelSkillsetup
Set up Vercel CLI and project configuration. Use when the user says "set up Vercel", "configure Vercel", "link to Vercel", or "vercel init".
Also in 14 projects that use this
Other versions60 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 60
- code-yeongyu/oh-my-opencode★ 71ksame name
- code-yeongyu/oh-my-openagent★ 71ksame name
- garrytan/gbrain★ 32ksame name
- TencentCloud/Octop★ 12ksame name
- harbor-framework/harbor★ 6.9ksame name
- laude-institute/harbor★ 6.9ksame name
- Q00/ouroboros★ 6.3ksame name
- paean-ai/deeptide★ 1.1ksame name
- ZimoLiao/scholaraio★ 585same name
- ai-search-guru/getcito-worlds-first-open-source-aio-aeo-or-geo-tool★ 432same name
50 more not listed
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.
In this repository4 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- change-the-imageSkill
- commitSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 1 is distinctive, and 1 is very specific to this project.
0
Common
Most of the 49 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 26
Every build installs that fctl release from https://fctl.sh/releases and the newest Claude Code (https://downloads.claude.ai), and passes …
- Distinctive: line 142
Never delete a published version that has a tag: hosts pull by tag, and a broken one is fixed by a rebuild.
“Common” is measured: kept by at least 6 in 10 of the 49 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Publishing the image
The Image workflow (.github/workflows/image.yml) publishes
ghcr.io/hyperstructure/sandbox from main only. Its first job, "What to
build", decides whether there is anything to do and says why in the run's
summary; then each architecture builds on a runner of its own (amd64 on
ubuntu-24.04, arm64 on ubuntu-24.04-arm), is pushed by digest and
checked with check.sh, and the last job tags the two as one image.
When it runs
| Trigger | Builds |
| An fctl release | that release's image, as gh workflow run image.yml -f version=… does |
A push to main that changes the image | the newest release's, when the published one predates the change |
| Every hour (minute 23) | the newest release's, when there is none yet (its release's own run failed) or it predates a change |
| Every day (05:41 UTC) | as hourly, and when Claude Code has a newer release or the image is a week old |
gh workflow run image.yml | as daily; -f version=… another release's, -f force=true even a current one |
| A pull request that changes the image | always, with the latest fctl, without publishing |
Every build installs that fctl release from https://fctl.sh/releases and
the newest Claude Code (https://downloads.claude.ai), and passes both
versions to check.sh.
fctl's Release workflow (.github/workflows/release.yml in
hyperstructure/fctl) starts the run for each release as soon as the release
is on fctl.sh, as the organization's fctl-actions GitHub App, and its
Sandbox image job waits for it: a failed run fails that job, and its
summary links the run. Runs here go one at a time, and GitHub keeps only
one of them waiting, so a newer run cancels the release's while it waits;
the job then starts it again, up to three times. To stop a release's run
for good, cancel that job first. "What to build" gives fctl.sh two minutes
to show a release. GitHub starts the hourly run hours late at times, so it
is only the fallback.
Tags and labels
<version>(0.4.0): the release's image. Hosts of that version pull it.<major>.<minor>(0.4): moves only when the build is the newest patch of its minor. fctl's releases count up one patch at a time and fctl.sh keeps them all, so the workflow asks fctl.sh for the next patch.latest: moves only for the newest release, the one fctl.sh'slatestnames.
A release later than the one fctl.sh's latest names moves both without
asking: fctl.sh caches latest for a minute, and the release's own run can
start before that minute is out.
The image and its index carry org.opencontainers.image.version (fctl's
version), sh.fctl.claude-code.version, org.opencontainers.image.revision
(the commit built) and org.opencontainers.image.created. The workflow reads
them back to decide whether an image is current.
Running it by hand
It takes write access to Actions on this repository (people have it; fctl sessions don't, so ask a person):
gh workflow run image.yml -R hyperstructure/sandbox # the newest release, if needed
gh workflow run image.yml -R hyperstructure/sandbox -f version=0.3.0 # another release
gh workflow run image.yml -R hyperstructure/sandbox -f force=true # even when current
gh run list -R hyperstructure/sandbox --workflow image.yml --limit 3
gh run watch -R hyperstructure/sandbox ID --exit-statusChecking what's published
With Docker:
docker buildx imagetools inspect ghcr.io/hyperstructure/sandbox:0.3.0 # linux/amd64 and linux/arm64
docker buildx imagetools inspect --raw ghcr.io/hyperstructure/sandbox:0.3.0 | jq .annotations
docker run --rm -i ghcr.io/hyperstructure/sandbox:0.3.0 sh -s < check.shWithout Docker (an fctl session), from the registry's API:
token=$(curl -fsS "https://ghcr.io/token?scope=repository:hyperstructure/sandbox:pull" | jq -r .token)
curl -fsS -H "Authorization: Bearer $token" \
-H "Accept: application/vnd.oci.image.index.v1+json" \
https://ghcr.io/v2/hyperstructure/sandbox/manifests/latest |
jq '{annotations, platforms: [.manifests[].platform | "\(.os)/\(.architecture)"]}'
curl -fsS -H "Authorization: Bearer $token" https://ghcr.io/v2/hyperstructure/sandbox/tags/listThe kernel
The Kernel workflow (.github/workflows/kernel.yml) publishes
ghcr.io/hyperstructure/sandbox-kernel, the kernel of fctl's Firecracker
sandboxes, from main only, the same way: it builds each architecture on
its own runner, boots it with kernel/check.sh where the runner has KVM
(amd64's), pushes both by digest and tags them as one image,
<kernel/VERSION> and <major>.<minor>. It runs when a push to main
changes kernel/ and that version isn't published yet; a published
version is never built again, since hosts pin it and keep what they
pulled, so a change to the build takes a new version (6.18.59-2).
gh workflow run kernel.yml runs it again after a failure. Check what's
published as for the image, with sandbox-kernel in its name.
When something fails
Publishing happens only after both architectures passed check.sh, so a
failed run leaves the published tags as they were (and an untagged digest
behind, which is harmless).
- "What to build" fails: fctl.sh or downloads.claude.ai didn't answer as expected; the error says what came back. Rerun it later.
check.shsays the Claude Code version differs: a Claude Code release landed between planning and building. Rerun the run.check.shfails otherwise, or the build does: the image is broken, often by a change upstream (an installer or a package moved). Fix it in a pull request (thechange-the-imageskill); its own Image run shows the fix works.- The push is denied: the package must give this repository write access (the package's settings → Manage Actions access). It has it when this workflow created the package.
- Hosts can't pull it ("unauthorized", "denied"): the package must be public. A package starts private when the workflow first creates it; a person makes it public in the package's settings (Danger zone → Change visibility), and the organization must allow public packages.
- fctl's Sandbox image job failed: its summary links the run it
started here, and the items above say what to do. A fix merged to
mainpublishes the newest release's image at once. When the job failed before it started a run, its token is at fault: fctl'sreleaseskill says what to do, and meanwhilegh workflow run image.yml -R hyperstructure/sandbox -f version=X.Y.Zbuilds the image. - The workflow stopped: GitHub turns off scheduled workflows in a public
repository after 60 days without activity, and emails a warning first;
fctl's Release workflow can't start it then either. A person turns it
back on with
gh workflow enable image.yml -R hyperstructure/sandbox, then runs it by hand. Meanwhile a new fctl release has no image of its own, and its hosts start sessions fromlatest.
Never delete a published version that has a tag: hosts pull by tag, and a broken one is fixed by a rebuild.
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.

