Releases: systeminit/swamp
swamp 20260323.195102.0-sha.ab35f1c5
What's Changed
- fix: prevent vault secrets from leaking into report data files (#839)
Summary
- Fix report context in
libswamp/models/run.tsto capture args before vault resolution, so reports receive vault expressions (${{ vault.default.password }}) instead of resolved secrets - Update
design/reports.md: document sensitive argument redaction, pre-vault arg capture, and remove stalebuildReportDataHandlesreference
Test Plan
deno check— passesdeno run test— 3501 tests passdeno run compile— succeeds- Fixes UAT
security_audit_test.tsfailure: "Secret found in plaintext in data file: report-swamp-method-summary"
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.195102.0-sha.ab35f1c5/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.195102.0-sha.ab35f1c5/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.195102.0-sha.ab35f1c5/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.195102.0-sha.ab35f1c5/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260323.190123.0-sha.661708ca
What's Changed
- feat: add built-in method and workflow summary reports (#838)
Summary
- Add built-in
@swamp/method-summaryand@swamp/workflow-summaryreports that run automatically after method/workflow executions - Reports produce both markdown (terminal) and JSON output with consolidated headers, actionable retrieval commands, and sensitive argument redaction
- Add
redactSensitiveArgs()helper on the report context so any report (builtin or extension) can redact values marked{ sensitive: true }in Zod schemas - Redesigned report output: single-line H1 header, merged arguments section, bold data names,
swamp data getretrieval commands, per-handle commands for failed workflow steps
Test Plan
- All new report logic covered by unit tests (method summary: 11 tests, workflow summary: 7 tests)
deno check— passesdeno lint— passesdeno fmt --check— passesdeno run test— 3492 tests passdeno run compile— succeeds
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.190123.0-sha.661708ca/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.190123.0-sha.661708ca/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.190123.0-sha.661708ca/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.190123.0-sha.661708ca/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260323.185009.0-sha.f837554b
What's Changed
- refactor: port model evaluate and workflow evaluate to libswamp generator + renderer pattern (#837)
Summary
- Port
model evaluateandworkflow evaluateCLI commands to the libswamp generator + renderer architecture (Batch 7 of issue #739) - Move domain logic from CLI handlers into testable libswamp generators with dependency injection interfaces
- Create dedicated renderers that reproduce existing log and JSON output byte-for-byte
Details
Model Evaluate
- New generator
src/libswamp/models/evaluate.tswithModelEvaluateDepsinterface,createModelEvaluateDeps()factory,modelEvaluate()async generator, andisModelEvaluateAllData()type guard - New renderer
src/presentation/renderers/model_evaluate.tswith log and JSON modes matching the exact format strings from the deleted output file - CLI handler rewritten as pure orchestration: repo init, pre-lookup for lock target, lock acquisition,
consumeStream(), lock release
Workflow Evaluate
- New generator
src/libswamp/workflows/evaluate.ts— the ~200-lineevaluateWorkflow()function andresolveForEachTaskExpressions()helper are ported from the CLI handler with only these substitutions:celEvaluator.evaluate()→deps.evaluateCel()modelResolver.buildContext()→deps.buildExpressionContext()evaluatedWorkflowRepo.save()→deps.saveEvaluatedWorkflow()evaluatedWorkflowRepo.getPath()→deps.getEvaluatedPath()console.warn()→ctx.logger.warn()(routes through LogTape instead of raw stderr — the only intentional behavioral change)
- New renderer
src/presentation/renderers/workflow_evaluate.tsreproducing exact log output including the workflow-specific forEach expansion display - CLI handler rewritten as pure orchestration, with input validation and model reference extraction for locking remaining in the CLI layer
Cleanup
- Deleted
src/presentation/output/model_evaluate_output.ts - Deleted
src/presentation/output/workflow_evaluate_output.ts - Added all new types and factories to
src/libswamp/mod.tsexports
Files changed
| Action | File |
|---|---|
| Create | src/libswamp/models/evaluate.ts |
| Create | src/libswamp/models/evaluate_test.ts |
| Create | src/presentation/renderers/model_evaluate.ts |
| Create | src/libswamp/workflows/evaluate.ts |
| Create | src/libswamp/workflows/evaluate_test.ts |
| Create | src/presentation/renderers/workflow_evaluate.ts |
| Modify | src/cli/commands/model_evaluate.ts |
| Modify | src/cli/commands/workflow_evaluate.ts |
| Modify | src/libswamp/mod.ts |
| Delete | src/presentation/output/model_evaluate_output.ts |
| Delete | src/presentation/output/workflow_evaluate_output.ts |
Notable design decisions
console.warn→ctx.logger.warn: The workflow evaluate generator had oneconsole.warncall for CEL expression evaluation failures. This now routes through LogTape with the libswamp logger category, which is consistent with the rest of the codebase (no otherconsole.warncalls exist in libswamp or CLI). The message format is unchanged but the output destination shifts from raw stderr to the structured logging pipeline.- CLI pre-lookup for locking: Both CLI handlers pre-lookup the model/workflow before acquiring locks (matching the
model_method_run.tspattern), then the generator does its own independent lookup via deps. This means two lookups happen for single-item mode, which is the established pattern for the lock-then-operate flow. - Input validation stays in CLI: For workflow evaluate, input schema validation and model reference extraction for per-model locking remain in the CLI layer since they depend on
repoContextand are pre-conditions for lock acquisition, not part of the evaluate domain logic.
Test plan
-
deno check— type checking passes -
deno lint— no lint errors -
deno fmt— formatting correct -
deno run test— 3488 tests pass, 0 failures -
deno run compile— binary recompiles - New unit tests for both generators (9 tests total)
- Integration tests pass: model_evaluate (3), workflow_evaluate (6), forEach (8), vault_cel (11), inputs (16)
Closes #739 (Batch 7)
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.185009.0-sha.f837554b/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.185009.0-sha.f837554b/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.185009.0-sha.f837554b/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.185009.0-sha.f837554b/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260323.180018.0-sha.ee1e73ac
What's Changed
- fix: always include array fields in extension search JSON output (#836)
Summary
- Fix regression where
extension search --jsonconditionally omittedplatforms,labels, andcontentTypesfields when they were empty arrays - Consumers (including swamp-uat) expect these fields to always be present as arrays, causing
ZodError: expected array, received undefinedschema validation failures - The conditional pattern was inherited from the old
extension_search_output.tsxand carried over during the renderer pattern port in #833
Test plan
-
deno check— type checking passes -
deno lint— no lint errors - Verified JSON output now always includes
platforms,labels, andcontentTypesas arrays
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.180018.0-sha.ee1e73ac/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.180018.0-sha.ee1e73ac/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.180018.0-sha.ee1e73ac/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.180018.0-sha.ee1e73ac/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260323.172311.0-sha.af3271af
What's Changed
- refactor: port extension pull and rm to libswamp generator + renderer pattern (#835)
Summary
- Port
extension pullandextension rmCLI commands to the libswamp generator + renderer pattern, completing Batch 5 of #739 - Move all domain logic into event-yielding generators (
extensionPull,extensionRm) insrc/libswamp/extensions/with testable deps injection - Create
ExtensionPullRendererandExtensionRmRendererinsrc/presentation/renderers/matching existing output exactly - Slim CLI commands to pure orchestration: create context → preview → prompt → consumeStream
- Abstract
ExtensionApiClientbehind function signatures in deps interfaces (matchingextension_push.tspattern) - Define libswamp-local types (
ExtensionSafetyWarning,ExtensionRegistryInfo,UpstreamMap) to avoid leaking infrastructure types - Factory functions (
createExtensionPullDeps,createExtensionRmDeps,createInstallContext) encapsulate infrastructure instantiation
Test plan
-
deno check— type checking passes -
deno lint— no lint errors -
deno fmt— formatting clean -
deno run test— all 3479 tests pass (including 8 new rm tests + 8 new pull tests) -
deno run compile— binary compiles - Verified no CLI commands or renderers import from internal libswamp paths
- Verified no infrastructure types in deps interfaces
- Verified output is unchanged (same log lines, same JSON shapes)
Closes #739
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.172311.0-sha.af3271af/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.172311.0-sha.af3271af/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.172311.0-sha.af3271af/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.172311.0-sha.af3271af/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260323.140317.0-sha.528d1939
What's Changed
- fix: restore extensions key in extension search JSON output (#834)
PR #833 inadvertently renamed the top-level JSON key from "extensions" to "results" in the extension search --json output, breaking the JSON contract for downstream consumers.
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.140317.0-sha.528d1939/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.140317.0-sha.528d1939/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.140317.0-sha.528d1939/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.140317.0-sha.528d1939/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260323.133031.0-sha.7ef1c346
What's Changed
- refactor: port search commands to libswamp generator + renderer pattern (#833)
refactor: port search commands to libswamp generator + renderer pattern
Summary
Ports all 11 search commands to the libswamp generator + renderer pattern, completing Batch 4 of the CLI migration tracked in #739. This is the largest single batch — search commands required a new SearchRenderer<E, T> interface and a shared generic SearchTUI<T> component to extract the common fzf + keyboard navigation pattern used across all interactive search UIs.
What changed
Every search command now follows the three-layer architecture established in Batches 1-3:
- Generator (
src/libswamp/<domain>/search.ts) — async generator yielding typedresolving | completed | errorevents. Owns all domain logic: data fetching, entity-to-item conversion, structured filtering, sorting. Dependencies injected viaXxxDepsinterface for testability. - Renderer (
src/presentation/renderers/<name>_search.tsx) — implementsSearchRenderer<E, T>extending the baseRenderer<E>withselectedItem(): T | undefined. Json renderer outputs filtered JSON; Ink renderer launches the interactive TUI and stores the user's selection. Factory function selects renderer byOutputMode. - CLI handler — pure orchestration: wire deps from repo context, call
consumeStream(generator(...), renderer.handlers()), checkrenderer.selectedItem(), chain follow-up generators (e.g.,modelGet,vaultDescribe) for detail views.
New shared infrastructure
| File | Purpose |
|---|---|
src/presentation/renderers/search_renderer.ts |
SearchRenderer<E, T> interface extending Renderer<E> with selectedItem() |
src/presentation/renderers/components/search_tui.tsx |
Generic SearchTUI<T> component — fzf fuzzy matching, useScrollableList pagination, keyboard navigation. Each command provides selector and renderItem callbacks. |
Commands ported (11)
| Command | Generator | Key detail |
|---|---|---|
type search |
types/search.ts |
No repo init, in-memory registry |
vault type search |
vaults/type_search.ts |
No repo init, vault type registry |
model search |
models/search.ts |
Repo read-only, JSON auto-select chains modelGet |
vault search |
vaults/search.ts |
Repo read-only, chains vaultDescribe |
model output search |
models/output_search.ts |
Shared with method history search |
model method history search |
models/output_search.ts |
Same generator as model output search |
data search |
data/search.ts |
Rich filtering (type, lifetime, since, tags, etc.) |
workflow run search |
workflows/run_search.ts |
Imports parseDuration from data search |
workflow history search |
workflows/history_search.ts |
Shares item type with run search |
workflow search |
workflows/search.ts |
JSON auto-select, action menu stays in CLI |
extension search |
extensions/search.ts |
HTTP API deps, extended selectedAction() interface |
Files changed
- 20 new libswamp files (10 generators + 10 test files with 37 tests)
- 12 new presentation files (10 renderers + 1 shared interface + 1 shared component)
- 11 modified CLI command files (rewritten to pure orchestration)
- 8 deleted old
src/presentation/output/*_search_output.tsxfiles - 5 modified adjacent files (import updates for
parseDuration/parseTagsmoved to libswamp) src/libswamp/mod.tsupdated with all new exports
Why this is correct
- Output parity: JSON shapes are unchanged. Interactive TUI uses the same fzf +
useScrollableListpattern with identicalrenderItemlayouts. - All 3478 tests pass (0 failures), including the existing integration tests for
workflow run search --json,workflow searchsingle-match auto-select, filter options, etc. - Import rule compliance: All CLI commands and renderers import exclusively from
src/libswamp/mod.ts. All internal libswamp modules use relative sibling imports. - Pattern consistency: All 10 generators use
AsyncGenerator<XxxEvent>,(ctx, deps, input)parameter order, andresolving | completed | errorevent kinds. deno check,deno lint,deno fmt,deno run test, anddeno run compileall pass cleanly.
Not in scope
3 old output files retained (model_search_output.tsx, vault_search_output.tsx, workflow_search_output.tsx) — still imported by edit commands (model edit, vault edit, workflow edit) which are not in Batch 4's scope. These will be cleaned up when the edit commands' search-first mode is migrated.
Closes #739 (Batch 4)
Test plan
-
deno check— type checking passes -
deno lint— no lint errors (849 files) -
deno fmt— properly formatted -
deno run test— 3478 passed, 0 failed -
deno run compile— binary compiles successfully - Manual: run each search command in both
--jsonand interactive modes, verify output parity
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.133031.0-sha.7ef1c346/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.133031.0-sha.7ef1c346/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.133031.0-sha.7ef1c346/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.133031.0-sha.7ef1c346/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260323.101947.0-sha.9a83defa
What's Changed
- fix: zodToJsonSchema fallback for z.record(), z.uuid(), z.iso.datetime() (#832)
Summary
- Add manual fallback converter in
zodToJsonSchema()that catches crashes from
Zod v4'stoJSONSchema()onz.record(z.unknown()),z.uuid(), and
z.iso.datetime()— unblocking extension authors from using these types in
globalArgumentsand method schemas - Remove duplicate
zodToJsonSchemafunction intype_search.ts, importing
fromlibswamp/mod.tsinstead - Update extension-model skill with a "Supported Zod Types" reference table and
Quick Start examples usingz.uuid(),z.iso.datetime(), andz.record()
Fixes #830
Test plan
- New
schema_helpers_test.tswith 8 test cases covering crash cases
(z.record,z.uuid,z.iso.datetime), nested combinations, and
existing working types -
deno checkpasses -
deno lintpasses -
deno fmtpasses - Full test suite passes (3511 tests)
-
deno run compilesucceeds
Co-authored-by: Raymond Masciarella rmasciarella@acrlabs.io
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.101947.0-sha.9a83defa/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.101947.0-sha.9a83defa/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.101947.0-sha.9a83defa/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.101947.0-sha.9a83defa/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260323.095644.0-sha.a5378ce7
What's Changed
- chore: Reintroduce issue responder (#831)
A previous PR removed this because it used the same name as the old file
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.095644.0-sha.a5378ce7/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.095644.0-sha.a5378ce7/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.095644.0-sha.a5378ce7/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260323.095644.0-sha.a5378ce7/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260322.230849.0-sha.2c936cd8
What's Changed
- refactor: port datastore commands to libswamp pattern (#829)
Summary
Ports all 4 datastore commands from batch 8 of #739 to the libswamp generator + renderer architecture:
datastore status— simple generator yielding config + health data with filesystem/S3/custom verifier supportdatastore sync— streaming generator with push/pull/full modes; handles S3 (S3CacheSyncService), custom (createSyncService), and unsupported typesdatastore setup— two generators (datastoreSetupFilesystem,datastoreSetupS3) withvalidating→migrating→completedevents; factory includesrequireUpgradedRepo/hasSymlinkshelpersdatastore lock— lock status yieldsmodel_lockevents beforecompleted; lock release preserves TOCTOU-protected nonce verification viaforceRelease(nonce)
Each command follows the established pattern:
| Layer | Location | Responsibility |
|---|---|---|
| Generator | src/libswamp/datastores/*.ts |
Domain orchestration via deps injection |
| Factory | createXxxDeps() in generator file |
Wire real infrastructure |
| Renderer | src/presentation/renderers/datastore_*.ts |
Log + JSON output matching old shapes |
| CLI | src/cli/commands/datastore_*.ts |
Pure orchestration |
Known trade-offs
-
datastoreStatusnever yields error events — An unhealthy datastore returnscompletedwithhealthy: false. Health check failure is data, not an error. Theerrorvariant exists for infrastructure exceptions that would bubble uncaught, matching theauthLogoutpattern. -
Raw Deno I/O helpers at module scope —
requireUpgradedRepo/hasSymlinks(setup.ts) andscanModelLocks(lock.ts) useDeno.lstat/Deno.readDir/walk. They're private functions only called by factory functions, never by generators. Same accepted pattern asauth/login.tswithreadLine/readPassword. -
_inputon lock release — Generator takes_input: Record<string, never>for(ctx, deps, input)signature consistency. Model-vs-global lock selection happens via whichDistributedLockgets injected into deps.
Changes
New files (12):
- Generators:
src/libswamp/datastores/{status,sync,setup,lock}.ts - Tests:
*_test.tsfor each generator (22 total tests) - Renderers:
src/presentation/renderers/datastore_{status,sync,setup,lock}.ts
Modified (5):
- CLI commands refactored to pure orchestration
src/libswamp/mod.ts— all new types, generators, and factory functions exported
Deleted (1):
src/presentation/output/datastore_output.ts— all render functions moved to renderers
Test plan
-
deno check— 0 type errors -
deno lint— 824 files clean -
deno fmt --check— 907 files clean -
deno run test— 3503 passed, 0 failed -
deno run compile— binary compiles successfully
Partially addresses #739 (batch 8: datastore commands).
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260322.230849.0-sha.2c936cd8/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260322.230849.0-sha.2c936cd8/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260322.230849.0-sha.2c936cd8/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260322.230849.0-sha.2c936cd8/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/