Skip to content

feat: gc — GROUNDCONTROL CLI for agents (Go), with agent skills - #1

Merged
slue merged 3 commits into
mainfrom
feat/gc-cli
Oct 5, 2026
Merged

slue merged 3 commits into
mainfrom
feat/gc-cli

Conversation

@slue

@slue slue commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

gc, the GROUNDCONTROL command line for agents, plus its agent skills. Task 79c7b2b2; server side in MakersLab-ai/groundcontrol#151.

The first commit was the TypeScript/Bun version. The second rewrites it in Go on the operator's decision: the plugins will be retired, so the CLI shares no code with GROUNDCONTROL. Its contract is the REST API plus the public agent guide, with no sync or drift mechanisms.

  • Binary: ~7 MB static (stdlib + golang.org/x/term) for darwin/linux × amd64/arm64. darwin/arm64 is ad-hoc signed by the Go linker.
  • Commands: same surface, flags, help, output, exit codes (0/1/2/3 = ok / API error / usage / not connected) and env vars as the TS version.
    • --help is byte-identical for all 57 command paths.
    • 61 data commands were compared side by side against one mock.
    • The config.json format is unchanged, so existing profiles keep working.
  • gc listen: successor of gc-worker.sh, with one listener-owned cursor per workspace taken from the server's meta.cursor. gc changes --cursor-file writes its cursor only after the output succeeded.
  • install.sh: downloads from this repo's public releases, verifies the SHA-256, version pinnable with --version, and links groundcontrol → gc. It is attached to every release; groundcontrol.makerslab.ai/install.sh redirects to it.
  • goreleaser: ci.yml runs vet, tests, skills validation, goreleaser check and a snapshot build. release.yml runs on tag v*.
  • License: MIT.

Verified:

  • go vet, go test ./... (all packages ok), scripts/validate-skills.sh.
  • goreleaser check and a snapshot build of all 4 targets.
  • install.sh against a local server, including a tampered checksum (aborts, installs nothing).
  • Against production, read-only, with the TS-era profile: profiles, context, tasks get, changes.

After merge: tag v0.1.0 → release → curl -fsSL https://groundcontrol.makerslab.ai/install.sh | sh (works once #151 is deployed).

🤖 Generated with Claude Code

https://claude.ai/code/session_01EkcpohyW9PXcHrnYF8UuQS

slue and others added 2 commits October 2, 2026 16:17
Moved out of MakersLab-ai/groundcontrol (task 79c7b2b2, PR #151) into its own
repo, like monologue-toolkit: Bun-compiled single-file binaries for
darwin/linux × arm64/amd64, install.sh (SHA-256, pinnable --version), profiles,
gc listen (successor of gc-worker.sh), exit 3 when not connected, thin
bootstrap skills; the know-how is served by GROUNDCONTROL (gc guide).

src/client.ts + src/redact.ts are verbatim copies of the groundcontrol repo's
claude-code-plugin/server/src (scripts/sync-client.sh).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EkcpohyW9PXcHrnYF8UuQS
Operator decision: the plugins will be retired, so the CLI shares no code
with GROUNDCONTROL — its contract is the REST API plus the public agent
guide. Go gives a ~7 MB static binary, goreleaser releases (darwin/arm64 is
ad-hoc signed by the Go linker) and no Bun runtime quirks.

- Same command surface, flags, help texts, output, exit codes (0/1/2/3) and
  env vars as the TS version (help byte-identical for all 57 paths; 61 data
  commands compared against one mock), same config.json — existing profiles
  keep working.
- install.sh downloads straight from this repo's public GitHub releases
  (SHA-256 verified, --version pinnable); attached to every release.
- No client copy, no sync script, no live guide-drift check. A repo-internal
  test pins the `gc …` snippets in skills/ and README.md to the command table.
- ci.yml: vet, test, skills, goreleaser check + snapshot; release.yml: tag v*.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EkcpohyW9PXcHrnYF8UuQS
@slue slue changed the title feat: gc — GROUNDCONTROL CLI for agents, with agent skills feat: gc — GROUNDCONTROL CLI for agents (Go), with agent skills Oct 5, 2026
- listen: --exec runs in its own process group; first signal SIGTERMs the
  group and cancels an in-flight poll, a second one SIGKILLs it (exit 130).
- HTTP: 30 s timeout for JSON calls, 5 min only for uploads; ids in URL
  paths are escaped.
- listen: a corrupt cursor file skips that workspace with a clear error
  instead of silently restarting at "now"; a profile without api_url falls
  back to GC_API_URL / production.
- install.sh: body wrapped in main() (truncated `curl | sh` runs nothing),
  no set -u trap on an unset HOME, no leftover .gc.new; stdin onboarding
  shown first. goreleaser: prerelease: auto.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EkcpohyW9PXcHrnYF8UuQS
@slue
slue merged commit 9e2667e into main Oct 5, 2026
2 checks passed
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