{"id":51080433,"url":"https://github.com/webmavens/claude-forge","last_synced_at":"2026-06-23T17:03:47.497Z","repository":{"id":363497111,"uuid":"1263584877","full_name":"webmavens/claude-forge","owner":"webmavens","description":"Drive Laravel Forge from Claude Code — servers, sites, deploys, databases, SSL, daemons, jobs, env. Bring your own API token.","archived":false,"fork":false,"pushed_at":"2026-06-09T06:32:40.000Z","size":843,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T07:27:02.352Z","etag":null,"topics":["ai-agent","anthropic","claude","claude-code","cli","deployment","devops","laravel","laravel-forge"],"latest_commit_sha":null,"homepage":"https://github.com/webmavens/claude-forge","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/webmavens.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-09T04:54:48.000Z","updated_at":"2026-06-09T06:32:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/webmavens/claude-forge","commit_stats":null,"previous_names":["webmavens/claude-forge"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/webmavens/claude-forge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webmavens%2Fclaude-forge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webmavens%2Fclaude-forge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webmavens%2Fclaude-forge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webmavens%2Fclaude-forge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/webmavens","download_url":"https://codeload.github.com/webmavens/claude-forge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webmavens%2Fclaude-forge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34698946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agent","anthropic","claude","claude-code","cli","deployment","devops","laravel","laravel-forge"],"created_at":"2026-06-23T17:03:45.362Z","updated_at":"2026-06-23T17:03:47.492Z","avatar_url":"https://github.com/webmavens.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# claude-forge\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-plugin-7c3aed.svg)](https://docs.anthropic.com/en/docs/claude-code)\n[![Python](https://img.shields.io/badge/python-3.8%2B-3776ab.svg)](https://www.python.org/)\n[![Dependencies](https://img.shields.io/badge/dependencies-none-brightgreen.svg)](#how-it-works)\n\nDrive [Laravel Forge](https://forge.laravel.com) from **Claude Code** — manage servers, sites,\ndeployments, databases, SSL, daemons, scheduled jobs, and env files in plain English. You bring\nyour own Forge API token; everything runs locally against the official Forge API.\n\n```\nYou:  /forge deploy my-app\n       ↳ Claude resolves the server + site, shows a dry-run, you confirm, it deploys,\n         then tails the deploy log.\n```\n\n## Demo\n\n![claude-forge demo](docs/demo.gif)\n\n\u003e Recorded against a local mock — **all data shown is fictional**. Reproduce it yourself with\n\u003e the harness in [`demo/`](./demo).\n\n\u003e **Heads up:** this tool acts on **your real Forge infrastructure**. Every mutating action\n\u003e (deploy, reboot, create, env changes…) is gated behind an explicit confirmation, but you are\n\u003e responsible for what you approve. Use a scoped API token.\n\n---\n\n## Install\n\n### Option A — Claude Code plugin (recommended)\n\n```\n/plugin marketplace add webmavens/claude-forge\n/plugin install forge@claude-forge\n```\n\nThat's it — the `/forge` skill is now available and updates with the marketplace.\n\n### Option B — one-line installer (no plugin system)\n\n```\ncurl -fsSL https://raw.githubusercontent.com/webmavens/claude-forge/main/install.sh | bash\n```\n\nThis copies the skill into `~/.claude/skills/forge`. Requires `python3` and `curl` (both ship on\nmacOS and most Linux). No third-party Python packages — standard library only.\n\n---\n\n## Connect your Forge account (one time)\n\n1. Create a token at **forge.laravel.com → Account → API → Create API Token**.\n   Scope it to what you need (e.g. read-only, or specific server permissions).\n2. Authenticate. Run this in a **real terminal** (the prompt hides the token):\n\n   ```\n   python3 ~/.claude/skills/forge/forge.py auth\n   ```\n\n   Alternatives:\n   - inline: `python3 .../forge.py auth \u003cYOUR_TOKEN\u003e`\n   - env var: `export FORGE_API_TOKEN=\u003cYOUR_TOKEN\u003e` (skips the saved file entirely)\n\n   \u003e For a plugin install, the path is the plugin's skill directory — Claude knows it; just say\n   \u003e \"authenticate to Forge\" and follow the prompt.\n\nThe token is validated against `GET /user`, then stored at `~/.claude/forge/credentials`\n(`chmod 600`). `auth --status` shows who you are; `logout` deletes it.\n\n---\n\n## Usage\n\nTalk to Claude naturally, or call the helper directly:\n\n```\npython3 ~/.claude/skills/forge/forge.py servers list\npython3 ~/.claude/skills/forge/forge.py sites list \u003cserver\u003e\npython3 ~/.claude/skills/forge/forge.py deploy run \u003cserver\u003e \u003csite\u003e --yes\npython3 ~/.claude/skills/forge/forge.py db create \u003cserver\u003e --name myapp --yes\npython3 ~/.claude/skills/forge/forge.py api GET /servers/\u003cid\u003e/sites/\u003csite\u003e/deployment-history\n```\n\n| Group | Actions |\n|-------|---------|\n| `servers` | `list`, `get`, `reboot` |\n| `sites` | `list`, `get`, `create` |\n| `deploy` | `run`, `log`, `script [--set]`, `quick-deploy on\\|off` |\n| `db` | `list`, `create` |\n| `db-user` | `list`, `create` |\n| `ssl` | `list`, `letsencrypt` |\n| `daemon` | `list`, `create` |\n| `job` | `list`, `create` (scheduler) |\n| `env` | `get`, `set` |\n| `api` | raw passthrough to any Forge endpoint |\n\nAdd `--json` to any read command for machine-readable output.\n\n### Safety model\n\n- **Reads** (`list`/`get`/`log`) run freely.\n- **Mutations** (`deploy`, `reboot`, `create`, `env set`, …) refuse to act without `--yes`.\n  Without it they print a `WOULD: …` dry-run and exit `2`, so Claude can confirm with you first.\n\n### Rate limits\n\nForge sits behind Cloudflare (Error 1015). The helper automatically respects `Retry-After`\nwith exponential backoff. Account-wide sweeps (every site on every server) make many calls and\nare paced — expect a couple of minutes on large accounts.\n\n---\n\n## What it can't do\n\nForge's API runs commands (site commands, recipes) but **does not return their stdout**, and\nexposes no live disk/CPU metrics. So things like \"actual disk usage per server\" aren't available\nthrough the API — use the Monitoring tab in Forge, server monitors\n(`api GET /servers/\u003cid\u003e/monitors`), or SSH (`ssh forge@\u003cip\u003e df -h`).\n\n---\n\n## How it works\n\nA single self-contained Python script (`forge.py`, standard library only) wraps the Forge REST\nAPI: auth + token storage, friendly error mapping (401/404/422), Cloudflare-aware retries, a\nhuman-readable table renderer, and a `--yes` gate on mutations. The `SKILL.md` teaches Claude\nCode when and how to call it. The clean `api()` seam makes it straightforward to lift into a\nstandalone MCP server later.\n\n## Contributing\n\nIssues and PRs welcome. The whole thing is two files under `forge/skills/forge/`. Keep API logic\nin `forge.py`; keep guidance in `SKILL.md`.\n\n## License\n\n[MIT](./LICENSE) © 2026 Webmavens\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebmavens%2Fclaude-forge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwebmavens%2Fclaude-forge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebmavens%2Fclaude-forge/lists"}