AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기HiveGate — open-source production runtime for AI agents: REST API, multi-agent teams, OAuth integrations. Built on Agno. (formerly Agents Gateway)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Run your Agno agents as a production API. HiveGate is an open-source FastAPI service built on Agno 3. You write the agent, and HiveGate gives it what production needs: • per-user sessions • OAuth tokens for Google and Microsoft • human approval for risky tool calls • multi-agent teams with a supervisor • versioned prompts • tracing See the Quickstart for the full steps. Or deploy the prebuilt image in one click: HiveGate is not a request-routing API gateway like Kong. It runs AI agents and exposes them over a REST API. [README 설치·사용 부분 발췌] QuickstartREADME 전문 보기 ↗
Run your Agno agents as a production API.
HiveGate is an open-source FastAPI service built on Agno 3. You write the agent, and HiveGate gives it what production needs:
Website · Docs · Deploy guide · Discussions · Roadmap
git clone https://github.com/hivegate-ai/hivegate && cd hivegate
cp .env.example .env # then set GOOGLE_API_KEY and uncomment AUTH_DISABLED=true
docker compose up -d # Postgres + Qdrant, seeds demo agents
./scripts/dev_setup.sh && source .venv/bin/activate && ./scripts/start_server.sh
See the Quickstart for the full steps.
Or deploy the prebuilt image in one click:
HiveGate is not a request-routing API gateway like Kong. It runs AI agents and exposes them over a REST API.
Agno gives you the agent itself: model calls, tools, memory and teams. Its own AgentOS can also serve agents over HTTP, with sessions, human approval, RBAC and tracing. If your agents are defined in code and AgentOS covers what you need, use AgentOS.
HiveGate is for when your agents act for your users, in their own accounts, and are managed as data rather than code:
/usage APIPrerequisites: Docker Desktop installed and running, Python 3.11+.
git clone https://github.com/hivegate-ai/hivegate
cd hivegate
cp .env.example .env
Edit .env before starting the server. The server reads it once at startup, so a key exported in another terminal won't reach it.
GOOGLE_API_KEY. OPENAI_API_KEY, ANTHROPIC_API_KEY, XAI_API_KEY, ZAI_API_KEY and DEEPSEEK_API_KEY also work.AUTH_DISABLED=true so you can call the API without creating an API key first. Never enable it on a deployment other people can reach.The database settings in .env.example already match the Postgres that Docker Compose starts.
# Start PostgreSQL + Qdrant (seeds demo agents automatically)
docker compose up -d
# Set up the Python environment
./scripts/dev_setup.sh && source .venv/bin/activate
# Start the API server
./scripts/start_server.sh
# API docs (interactive)
open http://localhost:8000/docs
# List demo agents (works without an API key because of AUTH_DISABLED=true)
curl http://localhost:8000/v2/agents
# Get a specific agent
curl http://localhost:8000/v2/agents/demo-assistant
curl -X POST http://localhost:8000/v2/agents/demo-assistant/chat \
-H "Content-Type: application/json" \
-d '{
"message": "What can you help me with?",
"user_id": "user1",
"session_id": "session1",
"timezone": "UTC",
"locale": "en",
"stream": false
}'
If the reply mentions an invalid API key, check the model key in .env and restart the server. To pick a different model, see Choosing a model.
docker compose down # Keep data
docker compose down -v # Reset everything
hivegate/
├── agents/ # Model factory, model aliases, pricing
├── api/ # FastAPI application
│ ├── routes/v2/ # V2 API endpoints (agents, teams, knowledge, tokens,
│ │ # prompts, skills, approvals, engines, targets)
│ ├── services/ # Shared services (auth, logging, knowledge)
│ └── observability/ # Tracing and logging providers
├── supervisor/ # Supervisor/worker orchestration
│ ├── queue/ # Job queue (producer, consumer, CRUD)
│ ├── pack/ # Agent pack loader/exporter
│ └── plugins/ # Plugin generator
├── remote_agent/ # Containerized worker runner (Docker & K8s runtimes)
├── prompts/ # Prompts service (parser, service, storage backends)
├── toolkits/ # Agno agent toolkits (Calendar, Email, Contacts,
│ # Drive, Claude Code, managed agents)
├── workspace_suite/ # Vendor-agnostic workspace integrations (Google, Microsoft)
├── evals/ # Agent evaluation framework
├── db/ # Database models and migrations
├── deploy/ # Deployment manifests (aws, azure, gcp, generic)
└── scripts/ # Development and deployment scripts
All endpoints are documented at /docs. Key endpoints:
| Resource | Endpoint | Description |
|---|---|---|
| Agents | GET/POST /v2/agents | List and create agents |
| Agent Chat | POST /v2/agents/{id}/chat | Chat with an agent |
| Teams | GET/POST /v2/teams | List and create teams |
| Team Run | POST /v2/teams/{id}/runs | Execute a team |
| Knowledge | GET/POST /v2/knowledge/{tenant_id} | Manage knowledge entries |
| Tokens | GET/POST /v2/users/{user_id}/tokens | Manage OAuth tokens |
| Prompts | GET/POST /v2/prompts | Manage prompt templates |
| Skills | GET/POST /v2/skills | Manage reusable skill definitions |
| Engines | GET/POST /v2/engines | Manage supervisor execution engines |
| Targets | GET/POST /v2/targets | Manage supervisor run targets |
| Approvals | GET/POST /v2/approvals | Review and decide on pending job approvals |
| Usage | GET /usage/{live,summary,timeseries,calls,prices} | Token usage and cost per agent, model and time bucket |
V2 API (/v2/*): API key via X-API-Key header
curl -H "X-API-Key: agw_xxxxx" http://localhost:8000/v2/agents
Admin API (/admin/*): Admin secret via X-Admin-Secret header
curl -H "X-Admin-Secret: your-secret" http://localhost:8000/admin/api-keys
Usage API (/usage/*): an API key with the usage:read scope, or the admin secret.
A key whose only scope is usage:read is refused on /v2, so a usage dashboard's key can't call agents.
Development: Set AUTH_DISABLED=true to bypass authentication.
A chat request may name a model; otherwise the gateway uses DEFAULT_CHAT_MODEL
(env), else gemini-3-flash-preview. Besides pinned ids (claude-sonnet-4-6,
gpt-5.4, ...), model accepts a latest-of-a-tier alias that follows the vendor's
newest model in that tier without a code change, and never moves to a pricier tier:
| Vendor | Aliases |
|---|---|
| Anthropic | anthropic:haiku-latest, anthropic:sonnet-latest, anthropic:opus-latest |
| OpenAI | openai:luna-latest, openai:terra-latest, openai:sol-latest, openai:astra-latest |
google:flash-lite-latest, google:flash-latest, google:pro-latest | |
| xAI | xai:grok-latest |
Z.ai GLM models (glm-5.3, glm-5.3-flashx, glm-5.3-flash, glm-5.2) are pinned ids only - Z.ai
documents no model-listing endpoint to resolve an alias against. DeepSeek has two:
deepseek-flash (itself a moving name, now V4.1-Flash) and deepseek-v4-pro. OpenAI models run
on the Responses API: GPT-6 calls tools on Chat Completions only with reasoning off.
The gateway resolves an alias by listing the vendor's models through its SDK and
taking the newest one in the tier (agents/model_resolver.py), caches the answer
for a day, and falls back to a known model for the tier if the vendor can't be
asked. The resolution is logged (Model alias anthropic:sonnet-latest -> ...).
For example, DEFAULT_CHAT_MODEL=anthropic:sonnet-latest.
Claude models run with prompt caching on: the tools and system prompt are cached once per agent, and the growing conversation is cached between round trips. Cached input bills at 0.1x the input price (cache writes at 1.25x, 5-minute TTL).
Every chat, commit, MCP and team run - streamed or not, including failed, refused and
abandoned ones - writes a row to token_usage with its tokens (input, output, cache,
reasoning), round trips, tool calls, duration and cost_usd. Recording runs off the event
loop and never fails a call.
Costs come from the price table in agents/pricing.py (Anthropic, Gemini, OpenAI). A model
with no known price is reported as unpriced, never guessed; /usage/summary counts those in
unpriced_calls and partially_priced_calls. Add or correct a price without a redeploy:
PRICING_OVERRIDES='{"my-model": {"input": 5, "output": 25}}' # USD per million tokens
curl -H "X-API-Key: agw_xxxxx" "http://localhost:8000/usage/summary?group_by=agent"
scripts/usage_from_runs.py builds a read-only per-agent cost report from Agno's stored runs.
The toolkits/ package provides Agno agent toolkits for external service integrations:
| Toolkit | Providers | Tools |
|---|---|---|
| CalendarToolkit | Google Calendar, Microsoft Calendar | schedule_meeting, list_events, cancel_meeting |
| EmailToolkit | Gmail, Outlook | send_email, search_emails, create_draft |
| ContactsToolkit | Google Contacts, Microsoft Contacts | create_contact, search_contacts, list_contacts |
| DriveToolkit | Google Drive, OneDrive | list_files, get_file_info, read_file |
All toolkits support:
See toolkits/README.md for detailed documentation.
# Install uv (package manager)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create virtual environment and install dependencies
./scripts/dev_setup.sh
source .venv/bin/activate
# Run validation (format, lint, type check)
./scripts/run_validate.sh
# Run tests
pytest tests/v2/
# Edit pyproject.toml, then regenerate requirements.txt
./scripts/generate_requirements.sh
# Upgrade all dependencies
./scripts/generate_requirements.sh upgrade
| Platform | Configuration | Script |
|---|---|---|
| Railway | railway.toml | scripts/deploy_to_railway.sh |
| Render | render.yaml | scripts/deploy_to_render.sh |
| Koyeb | koyeb.yaml | scripts/deploy_to_koyeb.sh |
Platform-specific deployment manifests and guides live under deploy/:
| Target | Path |
|---|---|
| AWS (ECS + CloudFormation) | deploy/aws/ |
| Azure (Container Apps + Bicep) | deploy/azure/ |
| Google Cloud Run | deploy/gcp/ |
| Generic (docker-compose, Kubernetes) | deploy/generic/ |
| Variable | Required | Description |
|---|---|---|
DB_HOST, DB_PORT, DB_USER, DB_PASS, DB_DATABASE | Yes | PostgreSQL connection |
ADMIN_SECRET | Yes (prod) | Admin endpoint authentication |
GOOGLE_API_KEY | * | Google/Gemini API key |
OPENAI_API_KEY | * | OpenAI API key |
ANTHROPIC_API_KEY | * | Anthropic API key |
XAI_API_KEY | * | xAI API key (Grok models) |
ZAI_API_KEY | * | Z.ai API key (GLM models) |
DEEPSEEK_API_KEY | * | DeepSeek API key |
QDRANT_URL | No | Qdrant vector database URL |
SECRET_TOKEN_ENC_KEY | For OAuth tokens | Fernet key that encrypts stored OAuth tokens. Storing a token fails without it. Generate one with python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())' |
PRICING_OVERRIDES | No | JSON of per-model prices for usage metering |
* At least one LLM API key is required.
See the Observability section for tracing/logging configuration.
| Schema | Tables | Purpose |
|---|---|---|
public | agent_info, team_info, team_agent, knowledge_entries, user_tokens, api_keys, token_usage | Core data |
prompts | prompts | Prompt templates |
ai | (auto-created) | Agno agent sessions & memories |
# Run migrations (auto-runs on first docker compose up)
psql -h $DB_HOST -U $DB_USER -d $DB_DATABASE -f db/migrations/setup.sql
Pluggable tracing and logging using OpenTelemetry:
| Variable | Default | Options |
|---|---|---|
OTEL_TRACING_BACKEND | console | console, otlp, sentry |
OTEL_LOGGING_BACKEND | console | console, otlp, logtail |
Example: Production with Sentry
OTEL_TRACING_BACKEND=sentry
SENTRY_DSN=https://[email protected]/xxx
Example: Cloud-native with OTLP
OTEL_TRACING_BACKEND=otlp
OTEL_LOGGING_BACKEND=otlp
OTEL_OTLP_ENDPOINT=http://collector:4317
HiveGate is built in the open, and these people have contributed to it:
DEFAULT_CHAT_MODEL (#76), the
project's first outside contributioncors_origin_list
documentation (#101).env.example
in sync with ApiSettings (#103)There are good first issues open now, each small and self-contained. Comment on one and it's yours.
MIT License - see LICENSE for details.