Ctrl K
ComunidadGuías…

CHANGELOG.en.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Changelog

All notable changes to this project are documented here.
[한국어 변경 내역](CHANGELOG.ko.md)

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.82.0] - 2026-11-06

### Added
- Each timer now shows its execution session using the same rules as job cards, in both Current session and All sessions scope. Click a known name to open that conversation; an unknown name is shown as its session key. The existing top-level filter still selects the list.
- Shell/process cards now start collapsed and expand and collapse from the entire heading, like job cards, with a click, Enter, or Space. The separate collapse button is removed. The task name, status, elapsed time, and Stop action (or its unavailable notice) remain in the heading; commands and output stay in the body. Stop actions and text selection do not toggle the card.
- The timer group in the background panel can now be collapsed and expanded from its heading with a click, Enter, or Space. The heading keeps showing the count for the current scope, and the browser remembers the collapsed state. It starts expanded; timer execution, notifications, and Stop are unchanged.
- File read (Read) cards now have the same path actions as write and edit cards. Clicking the path copies it as shown, ↗ opens the file in the default app on the computer the assistant runs on, and ⤢ shows the file as it is on disk now (what was read at the time stays in the card output).
- `/model` now shows the model configuration that applies to the current conversation and lets you choose from the same profiles as the dashboard without a model call. Choosing a profile clears a direct model override and applies to the next regular message. `/model reset` clears only the direct override; Use default also clears the conversation profile selection.
- The project menu (dashboard 📁 chip · Telegram `/project`) now has Open folder, which opens that project's folder on the computer the assistant runs on.
- A command in your home or a plugin with `scope: projects` appears as a shared item in the menu of every project linked to a conversation, and runs against the project you pressed it in. A project or home command with the same name takes precedence.
- Shell commands provided by a plugin ask for approval once per command, and ask again if the command line changes. Commands marked `confirm: true` ask every time, regardless of approval.
- A plugin can handle a project menu item in its own code with `handler:`. The same item does not run twice at once, and `/stop` stops it.
- Hooks in `hooks/hooks.json` (the same format as Claude Code plugins) in an enabled plugin's folder now run once the plugin is installed and enabled. They run after your home and project hooks, so they do not run if your own hook blocks first, and their output is labeled with the plugin it came from.
- `/status`, `/plugins`, and the dashboard inventory show each plugin's hooks and their status. Disabling or removing a plugin stops its hooks from the next call.
- New built-in skill `incident-response`. When work crosses a safety boundary (such as reading a secret file, or deleting or sending something without approval), the assistant contains it, separates facts from impact, proposes the smallest fix that addresses the cause, and acts and verifies only within what you approve. Related guidelines are tidied with the existing `confirm_feedback` only when needed.

### Changed
- On Telegram, messages and attachments sent in quick succession are now collected for a moment (2.5 seconds by default, up to 6 seconds) and answered together. Replies start that much later; slash commands and button answers don't wait. You can change the wait or set it to 0 to turn it off in the Telegram plugin settings.
- When results come back from a manager or subagent, the assistant now also receives the rule that the work is not complete if a required condition it assigned failed or was not confirmed.
- When no model is configured, the default Codex model is now chosen by the same rule as official Codex (the priority and visibility in the model list) instead of the first model in the list. If that information is missing or the last successful fetch was more than 7 days ago, the built-in default is used. Models you choose explicitly and usable profiles, including per-conversation `/model` choices, are kept; the new rule applies only when the choice falls back to the default.

### Removed
- The bundled self-growth (`self-growth`) plugin has been removed (it had been off by default since 0.71.0). Automatically creating guidelines from failures, suggesting skill improvements, and its module cards are gone. Confirmed guidelines saved with `confirm_feedback`, and the guidelines you already have, keep working.
- Mentions of self-growth were removed from the assistant's base guidelines and from the header of the confirmed guidelines included in every turn.

### Fixed
- A `null` hook entry or an invalid `timeout` in your home or project `settings.json` could stop the later hooks for the same event from running, and a hook with a very large `timeout` was terminated as soon as it started. Now only the invalid entry is skipped, and entries without a `command` are not run.
- Removing a remote MCP server while its sign-in state was being saved could leave a "sign-in required" record for the removed server, and a rejected request sent before sign-in finished could turn a just-completed sign-in back into "sign-in required". On Windows, saved sign-in tokens and `.env` no longer inherit the parent folder's permissions: access is limited to the current user, SYSTEM, and Administrators, and the file is not saved if that limit cannot be set.

## [0.81.0] - 2026-11-02

### Added
- On wide screens, the dashboard main menu can be collapsed into a narrow icon-only bar. Collapsed items show their names on hover or keyboard focus, and each browser remembers whether the menu is collapsed. The mobile layout is unchanged.

### Changed
- The `notify_owner` worker notices, paused since 0.79.0, can now be turned on under Worker notices in the dashboard settings. They are off by default. When on, a running manager or subagent can report that it is blocked, and the assistant handles it first. When off, workers are not given this tool, and you still get task completion reports.
- With worker notices on, when the assistant resolves a notice internally, it no longer sends a separate reply about it. The dashboard records a one-line notice and shows any text written while handling it as internal activity, and these notices do not increase the conversation tab's unread count. It still tells you about important issues and asks when a new approval or decision is needed. If it cannot show you choices and asks in text instead, that question is still delivered.
- Messages sent while a worker notice is being handled are answered separately.
- After writing a bug report, the `tiguclaw-bug-report` skill now asks once whether to file it as a GitHub issue. If you agree, it first checks whether the same problem has already been reported, shows you the repository, title, and body, and files it with a GitHub tool you already have connected once you approve. Without such a tool, it explains how to file it yourself. Security vulnerabilities are never filed as public issues.
- When checking a change, the built-in `verify` skill now picks checks based on the requested behavior and what actually changed, and does not rerun checks that already passed for the same change. Checks a project requires are still run.
- When updating its to-do list, the assistant is now guided to mark as in progress only the steps it has actually started or is waiting on.

### Fixed
- A system notice that arrived while the assistant was replying could disappear when the conversation history was reloaded.
- Clicking the download button (⬇) on an attachment in the dashboard once could download the same file twice.

## [0.80.0] - 2026-11-01

### Added
- A bundled `tiguclaw-bug-report` skill. On request, it turns a problem with Tiguclaw itself into a bug report that can go straight to the developers. It doesn't submit or send anything.
- A bundled `plugin-creator` skill. It helps create and modify plugins, build widgets, and package them for sharing, and only does the step you ask for. Installing, enabling, or sharing happens only when you ask for it separately.
- Plugins can pass `profile` to `host.ask` to call the model with that profile from the model settings. Only that profile's models are used, with no fallback to other profiles, and a name that can't be selected returns a failure without calling a model. When reported, the result includes the model that actually answered and the usage.

### Changed
- Every plugin `host.ask` call now has a 300-second limit and stops when the work that made the call is cancelled.
- Plugin `host.ask` sessions no longer appear in regular conversation lists or searches. Session pointers for scopes unused for 30 days are pruned; conversation records themselves are preserved.
- On macOS, when the connection error `EADDRNOTAVAIL` appears in the logs, the daemon records the TCP state counts and the processes using the most sockets at that moment — once per 24 hours and at most three times per daemon process; set `TIGUCLAW_SOCKET_SNAPSHOT=0` to turn it off. This is a diagnostic record; it doesn't fix the network problem behind the error.

### Fixed
- On Windows, `/update` said it would restart in about 5 seconds even though it restarts only after installing dependencies and rebuilding, and an update that only rebuilt (with no new commits) reported going from a version to the same version. The completion message now starts from the build that was actually running.
- When a background job's completion or failure notice couldn't be delivered, there was no way to send it again, and after a restart its result and error could no longer be looked up.
  - The next regular message (not a slash command) in the conversation that started the job now resends the undelivered report to wherever that message came from — up to three reports per message and three attempts per job. If part of it had already arrived, you may receive the same content twice. Jobs started outside a user conversation, such as in a dedicated schedule or watch session, aren't resent automatically but can still be looked up.
  - Results and errors are saved in the database (including its automatic backups) for the 1,000 most recently finished jobs, up to 256,000 characters each, so the assistant can read them again and dashboard cards show them after a restart. Anything longer keeps only the beginning and is marked as truncated.
- A job whose main work finished but whose wrap-up step failed showed the failure cause and the completed report as one block. It's still shown as failed, but the cause and the report are now shown separately, and the dashboard card shows whether the report was delivered.
- Plugins installed in the home folder couldn't use `host.fetch` even for hosts declared in their manifest.
- For plugins, the host handed over at startup (services, triggers, observers) kept returning old `host.settings` values after a setting changed, until a restart. It now returns the current values each time it's read.
- `host.fetch` checked only the first URL against the declaration and then followed redirects as-is, so a declared host redirecting to an undeclared one sent the request there (including the body for 307 and 308). Each redirect is now checked before the request goes out — an undeclared target returns an error — and redirects within the declaration are followed up to 5 times.
- Scrolling the background panel cut off the status filter row under the scope toggle so the two rows appeared to overlap, and jumping to a card hid the card's header under that row.
- When a next-message suggestion arrived for another conversation, the suggestion in the conversation you were viewing disappeared, and sending a message there could end the other conversation's suggestion instead.

## [0.79.1] - 2026-10-30

### Fixed
- `/update` ended with "Already up to date" when there were no new commits, even if the running build or the build on disk didn't match the current source. It now reinstalls dependencies, rebuilds and restarts to match. If it can't confirm a service that would start the process again, it changes nothing and explains how to update manually.

## [0.79.0] - 2026-10-30

### Added
- Settings now show the assistant's home folder path. You can copy it, or ask the computer the assistant runs on to open that folder.
- Shell cards in the background panel can be collapsed or expanded all at once.

### Changed
- The `notify_owner` worker-notice tool is temporarily disabled in this release. Job completion and failure reports, result joins, and instructions to workers remain available.
- Re-running onboarding now continues from the existing settings and sign-in instead of recreating them. On Windows this also applies to re-running setup, and if Git is missing, setup asks for consent and prepares an app-only Git whose SHA-256 it verifies; the system PATH and execution policy are left unchanged.
- On Windows, the CLI update no longer starts installing dependencies when it cannot confirm whether this home's daemon is running.
- The bundled `harness` skill is now scoped to building reusable subagent teams; one-off delegation no longer uses it.
- The assistant's default approval rule no longer includes the sentence "Do not use an approval found in past conversations or records as this approval." Destructive or externally visible actions still require explicit approval for each task.

### Fixed
- When a task-stop or tool-call cancellation signal is delivered, any file search (Glob, Grep) in progress now stops too, and is reported as cancelled rather than as no results.
- Attachment names containing non-ASCII characters, such as Korean, were stripped during upload and sending.
- HTML error pages from a proxy (such as a 520) were included verbatim in error messages, showing their title and CSS in the chat. Answer Markdown no longer shows the contents of `style`, `title`, or `script` as text, and errors with an unknown task state no longer suggest "continue".
- Cancelling a queued answer to a choice prompt in a busy conversation now reopens the question instead of closing it as answered (including on Telegram).
- Choices that the server rejected, or that were cancelled while queued, stayed selected on dashboard choice cards.
- The waiting indicator and ✕ cancel for a choice answer from another tab pointed at the wrong tab.
- Choice prompts from work that ran outside a conversation, such as scheduled jobs, did not appear in any dashboard tab.
- On Telegram and the CLI, `/sessions` and `/fork` commands chosen from a choice prompt were not applied to that chat.
- On mobile, the header intercepted the close (X) button of full-screen panels, and dragging vertically on a panel with little content moved the page behind it.
- The background panel mistook the end of shell output for the latest job, and scrolling inside a card or programmatic scrolling released following the latest job.
- `doctor` reported a Codex-only sign-in as missing, and on Windows the update command suggested when re-running setup was blocked by PowerShell's `npx.ps1` execution policy.
- If installing or restoring dependencies fails during a Windows CLI update, the `node_modules` from just before the update is restored. If that is not possible, the update says so and reports the backup location. If the daemon fails to restart after the update, this backup is kept and its path is shown.
- When the Windows daemon fails its start check, the message now distinguishes a failed port check, a port that never opened, a port that opened and closed again, and an unhealthy `/health` response. If the daemon exits before logging starts, the supervisor keeps the end of its error output with secret values masked.
- On Windows, when computer use cannot read how long the user has been idle, the log now records the failure type and exit details without the raw output. Input is still blocked in that case, as before.
- `stop` and the Windows update messages reported registration or restart states that had not been confirmed.

### Security
- The transitive dependency `@hono/node-server` was updated from 1.19.17 to 2.1.3 for a published security advisory ([GHSA-rmxm-3fg6-px4f](https://github.com/advisories/GHSA-rmxm-3fg6-px4f) — `serveStatic` decoded the request path a second time, which could bypass middleware on static paths).

## [0.78.0] - 2026-10-28

### Added
- Background child-job cards now include a button to jump directly to their parent manager's card.
- Newly recorded choice prompts are searchable by their question, option labels, and notes.

### Changed
- Internal worker notices now stay out of automatic progress reports and always-visible card summaries; they remain available in job details.
- The chat composer's expanded information panel now places its collapse button in the upper-right corner.
- Codex no-progress timeout logs now record item types, states, and receipt times without item contents to aid diagnosis.
- Telegram now labels copied replies, automatic job updates, and replies or choice prompts from another conversation with their source conversation.

### Fixed
- Regular replies to Telegram choice messages now return to the conversation that asked the question, and dashboard reply quotes link to the original choice prompt.
- Choice prompts shown in Telegram also appear in the dashboard, and answers to the same prompt are processed only once across channels.

## [0.77.0] - 2026-10-26

### Added

- **Managers and agents can send a one-line notice about a blocker that only whoever started the job can clear, and keep working.** The notice goes to the conversation or manager that started the job. The job's card in the background panel shows the latest notice, and for a manager started from a conversation, an unanswered notice is also included once in its progress update. The answer reaches the job as an instruction, and each job can send up to three notices.

### Changed

- **The dashboard header shows only the version next to the name.**
- **The assistant's built-in guidelines now have it look through other conversations only when you point to one or ask to connect it.** Words like "earlier" or "that" alone no longer send it searching, and if the current request is enough it just goes ahead. An approval given in an earlier conversation is not treated as approval for this one.

### Fixed

- **With OpenAI models, once a manager job had run, the main conversation failed to answer with a «Duplicate tool names» error; if the main conversation ran first, managers could not send instructions to their subagents.**
- **In the dashboard, «↩ original» on a reply to an assistant answer could not be clicked.** This applies to replies sent from this version on.
- **An instruction a subagent returned unread was shown in the background panel as an instruction from that subagent.** It now shows as returned unread.
- **A subagent's result or a returned instruction reached its manager as if it were a new instruction.** A manager waiting on shell output stopped waiting because of it, or handled it as an instruction to apply.
- **When a remote MCP server's saved sign-in was tied to a different authorization server, every call shortly before the token expired retried the refresh, and nothing was logged.** It now logs once that you will need to sign in again after the token expires.
- **With "also send to Telegram" on, answers from a file watch, schedule or timer set in a dashboard conversation did not reach Telegram.** This happened when that conversation had last been used from Telegram.
- **After reloading a dashboard conversation, a tool step could show another turn's output.** In conversations where several turns used tools, an expanded tool step showed the output of the tool at the same position in an earlier turn. Existing history now shows the right output when reopened.

## [0.76.0] - 2026-10-25

### Added

- **Background shells show their description.** The description the assistant gives when it starts a shell appears in the Background work widget and at the top of the shell card in the background panel. The command, folder, time and output are shown as before.
- **Managers and agents in the Background work widget show their elapsed time.**
- **Messages you send as a reply show the start of the original message above the card.** Clicking it jumps to the original. This applies to replies sent from this version on.
- **The details above the message box fold away in one tap.** Tap ▾ at the right of the tag row to hide tags, projects, the reply target, attachments and background indicators; small badges for what is hidden stay on the top line. Tap them or ▴ to unfold. It starts unfolded, and your choice is remembered in that browser. On phones the working indicator sits on the top line above the message box.
- **Work stopped by a subscription usage limit can resume automatically in the same conversation once the limit resets (off by default).** Turn it on or off in the dashboard under **Settings → Resume after usage limits** (the same value as `"limitResume": { "enabled": true }` in `settings.json`). Pick-ups already scheduled still run after you turn it off. The stop message says when it will resume, and you can cancel it with `/stop` or from the background panel.
- **Managers can send extra instructions to the subagents they started while those are still running.** Only the manager's own running subagents receive them, and they arrive marked as the manager's instruction, not yours. The background panel shows them as «Instruction from 'manager name'».

### Changed

- **The Background work widget groups items by conversation by default.** You can switch to grouping by type from the widget menu, and your choice is remembered.
- **Clicking a widget item scrolls the background panel to the top of that card.** The card is not expanded or collapsed, and later updates no longer pull the scroll position away.
- **Background job progress updates now include the number of file writes and commits since the last update.**
- **The reply line now sits right above the message box.** Background and shell indicators share one row above it.

### Fixed

- **The plugin count in the dashboard menu always showed 0.**
- **A manager's completion report did not reach the conversation that started it when another manager was waiting for it.**
- **A manager that the assistant started while handling a completion report could not send files to the dashboard conversation.**
- **Elapsed time on finished job and shell cards kept growing.** It now stops at the time they finished.
- **Finished manager and agent cards kept showing the last tool they had been running.**
- **The Background work widget said nothing was running while its lists were still loading.**
- **On phones, the last message could slip under the message box when the area above the box grew while you were following the bottom of the chat.**
- **Progress updates summarized a job as making no progress when it actually had.**
- **A profile with only one model still said it would switch to another model automatically when that model hit its limit.**
- **`/stop` sent while a `UserPromptSubmit` hook was running replied that nothing was running and did not stop the turn.**
- **Re-running `tiguclaw init` on an existing home said "Models = auto" even though it had not touched the model settings.**
- **On macOS, when the daemon runs as a service, the pauses between screen-control inputs and `wait` took longer than requested.**
- **On Windows, non-English text such as Korean was garbled in shell output.** Console programs such as `ping` and `dir` and cmd error output now display correctly.
- **On Windows, PowerShell error messages were cut off mid-sentence.**
- **When a dashboard answer was also sent to Telegram, replying to it in Telegram did not link to the original.** Clicking the reply preview in the dashboard now jumps to the original, and the assistant knows which message you replied to. This applies to answers received from this version on; replies to the notice shown after `/stop` are still not linked.

### Security

- **Dependencies with published security advisories were updated to fixed versions.** This covers the advisories for zod ([GHSA-mrhx-c7xc-m3w5](https://github.com/advisories/GHSA-mrhx-c7xc-m3w5) — memory exhaustion while validating oversized collections) and body-parser ([GHSA-27r3-jxmh-p828](https://github.com/advisories/GHSA-27r3-jxmh-p828) — denial of service via trailing bytes after a compressed request body), both present in 0.75.0. Claude Agent SDK was also updated to 0.3.285 and the MCP SDK to 1.32.2.
- **When automatically refreshing OAuth tokens for a remote MCP server, the refresh token and client information are not sent if the stored tokens or client information are recorded as belonging to a different authorization server.** In that case, the current access token remains in use, but you must sign in again if it expires or the server rejects it. Existing connections with no recorded authorization server still refresh without signing in again, and the authorization server that accepts the refresh is recorded.

## [0.75.0] - 2026-10-22

### Added

- **A widget panel.** Open it from the 🧩 button in the header, on any screen. On desktop it can sit next to the background panel, and you drag the handle above a widget to reorder.
- **One-shot timers.** Ask "check the build in 10 minutes" and the assistant sets a timer at least a minute ahead. It fires once and then deletes itself, so it never piles up in your schedule list.
- **Edit and Write cards can show the current file.** Press ⤢ to open the file as it is on disk now, with syntax colors; when the change matches exactly one place, the removed (red) and added (green) lines are shown right there. Otherwise the changed snippet is shown separately above. Secret files (`.env`, `.git`, `.ssh`, `.aws`) never open.
- **`tiguclaw repair` (Windows).** Gives your account rights on the scheduled task — and changes nothing else.

### Changed

- **New file watches are handled in the conversation that created them.** The assistant judges with that conversation's earlier messages (including corrections), and jobs a watch starts can be stopped from that conversation. Existing watches stay as they are; say "move the watch to this conversation" to move one.
- **New schedules are handled in the conversation that created them, too,** just like file watches. Existing schedules stay as they are; say "move the schedule to this conversation" to move one.
- **A schedule missed while the daemon was off now runs once, late, after it starts.** Only the last run within 24 hours is made up; older ones are skipped.
- **The home screen's widget area moved into the widget panel.** Widgets you placed show up there in the same order. The background button is now in the header on every screen, not only in chat.
- **The «Background work» widget is now a compact view of the background panel.** It groups timers, managers/agents and shells by conversation, and clicking an item jumps to its card in the background panel. Each widget has its own right-click menu, where you can turn off just that widget.
- **Setup no longer asks about models, and there is one default model profile.** With nothing configured, every task runs on the latest model of your signed-in providers (opus for Claude). To use other models, just ask tiguclaw — it saves them to `settings.json`, and what you saved wins. A tier with no profile of its own (such as `low`) uses the default profile. If you had only picked a default tier (such as mid) on the dashboard, it now runs on the single default.
- **Short internal calls such as summaries and classification use the `low` profile (or the default if there is none).** They no longer look for a `nano` profile first — if you put a light model there, move it to `low`.

### Fixed

- **JSON and YAML keys and values had the same color, so syntax colors looked missing.** Keys now get their own color.
- **On Windows, codex sign-in (`codex-auth`) opened File Explorer instead of the browser.**
- **With the search panel open on the dashboard, the chat couldn't be scrolled or clicked.**
- **Registering a schedule that runs at startup (`reboot`) showed a false "schedule failed" alert even though nothing was wrong.**
- **Completion reports from background jobs started by a file watch got lost instead of reaching the watch's destination.** A report that failed to send was also recorded as sent; it now tries a fallback notice and records a failure if that fails too.
- **On the mobile dashboard, the header overflowed and pushed the page sideways when the update button appeared.**
- **Some error messages appeared in Korean even with the English interface.** Settings, widget, sign-in and chat-attachment errors, endpoint history, Telegram attachment notices and compaction-failure lines now follow the interface language.
- **On Windows, after installing from an administrator terminal, stop/update/uninstall from a normal terminal failed with «Access is denied».** Install now gives your account rights on the task. For an existing install like that, run `tiguclaw repair` once from an administrator terminal.
- **On Windows, stop and uninstall could report «✅» when the task was not actually turned off or removed.** They now report success only when that is confirmed, and otherwise say why and how to fix it.
- **Updating a folder owned by another account only said «not a git repository».** It now shows the reason git gave and how to fix it.

## [0.74.0] - 2026-10-20

### Added

- **When you reply to a message, the assistant knows exactly which message it is.** If the original was long and its middle was shortened, the assistant can read the full message again (dashboard and Telegram).
- **File watches can have a history policy, like schedules.** A watch can start fresh on every run or keep only the last N runs, and an existing watch can be changed without registering it again. By default it keeps continuing as before.
- **Remote MCP servers (Streamable HTTP).** Register one by URL with token headers; tokens can be written as `${VAR}` and kept in the home `.env`. The same server works whether Claude, Codex, or OpenAI is answering.
- **Sign in to remote MCP servers that need a browser login (OAuth).** The assistant gives you a sign-in link, and the server connects once you finish. If you signed in on another device, send the address-bar URL after `/mcp_login`.
- **Computer use can press F1–F20, Caps Lock, and numeric keypad keys.** On Windows it can also press F21–F24, Insert, Print Screen, Scroll Lock, Pause, Num Lock, the menu key, Hangul/Hanja, and volume, media, and browser keys.

### Changed

- **After setup, the dashboard opens on the chat view, and subscription sign-in opens your browser.**
- **Codex folds away rarely used tools and the tools of MCP servers you added, and looks them up when it needs them.** Each request sends less input. To turn it off, add `CODEX_TOOL_SEARCH=0` to the home `.env`.

### Fixed

- **On Windows, the service did not start automatically when VBScript was turned off.**
- **On Windows, running `install` again while the daemon was running started a second supervisor that used the same data.**
- **The Windows install script closed its window on an error, so the cause could not be read.**
- **On Windows, the service could restart in the middle of an update and make the install and rollback fail.**
- **With OpenAI models, `/stop` and timeouts were treated as a successful empty reply, and context usage looked inflated on turns that used tools.**
- **Codex replies sometimes ended with drafting notes.**
- **Command descriptions were cut off in the dashboard's 📁 project menu and `/` autocomplete.**
- **When a stdio MCP server failed to connect, the log did not say why.** The end of that server's error output is now recorded with it.
- **Schedule and file-watch results showed up in the shared conversation even when a specific dashboard conversation was set as the destination.** They now appear in that conversation.
- **Replying to a long message in the dashboard passed only its beginning to the assistant.** Its beginning and end (conclusion or question) now both reach the assistant.
- **A file watch that was waiting for its turn still ran once and delivered its result after being deleted or turned off.**
- **File watches treated a file change as the user's submission or approval.** A watch run now knows it was started by a file change and that it doesn't have the history of the conversation that registered it.

## [0.73.1] - 2026-10-16

### Fixed

- **On Windows, if a port or address given at install time was left empty in `.env`, `onboard` and `doctor` checked a different port and reported failure while the service was fine.**

## [0.73.0] - 2026-10-16

### Added

- **Connect Telegram from the dashboard.** Put the bot token in Plugins → telegram-channel and restart, then message the bot once and pick yourself under «Find my ID». No `.env` editing, and the token never goes through the chat.
- **A new, empty conversation shows example questions.** Tapping one fills the box; you send it.
- **Enter and replace secret values on the plugin settings screen.** They're saved to the home `.env` and never shown again. Plugins can mark fields people may edit there (`editable`) and offer candidate values (`suggest`).

### Changed

- **Adding, changing or removing an external MCP server takes effect from the next turn, without a restart** — on Codex and OpenAI models too, just like Claude.
- **`tiguclaw onboard` only reports success once the service actually answers and the checks find nothing blocking.** At the end it shows the dashboard address and opens it if this machine has a browser. Telegram is optional and no longer shows as a failure in the checks.
- **If the assistant can't answer because an account is missing or expired, it tells you how to sign in again.**

### Fixed

- **Files the assistant sent were downloaded from the dashboard under their stored name instead of the original one.** Non-Latin names come through intact too.
- **Skills, agents and commands of a turned-off plugin still showed up in the assistant's list.**
- **A dropped external MCP connection didn't come back until a restart (Codex and OpenAI).** Start the target app again and it reconnects on the next turn.
- **Install and update could miss a missing SQLite native module.** They now actually open it, and rebuild it themselves if it won't open.
- **On Mac and Linux installs with a private Node, the retry command shown after a stopped install didn't run in a new terminal.**
- **Leaving a value empty in `.env`, such as `DASHBOARD_HOST=`, opened the dashboard on every network address.** An empty value now falls back to the default, so it opens on this machine only. An empty bridge port no longer stops the daemon from starting.
- **Setup guidance didn't match the actual setup.** The setup wizard no longer lists manual steps in the middle of onboard, and `doctor` follows the bridge address setting.

## [0.72.0] - 2026-10-15

### Added

- **Branch a conversation.** «Branch this conversation» on a session tab, or `/fork` on Telegram, starts a new conversation that inherits everything so far, so you can try another direction without touching the original.
- **Branch from a specific reply.** «Branch up to here» on an assistant reply inherits the conversation only up to that reply. Replies already in the summarized part of a long conversation can't be branched from yet.
- **Send a branch's conclusion back.** From the branch tab's menu, or `/fork back` on Telegram, the branch's assistant summarizes what was decided — including what its managers did — and the original conversation's assistant tells you what it received. Sending again only carries what's new since the last time.

### Fixed

- **Long Codex and OpenAI conversations taking minutes to answer even a short message.** When the conversation fits in what the model can read at once, history tidying now waits until after the reply.

## [0.71.0] - 2026-10-15

### Added

- **The assistant learns from your reactions.** Corrections and approval of how it answered become one-line rules it follows from the next conversation on. When the meaning is clear it records the rule and tells you; it asks only when unsure. Rules are written in the language you used.
- **Long-running background jobs report their progress.** One update per hour by default; turn it off or change the interval (10 minutes to 24 hours) with `jobs.progressNotice` in `settings.json`.

### Changed

- **`/stop` stops only the conversation turn in progress.** Background jobs keep running, and the reply says how many are still going. To stop a job, name it.
- **Stopping a background job is now in the job card's ⋯ menu,** with a confirmation first.
- **The self-growth plugin is now off by default.** The assistant learns from your reactions on its own. To keep using the plugin, turn it on in the dashboard's plugin screen. Rules it already saved stay in effect.

### Fixed

- **Scheduled and file-watch jobs could run at the same time as other work in the same conversation,** which caused the same notification to arrive twice.
- **Without a settings file (built-in high · mid · low profiles), badge colors, the default profile, and per-session profiles could not be set or did not take effect,** and the screen could show a different default than the one in use.
- **Claude subscription sign-in from the dashboard on macOS and Linux did not finish:** pasting the sign-in code did nothing, or the issued token was rejected. Sign-in messages now follow your language.
- **Background job checks could not see a tool that was still running,** so a job running one long command could be mistaken for stalled.

## [0.70.1] - 2026-10-13

### Fixed
- Opening a session after its reply arrived no longer shows the same reply twice (a display issue that cleared on reload).
- Clicking the to-do header on a background job card to collapse or expand it no longer leaves a text cursor behind.

## [0.70.0] - 2026-10-13

### Added

- **Background task cards show the task's to-do list.** When a manager or agent writes one, a single line shows "📋 To-do done/total" and the current step; click the arrow to expand every item.

### Fixed

- **Codex kept repeating the same web search after using it.** Scheduled jobs such as a morning briefing could keep going until the iteration limit and arrive very late.
- **A manager waiting on its subtasks did not receive instructions sent in the meantime.** It now wakes up and acts on them right away.
- **On Telegram, after replying to a message from another session, tapping an option shown by that turn sent the answer to the default session.**
- **On Windows, changing a command file failed if the file was briefly locked.** It now retries briefly.
- **Clicking a task card on the project page opened the background panel but scrolled back to the bottom, leaving that card out of view.**

## [0.69.1] - 2026-10-12

### Fixed

- **The dashboard's "+ Project" button disappeared once every registered project was linked to the conversation.** It now always shows, and tells you how to register another project.
- **When the assistant moved a command to another group while changing its content, it reported success even if the old file couldn't be removed** — and the old content kept running. It now reports the failure.
- **Fewer replies drifting into another language (such as Japanese) after background tasks.** Task names and instructions given to managers and agents are now written in your language too.

## [0.69.0] - 2026-10-11

### Added

- **Codex now recovers by itself when the server drops the connection mid-reply.** If nothing came out yet it resends; if it was writing, it continues from where it was cut. If that still fails, you get the usual "continue" prompt as before.
- **Commands can be grouped in subfolders.** `commands/aaa/bbb/ccc.md` opens as aaa › bbb › /ccc in the 📁 chip menu (hover or tap), and the `/` list shows the group too. It is still called as `/ccc`. Previously, commands in subfolders didn't show up at all.
- **The assistant can create and move commands into groups.** Ask something like "put the deploy commands in a Deploy group" (global and project commands alike).

### Changed

- **Claude subscription limits now reflect the account of the token this install uses.** Usage reported during conversations comes first; if the Claude CLI on this machine is signed in to a different account, you're told so instead of seeing its numbers. Older values show when they were measured.
- **On Windows, getting a Claude subscription token opens the issuer in a new window.** Just sign in and it's saved (the same as `claude-auth` in a terminal).
- **Background job cards show only the title for subagents started without a name.**
- **Delegating work to a folder you haven't registered now runs with that folder's `.mcp.json` and hooks turned off, and asks first.** A repository someone else made can no longer run commands just by its settings. Registering it as a project turns them on.
- **Shell commands the assistant runs no longer receive the daemon's secrets (tokens, API keys).**
- **Computer use refuses to type text while a modifier key is held.** On macOS this used to fire a different shortcut instead.
- **The 📁 chip menu now opens Project details instead of "View PROJECT.md".** It shows the project on the Projects page rather than posting the file into the conversation. `/project` on Telegram is unchanged.

### Fixed

- **Starting a second daemon on the same home stopped the first one's jobs and shells.** The second one now exits right away and says why.
- **Some settings in the home `.env` (job timeouts, shell, and others) were ignored.**
- **Telegram:** replies could vanish during a brief outage (they are now resent in the background) · after a restart, an old choice button could send the value of a newer question · nobody knew when receiving had stopped (you are now notified).
- **Claude's named usage limits (session, weekly, and others) weren't recognised, so every turn tried again.** It now waits until the reset time Claude reports and tells you when.
- **Codex:** overlapping token refreshes could wrongly ask you to log in again · limit and auth errors after a tool ran were treated as success · answers cut off by overload were kept as final.
- **On OpenRouter, Gemini, Ollama and similar, a task ended after ten tool calls.**
- **An OpenAI-compatible server defined only in a project wasn't used for that project.**
- **Messages sent while a task was running were lost if that turn failed.**
- **The assistant's shell commands sometimes ignored the timeout and `/stop` · large Grep results failed outright · a stuck `/update` blocked later updates.**
- **The "Other" field in choices didn't take Shift+Enter for a new line, and Enter sent text while composing Korean.**
- **Edit could corrupt content containing `$&` and similar, and files that aren't UTF-8.**
- **File watch:** results are now actually sent to the chosen channel · files created at the same moment could be missed.
- **Dashboard:** late chat history could land in another tab · attachments could run as scripts · the 📁 menu overflowed the screen with many commands · on mobile, «Project details» landed on the list · the home page redrew on every event · fields you were typing in got cleared · ⏹ stopped jobs without asking · a failed model pick still looked applied · a fast browser clock dropped in-progress replies · switching tabs while history loaded left the default assistant name.
- **An error in one plugin could stop every conversation, and a disabled plugin's code could still run.**
- **The self-growth guidelines file could be wiped by a temporary read error.**

## [0.68.0] - 2026-10-09

### Added

- **Link projects to a conversation.** Attach registered projects from `+ Project` above the dashboard input, with `/project` on Telegram, or just by asking ("link ○○ to this conversation"). You can link several, and the assistant keeps them in mind for the whole conversation. It also uses each project's own skills, agents and MCP servers by handing work to that folder (managers it starts inherit the links).
- **Use a linked project's commands right in that conversation.** Click its 📁 chip for its commands, `PROJECT.md` and Unlink; the dashboard `/` list also shows them per project.
- **Runnable commands.** Add `run:` to a command file and it runs directly in the project folder, without going through the assistant, and posts the result to the conversation (deploy, build and test buttons). With `confirm: true` it asks first, and `/stop` stops it. Ask "make a deploy command" and the assistant shows you what it will save before creating it.

### Changed

- **New installs now use ports 17010 (dashboard) and 17011 (bridge).** On Windows, 7010/7011 could fall into a system-reserved range and the dashboard would suddenly stop opening. Existing installs keep the ports they already use after updating.
- **Projects no longer appear among the context tags above the input.** Link them to the conversation from the row just below instead. Typing `#name` yourself still works.

### Fixed

- **Claude subscription limits kept showing "try again shortly".** If Claude Code isn't signed in on that machine, it now says so and tells you to sign in, and a refresh picks it up right after you do.
- **The daemon reported "ready" even when the dashboard or bridge could not open its port.** It now says why (a Windows reserved range or another program) and which setting to change, in the log and as a notification, and `tiguclaw doctor` warns about ports inside a Windows reserved range.
- **On Windows, stopping, restarting or updating the daemon could force-kill other programs** — one listening on a port that starts with the same digits (30000 for 3000), or another app holding that port. Only this instance's processes are stopped now.
- **A Windows update went ahead with installing even when the daemon failed to stop.** It now stops before installing and leaves the running version in place.
- **File watches with a name filter (such as `.txt`) never detected any change.**
- **Adding several external MCP servers at once could drop some of them from the settings.** A broken settings file is now reported instead of overwritten.
- **Fetching a web page kept downloading past the 5MB limit and didn't stop on `/stop`.**
- **Live dashboard state (background tasks and similar) could occasionally jump back to an older value.**

## [0.67.0] - 2026-10-07

### Added

- **You can reword messages yourself** — put the same key in `locales/<language>.json` under your home and only that line changes.

### Changed

- **Notices and command replies now follow your language setting too.** If you haven't picked a language, they use this computer's language and the dashboard follows your browser's, falling back to English. A language you pick in Settings always wins.

### Fixed

- **Conversations with OpenAI-compatible models sent run traces, including message content, to OpenAI whenever `OPENAI_API_KEY` was set** — even when the model ran on OpenRouter, Google or Ollama. Traces are no longer sent, and the warning logged on every turn when no key was set is gone.
- **The Background button at the top right of the dashboard showed its label in Korean even on an English screen.**

## [0.66.0] - 2026-10-06

### Changed

- **Install scripts, the CLI, server notices, chat command replies and error messages are now in English.** The assistant's replies and the dashboard still follow your language setting.
- **Long Codex conversations are summarized faster and keep earlier rules and facts better afterwards.** The assistant can reopen long tool results that were folded into a summary.
- **Retry notices after a stalled response now tell this request's retries apart from the running total for the whole task.**
- **`/stop` now drops the messages you sent while the task was running and tells you how many.** Send again whatever you still need.
- **The default dashboard session now gets a name («Session 1») like the others.**
- **When modified files block an update, the update names them.** Failure notices state only what was actually rolled back, and an update log is always kept.
- **Windows: instance settings given in the shell at install time (ports, service name and so on) survive updates and re-registration.** Values in the home `.env` always win.

### Fixed

- **Pressing Enter on the dashboard with an empty input while the assistant was replying stopped the reply.** Stopping now happens only through the button.
- **Renaming a dashboard tab could lose the edit when the screen refreshed, and further renames stopped working.**
- **Summarizing a long conversation while the Codex backend was overloaded could drop rules you had given.**
- **A reply sent while the assistant was still answering reached it without the message it replied to.** Replies to a long message now carry both its beginning and its end.
- **When chatting over Telegram, the «this tool is taking a while — you can stop it with `/stop`» notice never arrived.**
- **When a background task or a tool hit its time limit, the cause was reported as a usage limit or a user stop.**

## [0.65.0] - 2026-10-04

### Added

- **Run a scheduled task right now.** Ask the assistant and it runs the schedule once, exactly as it would at its set time.
- **The setup guide now covers running two instances on one machine** — keep a test assistant next to your everyday one and update each on its own ([Setup & operations](docs/setup.en.md#running-a-second-instance-on-the-same-machine)).

### Changed

- **When a manager comes back with the job half done, the assistant finishes it.**
- **A registered schedule no longer asks for confirmation every time it does its usual work.** It asks only about new actions the schedule doesn't describe.
- **Subagents are now started with just a tier (`low` · `mid` · `high`), no spec needed.** The built-in `quick`, `general`, `deep` and `explore` specs are gone. Your own specs still work; if you give both, the tier overrides the spec's model.
- **In long Codex and OpenAI conversations, summarizing after an answer no longer holds up your next message** — it pauses and answers first.
- **Management commands such as `tiguclaw restart` now reject arguments they don't recognize** instead of ignoring them, so a mistyped `--home` can't touch the wrong instance.
- **Logs now show how long each model request took**, so a slow answer can be traced to server wait, thinking, or output.

### Fixed

- **Fixed restarting or updating one instance also stopping another on the same Windows machine** when their home folder names started the same way.
- **Fixed installing a second instance overwriting the first instance's service registration.** Each instance now uses its own service name.
- **Fixed restart requests looking accepted when nothing could restart the daemon.** It now says so right away.
- **Fixed the Windows restart supervisor starting with the wrong home — and restart/stop failing to find it — when the Windows user name is non-ASCII (e.g. Korean).**
- **Fixed the Windows restart supervisor starting with the wrong home when the home path ended in `\`.**
- **Fixed tasks using Codex web search stopping over a date mismatch when the local date and the UTC date differ.**

## [0.64.0] - 2026-10-02

### Added

- **The assistant waits on long-running commands in one go.** It gets the result as soon as a background command finishes, prints the text it was waiting for, or goes quiet for a while. Sending a new message while it waits stops the wait and gets a reply right away.
- **The dashboard browser tab title can be changed in Settings.** You can also ask the assistant to change it.
- **A GitHub repository link (⭐) now sits at the right end of the dashboard header.**

### Changed

- **Next-message suggestions are on by default.** You can turn them off in Settings.
- **When the assistant goes ahead without asking, it states the direction it chose in one line, and explains what a result means.**
- **Codex web search finds results for the region of your time zone.**

### Fixed

- **Fixed the previous suggestion staying on screen after a message was sent** — when sending through an option, Telegram or another tab, or after reconnecting.
- **Fixed citation markers left as raw text in Codex web search answers.**
- **Fixed manager completion-report options not appearing on the dashboard, and options and file sending being blocked in scheduled runs.**
- **Fixed `/stop` not stopping a running command while Claude was answering.**
- **Fixed the conversation-summary notice and `/compact` showing the wrong amount of folded conversation.**
- **Fixed a rare case where a Codex login key refresh that overlapped another save reverted to an invalidated key and required logging in again.**
- **Fixed pressing the issue button again during token issuing cutting off the new issue, and the issuing process being left behind when the daemon restarted mid-issue.**
- **Fixed dashboard cards taking the model and effort of another turn or a failed attempt, and showing an unknown effort as “default effort”.**
- **Fixed parts of the UI, such as the subscription login buttons and guidance and the tab title, appearing in Korean with English selected.**
- **Fixed a temporary file containing tokens being left behind when saving `.env` failed.**

## [0.63.0] - 2026-10-01

### Added

- **Codex and OpenAI assistants can look up and re-read the results of tools they ran earlier in the conversation.** After a long conversation's history is summarized, the assistant checks the original result instead of guessing.
- **You can finish issuing a Claude subscription token from the dashboard.** You no longer need to run a command in a terminal and copy the token back.
- **Files that a manager sends with its completion report now carry the session label and a description.** Files from another session are prefixed with `[session]`, the description goes in the same message as the file, and replying to that file goes back to the session that sent it.

### Changed

- **History summaries in long Codex and OpenAI conversations are lighter and less frequent.** More of the conversation is sent at once, up to what the model can take, so summaries and cache misses happen less often.
- **Claude requests are lighter.** Claude Code built-in tools that tiguclaw cannot use are no longer sent, and rarely used tools are loaded only when needed.
- **The reasoning effort next to the model now uses the same badge as the profile screen.** It shows from the start of the turn, and Claude without a set effort shows "default effort".
- **`/status` now computes context usage for GPT models against their actual input limit (272K tokens).**

### Fixed

- **Fixed tools being cancelled as "the user declined" when you sent a message while Claude was answering.**
- **Fixed managers being blocked with "no channel to send through" when attaching result files to a completion report.**
- **Fixed a rare case where a token you just saved disappeared from `.env` when another credential refresh ran at the same time.**

## [0.62.0] - 2026-09-29

### Added

- **Chat cards and background job cards now show the reasoning effort used for that turn next to the model.** Turns that sent no effort show none.

### Changed

- **Models are now set only by the model profiles in `settings.json`.** `REGION_A_MODELS` and `MODEL_TIER_*` in `.env` are no longer read. Installs that used them are migrated to profiles once on first boot, and the original settings are kept as `settings.json.before-legacy-model-env`. `/model` shows the base pool in use and where it comes from.
- **After re-authenticating in a terminal with `npm run claude-auth` or `npm run codex-auth`, the new token is used from the next message without a restart.** Re-authenticating also clears any cooldown on that credential.

### Fixed

- **Fixed long Codex conversations waiting minutes for a history summary before every reply.** Summaries now run ahead of time, after a reply is sent.
- **Fixed `/compact` not stopping on `/stop`.**
- **Fixed pasted Claude subscription tokens being saved without a check when cut by a line break.** Split tokens are joined back, and tokens Anthropic rejects are not saved.
- **Fixed the dashboard describing a rejected credential as a usage limit.**
- **Fixed the token and cache line of replies disappearing after a reload or on another device.**
- **Fixed model profiles being ignored on installs where the model was chosen by hand in the setup wizard.**
- **Fixed messages sent while Claude was replying occasionally going unanswered.**
- **Fixed an interrupted backup being counted as the latest backup.**

## [0.61.0] - 2026-09-29

### Changed

- **Ollama is now connected in `settings.json`.** The built-in connection is gone; Ollama works like any other OpenAI-compatible server, and `OLLAMA_BASE_URL` in `.env` is no longer read. If you used it, add `"models": { "providers": { "ollama": { "adapter": "openai", "baseURL": "http://localhost:11434/v1", "apiKeyEnv": null } } }` to `settings.json` (`npm run doctor` and the startup log point this out). For a server that needs no key, set `"apiKeyEnv": null`.
- **Tool cards show more.** The Codex web search card shows the search queries and the sources it looked at; Claude's tool-loading (`ToolSearch`) card shows which tools were loaded.
- **The assistant writes `PROJECT.md` as an entry document.** When writing or adding to it, it keeps only what every task needs and moves the rest into linked sub-documents with a short summary. Reorganizing an existing document is proposed first and done only after you approve. If an active project's `PROJECT.md` is edited while over 12KB, you get one notice.

### Fixed

- **A second message sent while Claude was still answering got no reply.** Its answer now follows the first one.
- **In Codex chats, the earlier conversation was re-sent on every turn without using the cache.** Long conversations now use less and respond faster.
- **Pasting one long text could summarize away most of the earlier conversation in Codex and OpenAI chats.** A large input now only trims older history for that one request.
- **A schedule's "last N runs" history policy could bring back conversation already cleared, for example with `/clear`.**
- **Editing a schedule's prompt stopped its "last N runs" history policy from applying.** Runs are now counted from a firing log.
- **Windows Security (antivirus) blocked screen capture on Windows.** Capture now works differently, and Windows Security no longer flags it as a threat. If another antivirus blocks it, the assistant says so and walks you through allowing it.
- **On installs that use model profiles, leftover model-tier settings from older versions were still used for some calls (gateway tier requests, subagents).**
- **Codex now masks secrets such as API keys in the tool results it keeps for later requests.**
- **Installs that don't use Ollama logged a failed model-list lookup every hour.**

## [0.60.0] - 2026-09-27

### Added

- **Schedules can now set a conversation history policy.** Start fresh each run or keep only the last N runs, so daily schedules stop growing their input. The default still continues the previous conversation.
- **When you scroll up in the dashboard chat, the date of the messages you are viewing is shown at the top.**

### Changed

- **Codex conversations break the cache less often, so less input is sent fresh with each request.** The savings are largest in tool-heavy work and when background-job results are wrapped up.

### Fixed

- **Codex no longer forgets what it learned from files and other tools in earlier requests.** Instructions you send while it is working are also remembered in the next request.
- **In long Codex and OpenAI conversations, older messages that had not been summarized were dropped one per new message.** Older messages now leave the context only after they are summarized.
- **`/compact` in a conversation continued from Telegram ended with "no history yet".**
- **After scrolling the dashboard chat to the very top, the space above the first message could stay blank.**
- **Leftover model-tier settings from older versions could send internal calls, such as web page summaries, to that model and time out.** This affected installs that use model profiles.
- **When a model's authentication is rejected (401), tiguclaw no longer retries it on every request.** It switches to another model for a while and tells you once to log in again. Logging in again, or any successful request, switches back right away.
- **Some saved memories were left out of the conversation even though all of them fit within the limit.** Reading a memory also no longer breaks the Claude cache and resends the conversation history.
- **Existing job cards now recover completion, cancellation, failure, and available results after reconnecting when a terminal event was missed.**
- **Fixed false tool-inactivity warnings after Codex subagents completed web searches.**
- **The assistant now replies in the language you write in**, including the background-job reports it writes itself (fixed notices such as failures and interruptions are still in Korean).
- **Result reports and notices for background work requested from Telegram could fail to reach Telegram when the conversation was tied to a dashboard session** (notably subagents) — the assistant believed it had already reported.
- **Replying in Telegram to a background job's result report went to the default session instead of the session that started the job.**
- **On iPhone, dragging past the end of the chat no longer pushes the header and session tabs out of view.**

## [0.59.0] - 2026-09-25

### Added

- **Background job cards now show token usage.** Main work and separate summaries are shown separately, and unreported usage is marked as unknown.

### Changed

- **Long-conversation summary instructions now distinguish completed or cancelled work, changed instructions, and ongoing constraints.**

### Fixed

- **Recent conversation context could be lost when returning to Claude after extended work with Codex or another model.** The handoff boundary is now identified by session ownership before applying the recent-history window.
- **Dashboard message requests could fail after roughly five minutes while work was still running.** Message responses now have no separate proxy wait limit, and waiting connections are cleaned up when the browser disconnects.
- **Active HTTP requests could prevent the bridge from finishing shutdown.** Shutdown now stops accepting connections and closes existing ones.
- **Windows shell commands could receive damaged arguments, and background shells or hooks could open command windows.**
- **Completed background jobs could appear interrupted, and replies inside collapsed groups could remain hidden when clicked.**
- **Usage reporting now uses consistent turn totals across chat, job cards, and the gateway.** Missing usage from failed attempts or internal Codex retries is no longer presented as a complete total.

## [0.58.0] - 2026-09-23

### Added

- **Claude Opus 5.5 is now available.** The bundled Claude Code is now 2.1.280. Choosing this
  model used to fail with *"does not support this model"*.
- **`computer-use`'s `look` can show an earlier screen again from its saved copy.** When the
  assistant needs to recheck a screen it already saw, it no longer takes a new screenshot.

### Changed

- **Codex now sends the same session ID with every request in a conversation.** This makes it
  easier to reuse the cached start of a conversation as it continues.

### Fixed

- **When a Claude model was rejected for being newer than the bundled Claude Code, a
  configured fallback chain was not used.** This is now treated as an unavailable model, and
  the next model in the chain takes over.
- **The assistant sometimes assumed a `cd` from one shell command carried over to the next and
  ran commands in the wrong folder.** This now happens less often.

## [0.57.0] - 2026-09-22

### Added

- **The latest Claude models now work.** The bundled Claude Code is now 2.1.278. Models that
  require 2.1.251 or newer — Fable 5.1, for instance — used to fail with *"does not support
  this model"*, and running `claude update` yourself changed nothing, because tiguclaw uses
  the executable installed alongside it.

### Fixed

- **A reply to a photo, document, or voice message now continues in the session that answer
  came from.** Only text replies did before; replies carrying an attachment went to the
  current session.
- **"The connection dropped, but your message did reach the server" appeared even when the
  send had gone through fine** — merely starting to close the tab was enough. You are still
  told when a message genuinely did not get sent.
- **Screen-observation guidance pointed at "the image below" when no image was attached.**
  It also claimed every screen id was void while handing back a usable one.

## [0.56.2] - 2026-09-21

### Fixed

- **The assistant looking at the screen over and over without moving on.** A screen it just
  looked at is no longer rejected for being old, and it no longer fills in values you never
  asked for.
- **Screen actions being refused without saying what to do next.** Each refusal now comes with
  the step that clears it.
- **The assistant mistaking a screenshot it took itself for a photo you sent.** Screen
  observations now say where they came from.
- **Text you sent coming back into the dashboard input box.** It is only restored when the send
  is confirmed to have failed.
- **The docs saying screen control was off by default.** It ships enabled. macOS can do nothing
  until you grant permission, but Windows never asks — turn it off in settings if you don't want it.

## [0.56.1] - 2026-09-20

### Fixed

- **The assistant repeating the same request forever when it tried to zoom into part of the
  screen.** That request now returns the full screen, so it can move on.
- **Keys staying held down when a screen action stopped partway.** Held keys and mouse buttons
  are now released even when the action stopped safely because another window came to the front.

## [0.56.0] - 2026-09-20

### Changed

- **`computer-use` now has two tools instead of six — `look` and `do`.** `look` takes the
  screenshot; `do` takes clicks, typing, shortcuts, drags, scrolls and waits **as one ordered
  sequence**, and returns the screen as it looked after they ran. If a skill or prompt of yours
  names the old tools, update it.

### Fixed

- **A conversation failing permanently once the model's session was gone.** It now continues
  from tiguclaw's own record of that conversation, and no longer resumes with an empty history.
- **Actions on Windows reporting success when nothing had happened.**

## [0.55.0] - 2026-09-19

### Added

- **`computer-use` plugin — the assistant can now see the screen and act on it.** It takes a
  screenshot, then clicks, types, presses shortcuts, drags and scrolls. Works on macOS and
  Windows with nothing to install.
  - ★**Actions cannot be undone.** Enabling this plugin means handing the assistant the
    mouse and keyboard of that machine. (This line **was not true** — it ships enabled.
    Corrected in 0.56.2.)
  - macOS needs two separate permissions — **Screen Recording** (to see) and
    **Accessibility** (to act). Seeing without acting is a normal state.
  - Windows has no permission prompt, but the daemon must run in a **logged-in user
    session**. Some security software blocks the screen-capture script; when it does,
    the tool says so.
  - It will not act while you are typing or moving the mouse. Screen coordinates expire
    after 30 seconds, and any action invalidates them.

### Fixed

- **A cleared draft reappearing in the input box after a refresh.**
- **Messages sent while the daemon was down disappearing silently.** Delivery is now
  confirmed by the side that receives it.
- **Messages sent during an active turn bouncing back into the input box**, including on
  turns longer than 60 seconds.
- **Chat cards that would neither collapse nor expand.**
- **Attachments being dropped when a send failed.**
- **Background job lists saying only "last: Bash, 52 minutes ago"**, which could not
  distinguish a stuck tool from a quiet one. A tool that is still running now says so.
- **The dashboard losing the reason when it could not reach the daemon.**
- **Tool-generated images piling up in the conversation.**

## [0.54.1] - 2026-09-15

### Fixed

- **External MCP and plugin tools could run twice after a failure.** They are no longer assumed
  safe to re-run just because their name looks read-only. When a re-run is blocked, the
  rate-limit notice and error report still go through.
- **On OpenAI models, the earlier part of a long conversation was dropped without a summary.**
  It is now compacted the same way as other models, and compaction is reported on screen.
- **On some codex models, conversation compaction kept failing.** While it failed, older
  messages were dropped without a summary.
- **The "compacting" indicator never cleared when compaction failed.** Failures and skips are
  now reported on screen. On Claude models it stayed even when compaction succeeded.
- **Files over 10MB could not be attached in the dashboard.** The limit was raised to 20MB, but
  the screen still showed the old one and refused the file before sending. It now takes the
  limit from the server.

## [0.54.0] - 2026-09-15

### Added

- **Higher attachment limits.** 20MB per file and 50MB per message. A file that Telegram
  accepted but the dashboard rejected now works in both.
  (★This release raised the **server** limit only — the dashboard screen still
  held the old one, so it actually works in both from 0.54.1.)

### Changed

- **Chat cards now collapse from the header row**, matching tool cards — clicking anywhere
  on the card no longer collapses it. To collapse from the body, use the **right-click menu**.
- **Oversized requests are refused before the body is read.**

### Fixed

- **Some results went missing from the final report when several background jobs ran.**
  The step that folded in late results could also overwrite the report written before it.
- **Results from older jobs could not be found again.** Only recent ones were listed, so
  anything older was unreachable even though it was still stored.
- **A request could be retried on another model after a tool had already run**, so a tool
  that writes a file or sends a message could run twice.
- **Scheduled retries used stale settings.** After a delivery failure, disabling the
  schedule or changing its destination in between did not stop the old destination.
- **Interruption notices for schedules and file watches did not reach the configured target.**
- **The gateway concurrency limit was not enforced** — simultaneous requests all passed the
  check and more ran than configured.
- **The chat card collapse arrow did not change color on hover.**

## [0.53.0] - 2026-09-13

### Added

- **OpenAI models can run in "fast" mode too.** Add `speed: "fast"` to a pool entry. It is not
  sent to connections that lack the setting, such as local models or compatible backends.
- `/models` now shows, for each entry marked "fast", **whether that connection actually reads it
  and what it costs**. Only measured multipliers are printed; the rest say "multiplier unmeasured".

### Fixed

- **The OpenAI adapter erased the model's own defaults when sending model settings.** Setting a
  reasoning effort also dropped the default response verbosity, and turns that fell back to a
  model without tool support ignored the configured reasoning effort entirely.
- **The reason "fast" did not turn on was missing from that day's log.** The rejection reason was
  recorded only once per daemon start, so looking it up days later found an empty log.

## [0.52.1] - 2026-09-11

### Added

- **Claude models can run in "fast" mode too.** 0.52.0 wired it for codex only, so the same
  setting behaved differently depending on the model. When it doesn't turn on, the log now
  says why (for example, extra usage being off on your account).

### Fixed

- **The screen described the cost of "fast" wrongly.** Using Claude through a provider name
  you defined yourself showed "this provider ignores the setting" while **you were actually
  billed at twice the cost**. codex now reads "2.5x credits" and Claude "2x cost", each correct.
- **Removed changelog entries (v0.52.0) for things you never hit** — defects that appeared
  and were fixed inside that same release were written up as if you had run into them.

## [0.52.0] - 2026-09-10

### Added

- **A "fast" switch on model profiles** (codex models for now). Replies come back 1.5–2x
  quicker and burn **2.5x the credits**. Off by default, and `/models` shows where it's on
  along with what it costs — and says so plainly for providers that ignore the setting.
- `/models` now always shows the **reasoning effort actually being sent** — and where the
  value came from (the profile, your settings, or the model's own default). It used to show
  up only when written directly on a profile.
- **Job icons are yours to change.** The manager and subagent icons moved out of the code
  and can be overridden in `<home>/locales/<lang>.json`.
- A plugin that ships a skill, agent, command, or endpoint with the **same name as a
  built-in now warns**. It isn't blocked — but a capability can no longer be swapped out
  silently.

### Changed

- **Collapsing chat cards was rebuilt.** Reply messages collapse too (it used to be tool-step
  cards only), a click **anywhere in the body** collapses — not just the header line — and a
  collapsed message still shows **three lines**. The collapse triangle is also 1.7x bigger.
- Collapsing now defaults to **expanded**: the previous reply no longer folds itself away.
  Selecting text by dragging no longer collapses the message either.
- The manager now reads as a 🎖️ **gold badge**, against the subagent's purple.
- Background job cards stack **oldest first**.
- **Subagents running on a delegation can no longer rename or archive your conversations.**
  A one-turn delegation could reach them. Searching and reading conversations is unchanged.

### Fixed

- **One disconnected external MCP server could kill an entire turn.** Restart the target app
  and it comes back on the next turn.
- **On the OpenAI adapter, a plugin tool whose name collided with a built-in killed the
  whole turn.** All three adapters now share one decision.
- Scrolling up in chat to load older messages could **blank the view**, and leaving it alone
  kept it blank.
- The channel list no longer fails to refresh in silence.
- **Skills that failed to load vanished without a word.** The log now says why, and how to
  fix it.
- When a connection dropped, the log said only `terminated`, so **the reason was
  unrecoverable**. The real cause is now recorded.
- The cache warning used to prescribe "try switching models" on no evidence. That's gone —
  the log now points at **where the cache actually broke** instead.

## [0.51.1] - 2026-09-09

### Fixed

- **Installing on Windows without Node**: if the download failed partway, a half-installed
  folder was left behind and re-running stopped with "already installed". The download now
  happens before the folder is created, so a failure leaves nothing behind.
- The same installer started downloading even when you answered "no", and
  `TIGUCLAW_AUTO_NODE=0` was read as "don't ask, just download". Both fixed.
- The commands suggested after a failed install didn't run on installs that use their own
  Node copy. They are now usable as printed.
- The subscription-limit **refresh (🔄) left the screen unchanged until the lookup finished**.
  It now shows "checking" the moment you press it.
- The refresh button rendered as a grey box that didn't match the theme.


## [0.51.0] - 2026-09-09

### Added

- **Install works without Node.js.** If the one-line installer can't find Node 20+, it asks,
  then fetches a copy for this install only, into `<install dir>/.node`. No admin rights,
  nothing added to your system PATH, and it goes away when you delete the folder.
- A **refresh** button (🔄) next to subscription limits. The cache is 30 seconds, so reopening
  gets you a fresh reading.

### Changed

- **The plugins menu opens right away.** It used to wait for every subscription's limit lookup
  before drawing the list — up to 25 seconds. Limits are now fetched for one provider, when you
  open its detail.
- Code review now runs as a **background job**, so it no longer holds up the conversation —
  watch its progress in the background panel.

### Fixed

- **The search button was unreachable in mobile chat** — it sat in a strip that scrolls away, so
  any long conversation hid it. Focusing the search box no longer zooms the screen.
- Header labels no longer disappear on screens that aren't actually narrow.
- A default widget already on your home no longer **comes back after every restart** once you
  turn it off.
- Repeated limit refreshes no longer stack up into overlapping lookups.


## [0.50.0] - 2026-09-07

### Added

- **See how much of your subscription limit is left.** Open a plugin's detail view and each
  window — session and weekly — shows on its own line with the remaining amount and reset
  time. Checking costs no tokens and nothing polls in the background; it refreshes when you
  open the view.
- The Claude figures need a signed-in Claude Code CLI on the machine. Without one you get the
  reason the lookup failed instead of a number.

### Fixed

- Fixed the background button in the top right showing as an **empty box** on phones. With no
  work in progress, nothing was drawn at all.

## [0.49.1] - 2026-09-06

### Fixed

- **The header no longer stacks letters vertically on a phone.** With an update chip
  showing, the brand and status labels were squeezed to one character per line.

### Changed

- `/diagnose` no longer appears in the command list. It is an internal check whose
  result — a backend weight or account question — you cannot act on. The command still
  works if you type it.
- Self-growth proposals you restore to the memory index now stay there. A recurrence or
  a daemon restart used to quietly take them back down, and `/status` reported almost
  none of them as unread.
- Memories you tidied away no longer come back into the assistant's per-turn lookup.
  They are still found when it searches for them — tidying takes them out of the
  always-on list, not out of reach.

### Added

- The daemon's first log line now says which version, runtime and build it is running.
  On a machine you cannot attach to, the log alone answers "what is running there?".
- Claude subscription limits are read **before** you hit them — which window is binding,
  when it resets, and whether you are near it. Previously this was only visible after a
  request was refused.


## [0.49.0] - 2026-09-05

### Added

- **Stop a running turn from the composer.** While the assistant is working and the
  input box is empty, the send button becomes a stop button. Typing still sends, so you
  can keep talking to a turn that is already in progress.
- **Sign in to Claude and Codex from the dashboard.** Each subscription plugin's detail
  screen now has a sign-in button with a confirmation step, so a terminal is no longer
  required.

### Fixed

- **Replying to a Telegram message now returns to the conversation it came from.**
  Replies had been landing in whatever session was current instead.
- Several mobile layout problems: text standing on its side in narrow columns; the menu
  drawer neither opening by drag nor scrolling far enough to reach settings; scrolling
  inside a panel dragging the page behind it; an empty box under a button; and the
  inventory detail view running off screen.

### Changed

- `archive_memory` and `delete_memory` accept a list of names, so tidying several
  memories at once is one step.
- Self-growth proposals now say **where** a lesson belongs — a regression, a skill, or a
  standing directive — instead of always ending with "check with the user".


## [0.48.0] - 2026-09-04

### Changed

- Delegated agents and managers are now briefed only on what they can actually do.
  Previously they received the same operating constitution and skill list as the
  assistant, including instructions to use tools that aren't available at their level.
  No capability is lost — they can still find skills with `find_skills` and use any
  skill by name.
- Calling `find_skills` with **no argument** now returns the full list of available
  skills. It previously required a search term, so there was no way to discover what
  existed.
- The skill list now respects a **byte limit**. It previously capped only the number of
  entries, so a few skills with long descriptions could grow it without bound.

### Removed

- Removed the `schedule-safety-check` skill. What it did — checking, before a schedule is
  created, whether that prompt is safe to run unattended later — is now **built into the
  assistant's default behaviour**, so the same check applies in delegated turns too.

### Fixed

- Expanding a background job card now shows the **full** instructions. They were
  previously cut at 500 characters, and the same card would suddenly grow longer after a
  refresh. If the job has ended and the original text is gone, the card says so.
- Deleted skills and agents no longer linger in an installation and keep loading.


## [0.47.0] - 2026-09-03

### Added

- Settings now has a slider for the memory index size — the “what do I remember” list the
  assistant sees every turn. Slide it to 0 to leave the list out entirely (search still reaches
  your memories), or press Default to go back. The default is now 25 KB.
- `/memory-tidy` — a command that reviews your saved memories, merges duplicates and proposes
  what to drop. The assistant also offers it when the memory index reaches its cap, which you
  can now set with `memory.indexCapBytes`.
- Plugin categories can be collapsed and searched, matching the inventory. The detail pane adds
  kind, version, author, website and license — only the fields a plugin actually declares.
- The plugin list is grouped by kind — channel, trigger, observer, service. Bundled plugins now
  carry descriptions, so the list says what each one does.
- The plugin list now shows icon, name and description only; selecting one opens its detail on
  the right. A plugin can ship its own `icon` (png/webp); without one a default is used.
- A plugin can declare a setting read-only. The reverse is not possible — secrets and `.env`
  values stay protected no matter what a plugin declares.
- Plugin settings now surface values that live in your home `.env` — bridge and dashboard
  ports, Telegram allowed users, whether a bot token is set. Values owned by `.env` are shown
  read-only next to the variable they come from (secrets stay set/unset only).
- The dashboard module detail now shows what each LLM provider offers — by vendor when there
  are many models, otherwise per model with context size and tool support. Values the vendor
  does not report are left blank.
- `/providers` — lists the providers you have connected and the models each one offers.
  Providers with many models are summarised by vendor first, and you can narrow by name
  (`/providers openrouter sonnet`). Providers that could not be queried say so.

### Changed

- Delegated work now runs in parallel. The assistant hands out independent jobs and collects
  them in one go, instead of waiting for each one in turn — four sub-tasks that used to take
  the sum of their times now take about the longest one.
- Sub-agents and managers no longer carry your whole memory list. They still get the entries
  relevant to the job they were given, so they know what they need without paying for the rest.
- `tiguclaw doctor` now recognises a broken global link — when the `tiguclaw` command is still
  on your PATH but points nowhere — and tells you to run `npm link` in the install folder.
  Previously it only said it could not tell.
- When a reply from another session is copied to your channel, the label now shows the session
  key instead of `[unknown]`, so you can tell which run it came from. A named session still
  shows its name.
- Documentation file names now state their language — `docs/security.ko.md` (Korean) ·
  `docs/security.en.md` (English). Links to the old names need updating. `README.md` is
  unchanged.

## [0.46.0] - 2026-09-02

### Added

- Background work can carry a title. Job cards show "agent name · title", so several runs of
  the same agent stay distinguishable.

### Fixed

- Commands that answer with a choice list (such as the session list) left the dashboard stuck
  on "working".
- Scheduled and file-watch runs were not counted as in-flight, so a restart during one could
  cut it short. They now appear in the pre-restart check.
- The setup wizard and doctor kept asking about subscription sign-ins this installation cannot
  provide. They now offer only what is actually installed.

### Changed

- The changelog is split by language — [`CHANGELOG.en.md`](CHANGELOG.en.md) (English) ·
  [`CHANGELOG.ko.md`](CHANGELOG.ko.md) (Korean).

## [0.45.0] - 2026-09-01

### Fixed

- Background jobs kept working after announcing they were done. When a job now
  collects a child's result, it is shown the original task again and told the
  result is evidence, not a new instruction. It continues only if the result
  actually breaks the original completion criteria. Its permissions are unchanged.
- Background jobs that hit the tool-call limit were asked for a "final summary"
  and then resumed anyway. They are now asked for a checkpoint instead.
- Long background jobs could run without end — resuming past the tool-call limit
  had no cumulative cap.
- The explanation of why a model could not be used was truncated by long upstream
  error bodies.
- Prompt-truncation detection gained a middle band: when it cannot be certain,
  it says so.
- The same failure was recorded as a new memory each time because the job id differed.

### Changed

- Subscription sign-in is now a bundled plugin. Removing its folder disables only
  that subscription path; API-key users are unaffected. You can reinstall it into
  your home directory to restore it (Codex remains bundle-only because of token refresh).

## [0.44.1] - 2026-09-01

### Fixed

- If the connection dropped while a background job was writing its report, none of
  the text survived. The partial report is now delivered together with the fact
  that it was cut off. This covers every mid-stream failure, not one error type.

## [0.44.0] - 2026-09-01

### Added

- Model lists are fetched from every connected provider. OpenAI-compatible
  endpoints are queried over the standard path. Being listed does not guarantee
  a model works; if it does not, the "reason" below tells you why.
- `/models` shows each model's context size and tool-calling support. Nothing is
  shown for fields the vendor does not report.
- When a model truncates the prompt, the amount sent and the amount processed are
  reported. Small-context models drop instructions, memory and capability lists
  without raising an error.

### Fixed

- When a requested model cannot be used, the reason is stated. Previously only the
  fallback itself was reported.
- Long background jobs were cut at the tool-call limit and restarted from the
  beginning on the next run. They now checkpoint and continue (interactive turns
  are unchanged; this applies to background jobs only).
- The same failure was recorded separately each time because the job id differed.
- Weekly retrospectives were written even when there was no signal.

## [0.43.2] - 2026-08-31

### Fixed

- Plugin permission requirements were shown in Korean only — on the very screen the
  security document points to for pre-install review. They now follow the UI language.
- Removing a plugin did not survive a restart; the disabled state was never recorded.
- Reinstalling a previously disabled name brought it back disabled.
- Credential blocking in widget settings now inspects values as well: private keys,
  service tokens and connection strings are blocked even when the field name gives
  no hint. Ordinary-looking values cannot be detected — declare them as secrets in
  the settings spec.
- A home plugin could take over the name of a bundled plugin while that plugin was
  disabled. The list showed the bundled plugin's origin and permissions while other
  code ran. Names present on disk are now reserved.
- Disabling the dashboard from the plugin screen asked for no confirmation and
  removed the screen needed to undo it.
- Starting with `npm start` loaded no plugins at all.
- Rejected plugin setting changes were reported in the wrong language.
- Once a plugin's settings were changed, its settings folder was read as a plugin
  and failed every boot, making a healthy plugin look broken.
- Uppercase letters in a plugin name silently did nothing; the reason appeared only
  in the log. The naming rules are documented in [Writing plugins](docs/plugins.en.md) §2.

### Changed

- The security document now covers extensions ([`docs/security.en.md`](docs/security.en.md)).
  Plugins run in the daemon's process with no isolation, and `needs` is a declaration,
  not a sandbox.

## [0.43.1] - 2026-08-29

### Fixed

- Three more paths where a plugin could shadow a built-in capability — the list still
  showed it while the capability was gone.
- A malformed plugin name could write settings outside its own folder.
- Cleanup ran multiple times when disabling a plugin that filled several roles.
- The same warning repeated on every occurrence.
- Four places in the plugin documentation and comments did not follow the behaviour
  changed in 0.43.0.

## [0.43.0] - 2026-08-29

### Added

- [Writing plugins](docs/plugins.en.md) — you can build a widget and a tool from this
  document alone. The capability existed but had no documentation.
- Building a tool requires no dependencies: a name, a description and arguments.
  The previous SDK-based approach still works.
- Plugins can act without a conversation — observe events, send notifications, and ask
  the model when needed. Plugins that message you or call the model disclose that at
  install time.

### Changed

- TypeScript support is not ready yet; write plugins in JavaScript for now.
- Plugin tools are visible in every context. Previously they appeared only in direct
  conversation, not in scheduled runs or background jobs.
- Home widgets went from 12 to 24.
- Fewer constraints on plugins — only what can actually harm the user or the daemon.

### Fixed

- Disabling a plugin did not stop self-waking ones such as the scheduler or file watcher.
- A name collision let a plugin shadow one of your real conversations.
- A plugin could replace built-in capabilities such as memory or skills.
- Widgets with many settings were blocked by a settings-count limit.
- A plugin providing both tools and views was logged as providing nothing.

## [0.42.1] - 2026-08-29

### Fixed

- With a malformed `settings.json`, changing the theme or model reported success while
  wiping model profiles, theme and gateway settings. It now stops and reports which
  file failed to parse. Views and queries keep working.
- A faulty widget data function could restart the whole daemon. Only that widget now
  fails, with a recorded reason.
- Opening the same card in several tabs let later requests bypass the image size limit.

## [0.42.0] - 2026-08-29

### Added

- Widgets can be placed on the dashboard home. Arrangement is done by asking — there is
  no drag-and-drop grid.
- A "running work" widget — background jobs on the home screen instead of the drawer.
- Plugins can add views and settings. Settings a plugin declares appear on the settings
  screen automatically, and it can draw its own cards in replies or on the home screen.
  Passwords and keys show only as present or absent.
- A plugin menu — list, enable, disable, install, remove in one place, without a restart.
  Author and requested permissions are shown alongside.
- Plugins carry their own translations.

### Changed

- Notifications from other conversations are labelled with their origin.
- Release notes are fully readable in settings.
- The browser refreshes itself when a new build is served.

### Fixed

- Plugin cards went blank after scrolling up and back in a long conversation.
- Cards did not appear after a refresh; a release-notes row appeared with no update.
- Turn-card headers wrapped vertically on mobile.

## [0.41.0] - 2026-08-27

### Added

- ` ```mermaid ` blocks in replies are rendered as diagrams. The renderer is fetched only
  when used and never reaches the internet.
- Task lists, `<details>`, table alignment and `<kbd>` now render.
- The update confirmation shows the release notes for the version you are about to install.
- Installing with a Claude subscription obtains the token through a browser login.
  Previously you had to install a separate CLI and paste the token
  (`tiguclaw claude-auth` re-runs it).

### Changed

- Tool activity is preserved when reopening old conversations. Previously the text
  remained but the tool cards disappeared after a few days.
- The brand icon background is transparent — no black square in light themes.
- The agent knows its home directory and install location, so requests that place files
  land in the right place.

### Fixed

- `doctor` also checks the Claude runner — a present key with a missing runner is no
  longer reported as healthy.
- Claude launch failures are reported in plain language instead of internal option names.
- The browser kept using the old icon after a change.

## [0.40.1] - 2026-08-27

### Fixed

- Search (`Grep`/`Glob`) was silently dead on machines missing its underlying tool.
  It is now fetched at boot if absent, without delaying startup; if the download fails
  the reason is logged and retried next boot.

## [0.40.0] - 2026-08-27

### Added

- Themes are a single file. A `theme.css` in your home directory overrides colours,
  base font size and per-panel fonts. Any `<name>.css` under `themes/` becomes an option
  (`dark` and `light` ship by default), and you can ask the agent to switch.
- Search results can be narrowed to one session, via the toggle or by clicking a session
  name in the results.

### Changed

- The update button appears only when the version actually changed, not on every commit.
  Calling `/update` still pulls the latest state.
- Removed the permanently disabled buttons from the module task list.

### Fixed

- One plugin's configuration typo disabled every plugin after it. Only the faulty one is
  skipped now, with the reason logged.
- An empty value in a translation file overrode the base language, blanking parts of the UI.
- Deleted theme and language files remained listed after an update.
- The HTTP bridge could terminate the daemon if serialising a JSON response failed (latent).

---

Entries before 0.40.0 are available in Korean only — see [CHANGELOG.ko.md](CHANGELOG.ko.md).

[Unreleased]: https://github.com/tigu77/tiguclaw/compare/v0.82.0...HEAD
[0.82.0]: https://github.com/tigu77/tiguclaw/compare/v0.81.0...v0.82.0
[0.81.0]: https://github.com/tigu77/tiguclaw/compare/v0.80.0...v0.81.0
[0.80.0]: https://github.com/tigu77/tiguclaw/compare/v0.79.1...v0.80.0
[0.79.1]: https://github.com/tigu77/tiguclaw/compare/v0.79.0...v0.79.1
[0.79.0]: https://github.com/tigu77/tiguclaw/compare/v0.78.0...v0.79.0
[0.78.0]: https://github.com/tigu77/tiguclaw/compare/v0.77.0...v0.78.0
[0.77.0]: https://github.com/tigu77/tiguclaw/compare/v0.76.0...v0.77.0
[0.76.0]: https://github.com/tigu77/tiguclaw/compare/v0.75.0...v0.76.0
[0.75.0]: https://github.com/tigu77/tiguclaw/compare/v0.74.0...v0.75.0
[0.74.0]: https://github.com/tigu77/tiguclaw/compare/v0.73.1...v0.74.0
[0.73.1]: https://github.com/tigu77/tiguclaw/compare/v0.73.0...v0.73.1
[0.73.0]: https://github.com/tigu77/tiguclaw/compare/v0.72.0...v0.73.0
[0.72.0]: https://github.com/tigu77/tiguclaw/compare/v0.71.0...v0.72.0
[0.71.0]: https://github.com/tigu77/tiguclaw/compare/v0.70.1...v0.71.0
[0.70.1]: https://github.com/tigu77/tiguclaw/compare/v0.70.0...v0.70.1
[0.70.0]: https://github.com/tigu77/tiguclaw/compare/v0.69.1...v0.70.0
[0.69.1]: https://github.com/tigu77/tiguclaw/compare/v0.69.0...v0.69.1
[0.69.0]: https://github.com/tigu77/tiguclaw/compare/v0.68.0...v0.69.0
[0.68.0]: https://github.com/tigu77/tiguclaw/compare/v0.67.0...v0.68.0
[0.67.0]: https://github.com/tigu77/tiguclaw/compare/v0.66.0...v0.67.0
[0.66.0]: https://github.com/tigu77/tiguclaw/compare/v0.65.0...v0.66.0
[0.65.0]: https://github.com/tigu77/tiguclaw/compare/v0.64.0...v0.65.0
[0.64.0]: https://github.com/tigu77/tiguclaw/compare/v0.63.0...v0.64.0
[0.63.0]: https://github.com/tigu77/tiguclaw/compare/v0.62.0...v0.63.0
[0.62.0]: https://github.com/tigu77/tiguclaw/compare/v0.61.0...v0.62.0
[0.61.0]: https://github.com/tigu77/tiguclaw/compare/v0.60.0...v0.61.0
[0.60.0]: https://github.com/tigu77/tiguclaw/compare/v0.59.0...v0.60.0
[0.59.0]: https://github.com/tigu77/tiguclaw/compare/v0.58.0...v0.59.0
[0.58.0]: https://github.com/tigu77/tiguclaw/compare/v0.57.0...v0.58.0
[0.57.0]: https://github.com/tigu77/tiguclaw/compare/v0.56.2...v0.57.0
[0.56.2]: https://github.com/tigu77/tiguclaw/compare/v0.56.1...v0.56.2
[0.56.1]: https://github.com/tigu77/tiguclaw/compare/v0.56.0...v0.56.1
[0.56.0]: https://github.com/tigu77/tiguclaw/compare/v0.55.0...v0.56.0
[0.55.0]: https://github.com/tigu77/tiguclaw/compare/v0.54.1...v0.55.0
[0.54.1]: https://github.com/tigu77/tiguclaw/compare/v0.54.0...v0.54.1
[0.54.0]: https://github.com/tigu77/tiguclaw/compare/v0.53.0...v0.54.0
[0.53.0]: https://github.com/tigu77/tiguclaw/compare/v0.52.1...v0.53.0
[0.52.1]: https://github.com/tigu77/tiguclaw/compare/v0.52.0...v0.52.1
[0.52.0]: https://github.com/tigu77/tiguclaw/compare/v0.51.1...v0.52.0
[0.51.1]: https://github.com/tigu77/tiguclaw/compare/v0.51.0...v0.51.1
[0.51.0]: https://github.com/tigu77/tiguclaw/compare/v0.50.0...v0.51.0
[0.50.0]: https://github.com/tigu77/tiguclaw/compare/v0.49.1...v0.50.0
[0.49.1]: https://github.com/tigu77/tiguclaw/compare/v0.49.0...v0.49.1
[0.49.0]: https://github.com/tigu77/tiguclaw/compare/v0.48.0...v0.49.0
[0.48.0]: https://github.com/tigu77/tiguclaw/compare/v0.47.0...v0.48.0
[0.47.0]: https://github.com/tigu77/tiguclaw/compare/v0.46.0...v0.47.0
[0.46.0]: https://github.com/tigu77/tiguclaw/compare/v0.45.0...v0.46.0
[0.45.0]: https://github.com/tigu77/tiguclaw/compare/v0.44.1...v0.45.0
[0.44.1]: https://github.com/tigu77/tiguclaw/compare/v0.44.0...v0.44.1
[0.44.0]: https://github.com/tigu77/tiguclaw/compare/v0.43.2...v0.44.0
[0.43.2]: https://github.com/tigu77/tiguclaw/compare/v0.43.1...v0.43.2
[0.43.1]: https://github.com/tigu77/tiguclaw/compare/v0.43.0...v0.43.1
[0.43.0]: https://github.com/tigu77/tiguclaw/compare/v0.42.1...v0.43.0
[0.42.1]: https://github.com/tigu77/tiguclaw/compare/v0.42.0...v0.42.1
[0.42.0]: https://github.com/tigu77/tiguclaw/compare/v0.41.0...v0.42.0
[0.41.0]: https://github.com/tigu77/tiguclaw/compare/v0.40.1...v0.41.0
[0.40.1]: https://github.com/tigu77/tiguclaw/compare/v0.40.0...v0.40.1
[0.40.0]: https://github.com/tigu77/tiguclaw/compare/v0.39.1...v0.40.0