Keyquill ์ ์์: R-Okauchi
Securely store LLM API keys in your browser. Use your own keys from any web app without trusting their server.
ํ์ฅ ๋ฉํ ๋ฐ์ดํฐ
์คํฌ๋ฆฐ์ท
์ ๋ณด
Keyquill is a Bring-Your-Own-Key (BYOK) wallet for LLM APIs. You register your OpenAI, Anthropic, Gemini, or any OpenAI-compatible API key inside the extension. Approved web apps can then stream chat completions using your key โ and neither the web app nor its server ever sees the key material.
The problem
Web apps that use LLM APIs usually make you either:
- Let them store your API key on their server (trust and breach risk)
- Paste your key into
- Go without AI features
Keyquill offers a fourth option: keep the key in an isolated extension process, and let web apps request completions through a narrow, user-approved channel.
How it works
Security properties
What's new in v1.0 โ policy broker
Every request is brokered through a user-owned policy before reaching the provider:
Supported providers
Anything that speaks the OpenAI Chat Completions format works out of the box. Native translation is provided for the Anthropic Messages API.
Confirmed: OpenAI, Anthropic, Google Gemini, Groq, Mistral, DeepSeek, Together AI, Fireworks AI, xAI (Grok), Ollama (local), and any OpenAI-compatible endpoint.
For developers
Integrate Keyquill in your web app with the official SDK:
v1 SDK users can keep pinning
Full documentation: https://github.com/R-Okauchi/keyquill
Links
The problem
Web apps that use LLM APIs usually make you either:
- Let them store your API key on their server (trust and breach risk)
- Paste your key into
localStorage (XSS risk)- Go without AI features
Keyquill offers a fourth option: keep the key in an isolated extension process, and let web apps request completions through a narrow, user-approved channel.
How it works
- Click the Keyquill toolbar icon. Register a provider (OpenAI, Anthropic, Gemini, Groq, Mistral, DeepSeek, Together, Fireworks, xAI, Ollama, or any OpenAI-compatible endpoint) and paste your API key.
- Visit any web app that integrates the Keyquill SDK.
- First access triggers a consent popup showing the origin name. Approve or deny.
- Approved apps can call for completions. The extension's service worker contacts the provider directly over HTTPS. The web page only receives the streamed response.
Security properties
- Keys live in
browser.storage.sessionโ ephemeral, cleared when the browser closes, inaccessible to regular web-page JavaScript. - Per-origin consent (MetaMask style). Every origin that uses Keyquill must be explicitly approved via a popup. Approvals are stored in
browser.storage.localand can be revoked from the extension popup at any time. - Key registration and deletion are popup-only. Web pages cannot register, delete, or exfiltrate keys.
- Zero telemetry. The extension opens no connections to any Keyquill-controlled server (there isn't one). Network destinations are limited to LLM providers the user has chosen.
What's new in v1.0 โ policy broker
Every request is brokered through a user-owned policy before reaching the provider:
- Model policy: allowlist / denylist / capability-only modes per key.
- Budget caps: per-request, daily, and monthly USD ceilings; choose block / confirm / warn.
- Privacy rules: HTTPS-only endpoints, provider allowlists, origin regex filters.
- Capability-first API: apps declare what they need (tool use, reasoning, long context); your policy picks the actual model.
- Consent popups for out-of-allowlist models or high-cost requests, with once/always/reject choices.
- Audit ledger: every request recorded locally with tokens + estimated + actual cost. Filter by origin, export to CSV, 90-day retention.
- Localized errors (English / Japanese).
Supported providers
Anything that speaks the OpenAI Chat Completions format works out of the box. Native translation is provided for the Anthropic Messages API.
Confirmed: OpenAI, Anthropic, Google Gemini, Groq, Mistral, DeepSeek, Together AI, Fireworks AI, xAI (Grok), Ollama (local), and any OpenAI-compatible endpoint.
For developers
Integrate Keyquill in your web app with the official SDK:
npm install keyquill
import { Keyquill } from "keyquill";
const quill = new Keyquill();
if (await quill.isAvailable()) {
await quill.connect();
const { completion } = await quill.chat({
messages: [{ role: "user", content: "Hello" }],
requires: ["tool_use"],
tone: "precise",
maxOutput: 1024,
});
}
v1 SDK users can keep pinning
keyquill@0.3.x โ the extension accepts both wire shapes.Full documentation: https://github.com/R-Okauchi/keyquill
Links
- Live demo: https://r-okauchi.github.io/keyquill/demo/
- Source code (MIT): https://github.com/R-Okauchi/keyquill
- Privacy policy: https://r-okauchi.github.io/keyquill/privacy-policy
- Report issues: https://github.com/R-Okauchi/keyquill/issues
0๋ช
์ด 0์ ์ผ๋ก ํ๊ฐํจ
๊ถํ ๋ฐ ๋ฐ์ดํฐ
ํ์ ๊ถํ:
- ๋ชจ๋ ์น์ฌ์ดํธ์์ ์ฌ์ฉ์์ ๋ฐ์ดํฐ์ ์ ๊ทผ
๊ฐ๋ฐ์๊ฐ ๋ฐํ ํ์ ์์ง ํญ๋ชฉ:
- ์ธ์ฆ ์ ๋ณด
- ๊ฐ์ธ ์ปค๋ฎค๋์ผ์ด์
์ถ๊ฐ ์ ๋ณด
- ๋ถ๊ฐ ๊ธฐ๋ฅ ๋งํฌ
- ๋ฒ์
- 1.1.0
- ํฌ๊ธฐ
- 2.1 MB
- ๋ง์ง๋ง ์ ๋ฐ์ดํธ
- 13์ผ ์ (2026๋ 4์ 27์ผ)
- ๊ด๋ จ ์นดํ ๊ณ ๋ฆฌ
- ๋ผ์ด์ ์ค
- MIT ๋ผ์ด์ ์ค
- ๊ฐ์ธ์ ๋ณด์ฒ๋ฆฌ๋ฐฉ์นจ
- ์ด ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ํ ๊ฐ์ธ์ ๋ณด์ฒ๋ฆฌ๋ฐฉ์นจ ์ฝ๊ธฐ
- ๋ฒ์ ๋ชฉ๋ก
- ๋ชจ์์ง์ ์ถ๊ฐ