RMDW Private Jah API
Plug in Jah in two minutes.
Jah speaks the OpenAI and Anthropic formats, so your tools and your code connect without a rewrite. Every snippet below was run against the live API before it was written here.
https://kiyomibot.ai/v1OpenAI format at /chat/completions, Anthropic format at /messages. The Anthropic SDK base URL is https://kiyomibot.ai (no /v1).
jah-7.0-max jah-7.0-fastMax thinks hard, for agents and hard problems. Fast answers instantly, for chat and small jobs. Plain jah works too.
1. Test it with curl
Paste your key where it says YOUR_KEY. If you get a hello back, you are connected.
curl https://kiyomibot.ai/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jah-7.0-fast",
"messages": [{"role": "user", "content": "Reply with exactly: hello from jah"}]
}'2. Pi
Add the provider to ~/.pi/agent/models.json, then run it. Set KIYOMI_API_KEY in your shell.
"kiyomi": {
"baseUrl": "https://kiyomibot.ai/v1",
"api": "openai-completions",
"authHeader": true,
"models": [{
"id": "jah-7.0-fast",
"name": "Jah 7.0",
"reasoning": true,
"contextWindow": 1000000,
"maxTokens": 65536
}]
}export KIYOMI_API_KEY=YOUR_KEY
pi --provider kiyomi --model jah-7.0-fast3. Claude Code
Three environment variables and it runs on Jah. jah-7.0-max is the deep one, jah-7.0-fast the quick one.
export ANTHROPIC_BASE_URL=https://kiyomibot.ai
export ANTHROPIC_AUTH_TOKEN=YOUR_KEY
export ANTHROPIC_MODEL=jah-7.0-max
claude4. OpenCode
Put this in opencode.json in your project (or ~/.config/opencode/opencode.json for every project).
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"rmdw": {
"npm": "@ai-sdk/openai-compatible",
"name": "Jah (Kiyomi)",
"options": {
"baseURL": "https://kiyomibot.ai/v1",
"apiKey": "YOUR_KEY"
},
"models": {
"jah-7.0-max": {
"name": "Jah 7.0",
"tools": true,
"limit": { "context": 1000000, "output": 65536 }
}
}
}
}
}opencode -m rmdw/jah-7.0-max5. Codex
Add the provider to ~/.codex/config.toml and set the key in your shell.
model = "jah-7.0-max"
model_provider = "kiyomi"
[model_providers.kiyomi]
name = "Jah (Kiyomi)"
base_url = "https://kiyomibot.ai/v1"
env_key = "KIYOMI_API_KEY"
wire_api = "responses"export KIYOMI_API_KEY=YOUR_KEY
codex6. Cursor
Cursor takes a custom OpenAI key for chat and agents. Tab completion stays on Cursor's own models.
OpenAI API key: YOUR_KEY
Base URL override: https://kiyomibot.ai/v1
Model: jah-7.0-max
(If your Cursor build has no base URL override, use a model name of jah-7.0-max after the key.)7. Your own code, OpenAI format
Works with the official OpenAI SDK and anything that speaks it. Point the base URL at us.
import OpenAI from "openai";
const jah = new OpenAI({ baseURL: "https://kiyomibot.ai/v1", apiKey: process.env.KIYOMI_API_KEY });
const r = await jah.chat.completions.create({
model: "jah-7.0-fast",
messages: [{ role: "user", content: "Hello from my code" }],
});
console.log(r.choices[0].message.content);from openai import OpenAI
jah = OpenAI(base_url="https://kiyomibot.ai/v1", api_key="YOUR_KEY")
r = jah.chat.completions.create(
model="jah-7.0-fast",
messages=[{"role": "user", "content": "Hello from my code"}],
)
print(r.choices[0].message.content)8. Your own code, Anthropic format
For code already built on the Anthropic Messages API. The base URL has no /v1, the SDK adds it.
import Anthropic from "@anthropic-ai/sdk";
const jah = new Anthropic({ baseURL: "https://kiyomibot.ai", apiKey: process.env.KIYOMI_API_KEY });
const m = await jah.messages.create({
model: "jah-7.0-fast",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello from my code" }],
});
console.log(m.content[0].text);