opencode-keenable
v0.1.1
Published
Keenable web search + page fetch tools for OpenCode. Keyless by default: no signup, no CLI, no login.
Downloads
325
Maintainers
Readme
opencode-keenable
OpenCode plugin for Keenable — web search and page fetch for your agent, keyless by default. No signup, no CLI to install, no login step: add one line to your config and the tools are there.
Installation
Add the plugin to your opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-keenable"]
}That is the whole setup. OpenCode installs the plugin with Bun on startup and the tools work immediately against Keenable's public endpoints.
Tools
| Tool | Use when |
|------|----------|
| keenable_search | No URL yet — find pages, check current events, read changelogs and API references |
| keenable_fetch | You have a URL — pull the page as clean markdown |
keenable_search takes a natural-language query and optional site,
published_after / published_before, acquired_after / acquired_before
(all dates YYYY-MM-DD). keenable_fetch takes one http(s) url and returns
the main content as markdown plus title, description, author and publication date.
Configuration
Both are optional.
| Variable | Effect |
|----------|--------|
| KEENABLE_API_KEY | Switches to the authenticated endpoints, which raises the rate limits. Create a key at keenable.ai/console. |
| KEENABLE_API_URL | Base-URL override. HTTPS is enforced (plain http only for loopback). |
Keyless requests are rate-limited per IP. Without a key everything still works; the key is a limit lift, not a prerequisite. Both variables are also forwarded to shell commands run in the session.
Notes
- Shipped as TypeScript. OpenCode runs plugins with Bun, so there is no build step.
- One dependency,
@opencode-ai/plugin, for thetool()helper and its Zod schemas. The API calls themselves usefetchand the Node standard library. keenable_fetchrefuses private and internal targets (loopback, RFC-1918, link-local, cloud metadata hosts) before sending the request.- Errors from the API (rate limit, auth, bad input) come back as tool output rather than exceptions, so a failed lookup does not break the session.
Links
License
MIT
