File-native model and experiment registry
Project description
Koobi
File-native model and experiment registry for local workflows.
Koobi stores experiment metadata as plain Markdown cards, builds a disposable DuckDB index, and serves an interactive Marimo UI for browsing, filtering, visualizing, and editing cards. The source of truth is always your files.
Why Koobi
Most experiment trackers assume a hosted service and database-backed runs. Koobi is designed for local-first users who want:
- readable, versionable records in Git
- zero-server operation
- domain-agnostic metrics and parameters
- workflows friendly to both humans and coding agents
Current MVP Capabilities
- Markdown card parsing and serialization with preserved body/key ordering
- additive card updates (only targeted fields are rewritten)
- DuckDB index build with:
cardstable (metadata + body)measurestable (long-format metrics)series_registrytable (series pointers)
- Marimo app with:
- project/status/search filters
- model table view
- card detail view (metrics/params/tags/body)
- edit form (name/status/tags/body) with write-back
- one measure bar chart
- CLI commands:
koobi initkoobi newkoobi indexkoobi ui
Architecture Overview
cards/*.md --> index.duckdb --> Marimo app
^ |
|---------- edit/write-back -------|
- Cards are authoritative.
- Index is derived and disposable.
- UI reads from index and writes edits back to cards.
Installation
Install into any project or environment directly from Git:
pip install git+https://github.com/blu3c0ral/koobi.git
This installs the koobi command and the importable koobi package.
For local development on Koobi itself, install editable with dev extras:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
Quickstart
Koobi discovers its configuration automatically: every command searches the
current directory and its parents for a koobi.toml. Work from inside your
workspace and no --config flag is needed.
1) Create (or enter) a workspace
koobi init --path my-registry
cd my-registry
Or use the bundled demo workspace:
python examples/local_example_to_cards.py --overwrite
cd examples/local
2) Build the index
koobi index
3) Launch the UI
koobi ui
The UI opens at http://localhost:2718.
Running from outside the workspace
If you prefer not to cd, point Koobi at the config explicitly or via an
environment variable (precedence: --config > KOOBI_CONFIG > current dir):
koobi ui --config examples/local/koobi.toml
# or
export KOOBI_CONFIG=examples/local/koobi.toml
koobi ui
CLI Reference
Initialize a new workspace:
koobi init --path /path/to/workspace
Create a new card (run from inside the workspace):
koobi new demo_project.my_model
Rebuild index:
koobi index
Run UI:
koobi ui
Use as a Library
Koobi's core is importable, so other projects and coding agents can read, query, and write cards programmatically:
from koobi import load_config, build, connect, query_cards
from koobi import Card, load_card, save_card
# Resolve config by searching upward from a path (file or directory)
cfg = load_config("path/to/workspace")
# Build the disposable DuckDB index from the Markdown cards
build(cfg)
# Query cards joined with wide-format measures
con = connect(cfg)
df = query_cards(con, project="demo_project", status="candidate")
# Read, mutate, and write back a single card (only targeted fields change)
card = load_card("path/to/workspace/cards/demo_project.my_model.md")
card.status = "promoted"
save_card(card, fields=["status"])
The full public API is exported from the top-level koobi package; see
koobi.__all__.
Repository Layout
src/koobi/ # core package (schema, cards, config, index, charts, app, cli)
tests/ # unit tests
examples/local/ # self-contained demo workspace
examples/local_example_to_cards.py
docs/ # product, technical, and future feature docs
Development
Run tests:
pytest
Recommended pre-PR checklist:
- run
pytest - regenerate local example cards if example inputs changed
- verify
koobi indexandkoobi uiagainstexamples/local/koobi.toml
Documentation
docs/product_design.md- product framing and roadmapdocs/technical_design.md- architecture and data contractsdocs/future_features.md- planned automation and extensions
Status
Active MVP implementation with local example workflow included. Phase 0 focus is stability of file contracts, indexing, and interactive editing.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file koobi-0.0.2.tar.gz.
File metadata
- Download URL: koobi-0.0.2.tar.gz
- Upload date:
- Size: 23.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d95326cf1b2d25ec006ecd263e6bab79159e0eafe0ed7cf1a80bab8fa22bfc1c
|
|
| MD5 |
5e90757742fe0e7802cb40189fdec44f
|
|
| BLAKE2b-256 |
9f9a4c7cf458894d8d119fecf058ba28007f0b156349a62e53ebc6b56faca28c
|
File details
Details for the file koobi-0.0.2-py3-none-any.whl.
File metadata
- Download URL: koobi-0.0.2-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa2a90522ddaa05e52d1dcb50a516885362bccf9d9cde5ac95e11d5680d0bdf4
|
|
| MD5 |
d8689e9c49acc000245d220a4435322a
|
|
| BLAKE2b-256 |
e2eafeeb6ffc381c408d175d72a4d7c3d7afb92a7c5f0c5bdba1bf45e6a639b6
|