internal/website/docs/getting-started.md
Go Micro has three core abstractions:
| Abstraction | What | Constructor |
|---|---|---|
| Service | Capability — endpoints, data, business logic | micro.NewService("task") |
| Agent | Intelligence — manages services with an LLM | micro.NewAgent("task-mgr") |
| Flow | Orchestration — event-driven LLM triggers | micro.NewFlow("onboard") |
curl install below gives you the micro binary without Go, but micro run compiles your services, so you'll want Go installed to build them.# Binary (no Go required)
curl -fsSL https://go-micro.dev/install.sh | sh
# Or with Go
go install go-micro.dev/v6/cmd/micro@latest
If install or shell setup fails, start with Install troubleshooting to verify the binary installer or go install, PATH, micro --version, and the no-secret smoke path.
Start with the path that proves the runtime works before any provider setup: install the CLI, scaffold one service, run it locally, then call it through the gateway.
micro new helloworld
cd helloworld
micro run
In another terminal, call the generated service:
curl -X POST http://localhost:8080/api/helloworld/Helloworld.Call \
-H 'Content-Type: application/json' -d '{"name":"World"}'
That install → scaffold → run → call loop is the 0→1 contract. It requires Go and the micro binary, but no LLM key. Once this succeeds, you know the local runtime, hot reload, gateway, and service registration are working.
After this quick start, follow the agent path in order:
micro agent demo — print the provider-free first-agent demo command and next docs steps from the installed CLI.micro chat.make harness.Create and run a service manually:
micro new helloworld
cd helloworld
micro run
Open http://localhost:8080 to see the dashboard, call endpoints, and chat with your service.
A service is a Go struct with methods. Doc comments and @example tags become tool descriptions for AI agents:
package main
import (
"context"
"go-micro.dev/v6"
)
type Request struct {
Name string `json:"name"`
}
type Response struct {
Message string `json:"message"`
}
type Say struct{}
// Hello greets a person by name.
// @example {"name": "Alice"}
func (h *Say) Hello(ctx context.Context, req *Request, rsp *Response) error {
rsp.Message = "Hello " + req.Name
return nil
}
func main() {
service := micro.NewService("greeter")
service.Handle(new(Say))
service.Run()
}
micro run gives you:
http://localhost:8080http://localhost:8080/api/{service}/{method}http://localhost:8080/agenthttp://localhost:8080/mcp/toolsmicro new scaffolds a reflection-based service by default — plain Go types, no code generation, so go run . works with nothing else installed. If you prefer Protocol Buffers, add --proto (this requires the protoc toolchain; the command tells you what to install).
Templates are available for common patterns. These use Protocol Buffers, so they need the protoc toolchain (protoc, protoc-gen-go, protoc-gen-micro — micro new prints the install commands if they're missing):
micro new contacts --template crud
micro new events --template pubsub
micro new gateway --template api
After the no-secret path works, set a provider key if you want Go Micro to design services and an agent from a prompt:
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY, GEMINI_API_KEY, ...
micro run --prompt "task management system" --provider anthropic
You'll see the design, confirm it, and then services plus an agent start:
Services:
● task — Core task management
● project — Project organization
Generate? [Y/n]
Micro
Services:
● task
● project
Agents:
◆ agent
Use the interactive console, micro run -d plus micro chat, or the agent playground to talk to the generated services.
Before your first provider-backed agent run, check the local path with:
micro agent preflight
The preflight is read-only: it verifies Go 1.24+, the micro binary, provider-key setup, and whether the default micro run gateway port is free, without calling an LLM provider. When a check fails it prints the exact fix plus the next guide to open, so the scaffold → run → chat path stays walkable.
For a complete service-backed walkthrough, start with Your First Agent. If you want to run before you write, use examples/support for the full services → agents → workflows lifecycle or examples/agent-plan-delegate for the smallest multi-agent planning/delegation path.
An Agent is an intelligent layer that manages one or more services:
package main
import "go-micro.dev/v6"
func main() {
agent := micro.NewAgent("task-mgr",
micro.AgentServices("task", "project"),
micro.AgentPrompt("You manage tasks and projects. You understand deadlines, priorities, and assignments."),
micro.AgentProvider("anthropic"),
micro.AgentAPIKey("sk-ant-..."),
)
agent.Run()
}
An agent is a service — it has a proto-defined Agent.Chat RPC endpoint and registers in the registry like everything else. It:
micro call, the interactive console, or any go-micro clientUse it programmatically:
resp, _ := agent.Ask(ctx, "What tasks are overdue for Alice?")
fmt.Println(resp.Reply)
Or via the CLI:
micro agent list # list registered agents
micro call task-mgr Agent.Chat '{"message": "What tasks are overdue?"}'
When multiple agents are registered, the console routes to the right agent automatically.
A Flow subscribes to a broker topic and triggers an LLM when events arrive. You can define flows in code or run them from the CLI.
In code:
f := micro.NewFlow("onboard-user",
micro.FlowTrigger("events.user.created"),
micro.FlowPrompt("New user created: {{.Data}}. Send welcome email and create workspace."),
micro.FlowProvider("anthropic"),
micro.FlowAPIKey(os.Getenv("MICRO_AI_API_KEY")),
)
f.Register(service.Options().Registry, service.Options().Broker, service.Client())
From the CLI:
micro flow run --trigger events.user.created --prompt "New user: {{.Data}}. Send welcome email."
micro flow exec --prompt "Summarize all open tickets and email the report."
The flow discovers all services as tools and lets the LLM decide which RPCs to call in response to the event.
| Command | Purpose |
|---|---|
micro run --prompt "..." | Generate services + agent, start with interactive console |
micro run | Dev mode: hot reload, gateway, interactive console |
micro run -d | Detached mode (no console) |
micro chat | Standalone chat (when not using micro run) |
micro agent list | List registered agents |
micro flow run --trigger <topic> | Run an event-driven flow |
micro flow exec --prompt "..." | Execute a one-shot flow |
micro new myservice | Scaffold a service |
micro call service endpoint '{}' | Call a service or agent |
micro build | Compile production binaries |
micro deploy user@server | Deploy via SSH + systemd |