Knowledge Dispatcher for issue trackers and knowledge bases
Project description
kd
Knowledge Dispatcher. A command-line and Python tool for accessing and managing information that lives in issue trackers and knowledge bases — designed to be equally natural for humans and large language models.
Today kd speaks YouTrack. On the roadmap: JIRA, GitHub Issues, GitLab, and possibly Obsidian. One tool, one set of verbs, many backends.
What kd does
- Full issue CRUD from the terminal or a script. Create, update, comment, link, time-log, assign, query — no web UI round-trips, no ad-hoc REST glue.
- Knowledge-base article workflows. Idempotent
pushfrom local markdown,pullas markdown for editing, moves across projects, tag-driven queries. Articles round-trip cleanly through an HTML-comment marker so repeated LLM-driven edits preserve upstream identity instead of creating duplicates. - Cross-project visibility via tokens. kd sees exactly what the token's connection permits on the upstream server — nothing more, nothing less. Access control stays upstream where it belongs, not in a parallel local config.
- Cross-entity search spanning issues and articles in a single query.
- Structured output (JSON, YAML, table, markdown) because the primary consumer is often another program — an LLM, a shell pipeline, a CI job — not a human eyeballing a terminal.
The primer — and why it exists
The primer (kd /primer) is the centerpiece: a small, workspace-local file of pinned references and curated notes that every kd session can surface on demand.
It exists to solve a problem that has gotten worse as LLMs have become central to real work:
- Visible memory. Agentic tools accumulate hidden "memories" in opaque per-LLM buckets you cannot easily read, edit, or audit. The primer is a plain file you can open, version, and review. If an LLM appears to "remember" something load-bearing, you can see exactly where that came from.
- LLM-portable. One primer works for any model. Switch from Claude to GPT-5 to the next generation — the primer travels with the project, not with a vendor.
- Shared by humans and LLMs. A developer jotting "on this project the sprint field is called
Board" in the primer is building the same artifact an LLM would build, in the same place, readable by both. No separate convention to maintain. - A routing layer, not a copy. The primer can pin real knowledge-base articles (
kd /primer/article add FB-A-42). It never duplicates their content — it points at them. The rest of kd extends this shape: pull what the current task needs from live systems, reason, push updates back. Nothing gets mirrored into a parallel store.
What kd is not
- Not a migration platform. Cross-system moves are deliberate lossy cherry-picks — a stub on the target side with a backref to the source, not a faithful reproduction.
- Not a data warehouse. Data lives in the upstream tracker; kd sits on top.
- Not a faithful replica. kd reads what a task needs and writes what actually changed. It never claims to be a complete mirror.
If you need a migration tool or a comprehensive import/export platform, kd is the wrong tool.
Install
# pipx (recommended)
pipx install kd-cli
# or uv
uv tool install kd-cli
The PyPI distribution name is kd-cli (two-letter kd is reserved by PyPI policy). The installed command, the import name, and the CLI entry point are all kd.
Release notes for the installed version: kd /release-notes. The canonical changelog lives at kd/resources/CHANGELOG.md.
Configure
# Scaffold a project-local config in the current directory.
kd init
# Or set via environment (overrides workspace + global config).
export KD_TOKEN=your_token
export KD_CONNECTION=main
Global config lives at ~/.config/kd/config.yaml; workspace config lives at .kd/config.yaml.
Usage
CLI
# Projects
kd /project list
kd /project show FB
# Issues
kd /issue list --project FB --query "#Unresolved"
kd /issue create "Fix router configuration" -p FB --type Task
kd /issue show FB-1
# Time tracking
kd /time log FB-1 45 --type Development --description "Router reconfiguration"
# Articles
kd /article list --project CMCSA
kd /article push guide.md --project CMCSA --title "Setup Guide" --tag "type:guide"
kd /article pull FB-A-42 > setup.md
# Tags
kd /tag list
kd /tag articles type:case --project CMCSA
# Saved queries
kd /query list
kd /query issues "Sprint 47" --project FB
# Primer (workspace knowledge, LLM context)
kd /primer/note add "Sprint field is called 'Board'"
kd /primer/article add FB-A-42 --summary "Architecture Overview"
kd /primer show
# Cross-entity search
kd /search "router" --types issue,article --project FB
# Output formats
kd /project list --output json | jq '.[].key'
kd /issue list --output yaml
Python SDK
The CLI is a thin wrapper over a Python library. Same capabilities, programmatic interface:
from kd import YouTrackClient
client = YouTrackClient(
url="https://your-instance.youtrack.cloud",
token="your_token",
)
projects = client.projects.list()
issue = client.issues.create(project="FB", summary="Fix router config")
client.time.log(issue_id="FB-1", minutes=45, work_type="Development")
articles = client.tags.articles(["type:case"], project="CMCSA")
results = client.search.search("router", types=["issue", "article"])
Development
pytest tests/ -v --tb=short
ruff format kd/ tests/
ruff check --fix kd/ tests/
mypy kd/
Updated: 2026-04-14
Project details
Release history Release notifications | RSS feed
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 kd_cli-2.3.0.tar.gz.
File metadata
- Download URL: kd_cli-2.3.0.tar.gz
- Upload date:
- Size: 144.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c7607a382c0d7d3c26e302cdaea07afd7ad4343f59520135ad56725ce6a4009
|
|
| MD5 |
70a0cc44147dd844da9a21a63cf219de
|
|
| BLAKE2b-256 |
4bd259871272839d7388fa8d1aed690ac4c4bb73ca1432c3c755baacff184e22
|
Provenance
The following attestation bundles were made for kd_cli-2.3.0.tar.gz:
Publisher:
publish.yml on IntellectSolutionsCom/kd-release
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kd_cli-2.3.0.tar.gz -
Subject digest:
8c7607a382c0d7d3c26e302cdaea07afd7ad4343f59520135ad56725ce6a4009 - Sigstore transparency entry: 1339646222
- Sigstore integration time:
-
Permalink:
IntellectSolutionsCom/kd-release@61f7ff7d0c84474977dda789bb7709640b774e30 -
Branch / Tag:
refs/tags/v2.3.0 - Owner: https://github.com/IntellectSolutionsCom
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@61f7ff7d0c84474977dda789bb7709640b774e30 -
Trigger Event:
push
-
Statement type:
File details
Details for the file kd_cli-2.3.0-py3-none-any.whl.
File metadata
- Download URL: kd_cli-2.3.0-py3-none-any.whl
- Upload date:
- Size: 168.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0cbb449b77012273621e2af10e12b9914cee11f1a373b97491764df3ca4d255e
|
|
| MD5 |
8cd46f96272759027de7f6f803a66fa2
|
|
| BLAKE2b-256 |
7073e894469dfe5e95291df43d861d5f6aa6cbceb868d2c738b5e6f5619de4d7
|
Provenance
The following attestation bundles were made for kd_cli-2.3.0-py3-none-any.whl:
Publisher:
publish.yml on IntellectSolutionsCom/kd-release
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kd_cli-2.3.0-py3-none-any.whl -
Subject digest:
0cbb449b77012273621e2af10e12b9914cee11f1a373b97491764df3ca4d255e - Sigstore transparency entry: 1339646226
- Sigstore integration time:
-
Permalink:
IntellectSolutionsCom/kd-release@61f7ff7d0c84474977dda789bb7709640b774e30 -
Branch / Tag:
refs/tags/v2.3.0 - Owner: https://github.com/IntellectSolutionsCom
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@61f7ff7d0c84474977dda789bb7709640b774e30 -
Trigger Event:
push
-
Statement type: