IBEX Harness
DocsBenchmarksBlogChangelogRoadmap
GitHub
IBEX Harness

Documentation

IntroductionQuickstart (5 minutes)ConceptsFAQ
Getting Started›Introduction
Getting Started

Introduction

Welcome to the IBEX Harness documentation — authenticated LLM proxy with multi-tenant identity.

IBEX Harness is a self-hosted AI agent platform: an authenticated LLM proxy, multi-tenant identity service, and (in later phases) persistent agent memory with behavioral drift detection. The long-term goal is enterprise-grade context injection on every LLM call with under 20ms proxy overhead.

This documentation reflects what ships on main today. Auth and proxy are Phase 2 shipped; Python memory/context/dashboard services remain Phase 3+.

Capability boundary

Shipped: Auth (Go), Proxy (Go) with mock/live provider modes, auth cache + revocation, directives, sessions, idempotency, and async ClickHouse traces. Planned: Python memory, context assembly, worker, API, and dashboard. Live status: current state.

What you can do today

1

Authenticate every proxy request

Bearer PAT validation and agent identity verification over gRPC — fail-closed on auth outage.

2

Forward chat completions

Default IBEX_LLM_MODE=mock returns HTTP 200 from an in-process stub. Set live plus OPENAI_API_KEY for real OpenAI-compatible forwarding.

3

Use platform features on the critical path

Directives, sessions, idempotency keys, and auth caching are wired when Postgres/Redis are configured — see Docs hub.

4

Issue and revoke PATs

gRPC CreateToken / RevokeToken with Argon2id hashing, Postgres RLS, and Redis revocation publish.

5

Emit async traces

Optional ClickHouse writes via CLICKHOUSE_DSN — never blocks the chat path.

What does not work yet

  • JWT issuance and dashboard session flows
  • Python services: memory, context assembly, embedder, worker, API, dashboard
  • MinIO session archives and billing dashboards

When you still see 501

501 PROVIDER_NOT_CONFIGURED means the requested model is not registered in the active provider registry — not that forwarding is unimplemented. Default mock mode answers registered models with HTTP 200.

Architecture at a glance

Mermaid diagram: flowchart LR
+-------------+             +-------+                         +--------------+
|             |             |       |                         |              |
| Agent / SDK |-HTTPS-:8080>| Proxy |       ---gRPC-:9091---->|     Auth     |
|             |             |       |                         |              |
+-------------+             +-------+                         +--------------+
                                :                                     |       
                                :                                     |       
                                :                                     |       
                                :                                     |       
                                :                                     v       
                                :                             +--------------+
                                :                             |              |
                                +---------------------------->|   Postgres   |
                                :                             |              |
                                :                             +--------------+
                                :                                             
                                :                                             
                                :                                             
                                :                                             
                                :                                             
                                :                             +--------------+
                                :                             |              |
                                +---------------------------->|    Redis     |
                                :                             |              |
                                :                             +--------------+
                                :                                             
                                :                                             
                                :                                             
                                :                                             
                                :                                             
                                :                             +--------------+
                                :                             |              |
                                +--------mock-or-live-------->| LLM provider |
                                :                             |              |
                                :                             +--------------+
                                :                                             
                                :                                             
                                :                                             
                                :                                             
                                :                                             
                                :                             +--------------+
                                :                             |              |
                                +............async...........>|  ClickHouse  |
                                                              |              |
                                                              +--------------+
ComponentStatusPort (default)
ProxyShipped — auth, rate limit, mock/live forward, sessions, directivesHTTP 8080
AuthShipped — PAT + agent identity + revoke publishHTTP 8081, gRPC 9091
PostgresRunning via Compose5432
RedisRunning via Compose6379
ClickHouseOptional traces when DSN set8123 / 9002
Memory / ContextNot implemented (Phase 3)—

Deeper dive: Architecture and Request lifecycle.

New contributor path

1

Prerequisites

Docker, GNU Make, Go 1.25+, Buf CLI. See TOOLCHAIN in the roadmap reference.

2

Clone and boot infra

make compose-dev-up && make db-migrate && make db-seed

3

Generate protos

make proto-gen — required before go test on auth/proxy.

4

Start auth then proxy

Auth gRPC must be up before protected proxy routes work.

5

Smoke test

make dev-smoke — health, auth failures, and mock chat success.

Set IBEX_AUTH_VALIDATE_TIMEOUT=2s on the proxy locally — the production 50ms budget often triggers 503 on developer machines during Argon2 verification.

Security invariants

Security is not deferred to a later phase:

  • Multi-tenant isolation via RLS + explicit org filters — Tenant isolation
  • Cross-tenant resource access returns 403, never 404
  • PAT secrets hashed with Argon2id; plaintext shown once — Secrets and keys
  • ClickHouse queries must filter org_id (no RLS there)
  • 35+ automated security integration cases in CI

Overview: Security.

Verify the proxy is up

After make compose-dev-up, migrations, and seed:

bash
curl -s http://localhost:8080/health
curl -s http://localhost:8080/ready

Expected: HTTP 200 on /health. /ready reports ok when auth gRPC and Redis are reachable.

Protected probe (requires seeded credentials):

bash
curl -s http://localhost:8080/v1/internal/auth-probe \
  -H "Authorization: Bearer ${IBEX_DEV_TOKEN}" \
  -H "X-IBEX-Agent-ID: ${IBEX_DEV_AGENT_ID}"

Documentation map

SectionStart here
Run locally in 5 minutesQuickstart
Org, agent, token modelConcepts
Proxy middleware and endpointsProxy overview
PAT issuanceIssuing API keys
Error codesAPI errors
Implementation progressRoadmap

Next steps

  • Quickstart — clone, boot, and send a mock chat request
  • Concepts — organizations, agents, and tokens
  • FAQ — common setup questions
  • Proxy overview — middleware pipeline detail

Was this page helpful?

Edit on GitHub

Last updated on

NextQuickstart (5 minutes)

On this page

  • What you can do today
  • What does not work yet
  • Architecture at a glance
  • New contributor path
  • Security invariants
  • Verify the proxy is up
  • Documentation map
  • Next steps
0%