Skip to main content

An agentic toolset: provider-neutral tools and dispatch for building agents on low-level LLM SDKs

Project description

koina

An agentic toolset.

Reusable, provider-neutral building blocks for agents on low-level LLM SDKs: the six core file/shell tools (Read, Write, Edit, Bash, Glob, Grep), a never-raising dispatch, structured JSONL logging, and a thin adapter per provider. koina gives you the tools and the dispatch; the agentic loop stays in your code.

Requirements

  • Python 3.12+
  • ripgrep (rg) on PATH (for Glob and Grep)

Install

uv add koina

The library depends only on pydantic. Provider SDKs (anthropic, openai) are the caller's dependency, used in your loop, not by koina.

Usage

dispatch and the tools are provider-neutral; an adapter translates a provider's wire format to and from the neutral ToolCall/ToolResult. With the Anthropic adapter:

from pathlib import Path
from anthropic import AsyncAnthropic
from koina import default_registry, dispatch, ToolContext
from koina.adapters import anthropic as adapter

client = AsyncAnthropic()
reg = default_registry()
ctx = ToolContext(cwd=Path.cwd())
msgs = [{"role": "user", "content": "List the Python files."}]

while True:
    resp = await client.messages.create(
        model="claude-opus-4-8", max_tokens=4096,
        messages=msgs, tools=adapter.tools_param(reg),
    )
    msgs.append({"role": "assistant", "content": resp.content})
    calls = adapter.parse_tool_calls(resp.content)
    if not calls:
        break
    results = [await dispatch(c, reg, ctx) for c in calls]
    msgs.append(adapter.format_results(results))

Swap koina.adapters.anthropic for koina.adapters.openai to run the same tools against the OpenAI Chat Completions API (or any OpenAI-compatible server, e.g. llama.cpp). See examples/ for runnable read-only code-review scripts on both.

What's in the box

  • Six core tools (Read, Write, Edit, Bash, Glob, Grep), faithful to Claude Code's observable behavior, headless (no permissions or hooks).
  • dispatch never raises: it always returns a ToolResult (errors set is_error=True).
  • Provider-neutral core (ToolCall, ToolResult) with per-provider adapters (koina.adapters.anthropic, koina.adapters.openai). The library never imports a provider SDK at runtime.
  • Structured logging: typed events (tool calls, model calls, token usage, reasoning) emitted to a pluggable EventSink (JsonlSink/NullSink), so a run reconstructs from a JSONL transcript. Off by default, near-zero overhead when inactive.

Permissions, web tools, and concurrency orchestration are out of scope.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

koina-0.1.0.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

koina-0.1.0-py3-none-any.whl (19.2 kB view details)

Uploaded Python 3

File details

Details for the file koina-0.1.0.tar.gz.

File metadata

  • Download URL: koina-0.1.0.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for koina-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9e433075c38ef16f14c05c21d6689290edf1b7408e8087dc6ce40bbe25c87626
MD5 1aec30825454a9da4c1ec7a038227d8c
BLAKE2b-256 aa397ecfe7a40d82e0e7c6a0b5dd00c93ba39849bf64c235f2ed1be321fe55d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for koina-0.1.0.tar.gz:

Publisher: release.yml on ggueret/koina

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file koina-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: koina-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for koina-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f3426e19b2881c3b4766c222366880a06af94951cd09a4b0eaba9eba00b9cb31
MD5 69423b837c32b8f78f40df40382c8495
BLAKE2b-256 34fd3034172e07874408053d0024821108b80ed37dfe9f543c186f661346dfd9

See more details on using hashes here.

Provenance

The following attestation bundles were made for koina-0.1.0-py3-none-any.whl:

Publisher: release.yml on ggueret/koina

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page