|
| 1 | +# GoClaw CLI - Product Development Requirements |
| 2 | + |
| 3 | +## Project Overview |
| 4 | + |
| 5 | +GoClaw CLI is a production-ready command-line interface for managing GoClaw AI agent gateway servers. Built with Cobra framework and Go, it provides full API coverage for the GoClaw dashboard accessible through both interactive (human) and automation (AI agent/CI) modes. |
| 6 | + |
| 7 | +**Repository:** https://github.com/nextlevelbuilder/goclaw-cli |
| 8 | +**Status:** Production Ready |
| 9 | +**Last Updated:** 2026-03-15 |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +## Product Vision |
| 14 | + |
| 15 | +Enable developers and AI agents to seamlessly manage GoClaw servers through a unified CLI, supporting enterprise workflows with security-first principles and multiple output formats. |
| 16 | + |
| 17 | +--- |
| 18 | + |
| 19 | +## Core Requirements |
| 20 | + |
| 21 | +### Functional Requirements |
| 22 | + |
| 23 | +| Requirement | Status | Details | |
| 24 | +|-------------|--------|---------| |
| 25 | +| **28 Command Groups** | Complete | Auth, agents, chat, sessions, skills, MCP, providers, tools, cron, teams, channels, traces, memory, knowledge-graph, usage, config, logs, storage, approvals, delegations, credentials, TTS, media, activity | |
| 26 | +| **Full API Coverage** | Complete | Every dashboard feature accessible via CLI | |
| 27 | +| **Dual Mode** | Complete | Interactive (human-friendly TUI) + Automation (flags/env vars) | |
| 28 | +| **Multiple Output Formats** | Complete | Table (human), JSON (machines), YAML (configuration) | |
| 29 | +| **Real-time Streaming** | Complete | WebSocket support for chat, logs, and event streaming | |
| 30 | +| **Multi-profile Support** | Complete | Manage multiple server connections with profiles | |
| 31 | +| **Configuration Management** | Complete | File (~/.goclaw/config.yaml), env vars, CLI flags | |
| 32 | +| **Profile Switching** | Complete | `goclaw auth use-context <profile>` | |
| 33 | + |
| 34 | +### Non-Functional Requirements |
| 35 | + |
| 36 | +| Requirement | Status | Details | |
| 37 | +|-------------|--------|---------| |
| 38 | +| **Security** | Complete | OS keyring integration, TLS by default, no secrets in `ps` output | |
| 39 | +| **Performance** | Complete | <2s response time for HTTP requests, instant WebSocket connection | |
| 40 | +| **Compatibility** | Complete | macOS, Linux, Windows (amd64, arm64) via GoReleaser | |
| 41 | +| **Error Handling** | Complete | Wrapped errors with context, user-friendly messages | |
| 42 | +| **Code Quality** | In Progress | Table-driven tests, comprehensive coverage | |
| 43 | +| **Documentation** | In Progress | API reference, user guides, examples | |
| 44 | + |
| 45 | +--- |
| 46 | + |
| 47 | +## Functional Specifications |
| 48 | + |
| 49 | +### Authentication & Profiles |
| 50 | + |
| 51 | +``` |
| 52 | +goclaw auth login --server <url> [--token <token>|--pair] |
| 53 | +goclaw auth logout [--profile <name>] |
| 54 | +goclaw auth use-context <profile-name> |
| 55 | +goclaw credentials get <key> |
| 56 | +goclaw credentials set <key> <value> |
| 57 | +``` |
| 58 | + |
| 59 | +- Credentials stored in OS keyring (not disk) |
| 60 | +- Config file stores server URL and profile metadata only |
| 61 | +- Default profile from config file |
| 62 | + |
| 63 | +### Agent Management (CRUD) |
| 64 | + |
| 65 | +``` |
| 66 | +goclaw agents list [-o json|yaml] |
| 67 | +goclaw agents get <id> |
| 68 | +goclaw agents create --name <name> --provider <provider> --model <model> |
| 69 | +goclaw agents update <id> --field <value> |
| 70 | +goclaw agents delete <id> [-y] |
| 71 | +goclaw agents share <id> --user <email> |
| 72 | +goclaw agents delegation-link <id> |
| 73 | +``` |
| 74 | + |
| 75 | +### Chat Operations |
| 76 | + |
| 77 | +``` |
| 78 | +goclaw chat <agent-id|agent-key> # Interactive mode |
| 79 | +goclaw chat <agent-id> -m "message" # Single-shot (automation) |
| 80 | +echo "input" | goclaw chat <agent-id> # Pipe support |
| 81 | +goclaw chat <agent-id> --file file.txt # File input |
| 82 | +goclaw chat <agent-id> -o json # JSON output |
| 83 | +``` |
| 84 | + |
| 85 | +### Session Management |
| 86 | + |
| 87 | +``` |
| 88 | +goclaw sessions list |
| 89 | +goclaw sessions get <session-id> |
| 90 | +goclaw sessions delete <session-id> [-y] |
| 91 | +goclaw sessions reset <session-id> [-y] |
| 92 | +goclaw sessions label <session-id> --label "name" |
| 93 | +``` |
| 94 | + |
| 95 | +### Streaming Operations |
| 96 | + |
| 97 | +``` |
| 98 | +goclaw logs [-f] # Real-time log tailing |
| 99 | +goclaw chat <agent-id> [interactive] # Streaming chat |
| 100 | +goclaw traces <trace-id> [--stream] # Trace streaming |
| 101 | +``` |
| 102 | + |
| 103 | +### Configuration Management |
| 104 | + |
| 105 | +``` |
| 106 | +goclaw config get [--field <path>] |
| 107 | +goclaw config apply -f config.yaml |
| 108 | +goclaw config patch --field value |
| 109 | +goclaw status # Server health check |
| 110 | +``` |
| 111 | + |
| 112 | +--- |
| 113 | + |
| 114 | +## Design Constraints |
| 115 | + |
| 116 | +### Architecture |
| 117 | +- **HTTP Client:** REST API for CRUD operations (GET, POST, PUT, PATCH, DELETE) |
| 118 | +- **WebSocket Client:** Streaming and bidirectional communication |
| 119 | +- **No ORM:** Raw HTTP calls with JSON marshaling |
| 120 | +- **No External CLI Dependencies:** Single binary (cobra, viper, gorilla/websocket only) |
| 121 | + |
| 122 | +### Configuration Hierarchy |
| 123 | +1. **CLI Flags** (highest priority) — `goclaw agents list -o json` |
| 124 | +2. **Environment Variables** — `GOCLAW_SERVER`, `GOCLAW_TOKEN`, `GOCLAW_OUTPUT` |
| 125 | +3. **Config File** — `~/.goclaw/config.yaml` |
| 126 | +4. **Defaults** — Built-in defaults |
| 127 | + |
| 128 | +### Command Structure |
| 129 | +- Root command: `goclaw` |
| 130 | +- Subcommands: `goclaw <command> <subcommand> [flags] [args]` |
| 131 | +- Global flags: `--server`, `--token`, `--output`, `--yes`, `--verbose`, `--insecure`, `--profile` |
| 132 | +- Command-specific flags defined in each command group |
| 133 | + |
| 134 | +### Output Formats |
| 135 | +- **table:** Human-readable tables with column alignment |
| 136 | +- **json:** Compact JSON for programmatic consumption |
| 137 | +- **yaml:** YAML for configuration files and readability |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +## Technical Stack |
| 142 | + |
| 143 | +### Core Dependencies |
| 144 | +- **Cobra:** Command-line framework |
| 145 | +- **Gorilla WebSocket:** WebSocket client |
| 146 | +- **golang.org/x/term:** Terminal utilities (TUI, raw mode) |
| 147 | +- **gopkg.in/yaml.v3:** YAML parsing and serialization |
| 148 | + |
| 149 | +### Build & Release |
| 150 | +- **Go 1.25.3+:** Minimum version |
| 151 | +- **Make:** Build automation |
| 152 | +- **GoReleaser:** Multi-platform binary distribution |
| 153 | +- **GitHub Actions:** CI/CD (lint, test, build, release) |
| 154 | + |
| 155 | +### Testing |
| 156 | +- **Table-driven tests:** Parameterized test cases |
| 157 | +- **Race detector:** `go test -race ./...` |
| 158 | +- **Linting:** `go vet ./...` |
| 159 | + |
| 160 | +--- |
| 161 | + |
| 162 | +## Acceptance Criteria |
| 163 | + |
| 164 | +### Phase 1-9 Complete |
| 165 | +- All 28 command groups implemented |
| 166 | +- Full API coverage verified |
| 167 | +- Dual mode (interactive + automation) working |
| 168 | +- Multi-profile support functional |
| 169 | +- WebSocket streaming operational |
| 170 | +- Security hardening completed |
| 171 | + |
| 172 | +### Phase 10+ (Future) |
| 173 | +- Unit test coverage >80% |
| 174 | +- Integration tests for critical paths |
| 175 | +- Shell completion scripts (bash, zsh, fish) |
| 176 | +- Homebrew tap for easy installation |
| 177 | + |
| 178 | +--- |
| 179 | + |
| 180 | +## Success Metrics |
| 181 | + |
| 182 | +| Metric | Target | Current | |
| 183 | +|--------|--------|---------| |
| 184 | +| Command Coverage | 100% (28/28 groups) | 28/28 ✓ | |
| 185 | +| Build Time | <5s | <2s ✓ | |
| 186 | +| Binary Size | <15MB | ~8MB ✓ | |
| 187 | +| Test Coverage | >80% | In Progress | |
| 188 | +| Documentation Coverage | 100% | In Progress | |
| 189 | +| Automation Support | All commands | ✓ | |
| 190 | + |
| 191 | +--- |
| 192 | + |
| 193 | +## Deployment & Release |
| 194 | + |
| 195 | +### Build |
| 196 | +```bash |
| 197 | +make build # Local binary |
| 198 | +make install # Install to GOPATH/bin |
| 199 | +go install ./... # Latest from main |
| 200 | +``` |
| 201 | + |
| 202 | +### Release (Tagged Versions) |
| 203 | +```bash |
| 204 | +git tag v1.0.0 |
| 205 | +git push origin v1.0.0 # Triggers GitHub Actions release |
| 206 | +``` |
| 207 | + |
| 208 | +### Artifacts |
| 209 | +- **goclaw_X.X.X_darwin_amd64.tar.gz** — macOS Intel |
| 210 | +- **goclaw_X.X.X_darwin_arm64.tar.gz** — macOS Apple Silicon |
| 211 | +- **goclaw_X.X.X_linux_amd64.tar.gz** — Linux Intel |
| 212 | +- **goclaw_X.X.X_linux_arm64.tar.gz** — Linux ARM |
| 213 | +- **goclaw_X.X.X_windows_amd64.zip** — Windows Intel |
| 214 | +- **goclaw_X.X.X_windows_arm64.zip** — Windows ARM |
| 215 | + |
| 216 | +--- |
| 217 | + |
| 218 | +## Security Considerations |
| 219 | + |
| 220 | +- **Credentials:** Stored in OS keyring, never in config file |
| 221 | +- **TLS:** Required by default, `--insecure` only for testing |
| 222 | +- **Token Exposure:** Commands accept `--token` flag but prefer `GOCLAW_TOKEN` env var |
| 223 | +- **No Logging:** Sensitive data (tokens, credentials) never logged |
| 224 | +- **Process Security:** Credentials not visible in `ps` output |
| 225 | + |
| 226 | +--- |
| 227 | + |
| 228 | +## Configuration Example |
| 229 | + |
| 230 | +File: `~/.goclaw/config.yaml` |
| 231 | + |
| 232 | +```yaml |
| 233 | +active_profile: production |
| 234 | +profiles: |
| 235 | + - name: production |
| 236 | + server: https://goclaw.example.com |
| 237 | + token: {stored-in-keyring} |
| 238 | + - name: staging |
| 239 | + server: https://staging.goclaw.example.com |
| 240 | + token: {stored-in-keyring} |
| 241 | + - name: local |
| 242 | + server: http://localhost:8080 |
| 243 | + token: {stored-in-keyring} |
| 244 | +``` |
| 245 | +
|
| 246 | +Environment variables take precedence: |
| 247 | +```bash |
| 248 | +export GOCLAW_SERVER=https://custom.example.com |
| 249 | +export GOCLAW_TOKEN=custom-token |
| 250 | +export GOCLAW_OUTPUT=json |
| 251 | +goclaw agents list # Uses custom server/token/output |
| 252 | +``` |
| 253 | + |
| 254 | +--- |
| 255 | + |
| 256 | +## Command Inventory |
| 257 | + |
| 258 | +### Auth & Profiles (6 commands) |
| 259 | +`auth`, `credentials` |
| 260 | + |
| 261 | +### Agent Management (7 commands) |
| 262 | +`agents` (list, get, create, update, delete, share, delegation-link) |
| 263 | + |
| 264 | +### Chat & Messaging (1 command) |
| 265 | +`chat` |
| 266 | + |
| 267 | +### Session Management (5 commands) |
| 268 | +`sessions` (list, get, delete, reset, label) |
| 269 | + |
| 270 | +### Skill Management (4 commands) |
| 271 | +`skills` (list, upload, delete, grant-access, revoke-access) |
| 272 | + |
| 273 | +### MCP Server Management (5 commands) |
| 274 | +`mcp` (list, add, remove, grants, access-requests) |
| 275 | + |
| 276 | +### LLM Providers (4 commands) |
| 277 | +`providers` (list, create, update, delete, verify, models) |
| 278 | + |
| 279 | +### Custom Tools (3 commands) |
| 280 | +`tools` (list, invoke, delete) |
| 281 | + |
| 282 | +### Scheduled Jobs (4 commands) |
| 283 | +`cron` (list, create, update, delete, trigger, history) |
| 284 | + |
| 285 | +### Team Management (5 commands) |
| 286 | +`teams` (list, create, members, task-board, workspace) |
| 287 | + |
| 288 | +### Channels (3 commands) |
| 289 | +`channels` (list, contacts, pending-messages) |
| 290 | + |
| 291 | +### LLM Traces (2 commands) |
| 292 | +`traces` (list, export) |
| 293 | + |
| 294 | +### Memory Documents (3 commands) |
| 295 | +`memory` (list, search, upsert) |
| 296 | + |
| 297 | +### Knowledge Graph (2 commands) |
| 298 | +`knowledge-graph` (entities, links, query) |
| 299 | + |
| 300 | +### Usage Analytics (2 commands) |
| 301 | +`usage` (summary, cost-breakdown) |
| 302 | + |
| 303 | +### Server Config (3 commands) |
| 304 | +`config` (get, apply, patch) |
| 305 | + |
| 306 | +### Logs (1 command) |
| 307 | +`logs` |
| 308 | + |
| 309 | +### Workspace Storage (2 commands) |
| 310 | +`storage` (list, download) |
| 311 | + |
| 312 | +### Approvals (2 commands) |
| 313 | +`approvals` (list, approve, deny) |
| 314 | + |
| 315 | +### Delegations (1 command) |
| 316 | +`delegations` |
| 317 | + |
| 318 | +### Text-to-Speech (2 commands) |
| 319 | +`tts` (synthesize, list-voices) |
| 320 | + |
| 321 | +### Media (2 commands) |
| 322 | +`media` (upload, download) |
| 323 | + |
| 324 | +### Activity & Audit (1 command) |
| 325 | +`activity` |
| 326 | + |
| 327 | +### Utility (2 commands) |
| 328 | +`version`, `status` |
| 329 | + |
| 330 | +**Total: 28 command groups** |
| 331 | + |
| 332 | +--- |
| 333 | + |
| 334 | +## Version History |
| 335 | + |
| 336 | +| Version | Date | Status | Notes | |
| 337 | +|---------|------|--------|-------| |
| 338 | +| v1.0.0 | 2026-03-15 | Production | All phases complete (1-9) | |
| 339 | +| v0.x | Earlier | Dev | Feature development | |
| 340 | + |
| 341 | +--- |
| 342 | + |
| 343 | +## Open Questions |
| 344 | + |
| 345 | +None at this time. Full specification complete and implemented. |
0 commit comments