Merge pull request #235 from griffinwork40/afk/fix-usage-limit-hang (77b7b3b)
Fixed
terminate query generator on interrupt during usage-limit wait (c462ebd)
2026-06-21
v4.27.1
2026-06-21
Changed
Merge pull request #228 from griffinwork40/fix/compose-cwd-reanchor (c46e4f3)
Fixed
re-anchor compose DAG nodes on cwd change (e3d57f3)
2026-06-21
v4.27.0
2026-06-21
Added
surface hidden REPL features in help, hints & banner (0688398)
add read-only SessionEnd run receipt (611ad70)
Changed
Merge pull request #230 from griffinwork40/feat/tui-discoverability (f630689)
Merge pull request #234 from griffinwork40/feat/session-end-run-receipt (6b21e8e)
2026-06-21
v4.26.1
2026-06-21
Changed
Merge pull request #232 from griffinwork40/fix/tui-context-visibility (46038c4)
Merge pull request #227 from griffinwork40/afk/claude-login-update (d478ae6)
Merge pull request #233 from griffinwork40/chore/tui-remove-dead-repl (19fbe66)
remove dead legacy readline REPL & unused jest devDeps (5e8edea)
use claude login for the OAuth flow in quickstart (6661928)
Fixed
timelier context-usage signal & overlay-safe overflow warning (6e759de)
2026-06-21
v4.26.0
2026-06-21
Added
add cards list --regressed observability view (de0b2d4)
Changed
Merge pull request #226 from griffinwork40/improve/cards-regressed-view (f0c3765)
2026-06-21
v4.25.0
2026-06-21
Added
Shift+Tab cycles permission modes (default → plan → bypass) (0b3e019)
Changed
Shift+Tab now cycles permission modes (default → plan → bypass) instead of toggling plan mode on/off; AFK (autonomous) stays on /afk and, if active, Shift+Tab exits it cleanly to default
Merge pull request #225 from griffinwork40/afk/20260620-194641-1e7273 (b98d443)
Merge pull request #215 from griffinwork40/afk/20260618-180522-9c6c46 (2cb373b)
Merge pull request #219 from griffinwork40/feat/bypass-grant-all (61e9add)
Merge main into afk/20260618-180522-9c6c46 (resolve type-ahead queue conflict) (5d4d70a)
correct stale bypass-by-default claims; document /bypass (bed6aa3)
Fixed
make the live /bypass toggle actually change enforcement (a6de8c7)
keep queued mirror in sync on paste + idle-submit paths (fcbf295)
2026-06-19
v4.21.1
2026-06-19
Changed
Merge pull request #218 from griffinwork40/fix/subagents-non-interactive (3e4f8e8)
Fixed
make forked sub-agents non-interactive (96d7b3a)
2026-06-19
v4.21.0
2026-06-19
Added
interactive usage-limit picker (C) (de2d3be)
make usage-limit pause actionable at the keyboard (A+B) (4ecc2d2)
Changed
Merge pull request #217 from griffinwork40/afk/20260618-163800-fba9fe (80f4e95)
Fixed
guard runPicker promise with .catch() to avoid unhandled REPL rejection (3d92e53)
2026-06-19
v4.20.0
2026-06-19
Added
persist session origin/actor into state artifacts (Stage D) (d71a734)
record origin + actor on routing + skill-invocation rows (Stage B+C) (696953f)
record session origin + actor on witness trace (Stage A) (f5fa3a1)
Changed
Merge pull request #214 from griffinwork40/afk-20260618-123344-8c609e (7ff9ba5)
Merge remote-tracking branch 'origin/main' into afk-20260618-123344-8c609e (de10091)
mark Stage D done (session identity in state artifacts) (4c042c1)
mark Stage B+C done (origin/actor on JSONL telemetry) (5e34188)
session-identity normalization plan (Stage A done; B-D scoped) (abf3797)
Fixed
make v2→v3 actor-column migration concurrency-safe (8f1fed9)
2026-06-19
v4.19.1
2026-06-19
Changed
Merge pull request #216 from griffinwork40/fix/telegram-presence-surface (03629b6)
Merge pull request #213 from griffinwork40/chore/mailmap-attribution (629ae9c)
add .mailmap to re-attribute afk-port port commit (772cf55)
Fixed
tag provider surface as 'telegram' for presence/watch (2162ab5)
2026-06-18
v4.19.0
2026-06-18
Added
render MCP form enum/boolean fields as arrow-key selector (47546b9)
Changed
Merge pull request #212 from griffinwork40/afk/20260618-153242-30da7d (2cff1df)
2026-06-18
v4.18.3
2026-06-18
Changed
Merge pull request #208 from griffinwork40/refactor/extract-resolve-params (2acc9a0)
extract pure param resolvers into resolve-params.ts (c5462c0)
2026-06-18
v4.18.2
2026-06-18
Changed
Merge pull request #211 from griffinwork40/simplify/terminal-compositor-dedup (6da7b60)
centralize committed-band CUP+EL escape into eraseAndPaintRow (57f417e)
2026-06-18
v4.18.1
2026-06-18
Changed
Merge pull request #207 from griffinwork40/refactor/split-diagnose-into-phases (421e4b5)
Merge pull request #210 from griffinwork40/refactor/split-tool-lane-overlay-test (0d9e6d0)
extract overlay-rendering cluster into its own test file (58b90e2)
split diagnose/index.ts into modules (e95ef57)
2026-06-18
v4.18.0
2026-06-18
Added
scope /resume session list to current working directory (3ba3674)
Changed
Merge pull request #209 from griffinwork40/afk/20260618-123959-6040de (e5c19af)
2026-06-18
v4.17.0
2026-06-18
Added
Path-access approval: typed file tools (read_file, write_file, edit_file, list_directory, glob, grep) targeting a path outside the session's granted roots now prompt for approval — once / session / persist / deny — via the REPL or Telegram elicitation surface. Persisted grants are stored in ~/.afk/config/permissions.json and replayed on future sessions
Bash restriction hook: hard-blocks interpreter one-liners (python -c, node -e, ruby -e, perl -e, sh -c, bash -c, lua -e, ...) and restricted-root substrings (~/.ssh, ~/.aws, ...), routing the model back to the prompt-able typed file tools
AFK_DISABLE_BASH_INTERPRETER_GUARD env var — lifts only the bash interpreter-eval denylist while keeping the rest of path-approval enabled
AFK_DISABLE_PATH_APPROVAL env var — disables the path-approval + bash-restriction hooks entirely (for headless flows that need wide-open file access)
AFK_FORCE_BASH_INTERPRETER_GUARD env var — opts headless surfaces back into the interpreter denylist
elicit user approval for restricted-path tool calls (port afk-workshop#477) (42c013f)
Changed
Merge pull request #202 from griffinwork40/afk-port/pr-477 (e443d01)
Merge remote-tracking branch 'origin/main' into afk-port/pr-477 (d3439cb)
Merge pull request #204 from griffinwork40/afk-port/pr-477-review (086ca4e)
add /config and /doctor slash commands (port afk-workshop#702) (#77) (907dc5f)
2026-06-10
v3.92.4
2026-06-10
Fixed
schedule live-sync no longer fails silently: create_schedule/cancel_schedule results now include daemonSynced + syncDetail (and a syncNote when the change will only apply on the next daemon start); transient afk daemon --once runs no longer overwrite-then-delete the service daemon's port-discovery file (new writePortFile option + content-guarded unlink); daemon POST /tasks accepts cronExpression as an alias for cron; creating a disabled schedule no longer live-registers it into the running daemon; afk schedule CLI subcommands (add/remove/enable/disable) now surface live-sync status via the shared http-client instead of failing silently; creating a disabled schedule now sends an idempotent DELETE to unregister any stale live daemon registration; afk schedule add --disabled now matches the tool handler (idempotent DELETE instead of an unconditional POST) so a disabled task is never live-registered into — and fired by — a running daemon; the CLI add/enable live-sync now forwards notifyOn so a (re)registered task keeps its notification setting until the daemon reloads from disk
stop schedule live-sync from failing silently; guard the shared port file (#76) (3c44511)
2026-06-10
v3.92.3
2026-06-10
Fixed
commit content to scrollback in banner sessions — eliminates blank-gap, duplication, and lost-commit regressions when the REPL prints a banner before arming (#74) (2411b88)
never reap a worktree hosting a live session (#73) (6f82cb8)
2026-06-10
v3.92.2
2026-06-10
Changed
Port afk-workshop#756: add fix:pins hash-pin regen + check (#69) (c38a12c)
/plan off saves the plan to a file then implements it (#55) (266249d)
Changed
/plan off now exits plan mode, saves the plan you developed to a markdown file under <cwd>/.afk/plans/, and implements it — replacing the closure-summary ritual (which only emitted a 3-section recap to the transcript). The mode flips to defaultbefore the seeded turn so writes are permitted for the save + implementation. Shift+Tab still exits plan mode without saving or implementing (the manual-takeover escape hatch). The deferred-flip pendingPlanExit machinery is removed.
2026-06-09
v3.90.2
2026-06-09
Added
telegram: configurable outbound notification routing via telegram.notify in afk.config.json (mode, primaryChatId, targets) plus AFK_TELEGRAM_NOTIFY_MODE / AFK_TELEGRAM_PRIMARY_CHAT_ID env overrides. New pure resolver src/telegram/notify-routing.ts.
route outbound notifications to a primary chat, not all allowed chats (#54) (e542bb2)
Changed
telegram: outbound notifications (daemon alerts, send_telegram, OAuth prompts, /review, digests) now default to a single primary chat — the first private/DM chat in AFK_TELEGRAM_ALLOWED_CHAT_IDS — instead of broadcasting to every allowed chat. Separates the inbound allowlist (who may command the bot) from outbound delivery. Single-chat setups are unaffected; multi-chat setups can restore fan-out with mode: "broadcast" (or AFK_TELEGRAM_NOTIFY_MODE=broadcast).
clamp diff body lines to terminal width in nested tool-lane paths (#9) (a3b38b5)
2026-06-06
v3.83.0
2026-06-06
Added
flip default skill execution from fork to load (#7) (0deb564)
Changed
Update SKILL.md (d987a3e)
Add context field to review skill documentation (13a5ae6)
2026-06-05
v3.82.0
2026-06-05
Added
flip gather + parallelize to context: load (#4) (4006c37)
2026-06-05
v3.81.1
2026-06-05
Fixed
anchor flat-leaf tool roots with col-0 ◉ beside a nesting root (#3) (c1d84e0)
2026-06-05
v3.81.0
2026-06-05
Added
add auto-release workflow for automated versioning and publishing (4d93403)
Changed
hermetically lock AFK_INTERNAL tier in audience-gate tests (#1) (aeeaa41)
Update README to simplify API key instructions (02ba5f9)
Revise README for clearer description of Agent AFK (a7da9ce)
Initial public release — Agent AFK (0a23cff)
Fixed
make HOT.md non-fatal — truncation covenant (#2) (0f91a0f)
2026-06-05
v3.80.6
2026-06-05
Fixed
exclude internal-tier skills from the published npm bundle (#713) (952079a3)
2026-06-04
v3.80.5
2026-06-04
Changed
Open-core relicense: Apache-2.0 + DCO + community files (#691) (3e4e4200)
Fixed
emit literal apostrophe in OG meta to stop Reddit double-encoding (#712) (3c634593)
2026-06-04
v3.80.4
2026-06-04
Fixed
ship bundled-plugins (the awa-bundled orchestration skills) in the published npm tarball — build:dist (the publish path) never copied src/bundled-plugins/, so npm install got zero bundled skills; both build paths now route through one shared copy helper, guarded by a unit test and a publish-bundle CI assertion (#703) (00211e3)
emit twitter:url meta tag (last #514 migration parity gap) (#710) (05e24c3)
launchctl-throws test uses telegram, not daemon (b2341b0)
2026-05-21
v3.0.0
2026-05-21
Added
afk service install/uninstall/status — macOS LaunchAgent install for always-on afk telegram / afk daemon (auto-start on login, relaunch on crash). Paired with /service-setup skill that walks the user through install end-to-end. (dc69966, dfcedff, #346)
Pixel-art goblin mascot in the interactive loading screen via half-block renderer (10×10 sprite, pupils + cheek highlights). (#354)
Loading-screen tips + dropdown tooltip hints in the CLI for first-run discoverability. (#294)
Daemon pull-trigger mode with a queue store — daemon can now drain a persisted queue instead of cron-only execution. (issue #337, slice 1)
OpenAI-compatible provider REPL surface parity with anthropic-direct (streaming, tool dispatch, auth diagnose). Closes the GPT/o-series migration off the legacy openai-codex provider. (3e932be)
PLUGIN_ROOT env injected into plugin-skill subagent processes so vendored plugin assets can resolve their own root.
Changed
query.ts decomposed into single-responsibility units: repairOrphanToolUses (5e2de54), SessionState bag (e456201), AbortCoordinator (739d600), RetryLayer for OAuth 401 + 429 (5d2fa8d), and compactHistory handler (95bf4b9). Zero behavior change; the monolith is gone.
Schema-as-source-of-truth for tool classification.SAFE_TOOLS, WRITE_TOOLS, and the read-tool predicate are now derived from AnthropicToolDef.{category, concurrencySafe, riskClass} rather than 6+ drifting hand-maintained lists. (#361)
sumProviderUsage promoted out of a provider-specific location to src/agent/usage.ts so both providers share the same accumulator. (c481852)
Operator-legibility phase 1 polish across the interactive surface. (7fa2773)
Fixed
tools.0.custom.<field>: Extra inputs are not permitted 400 from the Anthropic Messages API — internal tool classification metadata no longer leaks across the wire. (#367)
/review api-compat false positives on dead code — added a reachability pre-check so removed-but-unused exports stop firing the api-compat dimension. (#349)
/ground-state charter drift — read-only contract is now enforced inside SKILL.md so the skill cannot mutate state. (c7321cb)
Plugin sandbox escape via symlink — assertWithinPluginsDir now realpaths both parentDir and dest's dirname before the containment check. (#339)
Skill-frame teardown on child flushSource drain — child-stream completion no longer orphans the parent skill frame. (a6758c0)
Subagent stream-renderer leak on error — throttle entry is now cleaned up on the error path. (bbe85be)
redact credential-shaped strings in resume-swap error reasons (PR #355 H-1/H-2 follow-up) — SDK 401/403 errors during buildSession or waitForInitialization no longer echo Bearer / sk-ant-… to the terminal.
guard stored.startedAt with ?? Date.now() fallback so legacy stored sessions saved before the field existed do not produce NaN status-line durations after /resume.
reset the verdict ledger (terminal-state trajectory rail) on /resume — outgoing session trajectory no longer contaminates the resumed session.
Breaking
SlashContext.session type changed from AgentSession to SessionRef (breaking for external slash-command authors). Update any direct reads of ctx.session.<method> to ctx.session.current.<method>. All built-in handlers have been migrated. Required to make the mid-session swap mechanism transparent to slash commands through a stable pointer. (#355)
Tool schema wire-boundary projection. Internal AnthropicToolDef fields (category, concurrencySafe, riskClass) are now stripped at the wire boundary via a WireToolDef projection; the Messages API call signature is narrower. External code synthesizing tool definitions should target AnthropicToolDef (rich, internal) — the projection happens inside the provider. (#367)
Layering rehome.keychain, tool-category classification, telegram error predicates, and upsertEnvVar moved out of src/cli/ / src/telegram/ to their canonical homes (src/agent/auth/, src/agent/tool-category.ts, src/utils/). Re-export shims preserve backward-compat for known internal callers; deep imports into old paths from external code may need updating. (#361)
Known
/allow-dir filesystem grants persist across /resume — the underlying AnthropicDirectProvider is process-scoped (constructed once at bootstrap, reused by the swap), so its _sharedReadRoots cache survives session boundaries. This is intentional given the current API surface (no resetGrants exists). To revoke grants, exit and restart afk.
2026-05-20
v2.33.0
2026-05-20
Added
unify REPL input surface across user and agent turns (38c1bde)
footer mark + complete Twitter card tags (d4cadb8)
Handoff Arc brand identity — bigger, brand-able mark + favicon family + OG card (cff7409)
unblock npm publish by deflaking /tasks recency-sort test — BackgroundAgentRegistry.register() returns a snapshot copy, so post-register startedAt mutation was a no-op; on fast CI the sort fell back to insertion order. Test now stubs Date.now() before each register() so the live InternalJob.startedAt carries the intended timestamp.
2026-05-20
v2.31.0
2026-05-20
Added
route GPT/o-series to openai-compatible + retire openai-codex (slice 5/5) (8ae2ab9)
close shared MemoryStore on daemon shutdown (36b2cd0)
2026-05-20
v2.28.0
2026-05-20
Added
inline colored diffs for edit_file/write_file (#313) (6fbb370)
Changed
edit_file tool result format — tool_result content for edit_file is now a single-line message (e.g. Replaced 1 occurrence in path/to/file). The diff context previously appended after a double-newline (${resultMsg}\n\n${diffContext}) is no longer included in tool_result content; it is emitted out-of-band as a tool_diff event (CLI-only render channel). Consumers that parsed the multi-line format must update accordingly. (#313)
Shorten hero eyebrow pill so it doesn't wrap on mobile (1b2175c)
async-first hero copy + SEO meta updates (#312) (2dda5f4)
2026-05-19
v2.27.1
2026-05-19
Changed
afk daemon is now invokable without --task or --cron; trigger defaults to sessionstart and task defaults to /forge-friction --auto when neither flag, env var (AFK_DAEMON_TASK), nor afk.config.jsondaemon.task provides a value (closes Daemon Gap B)
afk daemon --cron <expr> (without an explicit --trigger) now auto-selects cron trigger mode, matching the intent of providing a cron expression
afk.config.json.example updated to show the daemon.task / daemon.taskId fields
Fixed
default trigger to sessionstart; pass --cron flag through (Gap B) (#311) (bdf3ef9)
2026-05-19
v2.27.0
2026-05-19
Added
unify /tasks across turn-detach and subagent-job facilities (20b8d2b)
wire BackgroundAgentRegistry into BackgroundStatusBar (8295f2d)
add EventEmitter surface to BackgroundAgentRegistry + BackgroundItem union (8b12d8b)
cap concurrent jobs + TTL eviction + cancel-source attribution (03ae081)
store cancelSource per-job to fix cascade attribution dead code (H-1) (7f6ba33)
add CANCEL_DRAIN_TIMEOUT_MS to cancelAll() to prevent teardown hang (C-2) (05da7f6)
wire setTasksRegistry in repl-loop bootstrap (C-1) (9afd4c9)
2026-05-19
v2.26.7
2026-05-19
Changed
narrow /mint routing trigger and demote from lead bullet (e36a9db)
Fixed
add Dispatch protocol section to enforce parallel sibling dispatch (68e88d5)
2026-05-19
v2.26.6
2026-05-19
Fixed
add Write-step invariants to prevent skill_name="unknown" silent-failure (c303850)
2026-05-19
v2.26.5
2026-05-19
Changed
emit in-flight badge inline via completionWriter (d612533)
Fixed
resolve PR #321 review blockers and majors (95c04dc)
2026-05-19
v2.26.4
2026-05-19
Fixed
distinguish 'nothing-to-summarize' from 'history-too-short' (72e31c2)
resolve session-stuck and malformed-HTML regressions (P0) (352f46d)
2026-05-19
v2.26.3
2026-05-19
Fixed
correct-by-construction fixes for fenced code, ordered lists, hr, blockquote (bab3b09)
2026-05-19
v2.26.2
2026-05-19
Changed
regression tests for ordered-list renumbering + trailing newline (6e0a7ec)
rewrite README for the npm audience; move dev docs under docs/ (de2b70a)
align package metadata with proprietary status (0842463)
memoize disk-tier reads on the cold-start path (fd4e0cc)
Fixed
trailing newline after lists + ordered-list start-number honoring (108a5b6)
2026-05-19
v2.26.1
2026-05-19
Changed
tool-output render registry; memory tools summarized via chunk.display upstream of truncation
Fixed
bash tool-lane no longer leaks truncated raw JSON for commands like gh pr view --json; structured JSON output renders as {key1, key2, …} / [N items] via the render registry
C6--max-budget-usd is now enforced: AgentSession accumulates totalCostUsd from each turn.completed event and aborts the internal AbortController when the ceiling is crossed. The abort reason surfaces as "Budget ceiling reached: $X.XXXX >= $Y.YYYY".
C9 WAL supersede crash window narrowed: supersedeFact() now stores (old_content, old_created_at, new_content, new_created_at) fingerprints in the supersede WAL entry alongside the legacy (old_fact_id, new_fact_id) rowids. replayWAL() resolves fingerprints to current rowids first, falling back to raw rowids for pre-fix WAL entries.
render skill tool children + spinner elapsed time (d4e48b6)
enforce --max-budget-usd via turn.completed cost accumulation (C6) (8e1a223)
Changed
include parentId in fork assertion (9968994)
drop stale "atlas" surface variant (305972c)
add clarifying comments for colon-separator caveat and Telegram permissionMode (6c0ebcf)
fix symlink test — existsSync guard + AFK_WRITE_DENYLIST symlink case (0c6646e)
C5 Telegram SessionManager.getSession() race condition: concurrent calls for the same chatId now share a single in-flight creation Promise via a pendingSessions guard, preventing duplicate session spawns.
C7parseProvider() in shared-helpers.ts now accepts an optional memoryStore parameter and threads it into the constructed AnthropicDirectProvider, ensuring only one SQLite connection is opened when --provider anthropic-direct is passed explicitly. Applied in both chat.ts and interactive/bootstrap.ts.
C8runDAG in dag.ts leaked an AbortSignal listener on the outer signal when the DAG completed normally. Fixed by using a named handler (forwardAbort) removed in a finally block. Per-node listeners are also explicitly removed in finally after each node completes.
idempotent supersedeFact on UNIQUE constraint collision (3419306)
throw BudgetExceededError instead of bare return on budget abort (917f7a9)
add memory tools to interactive REPL allowlist (0a2b2b0)
WAL supersede crash window — store content fingerprints instead of raw rowids (C9) (e9f5fde)
correctness fixes — session-manager race guard, dual MemoryStore, DAG signal leak (C5, C7, C8) (1567f7d)
fix list newline collapse and card border off-by-one (5d8cf8f)
show all rawBody lines in asking verdict card fallback (ee9dad8)
prevent schema mismatch on hypothesis synthesis (a9944de)
wrap blockquote content before prefixing with bar (20b108b)
add newline wrapping for H3+ headings (1aa9aae)
Security
C1 Plugin/marketplace path traversal: validate manifest name with SAFE_PLUGIN_NAME regex and assertWithinPluginsDir() before any join()-based directory creation in src/agent/plugins/install.ts and src/agent/marketplaces/install.ts.
C2permissionMode default changed from 'bypassPermissions' to 'default' in session-setup.ts. Callers that previously relied on the implicit bypass must now pass permissionMode: 'bypassPermissions' explicitly in their AgentConfig.
C3write_file now refuses to write to a built-in denylist of credential/system paths (~/.ssh, ~/.aws, ~/.gnupg, ~/.config/gcloud, /etc, /System, /private/etc, /usr/local/etc). Additional paths can be appended via the AFK_WRITE_DENYLIST env var (colon-separated absolute paths).
C4bash handler now emits a one-time [security] warning to stderr when AFK_PERMISSION_MODE=bypassPermissions, surfacing the shell-injection risk. Full execFile migration is deferred (tracked C4).
C10 Scheduler telemetry (forge-telemetry.jsonl) now runs redactInlineSecrets() over both the command and responseExcerpt fields before writing. INLINE_SECRET_PATTERNS extended to cover OpenAI sk-* keys, Telegram bot tokens, and mixed-case KEY=/TOKEN= patterns.
2026-05-14
v2.3.1
2026-05-14
Fixed
repair release pipeline + dev start scripts (c83ede0)
2026-05-14
v2.3.0
2026-05-14
Added
add /init slash command to scan project and generate AFK.md (af56752)
2026-05-14
v2.2.0
2026-05-14
Added
nest compose-spawned subagents under the compose tool-lane entry (90bea64)
Fixed
resolve review findings on compose subagent nesting (#202) (a627cab)
2026-05-14
v2.1.0
2026-05-14
Added
background tasks — Ctrl+B detach, /bg, persistent status bar (#196)
clipboard failure msg, debug logging, dual-probe
add Ctrl+X to discard clipboard image attachments
auto-discover project-level AFK.md as system prompt source (#186)
background tasks — Ctrl+B detach, /bg, persistent status bar (#196) (0209cb4)
User-scope config at ~/.afk/config/afk.env — Telegram tokens and allowlist stored outside the project tree
afk telegram setup interactive wizard with keychain/file/env token storage options
File-authoritative override for Telegram config keys: ~/.afk/config/afk.env wins over shell env for TELEGRAM_BOT_TOKEN, AFK_TELEGRAM_ALLOWED_CHAT_IDS, TELEGRAM_VERBOSE, TELEGRAM_DATA_DIR
Bot identity validation at startup via getMe before handing token to Telegraf
Fixed
Shell-shadowed bot token: file value now overrides stale shell exports for Telegram-specific keys (inverse of dotenv precedence, intentional for operator-managed config)
2026-05-12
v1.7.0
2026-05-12
Added
cross-session memory system + mint state persistence (#115) (40231c6)
2026-05-12
v1.6.0
2026-05-12
Added
add --dump-prompt debug flag for SDK prompt verification (#34) (c49fb7d)
2026-05-12
v1.5.1
2026-05-12
Fixed
show early tool-use indicator during model generation (#123) (0b91592)
2026-05-12
v1.5.0
2026-05-12
Added
add /changelog page rendered from CHANGELOG.md (#158) (90f413c)
Fixed
improve terminal rendering spacing and wrapping (#156) (72adfa7)
include bundled plugins in system prompt manifest (#153) (7d64db8)
2026-05-12
v1.4.0
2026-05-12
Added
surface parallelize-dispatch failures via discriminated union (#152) (47caa39)
Changed
Enhance routing telemetry with detailed event structure and telemetry emission
phase 1 orchestration pressure — frame main session as coordinator
add orchestration pressure audit (d0a03a3)
Fixed
handle drainQueue rejection in processOne finally (5bc2690)
preserve slash command highlighting after submission (3afa120)
2026-05-12
v1.3.1
2026-05-12
Changed
address review feedback from #151 review (3395c33)
co-locate unit tests with the files they exercise (56a6d36)
add colocate-tests migration helper (3dfd2aa)
Fixed
reset context bar on /clear (1b5f637)
flush tool lane to scrollback on subagent done (ab8dea6)
unify feedback on spinner, kill thinking indicator
add Failure Geometry documentation to outline agent workflow design patterns
centralize last hardcoded ~/.claude/ path in audit-fit
centralize path resolution on AFK_HOME, fix surface tags
opt actions into Node.js 24 (FORCE_JAVASCRIPT_ACTIONS_TO_NODE24)
extract shared utils + add auto-release CI (328ae85)
Fixed
stream subagent content in real time during skill execution — replaces line-buffered rendering with StreamingMarkdownRenderer so users see live markdown output instead of a spinner
harden /changelog flag parsing and improve test mocks
resolve review findings in /changelog command
add 401 retry integration tests and deduplicate concurrent refreshes
persist assistant turns in message history
restore plain bullets in /changelog (PR #145 H-1) (3432991)