Dashboard
Your usage at a glance — from the last 24 hours of call records and the prepaid ledger.
Sign in to see your dashboard.
Sign inToken spend
prepaid credits—
spent from the current grants (the free allowance is $0)
Total tokens
in + out—
last 24 hours
Requests
—
last 24 hours
Avg latency
—
completed calls, last 24 hours
Requests over time
Calls per hour (last 24 hours)
Token split
Input and output, by model (last 24 hours)
- Input —
- Output —
Connect your tool
Pick a client for its setup block. Issue a connection token in the API keys panel below and, while this page is open, Copy inserts the real token (the block shows it masked).
# Anthropic Messages is not served on api.mithril.fund (POST /v1/messages → 405).
# Run a translating proxy (LiteLLM, etc.), then point Claude Code at the proxy.
# The proxy calls OpenAI wire: https://api.mithril.fund/v1 with Bearer kc_pat_…
export OPENAI_BASE_URL="https://api.mithril.fund/v1"
export OPENAI_API_KEY="kc_pat_<your-token>"
# export ANTHROPIC_BASE_URL=http://127.0.0.1:4000 # local proxy
# export ANTHROPIC_API_KEY=anything # proxy holds the real token
# claude -p "Reply with exactly: OK"
Caveat: api.mithril.fund does not serve the Anthropic Messages wire (POST /v1/messages) yet — measured 405 on 2026-09-15. To use Claude Code, put a local proxy that translates Anthropic → OpenAI (LiteLLM, for example) in between and point ANTHROPIC_BASE_URL at it. See the Anthropic SDK page.
export KOTOBA_API_BASE="https://api.mithril.fund/v1"
export KOTOBA_API_TOKEN="kc_pat_<your-token>"
# test the connection
codex exec "Reply with exactly: OK"
OpenAI-compatible — base URL includes /v1.
Base URL: https://api.mithril.fund/v1
API Key: kc_pat_<your-token>
Model ID: qwen3.8-flash-next-whitehacker
Provider ID: kotobacloud (lowercase)
Base URL: https://api.mithril.fund/v1
API Key: kc_pat_<your-token>
Model ID: qwen3.8-flash-next-whitehacker
~/.config/opencode/opencode.json:
{
"provider": {
"kotobacloud": {
"baseUrl": "https://api.mithril.fund/v1",
"apiKey": "kc_pat_<your-token>",
"models": {"qwen3.8-flash-next-whitehacker": {}}
}
}
}
Reasoning models can 400 on temperature — a known caveat.
export OPENAI_API_BASE="https://api.mithril.fund/v1"
export OPENAI_API_KEY="kc_pat_<your-token>"
# the openai/ prefix stacks on our model id
aider --model openai/qwen3.8-flash-next-whitehacker
# ~/.hermes/config.yaml (or a profile's config.yaml)
model:
provider: kotoba
default: qwen3.8-flash-next-whitehacker
# no max_tokens: hermes ignores it; the edge's default output budget is 32,768
providers:
kotoba:
api: https://api.mithril.fund/v1 # literal: a KOTOBA_API_BASE that already ends in /v1 would become /v1/v1 (405)
key_env: KOTOBA_API_TOKEN
transport: chat_completions
discover_models: true
request_timeout_seconds: 900
stale_timeout_seconds: 900
models:
qwen3.8-flash-next-whitehacker:
context_length: 98304 # 131,072 slot - 32,768 output budget
custom:
# a named provider runs under this label at runtime — these are the timeouts that apply
request_timeout_seconds: 900
stale_timeout_seconds: 900
compression:
# the answer arrives whole; a summary can take minutes under load
context_timeout_seconds: 900
context_total_ceiling_seconds: 900
auxiliary:
compression:
provider: kotoba # REQUIRED with a bare base_url: without it (or key_env) hermes resolves the task to "auto" = the main model
key_env: KOTOBA_API_TOKEN
model: qwen/qwen3.8-flash # the blue route: shares no slot with your session
base_url: https://api.mithril.fund/v1
reasoning_effort: none
timeout: 900
# optional, off-edge: where the summary goes when THIS edge is silent (needs an OpenRouter key in .env).
# key_env is required — the stall retry pins the entry as-is and 401s without it. :free SKUs only.
fallback_chain:
- provider: openrouter
model: qwen/qwen3.8-27b:free
key_env: OPENROUTER_API_KEY
timeout: 180
- provider: openrouter
model: nex-agi/nex-n2.5-mini:free
key_env: OPENROUTER_API_KEY
timeout: 120
title_generation:
provider: kotoba
key_env: KOTOBA_API_TOKEN
model: qwen/qwen3.8-flash
base_url: https://api.mithril.fund/v1
reasoning_effort: none
timeout: 120
fallback_providers:
- provider: kotoba
model: qwen/qwen3.8-flash # same edge; another provider's reasoning_details would be replayed here
base_url: https://api.mithril.fund/v1
api_mode: chat_completions
# ~/.hermes/.env — the token is the only thing read from the environment
KOTOBA_API_TOKEN=kc_pat_<your-token> # issue at https://admin.mithril.fund/account (shown once)
OPENROUTER_API_KEY=sk-or-<optional> # only for auxiliary.compression.fallback_chain; omit the chain without it
# `personal API token refused: token-unknown` = the token in THIS machine's .env is not in the
# account's registry (issued elsewhere, or before the registry): paste a current one here.
# profiles: start them as `hermes -p <profile>` or with HERMES_HOME=~/.hermes/profiles/<profile>,
# not via the sticky `hermes profile use` (subprocesses then write to the default profile)
hermes chat -Q --oneshot -q "Reply with exactly: OK"
context_length is 98,304 (the 131,072 slot minus the 32,768 default output): hermes sends no max_tokens (its config cannot impose one), so declare the window minus the output. Timeouts are 900 s: the answer arrives whole and the edge waits up to 840 s. Compaction summaries go to the blue route (qwen/qwen3.8-flash) so they never queue behind your own session. Never point the summary at the red model: on 2026-09-18 the red route hung edge-side for an hour (ADR 2609181900) and an install that did lost every compaction (120 s with no output) while blue answered in 3.6 s throughout. auxiliary.compression.fallback_chain (off-edge :free SKUs, key_env required) is the escape for when this edge itself is silent — a summary is plain text, so another provider cannot poison the transcript. The MAIN fallback stays on this edge: another provider's reasoning_details get replayed here and 400. Auxiliary title generation spends one free request per turn (`auxiliary.title_generation.enabled: false` stops it).
docker run -d -p 3000:8080 \
-e OPENAI_API_BASE_URL="https://api.mithril.fund/v1" \
-e OPENAI_API_KEY="kc_pat_<your-token>" \
ghcr.io/open-webui/open-webui:main
# then open http://localhost:3000 and pick the model
Base URL: https://api.mithril.fund/v1
API Key: kc_pat_<your-token>
Model: qwen3.8-flash-next-whitehacker
Needs Cursor Pro. Requests reach the API but Cursor may not render the reply — a Cursor-side limitation.
from openai import OpenAI
client = OpenAI(
base_url="https://api.mithril.fund/v1",
api_key="kc_pat_<your-token>",
)
r = client.chat.completions.create(
model="qwen3.8-flash-next-whitehacker",
messages=[{"role": "user", "content": "Reply with exactly: OK"}],
)
API keys
Issue and revoke connection tokens. A token is shown once.
Use from a CLI / IDE
Issue a connection token for a local CLI / IDE agent. It is shown once.
For OpenAI-compatible clients: KOTOBA_API_BASE=https://api.mithril.fund/v1 and KOTOBA_API_TOKEN=kc_pat_… (token shown once after issue).