dint
One local chat API. Engine CLIs do the work. Codicent Logbook is the ledger.
Site: izaxon.github.io/dint
Router.start_chat / send / cancel
│
├─ Engine Claude / Codex / Grok / Copilot CLI (resume via session id)
└─ Logbook post_message / get_messages / get_history
│
└─ ChatLog #user vs #bot, parentId chain, GetMessageHistory
Coding agents already ship as official CLIs. Each one keeps its own sessions, transcripts, and resume ids. dint does not reimplement them. It starts a chat, streams a turn, and writes every message to Logbook as an append-only thread. A job is just a tagged Logbook message (#job); dint serve runs it.
v0: local, four engines, webhook jobs. Not a hosted product and not a desktop UI.
Install
Python 3.11+ and pipx, at least one engine CLI on PATH (grok, claude, codex, or copilot), and logbook-server on PATH.
# Windows
iwr https://logbook.codicent.ai/install.ps1 | iex
# Linux / macOS
curl -fsSL https://logbook.codicent.ai/install.sh | bash
pipx install dint-cli
The PyPI name is dint-cli (dint is taken). From a checkout: pipx install . or pip install -e ".[dev]".
Then, in any folder:
dint
That starts logbook-server and a background dint serve if they are not running, then opens a chat in the current directory (same idea as running grok in a new folder). Config lives in ~/.dint. dint grok "Summarize this repo" is a one-shot; dint status checks Logbook, serve, and engine CLIs.
Chat
dint
dint grok "Summarize this repo"
dint start grok .
dint send <chat_id> "Summarize this repo"
dint chats
dint list <chat_id>
dint show <chat_id>
Bare dint resumes the latest chat for this folder, or starts one with the first engine CLI on PATH (DINT_ENGINE to pick). /new starts a fresh chat; /quit exits. Logbook and dint serve keep running in the background.
Python:
from dint import Router
r = Router()
chat_id = r.start_chat("claude", cwd=".")
for ev in r.send(chat_id, "Summarize this repo"):
print(ev.type, ev.text)
Jobs
dint and dint job start a background dint serve if it is not running. Enqueue from the CLI or by posting a #job in Logbook. Run dint serve in the foreground if you want the webhook logs.
dint serve
dint job grok "What can you do?"
# job <logbook-id>
# chat <chat_id>
dint list <chat_id>
From Logbook:
@test #job #claude
{"engine":"claude","cwd":"/src/myproj","prompt":"Summarize this repo"}
or @test #job #grok Summarize this repo.
dint serve listens on http://127.0.0.1:8787/webhook. If register fails, start logbook-server with LOGBOOK_WEBHOOK_URL=http://127.0.0.1:8787/webhook. Completed turns are stored on #chat-<id> like a normal send. Ack is #job-run (not #job, so it does not loop).
Agents should use Logbook MCP (post_message / get_messages) rather than a dint MCP. The contract is in .grok/skills/dint-jobs/SKILL.md.
Ledger
Each chat is a Codicent-style thread: the header is the root; every later message sets parentId to the previous one. User turns are tagged #user, engine replies #bot. dint list reads #chat-<id> (full body) and merges GetMessageHistory for the parent chain — history alone can truncate long bot JSON.
| Env | Default |
|---|---|
DINT_HOME |
~/.dint |
DINT_ENGINE |
first of grok, claude, copilot, codex on PATH |
LOGBOOK_URL |
http://127.0.0.1:5100 |
LOGBOOK_API_KEY |
generated on first run |
LOGBOOK_PROJECT |
dint |
LOGBOOK_TRANSPORT |
rest |
DINT_JOBS_PORT |
8787 |
LOGBOOK_WEBHOOK_SECRET |
(optional HMAC) |
License
MIT. See LICENSE.
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 dint_cli-0.1.0.tar.gz.
File metadata
- Download URL: dint_cli-0.1.0.tar.gz
- Upload date:
- Size: 32.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e97af288fff5451717089f5c202810bd4b25fabcfa1831988de2ded66d0fb383
|
|
| MD5 |
ea985efeee45be41aa8be44db499543b
|
|
| BLAKE2b-256 |
fcc52be1ea171c82980ac70689e5ac56054d7fa1dab4158e7a95bb708c80d9d9
|
File details
Details for the file dint_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dint_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 30.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aabee41f1a62a6e38f12da1be5d2ad4f6e7926bbeac446786f9bd3fa593d3adc
|
|
| MD5 |
9a36c45cef67b781e2e8e8a979dcb8b1
|
|
| BLAKE2b-256 |
2bab92bc95d319ddcdb8890257efe1a9a9e985e3f8b8d802d9c25e7e8e980c18
|