{"id":48795083,"url":"https://github.com/sozercan/vekil","last_synced_at":"2026-05-31T03:03:26.570Z","repository":{"id":351169052,"uuid":"1155880776","full_name":"sozercan/vekil","owner":"sozercan","description":"🧑‍💼 Go reverse proxy exposing Anthropic, Gemini, and OpenAI APIs over GitHub Copilot, Azure OpenAI, and OpenAI Codex.","archived":false,"fork":false,"pushed_at":"2026-04-27T01:04:28.000Z","size":1576,"stargazers_count":8,"open_issues_count":8,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-27T01:25:47.793Z","etag":null,"topics":["anthropic","anthropic-api","azure-foundry","azure-openai","codex","copilot","copilot-api","github-copilot","openai","openai-api","openai-codex","proxy"],"latest_commit_sha":null,"homepage":"","language":"Go","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/sozercan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-12T02:22:25.000Z","updated_at":"2026-04-26T20:25:06.000Z","dependencies_parsed_at":"2026-04-13T23:02:02.753Z","dependency_job_id":null,"html_url":"https://github.com/sozercan/vekil","commit_stats":null,"previous_names":["sozercan/vekil"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/sozercan/vekil","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sozercan%2Fvekil","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sozercan%2Fvekil/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sozercan%2Fvekil/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sozercan%2Fvekil/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sozercan","download_url":"https://codeload.github.com/sozercan/vekil/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sozercan%2Fvekil/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32631060,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["anthropic","anthropic-api","azure-foundry","azure-openai","codex","copilot","copilot-api","github-copilot","openai","openai-api","openai-codex","proxy"],"created_at":"2026-04-13T23:00:18.047Z","updated_at":"2026-05-31T03:03:26.563Z","avatar_url":"https://github.com/sozercan.png","language":"Go","funding_links":[],"categories":["Productivity Tools"],"sub_categories":["API \u0026 Integration Tools"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/macos/Vekil.png\" alt=\"Vekil\" width=\"128\" height=\"128\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003evekil\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eOne local endpoint for Anthropic, Gemini, and OpenAI clients — backed by the provider of your choice.\u003c/em\u003e\n\u003c/p\u003e\n\n---\n\nVekil is a Go reverse proxy that exposes Anthropic, Gemini, and OpenAI-compatible APIs behind one local endpoint. Run it in zero-config mode against GitHub Copilot, or route selected models to providers like Azure OpenAI, OpenAI Codex, and generic OpenAI-compatible or Anthropic-compatible upstreams. The client-facing API surface stays the same while model ownership is configured behind the proxy.\n\n## Why Vekil?\n\nUse your GitHub Copilot subscription with Claude Code, point the Codex CLI at Azure OpenAI, or send Gemini-CLI traffic through any OpenAI-compatible upstream — all without touching client config. Swap providers behind the proxy; your tools never notice.\n\n## Features\n\n- **Anthropic Messages API** — drop-in compatible with Claude clients\n- **Gemini API** — Generate Content, Stream Generate Content, and Count Tokens\n- **OpenAI Chat Completions** and **Responses** APIs, including optional Codex websocket bridging\n- **Multi-provider routing** across GitHub Copilot, Azure OpenAI, OpenAI Codex, and generic compatible providers\n- **Optional tool optimizers** for opt-in shell command rewrites and tool-output reduction across supported API surfaces; see [Tool Optimizers](docs/tool-optimizers.md)\n- **Codex compatibility shims** for compaction and memory summarization\n- **Streaming**, tool use, parallel tool calls, compressed request bodies, and auth/token caching\n\n## Quick Start\n\nGrab a binary from [GitHub Releases](https://github.com/sozercan/vekil/releases/latest), or run the container from GHCR:\n\n```bash\ndocker run -p 1337:1337 \\\n  -v ~/.config/vekil:/home/nonroot/.config/vekil \\\n  ghcr.io/sozercan/vekil:latest\n```\n\nOn Apple Silicon Macs, install the native tray app via Homebrew:\n\n```bash\nbrew install --cask sozercan/repo/vekil\n```\n\n\u003e The app is not signed. Clear quarantine with `xattr -cr /Applications/Vekil.app`. Manual `vekil-macos-arm64.zip` downloads are also on [Releases](https://github.com/sozercan/vekil/releases/latest). See [Tray App (macOS/Linux)](docs/menubar.md).\n\nFor explicit provider routing, start the proxy with `--providers-config /path/to/providers.{json,yaml}`.\n\n**First-run auth** depends on your providers:\n\n- **Copilot** — `vekil login` uses Vekil-managed GitHub device-code sign-in; first proxy startup starts the same flow when needed. To use your current GitHub CLI account instead, opt in with `vekil login --github-cli` (or `--gh`). `vekil logout` clears cached auth and disables future silent `gh` reuse until you opt in again. `COPILOT_GITHUB_TOKEN` remains the explicit non-interactive override.\n- **Azure OpenAI and generic hosted providers** — use `api_key` or `api_key_env` in your provider config.\n- **OpenAI Codex** — requires `codex login` so `~/.codex/auth.json` exists. In Docker, mount your Codex home into `CODEX_HOME` (default `/home/nonroot/.codex`).\n- **Local generic providers** — use `auth_type: none`.\n\nFor full setup details, see [Getting Started](docs/getting-started.md), [Configuration](docs/configuration.md), and [Provider Routing](docs/provider-routing.md).\n\n## Docs\n\nDocumentation lives under [`docs/`](docs/README.md); start with these:\n\n|                                                              |                                     |\n| ------------------------------------------------------------ | ----------------------------------- |\n| [Getting Started](docs/getting-started.md)                   | Install, run, first auth            |\n| [Configuration](docs/configuration.md)                       | Config map and generic flags        |\n| [Provider Routing](docs/provider-routing.md)                 | Provider auth and model ownership   |\n| [Provider API Keys](docs/provider-api-keys.md)               | Where to get provider keys          |\n| [Tool Optimizers](docs/tool-optimizers.md)                   | Shell rewrite/output reduction      |\n| [Responses WebSocket](docs/responses-websocket.md)           | Websocket bridge tuning             |\n| [Client Examples](docs/clients.md)                           | Copy-paste snippets per client      |\n| [API Reference](docs/api.md)                                 | Endpoint behavior and compatibility |\n| [Architecture](docs/architecture.md)                         | Package layout and design notes     |\n| [Tray App](docs/menubar.md)                                  | macOS/Linux menubar usage           |\n| [Development](docs/development.md)                           | Build, test, benchmarks, CI         |\n\n## Client Examples\n\nUse any public model ID exposed by `/v1/models` — your client config is the same regardless of which provider owns the model upstream.\n\n### Claude Code\n\n```bash\nenv ANTHROPIC_BASE_URL=http://localhost:1337 \\\n  ANTHROPIC_API_KEY=dummy \\\n  claude --model claude-sonnet-4 --print --output-format text \"Reply with exactly PROXY_OK\"\n```\n\n### OpenAI Codex CLI\n\n```bash\nenv OPENAI_API_KEY=dummy \\\n  OPENAI_BASE_URL=http://localhost:1337/v1 \\\n  codex exec --skip-git-repo-check -m gpt-5.5 \"Reply with exactly PROXY_OK\"\n```\n\n### GitHub Copilot CLI\n\n```bash\nenv COPILOT_PROVIDER_BASE_URL=http://localhost:1337/v1 \\\n  COPILOT_PROVIDER_TYPE=openai \\\n  COPILOT_PROVIDER_WIRE_API=responses \\\n  COPILOT_MODEL=gpt-5.5 \\\n  COPILOT_OFFLINE=true \\\n  copilot -p \"Reply with exactly PROXY_OK\" -s\n```\n\n### Gemini CLI\n\n```bash\nenv GEMINI_API_KEY=dummy \\\n  GOOGLE_GEMINI_BASE_URL=http://localhost:1337 \\\n  GOOGLE_GENAI_API_VERSION=v1beta \\\n  GEMINI_CLI_NO_RELAUNCH=true \\\n  gemini -m gemini-2.5-pro -p \"Reply with exactly PROXY_OK\" -o json\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsozercan%2Fvekil","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsozercan%2Fvekil","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsozercan%2Fvekil/lists"}