ugraph
Turn any CLI input — clipboard, paste, pipe, file, or URL — into a filesystem-native knowledge base that Obsidian and agents can read. Raw sources remain inspectable, chunk IDs are content-addressed, and extracted quotes are checked against source text before they become candidates.
Alpha: the ingestion foundation is usable; retrieval and the evaluation harness are still under active development.
Install
The distribution is named ugraph-kit because ugraph is already taken on
PyPI. The installed command is still the short form: ugraph.
# Recommended: isolated command-line install
uv tool install ugraph-kit
# Or with pipx
pipx install ugraph-kit
To use Anthropic or OpenAI synthesis:
uv tool install "ugraph-kit[api]"
# pipx install "ugraph-kit[api]" also works
Python 3.10+ is required.
First run
Create a knowledge folder inside an Obsidian vault (or anywhere on disk):
ugraph init ~/Documents/MyVault/knowledge
That is the whole setup. init remembers the folder for this machine, so every
later session finds it from any directory — no --kb, no environment variable:
cd /anywhere
ugraph status # works
To point at a different knowledge base later:
ugraph use ~/other/knowledge # remembered from then on
ugraph use # print the current one
Anything that describes the current invocation still wins over the remembered
default, in this order: --kb → UGRAPH_KB → the nearest ugraph.toml → standing
inside a knowledge base → the remembered one.
Copy some text and run:
ugraph
On macOS and supported Linux desktops, ugraph reads the clipboard. Otherwise it prompts for a paste terminated by Ctrl+D. Piped input is always supported:
printf 'Hybrid retrieval combines lexical and semantic search.' | ugraph
Add a person
Copy a profile or talk URL (or paste a bio) and run ugraph. It previews the
detected identity and asks before writing.
The explicit, scriptable form is:
ugraph person "https://example.com/about"
ugraph person "https://example.com/about" --yes
This creates:
entities/people/<name>.md— the canonical, minimally verified person pageresources/people/<name>.md— a compatibility redirect for existing vaults
Repeating the command does not duplicate the person or overwrite human-authored canonical content.
Model setup
Capture and person resolution do not require an LLM. Synthesis is optional:
ugraph auth set anthropic
ugraph auth use anthropic
# or
ugraph auth set openai
ugraph auth use openai
# or a running local Ollama installation
ugraph auth use ollama
Check the active configuration with ugraph auth status.
Tuning the model
Everything about the model is configuration, not code. In ugraph.toml:
[extract]
model = "claude-opus-5" # any model, including ones released after this version
A model ID selects its own backend. claude-* goes to Anthropic, gpt-*/o* to
OpenAI, and anything else is treated as a local Ollama model — so a model released
tomorrow works without a code change or an entry in a list. Set backend explicitly
only to override that:
[extract]
backend = "api" # api | ollama | claude-code
Naming a model whose provider you have no key for is refused by name rather than silently sent to the other provider.
Token budgets are discovered, not hardcoded. ugraph asks your provider what the model accepts and caches the answer for a day, so switching models needs no code change and no setting. Override only if you want a tighter ceiling than the model's:
[extract]
max_tokens = 48000 # optional — omit to use the model's own maximum
thinking = "adaptive" # optional — adaptive | disabled (Anthropic)
effort = "medium" # optional — low | medium | high | xhigh | max (Anthropic)
temperature = 0.1 # optional — omitted by default
Every one of these is unset by default, which means "whatever the provider does". If the provider cannot be reached to report its limits, the budget is derived from the size of the prompt rather than guessed.
Other commands
ugraph --kb ./knowledge ingest file ./note.md
printf 'a claim you care about' | ugraph --kb ./knowledge --yes
ugraph ps
ugraph logs
ugraph lint
ugraph verify
--kb is a global option and therefore comes before the subcommand.
Alternatively set UGRAPH_KB once or run inside a configured knowledge base.
Reliability contract
The current test suite enforces:
- Re-ingesting the same document creates no duplicates.
- Editing a document updates only affected chunks.
- Interrupting ingestion and rerunning completes cleanly.
- Model quotes must occur verbatim in their source chunk.
- Person capture is idempotent and preserves existing human content.
Operational events are appended to runs.jsonl and exposed through
ugraph ps and ugraph logs.
Source
Canonical repo (Tekvo open source): https://github.com/tekvo-ai/app_ugraph_kit
This is the Tekvo AI open-source home for ugraph.
Site: https://ugraph.build
Development
git clone https://github.com/tekvo-ai/app_ugraph_kit.git
cd app_ugraph_kit
uv sync --extra dev
uv run pytest
uv build
Project artifacts:
docs/PRODUCT.md— product home: goal, features, roadmap, public product logCLAIMS.md— claims backed by tests, ADRs, or measured runsdocs/adr/— architecture decision recordsdocs/techniques/— just-in-time technique scansdocs/releasing.md— PyPI publish stepsCONTRIBUTING.md— dev setup and the checks CI runsCHANGELOG.md— what changed, per releaseeval/— evaluation harness workcorpus/manifest.json— loaded real-world data
Licensed under Apache-2.0.
Release files for ugraph-kit 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ugraph_kit-0.1.0.tar.gz | 155.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ugraph_kit-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 294.6 kB
Release files / ugraph_kit-0.1.0.tar.gz
| Download URL | ugraph_kit-0.1.0.tar.gz |
|---|---|
| Size | 155.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
64e9df6645173db06940f3bc567a6933634caaadc499301caf30b7f00a837bd1
|
|
BLAKE2b-256 checksum How to use checksums |
b5e0869fed9bd229a5c562fa660dfb6884730f4a5606facdb4451b52244af57c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency logRelease files / ugraph_kit-0.1.0-py3-none-any.whl
| Download URL | ugraph_kit-0.1.0-py3-none-any.whl |
|---|---|
| Size | 139.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8d22eea0c26193fa3537db91cca4cd78465502bd0f57ebbc9150330790405edb
|
|
BLAKE2b-256 checksum How to use checksums |
0f8df3ed9ff3ce8376778264bfd7d0fe41ba210e0194d7f35595456d88545595
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency log