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")'
Links
License
MIT — see LICENSE.