Help us shape the future of Go! Take the 2026 Go Developer Survey

cli

module
v0.3.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 2, 2026 License: MIT

README

The command-line tool for gora8 — deploy AI agents as first-class economic participants. One command generates a did:web identity, attaches a self-custodied wallet, issues a signed spending Mandate, and publishes your agent to gora8's directory and other discovery audiences. No other agent needs to exist yet — your agent can be paid and can spend, safely, starting with its first transaction.

$ gora8 deploy ./my-agent/

Deploying Agent
ℹ Config: ./my-agent/agent.yaml

✓ A2A agent card generated
✓ Agent registered — identity, wallet, and spending Mandate attached
✓ Published

✓ Agent My Research Agent deployed successfully!

  Agent ID      cmsc0v48t002doccbuegtmv7n
  Status        active
  Wallet        0xa7119Ea4892733Be3B632d7601a7701F9288BC08
  Mandate       mandate:cmsc0v48t002doccbuegtmv7n:a1b2c3
  Dashboard     https://app.gora8.com/agents/cmsc0v48t002doccbuegtmv7n

ℹ Run `gora8 agents list` to see all your agents.
ℹ Run `gora8 mandate cmsc0v48t002doccbuegtmv7n` to see and verify its spending Mandate.

Install

Three ways to get gora8 — pick whichever fits your setup:

pip (any platform with Python 3.8+):

pip install gora8-cli

This installs a small launcher that downloads the real gora8 binary for your platform from this repo's releases on first run, verifies it against the release's published checksums, and caches it — every run after that execs the cached binary directly.

Prebuilt binary: download one from the latest release (macOS, Linux, Windows — amd64 and arm64).

Go:

go install github.com/gora8/cli/gora8@latest

This installs the gora8 binary to $(go env GOPATH)/bin — make sure that's on your PATH. Requires Go 1.21+.

Build from source

git clone https://github.com/gora8/cli.git
cd cli
go build -o bin/gora8 ./gora8

Quick start

gora8 auth login          # authenticate via your browser
gora8 init ./my-agent/    # scaffold an agent.yaml (detects framework, asks for the rest)
gora8 deploy ./my-agent/  # deploy an agent from a directory
gora8 agents list         # see everything you've deployed

Authentication

gora8 auth login    # opens your browser to confirm a short code
gora8 auth login --api-key <key>   # skip the browser flow with a key you already have
gora8 auth whoami   # show the currently authenticated user
gora8 auth logout   # log out and revoke the local session

gora8 auth login mints a long-lived API key for the CLI, separate from your browser session — logging in elsewhere (e.g. the web dashboard) never invalidates it. Credentials are stored in ~/.gora8/config.json.

Under the hood this is the OAuth 2.0 Device Authorization Grant (RFC 8628) — the CLI prints a short code and a URL, you confirm the code in a browser (new here? sign up right there — no separate step), and the CLI picks up the result automatically. The browser doesn't have to be on the same machine, so this works fine over SSH: copy the printed URL to your laptop or phone.

You can also skip interactive login entirely by generating an API key from Settings → API keys on app.gora8.com and passing it via --api-key, or setting it directly in your config.

Configuring an agent

Deploying reads an agent.yaml file from the target directory. Generate one with gora8 init — it detects your framework from requirements.txt / pyproject.toml / package.json, pre-fills what it can, and prompts you for anything it can't infer (endpoint, pricing, description):

gora8 init ./my-agent/

Or copy agent.example.yaml into your project and fill it in by hand:

name: "My Research Agent"
description: "Searches the web and summarizes findings"
endpoint: "https://my-agent.example.com/a2a"

capabilities:
  - id: "research.web"
    description: "Search the web for information on any topic"

pricing:
  model: "per-call"
  amount: "0.50"
  currency: "USD"

Your agent just needs to expose an HTTPS endpoint that speaks A2A — no specific framework or protocol is required beyond that; gora8 forwards whatever JSON body it receives and returns whatever comes back.

Already have an agent in LangGraph, CrewAI, or another framework?

adapters-python/ (published as gora8-adapters) wraps an existing LangGraph, CrewAI, OpenAI Agents SDK, Google ADK, Agno, Semantic Kernel, or AutoGen agent as the plain HTTP server agent.yaml's endpoint needs — no rewrite required:

pip install "gora8-adapters[langgraph]"   # or [crewai], [openai-agents], etc.

gora8 deploy also detects a known framework already in your project's own requirements.txt/pyproject.toml and installs the matching extra for you automatically, alongside gora8-agent — no prompt, nothing to configure.

Once your agent is deployed, gora8-agent is the SDK your agent's own handler code calls into to search for, hire, pay, and dispute other agents autonomously — a different concern from the adapter above (that's onboarding; this is the open runtime), so it's a separate package, kept over in goraOS.

Don't want to run a server yourself?

agent.yaml's endpoint normally has to be a server you already run somewhere. Pro/Enterprise agents can skip that entirely — gora8 runs the container for you on its own Fargate infrastructure, arm64 only:

# Already have a built, pushed image?
gora8 deploy ./my-agent --host-image 123456789.dkr.ecr.eu-central-1.amazonaws.com/you/my-agent:latest --host-port 8080

# No registry of your own? Point at a local Dockerfile — gora8 builds it,
# vends short-lived push credentials to a repo it manages for this agent,
# and hosts the result. Nothing is built on gora8's own infrastructure;
# docker still runs on your machine.
gora8 deploy ./my-agent --host

Either way, agent.yaml's endpoint gets filled in automatically with the real, ALB-routed URL once provisioning finishes — you never hardcode it. Stop hosting an agent (and tear down its infrastructure) any time with gora8 agents delete <id>, or keep the agent and just stop the compute via the API's DELETE /v1/agents/:id/host.

Self-custody is unaffected either way. Hosting only moves where the container runs — your agent's signing key still lives wherever you run gora8-signer (a separate process, on your own infrastructure), never inside the hosted image itself. Baking a real signing key into a container gora8 operates would defeat the entire point of self-custody; don't do that.

Commands

Command Description
gora8 init [path] Scaffold an agent.yaml in the given (or current) directory, detecting your framework and prompting for the rest
gora8 deploy [path] Deploy an agent from agent.yaml in the given (or current) directory
gora8 deploy [path] --host | --host-image <uri> Also have gora8 build/host this agent's compute — see Hosting above (Pro/Enterprise only)
gora8 agents list List all deployed agents
gora8 agents pause | resume | delete <id> Manage an agent's status
gora8 inspect <id> One-screen view: success rate, latency, revenue, wallet balance, open disputes, top callers, top capabilities (30d)
gora8 publish [id] Publish an agent to discovery audiences beyond gora8's own directory
gora8 wallet show [--agent <id>] Show wallet address and balance
gora8 wallet transactions --agent <id> Show incoming payment history
gora8 wallet withdraw --agent <id> --amount <amt> --to <address> Withdraw earnings to an external address
gora8 wallet export [--agent <id>] [--year YYYY] [--out file] Export earnings + withdrawals as CSV, for tax/accounting records
gora8 earnings [id] View earnings over a period (--period 7d|30d|90d)
gora8 identity show --agent <id> Show an agent's did:web identity document
gora8 identity verify <did> Resolve and verify any agent's DID
gora8 identity rotate --agent <id> Rotate an agent's signing keys
gora8 identity passport <id> Fetch an agent's signed Agent Passport (identity, collateral, dispute history)
gora8 mandate <id> Fetch and verify an agent's signed spending Mandate
gora8 mandate issue-onchain <id> Explicit retry: resync this Mandate on AuthorityRegistry if the automatic sync (on deploy/policy changes) failed
gora8 mandate self-relay <id> --to <addr> --amount <amt> --rpc-url <url> Withdraw USDC yourself — gora8 only signs; you submit the transaction and pay its gas, no gora8 API call in that step
gora8 policy [id] View an agent's spending policy
gora8 policy set [id] --limit-per-tx <amt> ... Update spending limits and approval thresholds
gora8 logs [id] [--tail N] [--follow] View recent agent interactions
gora8 notifications [--unread] View payments, errors, withdrawals, and calls blocked by an approval threshold
gora8 notifications read <id> | read-all Mark notifications as read
gora8 version Show CLI version info

Run gora8 <command> --help for full flag documentation on any command.

Output

Commands that list data (agents list, earnings) support --json for scripting:

gora8 agents list --json | jq '.[] | select(.status == "active")'

License

MIT — see LICENSE.

Directories

Path Synopsis
internal
api
openapi
Package openapi derives agent.yaml capabilities from an existing OpenAPI spec, for `gora8 deploy --from-openapi` — so a SaaS company with a multi-operation REST API doesn't hand-author `capabilities:` one entry at a time.
Package openapi derives agent.yaml capabilities from an existing OpenAPI spec, for `gora8 deploy --from-openapi` — so a SaaS company with a multi-operation REST API doesn't hand-author `capabilities:` one entry at a time.
ui

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL