# changelog ## v0.22.3 (2026-03-02) ### changes - allow coercible `chat_id` values in config [#186](https://github.com/banteg/takopi/pull/186) ### fixes - make `[transports.telegram]` optional for external transports and validate it only when telegram is used [#177](https://github.com/banteg/takopi/pull/177) - deny root-level files with default `deny_globs` [#216](https://github.com/banteg/takopi/pull/216) ## v0.22.2 (2026-02-24) ### fixes - prevent Telegram `400 Bad Request` failures on local/relative markdown links by dropping invalid `text_link` entities [#214](https://github.com/banteg/takopi/pull/214) ## v0.22.1 (2026-02-10) ### fixes - preserve ordered list numbering when nested list indentation is malformed in telegram render output [#202](https://github.com/banteg/takopi/pull/202) ## v0.22.0 (2026-02-10) ### changes - support Codex `phase` values and unknown action kinds in commentary rendering [#201](https://github.com/banteg/takopi/pull/201) ## v0.21.5 (2026-02-08) ### fixes - dedupe redelivered telegram updates to prevent duplicate runs in DMs [#198](https://github.com/banteg/takopi/pull/198) ### changes - read package version from metadata instead of a hardcoded `__version__` constant ### docs - rotate telegram invite link ## v0.21.4 (2026-01-22) ### changes - add allowed user gate to telegram [#179](https://github.com/banteg/takopi/pull/179) ## v0.21.3 (2026-01-21) ### fixes - ignore implicit topic root replies in telegram [#175](https://github.com/banteg/takopi/pull/175) ## v0.21.2 (2026-01-20) ### fixes - clear chat sessions on cwd change [#172](https://github.com/banteg/takopi/pull/172) ### docs - add takopi-slack plugin to reference [#168](https://github.com/banteg/takopi/pull/168) ## v0.21.1 (2026-01-18) ### fixes - separate telegram voice transcription client [#166](https://github.com/banteg/takopi/pull/166) - disable telegram link previews by default [#160](https://github.com/banteg/takopi/pull/160) ### docs - align engine terminology in telegram and docs [#162](https://github.com/banteg/takopi/pull/162) - add takopi-discord plugin to plugins reference [#164](https://github.com/banteg/takopi/pull/164) ## v0.21.0 (2026-01-16) ### changes - add `takopi config` subcommand [#153](https://github.com/banteg/takopi/pull/153) - make telegram /ctx work everywhere [#159](https://github.com/banteg/takopi/pull/159) - improve telegram command planning and testability [#158](https://github.com/banteg/takopi/pull/158) - simplify telegram loop and jsonl runner [#155](https://github.com/banteg/takopi/pull/155) - refactor telegram schemas and parsing with msgspec [#156](https://github.com/banteg/takopi/pull/156) ### tests - improve coverage and raise threshold to 80% [#154](https://github.com/banteg/takopi/pull/154) - stabilize mutmut runs and extend telegram coverage [#157](https://github.com/banteg/takopi/pull/157) ### docs - add opengraph meta fallbacks [#150](https://github.com/banteg/takopi/pull/150) ## v0.20.0 (2026-01-15) ### changes - add telegram mentions-only trigger mode [#142](https://github.com/banteg/takopi/pull/142) - add telegram /model and /reasoning overrides [#147](https://github.com/banteg/takopi/pull/147) - coalesce forwarded telegram messages [#146](https://github.com/banteg/takopi/pull/146) - export plugin utilities for transport development [#137](https://github.com/banteg/takopi/pull/137) ### fixes - handle forwarded uploads for telegram [#149](https://github.com/banteg/takopi/pull/149) - preserve directives for voice transcripts [#141](https://github.com/banteg/takopi/pull/141) - resolve claude.cmd via shutil.which on windows [#124](https://github.com/banteg/takopi/pull/124) ### docs - add takopi-scripts plugin to plugins list [#140](https://github.com/banteg/takopi/pull/140) ## v0.19.0 (2026-01-15) ### changes - overhaul onboarding with persona-based setup flows [#132](https://github.com/banteg/takopi/pull/132) - add queued cancel placeholder for Telegram runs [#136](https://github.com/banteg/takopi/pull/136) - prefix Telegram voice transcriptions for agent awareness [#135](https://github.com/banteg/takopi/pull/135) ### docs - refresh onboarding docs with new widgets and hero flow [#138](https://github.com/banteg/takopi/pull/138) - fix docs site mobile layout and font consistency [#139](https://github.com/banteg/takopi/pull/139) - link to takopi.dev docs site ## v0.18.0 (2026-01-13) ### changes - add per-chat and per-topic default agent via `/agent set` command [#109](https://github.com/banteg/takopi/pull/109) - add session resume shorthand for pi runner [#113](https://github.com/banteg/takopi/pull/113) - expose `sender_id` and `raw` fields on `MessageRef` for plugins [#112](https://github.com/banteg/takopi/pull/112) ### fixes - recreate stale topic bindings when topic is deleted and recreated [#127](https://github.com/banteg/takopi/pull/127) - use stdout session header for pi runner [#126](https://github.com/banteg/takopi/pull/126) ### docs - restructure docs into diataxis format and switch to zensical [#121](https://github.com/banteg/takopi/pull/121) [#125](https://github.com/banteg/takopi/pull/125) ## v0.17.1 (2026-01-12) ### fixes - fix telegram /new command crash [#106](https://github.com/banteg/takopi/pull/106) - track telegram sessions for plugin runs [#107](https://github.com/banteg/takopi/pull/107) - align telegram prompt upload resume flow [#105](https://github.com/banteg/takopi/pull/105) ## v0.17.0 (2026-01-12) ### changes - add chat session mode (`session_mode = "chat"`) for auto-resume per chat without replying, reset with `/new` [#102](https://github.com/banteg/takopi/pull/102) - add `message_overflow = "split"` to send long responses as multiple messages instead of trimming [#101](https://github.com/banteg/takopi/pull/101) - add `show_resume_line` option to hide resume lines when auto-resume is available [#100](https://github.com/banteg/takopi/pull/100) - add `auto_put_mode = "prompt"` to start a run with the caption after uploading a file [#97](https://github.com/banteg/takopi/pull/97) - expose `thread_id` to plugins via run context [#99](https://github.com/banteg/takopi/pull/99) - use tomli-w for config serialization [#103](https://github.com/banteg/takopi/pull/103) - add `voice_transcription_model` setting for local whisper servers [#98](https://github.com/banteg/takopi/pull/98) ### docs - document chat sessions, message overflow, and voice transcription model settings ## v0.16.0 (2026-01-12) ### fixes - harden telegram file transfer handling [#84](https://github.com/banteg/takopi/pull/84) ### changes - simplify runtime, config, and telegram internals [#85](https://github.com/banteg/takopi/pull/85) - refactor telegram boundary types [#90](https://github.com/banteg/takopi/pull/90) ### docs - add tips section to user guide - rework readme ## v0.15.0 (2026-01-11) ### changes - add telegram file transfer support [#83](https://github.com/banteg/takopi/pull/83) ### docs - document telegram file transfers [#83](https://github.com/banteg/takopi/pull/83) ## v0.14.1 (2026-01-10) ### changes - add topic scope and thread-aware replies for telegram topics [#81](https://github.com/banteg/takopi/pull/81) ### docs - update telegram topics docs and user guide for topic scoping [#81](https://github.com/banteg/takopi/pull/81) ## v0.14.0 (2026-01-10) ### changes - add telegram forum topics support with `/topic` command for binding threads to projects/branches, persistent resume tokens per topic, and `/ctx` for inspecting or updating bindings [#80](https://github.com/banteg/takopi/pull/80) - add inline cancel button to progress messages [#79](https://github.com/banteg/takopi/pull/79) - add config hot-reload via watchfiles [#78](https://github.com/banteg/takopi/pull/78) ### docs - add user guide and telegram topics documentation [#80](https://github.com/banteg/takopi/pull/80) ## v0.13.0 (2026-01-09) ### changes - add per-project chat routing [#76](https://github.com/banteg/takopi/pull/76) ### fixes - hardcode codex exec flags [#75](https://github.com/banteg/takopi/pull/75) - reuse project root for current branch when resolving worktrees [#77](https://github.com/banteg/takopi/pull/77) ### docs - normalize casing in the readme and changelog ## v0.12.0 (2026-01-09) ### changes - add optional telegram voice note transcription (routes transcript like typed text) [#74](https://github.com/banteg/takopi/pull/74) ### fixes - fix plugin allowlist matching and windows session paths [#72](https://github.com/banteg/takopi/pull/72) ### docs - document telegram voice transcription settings [#74](https://github.com/banteg/takopi/pull/74) ## v0.11.0 (2026-01-08) ### changes - add entrypoint-based plugins for engines/transports plus a `takopi plugins` command and public API docs [#71](https://github.com/banteg/takopi/pull/71) ### fixes - create pi sessions under the run base dir [#68](https://github.com/banteg/takopi/pull/68) - skip git repo checks for codex runs [#66](https://github.com/banteg/takopi/pull/66) ## v0.10.0 (2026-01-08) ### changes - add transport registry with `--transport` overrides and a `takopi transports` command [#69](https://github.com/banteg/takopi/pull/69) - migrate config loading to pydantic-settings and move telegram credentials under `[transports.telegram]` [#65](https://github.com/banteg/takopi/pull/65) - include project aliases in the telegram slash-command menu with validation and limits [#67](https://github.com/banteg/takopi/pull/67) ### fixes - validate worktree roots instead of treating nested paths as worktrees [#63](https://github.com/banteg/takopi/pull/63) - harden onboarding with clearer config errors, safe backups, and refreshed command menu wording [#70](https://github.com/banteg/takopi/pull/70) ### docs - add architecture and lifecycle diagrams - call out the default worktrees directory [#64](https://github.com/banteg/takopi/pull/64) - document the transport registry and onboarding changes [#69](https://github.com/banteg/takopi/pull/69) ## v0.9.0 (2026-01-07) ### projects and worktrees - register repos with `takopi init ` and target them via `/project` directives - route runs to git worktrees with `@branch` — takopi resolves or creates worktrees automatically - replies preserve context via `ctx: project @branch` footers, no need to repeat directives - set `default_project` to skip the `/project` prefix entirely - per-project `default_engine` and `worktree_base` configuration ### changes - transport/presenter protocols plus transport-agnostic `exec_bridge` - move telegram polling + wiring into `takopi.telegram` with transport/presenter adapters - list configured projects in the startup banner ### fixes - render `ctx:` footer lines consistently (backticked + hard breaks) and include them in final messages ### breaking - remove `takopi.bridge`; use `takopi.runner_bridge` and `takopi.telegram` instead ### docs - add a projects/worktrees guide and document `takopi init` behavior in the readme ## v0.8.0 (2026-01-05) ### changes - queue telegram requests with rate limits and retry-after backoff [#54](https://github.com/banteg/takopi/pull/54) ### docs - improve documentation coverage [#52](https://github.com/banteg/takopi/pull/52) - align runner guide with factory pattern - add missing pr links in the changelog ## v0.7.0 (2026-01-04) ### changes - migrate logging to structlog with structured pipelines and redaction [#46](https://github.com/banteg/takopi/pull/46) - add msgspec schemas for jsonl decoding across runners [#37](https://github.com/banteg/takopi/pull/37) ## v0.6.0 (2026-01-03) ### changes - interactive onboarding: run `takopi` to set up bot token, chat id, and default engine via guided prompts [#39](https://github.com/banteg/takopi/pull/39) - lockfile to prevent multiple takopi instances from racing the same bot token [#30](https://github.com/banteg/takopi/pull/30) - re-run onboarding anytime with `takopi --onboard` ## v0.5.3 (2026-01-02) ### changes - default claude allowed tools to `["Bash", "Read", "Edit", "Write"]` when not configured [#29](https://github.com/banteg/takopi/pull/29) ## v0.5.2 (2026-01-02) ### changes - show not installed agents in the startup banner (while hiding them from slash commands) ### fixes - treat codex reconnect notices as non-fatal progress updates instead of errors [#27](https://github.com/banteg/takopi/pull/27) - avoid crashes when codex tool/file-change events omit error fields [#27](https://github.com/banteg/takopi/pull/27) ## v0.5.1 (2026-01-02) ### changes - relax telegram ACL to check chat id only, enabling use in group chats and channels [#26](https://github.com/banteg/takopi/pull/26) - improve onboarding documentation and add tests [#25](https://github.com/banteg/takopi/pull/25) ## v0.5.0 (2026-01-02) ### changes - add an opencode runner via the `opencode` cli with json event parsing and resume support [#22](https://github.com/banteg/takopi/pull/22) - add a pi agent runner via the `pi` cli with jsonl streaming and resume support [#24](https://github.com/banteg/takopi/pull/24) - document the opencode and pi runners, event mappings, and stream capture tips ### fixes - fix path relativization so progress output does not strip sibling directories [#23](https://github.com/banteg/takopi/pull/23) - reduce noisy debug logging from markdown_it/httpcore ## v0.4.0 (2026-01-02) ### changes - add auto-router runner selection with configurable default engine [#15](https://github.com/banteg/takopi/pull/15) - make auto-router the default entrypoint; subcommands or `/{engine}` prefixes override for new threads - add `/cancel` + `/{engine}` command menu sync on startup - show engine name in progress and final message headers - omit progress/action log lines from final output for cleaner answers [#21](https://github.com/banteg/takopi/pull/21) ### fixes - improve codex exec error rendering with stderr extraction [#18](https://github.com/banteg/takopi/pull/18) - preserve markdown formatting and resume footer when trimming long responses [#20](https://github.com/banteg/takopi/pull/20) ## v0.3.0 (2026-01-01) ### changes - add a claude code runner via the `claude` cli with stream-json parsing and resume support [#9](https://github.com/banteg/takopi/pull/9) - auto-discover engine backends and generate cli subcommands from the registry [#12](https://github.com/banteg/takopi/pull/12) - add `BaseRunner` session locking plus a `JsonlSubprocessRunner` helper for jsonl subprocess engines - add jsonl stream parsing and subprocess helpers for runners - lazily allocate per-session locks and streamline backend setup/install metadata - improve startup message formatting and markdown rendering - add a debug onboarding helper for setup troubleshooting ### breaking - runner implementations must define explicit resume parsing/formatting (no implicit standard resume pattern) ### fixes - stop leaking a hidden `engine-id` cli option on engine subcommands ### docs - add a runner guide plus claude code docs (runner, events, stream-json cheatsheet) - clarify the claude runner file layout and add guidance for jsonl-based runners - document "minimal" runner mode: started+completed only, completed-only actions allowed ## v0.2.0 (2025-12-31) ### changes - introduce runner protocol for multi-engine support [#7](https://github.com/banteg/takopi/pull/7) - normalized event model (`started`, `action`, `completed`) - actions with stable ids, lifecycle phases, and structured details - engine-agnostic bridge and renderer - add `/cancel` command with progress message targeting [#4](https://github.com/banteg/takopi/pull/4) - migrate async runtime from asyncio to anyio [#6](https://github.com/banteg/takopi/pull/6) - stream runner events via async iterators (natural backpressure) - per-thread job queues with serialization for same-thread runs - render resume as `codex resume ` command lines - various rendering improvements including file edits ### breaking - require python 3.14+ - remove `--profile` flag; configure via `[codex].profile` only ### fixes - serialize new sessions once resume token is known - preserve resume tokens in error renders [#3](https://github.com/banteg/takopi/pull/3) - preserve file-change paths in action events [#2](https://github.com/banteg/takopi/pull/2) - terminate codex process groups on cancel (posix) - correct resume command matching in bridge ## v0.1.0 (2025-12-29) ### features - telegram bot bridge for openai codex cli via `codex exec` - stateless session resume via `` `codex resume ` `` lines - real-time progress updates with ~2s throttling - full markdown rendering with telegram entities (markdown-it-py + sulguk) - per-session serialization to prevent race conditions - interactive onboarding guide for first-time setup - codex profile configuration - automatic telegram token redaction in logs - cli options: `--debug`, `--final-notify`, `--version`