Skip to content

Add Sprig all-in-one agent binary#605

Merged
tlongwell-block merged 1 commit into
mainfrom
sprig-all-in-one
May 17, 2026
Merged

Add Sprig all-in-one agent binary#605
tlongwell-block merged 1 commit into
mainfrom
sprig-all-in-one

Conversation

@tlongwell-block
Copy link
Copy Markdown
Collaborator

Summary

Adds Sprig, a deploy-anywhere all-in-one binary for the Sprout ACP harness, agent, and developer MCP.

Sprig is a busybox-style multicall binary:

  • sprig prints usage/version
  • sprout-acp symlink → ACP harness personality
  • sprout-agent symlink → ACP agent personality
  • sprout-dev-mcp symlink → developer MCP personality
  • existing dev-MCP helper multicall names (rg, tree, sprout, git-credential-nostr, git-sign-nostr) continue to dispatch through the dev-MCP path

This replaces the old sprout-agent-bundle release path with a Sprig release path:

  • rolling release: sprig-latest
  • tagged release: sprig-v*
  • build script: scripts/build-sprig.sh
  • workflow: .github/workflows/sprig.yml

Size

Compared on my host against the current bundle-style stripped binaries:

artifact size
current 3 stripped binaries total 30,953,768 B / 29.52 MiB
profile-only optimized 3 binaries 14,984,296 B / 14.29 MiB
Sprig multicall binary 7,748,264 B / 7.39 MiB
Sprig tar.gz 4.7M

The size win comes from storing the shared Rust/Tokio/reqwest/rustls/aws-lc/etc. stack once instead of once per binary.

Implementation notes

  • Factors sprout-acp, sprout-agent, and sprout-dev-mcp into library run() entrypoints plus thin existing binaries.
  • Adds a new sprig crate that only dispatches by argv[0].
  • Adds [profile.sprig]: opt-level = "z", FatLTO, codegen-units = 1, panic = "abort", strip = true.
  • Uses symlinks in the tarball for command-name compatibility.
  • Leaves runtime behavior per personality unchanged; no runtime unification or cfg-stripping.

Verification

Local checks run:

  • cargo fmt --check
  • cargo check -p sprig -p sprout-acp -p sprout-agent -p sprout-dev-mcp
  • cargo test -p sprout-acp -p sprout-agent -p sprout-dev-mcp
  • ./scripts/build-sprig.sh 0.1.0-test $(rustc host) and tar inspection
  • sprig --help, bare sprig exits non-zero with usage, sprig --version
  • extracted archive smoke: sprout-acp --help
  • local relay E2E per TESTING.md:
    • just setup
    • release sprout-relay on 127.0.0.1:3030
    • CLI smoke: generated sender key, created channel, sent/read message, thread query
    • extracted Sprig archive
    • ran sprout-acp from archive, configured it to spawn sprout-agent and sprout-dev-mcp from archive
    • fake OpenAI-compatible provider requested dev__shell
    • final SPRIG_FINAL_OK reply came back through local relay

AI Assistance

  • This PR was created with AI assistance.

Signed-off-by: Tyler Longwell tlongwell@squareup.com

Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
@tlongwell-block tlongwell-block merged commit 70cb53e into main May 17, 2026
15 checks passed
@tlongwell-block tlongwell-block deleted the sprig-all-in-one branch May 17, 2026 17:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant