Skip to main content

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). One logbook covers every folder on the machine — chats store cwd; you do not get a server per repo. Config lives in ~/.dint. If port 5100 already has someone else's logbook, dint picks the next free port and writes it to ~/.dint/.env. 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 opens a chat in this folder (starts logbook + serve). Inside: /engine, /job, /chats, /new, /help. DINT_ENGINE picks the default CLI. 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

dint_cli-0.1.3.tar.gz (35.3 kB view details)

Uploaded Source

Built Distribution

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

dint_cli-0.1.3-py3-none-any.whl (32.8 kB view details)

Uploaded Python 3

File details

Details for the file dint_cli-0.1.3.tar.gz.

File metadata

  • Download URL: dint_cli-0.1.3.tar.gz
  • Upload date:
  • Size: 35.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.5

File hashes

Hashes for dint_cli-0.1.3.tar.gz
Algorithm Hash digest
SHA256 64b40939e480a5bc8080d4bf2eace565d11142e3893103332f8c9025b0e1193b
MD5 6f03a4423d7567b0d79ac72bd1837035
BLAKE2b-256 f62cd6062a2521ec80c20c2b9fb55612e4200406cd64cece562b4c1e5011ccb9

See more details on using hashes here.

File details

Details for the file dint_cli-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: dint_cli-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 32.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.5

File hashes

Hashes for dint_cli-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 aaafb3fd81282aaea4d58aee60cfde59c46f1421ed6544427b0f55acc4f7943f
MD5 be3944f6251af870036d96ad669d0bc6
BLAKE2b-256 1ef5f75d2cb1119763e8aed41d2d178010655d3afaf096945efeb3dab2d14900

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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