{
  "markdown": "# Anvil\n\nCommand-line interface and MCP server for the [Sable](https://withsable.com) AI voice agent platform.\n\n## Quick Start (2 minutes)\n\n```bash\n# 1. Install\ngo install github.com/sable-inc/anvil/cmd/anvil@latest\n\n# 2. Authenticate\nanvil auth login --token svc_your_token_here\n\n# 3. Set your default org\nmkdir -p ~/.config/anvil\ncat > ~/.config/anvil/config.yaml << 'EOF'\ndefault_org: \"your-org\"\napi_url: \"https://api.withsable.com\"\nEOF\n\n# 4. Set up shell completions (zsh)\necho 'source <(anvil completion zsh)' >> ~/.zshrc\nsource ~/.zshrc\n\n# 5. Verify\nanvil auth status\nanvil agent list\n```\n\n## Install\n\n### Option 1: Homebrew (recommended)\n\n```bash\nbrew install sable-inc/tap/anvil\n```\n\n### Option 2: Go Install\n\n```bash\ngo install github.com/sable-inc/anvil/cmd/anvil@latest\n```\n\nThis puts the `anvil` binary in `$GOPATH/bin` (usually `~/go/bin`). Make sure that's in your `$PATH`:\n\n```bash\n# Add to your shell profile if not already there\nexport PATH=\"$HOME/go/bin:$PATH\"\n```\n\n### Option 3: Download Binary (no Go required)\n\nDownload the latest release from [GitHub Releases](https://github.com/sable-inc/anvil/releases):\n\n**macOS (Apple Silicon):**\n```bash\ncurl -sL https://github.com/sable-inc/anvil/releases/latest/download/anvil_darwin_arm64.tar.gz | tar xz\nsudo mv anvil /usr/local/bin/\n```\n\n**macOS (Intel):**\n```bash\ncurl -sL https://github.com/sable-inc/anvil/releases/latest/download/anvil_darwin_amd64.tar.gz | tar xz\nsudo mv anvil /usr/local/bin/\n```\n\n**Linux (amd64):**\n```bash\ncurl -sL https://github.com/sable-inc/anvil/releases/latest/download/anvil_linux_amd64.tar.gz | tar xz\nsudo mv anvil /usr/local/bin/\n```\n\nOr download manually from the [Releases page](https://github.com/sable-inc/anvil/releases).\n\n### Option 4: Build from Source\n\n```bash\ngit clone https://github.com/sable-inc/anvil.git\ncd anvil\nmake build\nsudo mv bin/anvil /usr/local/bin/\n```\n\n### Verify Installation\n\n```bash\nanvil version\n# anvil v0.1.0 (commit: abc1234, built: 2026-02-14T..., darwin/arm64)\n```\n\n## Authentication\n\nAnvil authenticates with sable-api using a service token:\n\n```bash\n# Store your token (one-time)\nanvil auth login --token svc_your_token_here\n\n# Verify it works\nanvil auth whoami    # shows stored token info\nanvil auth status    # verifies API connectivity\n```\n\nCredentials are stored in `~/.config/anvil/credentials.json` (file permissions: `0600`).\n\nTo get a service token, ask your team admin or generate one in the Sable Platform dashboard.\n\n## Configuration\n\nCreate `~/.config/anvil/config.yaml`:\n\n```yaml\ndefault_org: \"my-org\"\napi_url: \"https://api.withsable.com\"\nformat: \"table\"\n```\n\nOverride any setting with flags:\n\n```bash\nanvil --org other-org --format json agent list\n```\n\n| Setting | Flag | Config Key | Description |\n|---------|------|-----------|-------------|\n| Organization | `--org` | `default_org` | Default org for all commands |\n| API URL | `--api-url` | `api_url` | Sable API base URL |\n| Output format | `--format` | `format` | `table`, `json`, or `yaml` |\n| No color | `--no-color` | — | Disable colored output |\n| Verbose | `--verbose` | — | Enable debug logging |\n\n## Shell Completions\n\nAnvil has dynamic tab completions that suggest real resource names from the live API.\n\n### Setup (one-time, permanent)\n\n**Zsh** (default on macOS):\n```bash\necho 'source <(anvil completion zsh)' >> ~/.zshrc\nsource ~/.zshrc\n```\n\n**Bash:**\n```bash\necho 'source <(anvil completion bash)' >> ~/.bashrc\nsource ~/.bashrc\n```\n\n**Fish:**\n```bash\nanvil completion fish > ~/.config/fish/completions/anvil.fish\n```\n\n**PowerShell:**\n```powershell\nanvil completion powershell >> $PROFILE\n```\n\n### What You Get\n\nAfter setup, press `TAB` anywhere:\n\n```\nanvil <TAB>                      # all subcommands\nanvil agent get <TAB>            # suggests agent slugs + IDs from API\nanvil journey delete <TAB>       # suggests journey slugs + IDs\nanvil kb sync <TAB>              # suggests KB item IDs with names\nanvil config pull <TAB>          # suggests config version IDs\nanvil connect <TAB>              # suggests agent slugs\nanvil --format <TAB>             # suggests table, json, yaml\n```\n\nCompletions fetch live data from the API using your stored token. If you're not authenticated, it gracefully shows no suggestions (no errors).\n\n### FAQ\n\n**Do I need to regenerate completions when anvil or my shell updates?**\nNo. The `source <(anvil completion ...)` pattern re-generates on every new shell session automatically. For Fish, re-run the file write command after updating anvil if new commands were added.\n\n## Commands\n\n### Agents\n\n```\nanvil agent list                     # List agents\nanvil agent get <id|slug>            # Get agent details\nanvil agent create --name \"My Agent\" # Create agent\nanvil agent update <id> --name \"New\" # Update agent\nanvil agent delete <id>              # Delete agent\n```\n\n### Journeys\n\n```\nanvil journey list                   # List journeys\nanvil journey get <id>               # Get journey with moments/transitions\nanvil journey create --name \"Flow\"   # Create journey\n```\n\n### Knowledge Base\n\n```\nanvil kb list                        # List knowledge base items\nanvil kb get <id>                    # Get item details\nanvil kb search \"query\"              # Semantic search\nanvil kb import-url <url>            # Import a URL\nanvil kb import-sitemap <url> --name \"Docs\"  # Import from sitemap\nanvil kb sync <id>                   # Sync item to vector store\nanvil kb sync-all                    # Sync all items\nanvil kb crawl <id>                  # Re-crawl a URL item\nanvil kb delete <id>                 # Delete item\nanvil kb job <jobId>                 # Check sitemap import job status\n```\n\n### Config-as-Code\n\n```\nanvil config list                    # List config versions\nanvil config get <id>                # Get config version details\nanvil config pull <id> -o config.yaml  # Download config as YAML\nanvil config push config.yaml        # Upload config from YAML\nanvil config validate config.yaml    # Validate config locally\nanvil config diff config.yaml --id <id>  # Diff local vs remote\n```\n\n### Analytics & Transcripts\n\n```\nanvil analytics sessions             # Session analytics\nanvil analytics stages               # Stage funnel analytics\nanvil transcript list                # List transcripts\nanvil transcript view <id>           # View transcript messages\n```\n\n### Deployments\n\n```\nanvil deploy history --org org_xxx            # List deployment history\nanvil deploy trigger --org org_xxx            # Trigger a deployment\nanvil deploy trigger --org org_xxx --watch    # Trigger and poll until complete\nanvil deploy rollback --org org_xxx           # Rollback deployment\nanvil deploy create --org org_xxx             # Create initial deployment\nanvil deploy delete --org org_xxx             # Delete deployment\nanvil deploy update-secrets --org org_xxx     # Update deployment secrets\nanvil deploy pin-forge --org org_xxx --forge-version v1.0  # Pin forge version\n```\n\n### LiveKit\n\n```\n# Sessions\nanvil livekit sessions list --org org_xxx     # List active rooms\nanvil livekit sessions get <room> --org org_xxx\nanvil livekit sessions close <room> --org org_xxx\n\n# Agent management\nanvil livekit agent list --org org_xxx        # List agents\nanvil livekit agent status --org org_xxx      # Agent status\nanvil livekit agent versions --org org_xxx    # Agent versions\nanvil livekit agent logs --org org_xxx        # Agent logs\nanvil livekit agent restart --org org_xxx     # Restart agent\nanvil livekit agent delete --org org_xxx      # Delete agent\n\n# Agent secrets\nanvil livekit agent secrets list --org org_xxx\nanvil livekit agent secrets set --org org_xxx --secret KEY=VALUE\nanvil livekit agent secrets delete <name> --org org_xxx\n```\n\n### Forge (Version Management)\n\n```\nanvil forge versions                  # List forge versions\nanvil forge branches                  # List forge branches\nanvil forge commits main              # List commits on branch\nanvil forge validate main             # Validate a git ref\n```\n\n### Video Processing\n\n```\nanvil video generate-moment --video-url <url>         # Start moment generation\nanvil video generate-moment --video-url <url> --watch  # Generate and poll\nanvil video generate-journey --video-url <url>         # Start journey generation\nanvil video job-status <jobId>                         # Check job status\n```\n\n### Utilities\n\n```\nanvil health                         # API health check\nanvil health --db                    # Include database health\nanvil connect <agent-slug>           # Get LiveKit connection details\nanvil api GET /agents                # Raw API request\nanvil api POST /agents -d '{\"name\":\"test\"}'\nanvil version                        # Print version info\n```\n\n## Config-as-Code Workflow\n\nPull a config, edit locally, validate, and push:\n\n```bash\n# Pull the current config\nanvil config pull <config-id> -o agent.yaml\n\n# Edit the YAML file\n$EDITOR agent.yaml\n\n# Validate locally (no API call needed)\nanvil config validate agent.yaml\n\n# See what changed\nanvil config diff agent.yaml --id <config-id>\n\n# Push the updated config\nanvil config push agent.yaml\n```\n\n## MCP Server (for AI Assistants)\n\nAnvil includes an MCP server (28 Sable tools + 5 HyperDX observability tools) for AI coding assistants like Claude Code, Cursor, Windsurf, etc.\n\n### One-Time Setup\n\n```bash\nanvil auth login --token svc_your_token     # Sable API credentials\nanvil settings set-hyperdx hdx_your_key     # HyperDX API key (optional)\n```\n\n### Add to Cursor\n\nPaste this in your browser to install with one click:\n\n```\ncursor://anysphere.cursor-deeplink/mcp/install?name=sable&config=eyJjb21tYW5kIjoiYW52aWwiLCJhcmdzIjpbIm1jcCIsInNlcnZlIl19\n```\n\nOr add manually to `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"sable\": {\n      \"command\": \"anvil\",\n      \"args\": [\"mcp\", \"serve\"]\n    }\n  }\n}\n```\n\n### Add to Claude Code\n\n```bash\nclaude mcp add sable -s user -- anvil mcp serve\n```\n\nNo secrets in the config -- anvil reads credentials from `~/.config/anvil/`.\n\n### Other Editors (Windsurf, etc.)\n\nAdd the same JSON config to your editor's MCP settings file.\n\n### Sable Tools (28)\n\n| Domain | Tools |\n|--------|-------|\n| Agents | `list_agents`, `get_agent`, `create_agent`, `update_agent`, `delete_agent` |\n| Journeys | `list_journeys`, `get_journey`, `create_journey`, `update_journey`, `delete_journey` |\n| Knowledge Base | `list_knowledge_base`, `get_knowledge_base_item`, `search_knowledge_base`, `import_knowledge_base_url`, `delete_knowledge_base_item`, `sync_knowledge_base_item` |\n| Config | `list_configs`, `get_config` |\n| Deployments | `get_deploy_history`, `trigger_deploy`, `rollback_deploy` |\n| Transcripts | `list_transcripts`, `get_transcript` |\n| Analytics | `get_session_analytics`, `get_stage_analytics` |\n| Utilities | `check_health`, `get_connection_details`, `raw_api_request` |\n\n### HyperDX Observability Tools (5, optional)\n\nEnabled when `anvil settings set-hyperdx <key>` has been run or `HYPERDX_API_KEY` env var is set.\n\n| Tool | Purpose |\n|------|---------|\n| `hdx_search_events` | Query logs/spans with aggregations, time ranges, filters, group-by |\n| `hdx_query_metrics` | Query metrics (Sum, Gauge, Histogram) |\n| `hdx_list_dashboards` | List HyperDX dashboards |\n| `hdx_get_dashboard` | Get dashboard with chart definitions |\n| `hdx_list_alerts` | List configured alerts |\n\n## Releasing New Versions\n\nAnvil uses [goreleaser](https://goreleaser.com/) with GitHub Actions for automated releases.\n\n### Creating a Release\n\n```bash\ngit tag v0.1.0\ngit push origin v0.1.0\n```\n\nGitHub Actions will automatically:\n1. Build binaries for Linux, macOS, and Windows (amd64 + arm64)\n2. Create a GitHub Release with downloadable archives\n3. Generate checksums and a changelog\n4. Publish to the Homebrew tap (`sable-inc/homebrew-tap`)\n5. Publish to the MCP Registry (discoverable in Claude Code / Cursor)\n\nTeam members can then upgrade via:\n```bash\n# Homebrew\nbrew upgrade anvil\n\n# Go install\ngo install github.com/sable-inc/anvil/cmd/anvil@latest\n```\n\n### Snapshot Build (local testing)\n\n```bash\ngoreleaser --snapshot --clean\nls dist/\n```\n\n## Development\n\n```bash\nmake build     # Build binary\nmake test      # Run tests with race detector\nmake lint      # Run golangci-lint v2\nmake check     # Build + test + lint\nmake install   # Install to $GOPATH/bin\nmake generate  # Generate API client from OpenAPI spec\nmake clean     # Remove build artifacts\n```\n\nRequires:\n- Go 1.26+\n- golangci-lint v2 (for `make lint`)\n- Running sable-api instance (for `make generate`)\n\n## CI/CD\n\nGitHub Actions runs automatically:\n- **CI** (`.github/workflows/ci.yml`): build + test + lint on every push and PR\n- **Release** (`.github/workflows/release.yml`): goreleaser on version tags (`v*`)\n",
  "bytes": 12718,
  "sha": "57b857612bcda308130e31632f392423ca27d7b4315e0977b1ad480afad2f78f",
  "repo_slug": "sable-inc/anvil",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sable_inc_anvil_75f3f1cb/readme"
}