Swamp Go Brr
Security Notice
This extension includes AI agent skills that can modify AI assistant behavior. Review the skill files before installing.
An autonomous, driver-free development loop for coding agents. You hand it an
intake and a host-pinned test command; it decomposes the work into a dynamic
DAG of tasks, runs each task as a claude --print agent inside a throwaway
Firecracker microVM, applies only the returned diff behind an allowlist ACL,
and merges a task ONLY when a deterministic, network-less container says the
tests pass. Nothing the agent writes ever runs on your host, and the green
gate is the container's exit code — never the agent's self-report.
Five models:
gobrr— a PURE DAG state machine: a Run aggregate over a dynamic Task DAG (implement | verify) with a scheduler (lease TTL/heartbeat/reap, concurrency gate, stall), dynamic follow-up expansion, a state machine, and run caps. It never touches the filesystem.source-integration— the host code-ownership / allowlist-ACL actor:build_workorder(read the allowlist file slice into the leaf prompt, no-clone) andapply(parse the @@EDIT envelope, apply each task as a per-task base-isolated jj change behind a realpath-anchored allowlist ACL, return host-observed changedPaths + a secret-scrubbed diff).docker-verify— the deterministic green gate: runs the host-pinned verify command to completion in a hardened, network-less, token-less container against the read-only applied tree and returns the raw exit code.preflight— codebase-agnostic substrate setup: ensures the local OCI registry, digest-pins the codebase's OWN gate image (pin_imagebuilds a build context or pins a prebuilt ref — the toolkit/deps live in that image, not here), and emits the runconfig(gate params, fabric_up inputs, the vault CEL for the OAuth token, and the si/dv/fab create commands). Shells to docker only.otlp-export— the post-run OTLP egress actor (the loop's ONLY network push; gobrr stays pure): POSTs the derivedtraceOtlp/metricsOtlpto a configurable OTLP/HTTP collector (https), endpoint + token from a vault CEL, best-effort. gobrr'semit_otlpderives the OTLP span tree + per-leaf token/cost/time metrics; leaves run withoutputFormat=jsonso claude's usage rides back. Each leaf runsclaude --printin a Firecracker microVM via the @magistr/firecracker fabric (no-clone). The agent drives the loop inline (next -> build_workorder -> fabric.submit/poll -> apply -> docker-verify -> report); there is no driver script.
Getting started: install the bundled swamp-go-brr skill and let the agent
drive the loop — confirm the repo scope, the verify command, and the verify
inputs, then it decomposes, runs, gates, and reports. The README has a
tutorial, how-to recipes (per-leaf cost/tokens/time, OTLP export,
resume/inspect, concurrency), a model reference, and the design rationale.
| Argument | Type | Description |
|---|---|---|
| intake | string |
| Argument | Type | Description |
|---|---|---|
| tasks | array |
| Argument | Type | Description |
|---|---|---|
| owner | string |
| Argument | Type | Description |
|---|---|---|
| taskId | string | |
| owner | string | |
| verifyExitCode | number | |
| audit? | object |
| Argument | Type | Description |
|---|---|---|
| parentId | string | |
| owner | string | |
| spec | string | |
| writeAllowlist | array |
| Argument | Type | Description |
|---|---|---|
| taskId | string | |
| owner | string | |
| vmId? | string |
| Argument | Type | Description |
|---|---|---|
| reason | string |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| sshHost | string | Docker host running the applied tree (SSH) |
| sshUser | string | SSH username |
| verifyTimeoutMs | number | Client-side wall-clock budget (ms) for the whole ssh verify invocation (handshake + remote docker run). On expiry the ssh child is killed and exitCode=124 is recorded (fail-closed) — ssh's own ConnectTimeout bounds only the handshake. |
| sshKnownHostsFile? | string | Override ssh's UserKnownHostsFile. Defaults to /dev/null only when sshStrictHostKeyChecking=\ |
| Argument | Type | Description |
|---|---|---|
| image | string | |
| treePath | string | |
| verifyCommand | string | |
| user | string | |
| pidsLimit | number | |
| memory | string | |
| cpus | string |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| jjPath | string | jj binary (PATH-resolved by default) |
| jjTimeoutMs | number | Client-side wall-clock budget (ms) for each local jj invocation (new/diff/log). On expiry the jj child is killed and that call is treated as a transport failure (synthetic exit 124). |
| Argument | Type | Description |
|---|---|---|
| taskId | string | |
| spec | string | |
| writeAllowlist | array | |
| repoScope | string | |
| practices | string | |
| nonce | string |
| Argument | Type | Description |
|---|---|---|
| repoScope | string | |
| base | string | the common base change id all task changes branch from |
| tasks | array |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| registryAddr | string | Local OCI registry for the digest pin |
| sshUser | string | SSH user for the local docker-verify gate |
| jjPath | string | |
| fcHost | string | Firecracker fabric host (fab instance) |
| snapshotPath | string | |
| memFilePath | string | |
| queueRoot | string | |
| vaultName | string | |
| oauthSecretKey | string |
| Argument | Type | Description |
|---|---|---|
| name | string | Image name to store under in the local registry |
| tag | string | |
| buildContext? | string | Path to a docker build context the codebase owns |
| sourceImage? | string | A prebuilt image ref to pin instead of building |
| Argument | Type | Description |
|---|---|---|
| image | string | Digest-pinned gate image (from pin_image) |
| verifyCommand | string | Host-pinned verify command run inside the gate container |
| gateUser | string | |
| gateCpus | string | |
| gateMemory | string | |
| gatePidsLimit | number |
| Argument | Type | Description |
|---|---|---|
| repoPath | string | Absolute path of the new repo to scaffold |
| files | array | Baseline files (repo-relative path + content): scaffold + model stub + the base.test smoke gate |
| describe | string |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| endpoint | string | |
| token | string | |
| payloadResource | string |
Resources
2026.08.07.1 — privacy: neutral defaults for sshUser/jjPath/fcHost
preflight's GlobalArgs defaulted three fields to this homelab's REAL
infrastructure: sshUser to the operator's actual local unix username, jjPath
to that user's actual home-directory path, and fcHost to the operator's actual
Firecracker fabric hostname. Any installer who created a preflight instance
without overriding these globals inherited that disclosure verbatim (surfaced in
instanceCommands' generated swamp model create strings). All five models
bump to 2026.08.07.1 (lockstep, single manifest version); only preflight
changes functionally.
Fixed
preflight'sGlobalArgs.sshUserdefault (the operator's real local unix username) →runner(a generic agent/CI-style username, matches no real account).preflight'sGlobalArgs.jjPathdefault (an absolute path under that same real user's home directory) →jj(PATH-relative — matchessource-integration's ownjjPathdefault, which was already neutral).preflight'sGlobalArgs.fcHostdefault (the operator's real Firecracker fabric hostname) →firecracker.example.com(RFC 2606 reserved example domain).- Behavior-preserving for every instance that already sets these globals
explicitly (the overwhelming majority — the defaults only matter for a
brand-new instance created with no
--global-argoverrides). No resource schema change;upgradeAttributesis identity on all five models.
Changed
preflight.test.ts'sSUBfixture and theinstanceCommandsexpected command strings updated to the new neutral defaults.- Five
// Run: …dev-comment header lines across the test suite (gobrr.test.ts,gobrr_observability.test.ts,lib/otlp.test.ts,otlp_export.test.ts,source_integration_leaf_json.test.ts) that hardcoded the same real absolute home-directory path in an exampledeno testinvocation now use~/.swamp/deno/deno(matches the convention already used byreading-list/README.md). Comment-only, no behavior change.
Release 2026.07.16.2 — align model versions with manifests
Maintenance release across the @magistr extensions. For most packages this
carries no functional change: the only edit is the model's version: field,
brought back in line with its manifest version so the published model type
version and the package version no longer drift.
Functional changes in this release are limited to:
anime-cron: normalizeTitle now strips a ": subtitle" suffix and a trailing parenthesized year before comparison, fixing dedup false-misses where the torrent title carries a subtitle or year that the AniList romaji does not.
arckit: first publish. Standalone ArcKit port — a 12-phase architecture governance state machine with 65 bundled templates, driven by a bundled skill.
Also tracks three extensions (kaiten, observability-agent, music-library) that previously existed only as untracked working-tree directories, recovered from stashes.
Added 5, removed 1 models. Added 1 skills
2026.06.19.3 — docs: expanded manifest description
Changed
- Expanded the manifest
descriptionwith a human-oriented overview (what the loop does + the host-isolation/green-gate guarantee) and a "getting started" pointer. The swamp-club extension page renders thedescription(not the bundled README), so this is what shows there. Docs-only — no behaviour change.
2026.06.19.2 — maintenance: CI republish
No code change. 2026.06.19.1 was published manually (to work around a
temporary registry yank), which collided with the CI publish-on-push for the
same version ("version already exists"). This release is cut by CI, with
per-version release notes now sourced from this CHANGELOG.
Docs: task-oriented README (current with all 5 models + observability) + JSDoc on all entrypoint exports. Quality 14/14. No behaviour change.
OTLP observability + per-leaf cost/tokens/time: gobrr.emit_otlp (traceOtlp/metricsOtlp), new otlp-export egress model, firecracker outputFormat=json, source-integration extractLeafJson. Lockstep 2026.06.18.1.
Added 2, modified 1 models. Added 1 skills
Merge pull request #12 from umag/feat/swamp-go-brr-package
feat(swamp-go-brr): publish @magistr/swamp-go-brr 2026.06.12.1 (driver-free loop)
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License declared1/1earned
- Verified public repository2/2earned