omni-api-keys — скилл для Claude Code: ключи Anthropic
Скилл управляет ключами Anthropic через API: создаёт, перечисляет, отзывает и меняет права. Пригодится, когда ключи нужно выдавать и ограничивать из агента.
npx skills add cheaper-inference/OmniRoute --skill omni-api-keys -a claude-codeЧто делает omni-api-keys
Скилл закрывает работу с ключами Anthropic: создать, посмотреть список, обновить, отозвать, перегенерировать. Ещё он умеет выдавать ключу доступ к конкретным моделям и комбо и смотреть, какие устройства этим ключом пользовались.
Внутри — набор вызовов к локальному API на http://localhost:20128. Например, список ключей берётся через GET /api/keys, создание — через POST /api/keys, а права на модели меняются атомарно через POST /api/keys/{id}/access. Отдельная ветка эндпоинтов отвечает за группы ключей и их разрешения.
Перед первым запросом нужен Bearer-токен: его получают через POST /api/auth/login, либо для локальной разработки выставляют REQUIRE_API_KEY=false. Если ключ разрешает все модели или все комбо, добавление новых через /access потребует switchToRestricted: true, иначе вернётся 409 Conflict. А параллельные PATCH /api/keys/{id} перезаписывают политику целиком в обход блокировки — это стоит держать в голове, если ключи правит не только агент.
Какие задачи решает
- выпустить ключ для нового сервиса и сразу ограничить его моделями
- посмотреть, какие ключи сейчас активны
- отозвать ключ, который утёк
- перегенерировать ключ без потери настроек
- собрать ключи в группу с общими разрешениями
Примеры запросов агенту
- Покажи список ключей Anthropic
- Создай новый ключ и разреши ему только модель gpt-4o
- Отзови ключ с id
abc123
Как установить omni-api-keys
1Через Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-api-keys -a claude-code2Вручную: положить файлы
~/.claude/skills/omni-api-keys/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/omni-api-keys/
1Через Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-api-keys -a codex2Вручную: положить файлы
.agents/skills/omni-api-keys/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-api-keys -a cursor2Вручную: положить файлы
.cursor/skills/omni-api-keys/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install cheaper-inference/OmniRoute omni-api-keys2Вручную: положить файлы
.github/skills/omni-api-keys/SKILL.md1Через Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-api-keys -a gemini-cli2Командой платформы
gemini skills install https://github.com/cheaper-inference/OmniRoute --path skills/omni-api-keysВручную: положить файлы
.devin/skills/omni-api-keys/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add cheaper-inference/OmniRoute --skill omni-api-keys -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о omni-api-keys
Как установить omni-api-keys в Claude Code?
Выполните npx skills add cheaper-inference/OmniRoute --skill omni-api-keys -a claude-code, после чего скилл окажется в ~/.claude/skills/omni-api-keys/SKILL.md.
Что делает omni-api-keys?
Создаёт, перечисляет, обновляет, перегенерирует и отзывает ключи Anthropic, а также управляет их правами на модели, лимитами и сроком действия.
Что нужно, чтобы скилл заработал?
Bearer-токен, полученный через POST /api/auth/login, либо REQUIRE_API_KEY=false для локальной разработки. Запросы идут на http://localhost:20128.
Исходный текст
SKILL.md · MIT
---
name: omni-api-keys
description: Create, list, rotate, and revoke OmniRoute API keys. Control per-key scopes, spending limits, and expiration. Keys gate access to all proxy and management endpoints.
---
<!-- generated by src/lib/agentSkills/generator.ts; manual edits will be overwritten -->
## Overview
Create, list, rotate, and revoke OmniRoute API keys. Control per-key scopes, spending limits, and expiration. Keys gate access to all proxy and management endpoints.
## Authentication
All requests require a valid Bearer token or session cookie. Obtain a token via `POST /api/auth/login` or configure `REQUIRE_API_KEY=false` for local development.
## Endpoints
### GET /api/keys
List API keys
```bash
curl http://localhost:20128/api/keys \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### POST /api/keys
Create API key
```bash
curl -X POST http://localhost:20128/api/keys \
-H "Authorization: Bearer $OMNIROUTE_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### GET /api/keys/{id}
Get API key
```bash
curl http://localhost:20128/api/keys/{id} \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### PATCH /api/keys/{id}
Update API key
```bash
curl -X PATCH http://localhost:20128/api/keys/{id} \
-H "Authorization: Bearer $OMNIROUTE_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### DELETE /api/keys/{id}
Delete API key
```bash
curl -X DELETE http://localhost:20128/api/keys/{id} \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### POST /api/keys/{id}/access
Add or remove allowed models and combos on an API key atomically
Adds or removes allowed models and combos on an API key without lost updates.
Serialized per key ID using an in-process async lock.
Keys allowing all models (modelAccessMode: all) or all combos (allowedCombos containing 'combo/*')
require switchToRestricted: true when adding new models or combos, otherwise returning a 409 Conflict.
When switching to restricted mode, the allowlist becomes exactly the net added items (at least one required).
Direct concurrent PATCH calls to /api/keys/{id} completely overwrite the policy outside this lock.
```bash
curl -X POST http://localhost:20128/api/keys/{id}/access \
-H "Authorization: Bearer $OMNIROUTE_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### GET /api/keys/{id}/devices
List devices for an API key
Lists the distinct devices (masked IP + User-Agent fingerprints) tracked for an API key by the in-memory device tracker. IPs are masked before storage; the route never sees the raw client IP.
```bash
curl http://localhost:20128/api/keys/{id}/devices \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### POST /api/keys/{id}/regenerate
POST keys › <id> › regenerate
```bash
curl -X POST http://localhost:20128/api/keys/{id}/regenerate \
-H "Authorization: Bearer $OMNIROUTE_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### GET /api/keys/{id}/reveal
GET keys › <id> › reveal
```bash
curl http://localhost:20128/api/keys/{id}/reveal \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### GET /api/keys/{id}/usage-limits
GET keys › <id> › usage limits
```bash
curl http://localhost:20128/api/keys/{id}/usage-limits \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### GET /api/keys/groups
GET keys › groups
```bash
curl http://localhost:20128/api/keys/groups \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### POST /api/keys/groups
POST keys › groups
```bash
curl -X POST http://localhost:20128/api/keys/groups \
-H "Authorization: Bearer $OMNIROUTE_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### GET /api/keys/groups/{id}
GET keys › groups › <id>
```bash
curl http://localhost:20128/api/keys/groups/{id} \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### PUT /api/keys/groups/{id}
PUT keys › groups › <id>
Updates the group. Setting isActive to false pauses its allow rules while preserving membership restrictions and deny rules. Other active groups may still grant access unless a deny matches. Keys belonging only to inactive groups have no group grants. Keys without groups remain unrestricted by group policy; per-key restrictions still apply.
```bash
curl -X PUT http://localhost:20128/api/keys/groups/{id} \
-H "Authorization: Bearer $OMNIROUTE_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### DELETE /api/keys/groups/{id}
DELETE keys › groups › <id>
```bash
curl -X DELETE http://localhost:20128/api/keys/groups/{id} \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### GET /api/keys/groups/{id}/keys
GET keys › groups › <id> › keys
```bash
curl http://localhost:20128/api/keys/groups/{id}/keys \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### POST /api/keys/groups/{id}/keys
POST keys › groups › <id> › keys
```bash
curl -X POST http://localhost:20128/api/keys/groups/{id}/keys \
-H "Authorization: Bearer $OMNIROUTE_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### DELETE /api/keys/groups/{id}/keys
DELETE keys › groups › <id> › keys
```bash
curl -X DELETE http://localhost:20128/api/keys/groups/{id}/keys \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### GET /api/keys/groups/{id}/permissions
GET keys › groups › <id> › permissions
```bash
curl http://localhost:20128/api/keys/groups/{id}/permissions \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
### POST /api/keys/groups/{id}/permissions
POST keys › groups › <id> › permissions
```bash
curl -X POST http://localhost:20128/api/keys/groups/{id}/permissions \
-H "Authorization: Bearer $OMNIROUTE_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
### DELETE /api/keys/groups/{id}/permissions
DELETE keys › groups › <id> › permissions
```bash
curl -X DELETE http://localhost:20128/api/keys/groups/{id}/permissions \
-H "Authorization: Bearer $OMNIROUTE_TOKEN"
```
## Payloads
See the full OpenAPI specification at `GET /api/openapi/spec` or `docs/openapi.yaml` for detailed request/response schemas.
© cheaper-inference · MIT · cheaper-inference/OmniRoute