|
1 | | -# ARC - Agentic Runtime Controller |
| 1 | +# ARC - Agent oRchestrator for Containers |
2 | 2 |
|
3 | 3 | [](https://pkg.go.dev/github.com/rizome-dev/arc) |
4 | 4 | [](https://goreportcard.com/report/github.com/rizome-dev/arc) |
5 | 5 | [](https://github.com/rizome-dev/arc/actions/workflows/ci.yml) |
6 | 6 | [](LICENSE) |
7 | 7 |
|
8 | | -ARC is a production-ready, unopinionated agent & workflow management system. |
| 8 | +ARC is a production-ready orchestrator for managing container-based agents in Agentic Development Swarms. It provides a robust framework for deploying, managing, and coordinating autonomous agents at scale with support for both Docker and Kubernetes runtimes. |
9 | 9 |
|
10 | 10 | built by [rizome labs](https://rizome.dev) | contact: [hi@rizome.dev](mailto:hi@rizome.dev) |
11 | 11 |
|
12 | 12 | ```bash |
13 | 13 | go get github.com/rizome-dev/arc |
14 | 14 | ``` |
15 | 15 |
|
16 | | -## Quick Start |
| 16 | +## Deployment |
| 17 | + |
| 18 | +```bash |
| 19 | +# Build and run the gRPC/HTTP server |
| 20 | +make server |
| 21 | + |
| 22 | +# Or separately: |
| 23 | +make server-build |
| 24 | +./build/arc-server |
| 25 | +``` |
| 26 | + |
| 27 | +The server exposes: |
| 28 | +- gRPC API on `:50051` |
| 29 | +- REST API on `:8080` |
| 30 | + |
| 31 | +### Using the Library |
17 | 32 |
|
18 | 33 | ```go |
19 | 34 | package main |
@@ -88,14 +103,179 @@ func main() { |
88 | 103 | } |
89 | 104 | ``` |
90 | 105 |
|
| 106 | +### Using the gRPC API |
| 107 | + |
| 108 | +```go |
| 109 | +package main |
| 110 | + |
| 111 | +import ( |
| 112 | + "context" |
| 113 | + "log" |
| 114 | + |
| 115 | + "google.golang.org/grpc" |
| 116 | + "google.golang.org/grpc/credentials/insecure" |
| 117 | + "google.golang.org/protobuf/types/known/emptypb" |
| 118 | + |
| 119 | + arcv1 "github.com/rizome-dev/arc/api/v1" |
| 120 | +) |
| 121 | + |
| 122 | +func main() { |
| 123 | + // Connect to server |
| 124 | + conn, err := grpc.Dial("localhost:50051", |
| 125 | + grpc.WithTransportCredentials(insecure.NewCredentials())) |
| 126 | + if err != nil { |
| 127 | + log.Fatal(err) |
| 128 | + } |
| 129 | + defer conn.Close() |
| 130 | + |
| 131 | + client := arcv1.NewARCClient(conn) |
| 132 | + |
| 133 | + // Check health |
| 134 | + health, _ := client.Health(context.Background(), &emptypb.Empty{}) |
| 135 | + log.Printf("Server status: %s", health.Status) |
| 136 | + |
| 137 | + // Create workflow |
| 138 | + resp, _ := client.CreateWorkflow(context.Background(), |
| 139 | + &arcv1.CreateWorkflowRequest{ |
| 140 | + Workflow: &arcv1.Workflow{ |
| 141 | + Name: "example", |
| 142 | + Tasks: []*arcv1.Task{ |
| 143 | + { |
| 144 | + Name: "task-1", |
| 145 | + AgentConfig: &arcv1.AgentConfig{ |
| 146 | + Image: "ubuntu:latest", |
| 147 | + Command: []string{"echo", "Hello"}, |
| 148 | + }, |
| 149 | + }, |
| 150 | + }, |
| 151 | + }, |
| 152 | + }) |
| 153 | + |
| 154 | + // Start workflow |
| 155 | + client.StartWorkflow(context.Background(), |
| 156 | + &arcv1.StartWorkflowRequest{ |
| 157 | + WorkflowId: resp.WorkflowId, |
| 158 | + }) |
| 159 | +} |
| 160 | +``` |
| 161 | + |
| 162 | +### REST API Examples |
| 163 | + |
| 164 | +```bash |
| 165 | +# Health check |
| 166 | +curl http://localhost:8080/health |
| 167 | + |
| 168 | +# Create workflow |
| 169 | +curl -X POST http://localhost:8080/api/v1/workflows \ |
| 170 | + -H "Content-Type: application/json" \ |
| 171 | + -d '{ |
| 172 | + "workflow": { |
| 173 | + "name": "my-workflow", |
| 174 | + "tasks": [{ |
| 175 | + "name": "task-1", |
| 176 | + "agent_config": { |
| 177 | + "image": "ubuntu:latest", |
| 178 | + "command": ["echo", "Hello World"] |
| 179 | + } |
| 180 | + }] |
| 181 | + } |
| 182 | + }' |
| 183 | + |
| 184 | +# List agents |
| 185 | +curl http://localhost:8080/api/v1/agents |
| 186 | + |
| 187 | +# Stream events |
| 188 | +curl http://localhost:8080/api/v1/events/stream |
| 189 | +``` |
| 190 | + |
| 191 | +## Building and Testing |
| 192 | + |
| 193 | +```bash |
| 194 | +# Run all tests |
| 195 | +make test |
| 196 | + |
| 197 | +# Generate coverage report |
| 198 | +make coverage |
| 199 | + |
| 200 | +# Run linter |
| 201 | +make lint |
| 202 | + |
| 203 | +# Run security scan |
| 204 | +make security |
| 205 | + |
| 206 | +# Build for multiple platforms |
| 207 | +make build-cross |
| 208 | + |
| 209 | +# Build Docker image |
| 210 | +make docker-build |
| 211 | +``` |
| 212 | + |
| 213 | +## Proto File Management |
| 214 | + |
| 215 | +### Files Included in Repository |
| 216 | + |
| 217 | +The following generated files are committed for convenience: |
| 218 | +- `api/v1/*.pb.go` - Go type definitions |
| 219 | +- `api/v1/*_grpc.pb.go` - gRPC service implementations |
| 220 | +- `api/v1/*.pb.gw.go` - HTTP gateway handlers |
| 221 | + |
| 222 | +### Regenerating Proto Files |
| 223 | + |
| 224 | +```bash |
| 225 | +# Clean all generated files |
| 226 | +make proto-clean |
| 227 | + |
| 228 | +# Regenerate from proto definitions |
| 229 | +make proto |
| 230 | +``` |
| 231 | + |
| 232 | +### Required Proto Tools |
| 233 | + |
| 234 | +Install with `make proto-install`: |
| 235 | +- `protoc-gen-go` - Generate Go types |
| 236 | +- `protoc-gen-go-grpc` - Generate gRPC code |
| 237 | +- `protoc-gen-grpc-gateway` - Generate HTTP gateway |
| 238 | +- `protoc-gen-openapiv2` - Generate OpenAPI specs |
| 239 | + |
91 | 240 | ## Deployment |
92 | 241 |
|
| 242 | +### Docker |
| 243 | + |
| 244 | +```bash |
| 245 | +# Build image |
| 246 | +make docker-build |
| 247 | + |
| 248 | +# Run container |
| 249 | +docker run -d \ |
| 250 | + -p 50051:50051 \ |
| 251 | + -p 8080:8080 \ |
| 252 | + -v /var/run/docker.sock:/var/run/docker.sock \ |
| 253 | + arc:latest |
| 254 | +``` |
| 255 | + |
93 | 256 | ### Kubernetes |
94 | 257 |
|
95 | 258 | ```bash |
| 259 | +# Install with Helm |
96 | 260 | helm install arc ./helm/arc |
97 | | -# or |
| 261 | + |
| 262 | +# With custom values |
98 | 263 | helm install arc ./helm/arc -f values.yaml |
| 264 | + |
| 265 | +# Upgrade |
| 266 | +helm upgrade arc ./helm/arc |
| 267 | +``` |
| 268 | + |
| 269 | +### Configuration |
| 270 | + |
| 271 | +Environment variables: |
| 272 | +```bash |
| 273 | +ARC_GRPC_PORT=50051 # gRPC server port |
| 274 | +ARC_HTTP_PORT=8080 # HTTP server port |
| 275 | +ARC_RUNTIME=docker # Runtime: docker or kubernetes |
| 276 | +ARC_STATE_BACKEND=memory # State: memory, badger, postgres |
| 277 | +ARC_AMQ_PATH=./data # AMQ storage path |
| 278 | +ARC_LOG_LEVEL=info # Log level |
99 | 279 | ``` |
100 | 280 |
|
101 | 281 | ## License |
|
0 commit comments