A record of product and design decisions a person on the team made. It exists so that nobody — a human, a review lane, the nightly tester, an agent — undoes one by accident while fixing something else.
A decision record is history, so an entry may cite the pull requests, issues,
commits and dates it rests on. That is the one place in docs/ where such
citations belong; this front page states the rules in present tense and carries
none.
Two homes, one boundary. request-for-change/
holds the design of a large or contested change and the debate around it; an
entry here holds one settled outcome — a label, a placement, a behaviour — in a
few lines, so it can be grepped before a change and never edited after. The
recorded-decisions-are-not-regressions rule and issue triage read only this
directory: a decision an RFC settles is protected here only once it also has an
entry.
- One file per decision, named
YYYY-MM-DD-<slug>.md, where the date is the day the decision was made. The directory holds this README and flat regular*.mdentries and nothing else; the gate refuses anything else. - Entries are immutable. An entry is never edited, renamed or deleted.
scripts/check_decisions_history.pyenforces this in Fast Gate (thedecision-ledger-historystep of itssource-gatesjob): every entry present at the base of a pull request must exist at its head byte-identical. New entries are always allowed; this README is free to change. - A change of mind is a new entry that names the one it replaces on a
Supersedes:line. It is written by a maintainer, or quotes one, and it ships in its own pull request: therecorded-decisions-are-not-regressionsrule blocks that PR by design, and a maintainer's override is what lets it land. The same path corrects a typo or a wrong date in a shipped entry: a superseding entry may exist solely to fix wording, and says so in itsWhy. - An agent never decides. An agent may add an entry only when it records
a decision a human made, names that human, and links the on-record artifact
that carries the decision — an issue, a pull-request comment or a commit. A
private conversation is not evidence: the person restates the decision on
the pull request that adds the entry, and the entry cites that comment. The
person is a maintainer listed in
MAINTAINERS.md; anyone else's statement is a proposal until a maintainer restates it. - An entry outranks a report. A friction report, an AI-review finding, a
failing expectation in a test, or a first-time-user observation that collides
with an entry is not a bug. It is a feature request against a settled
decision: link the entry by its file path and leave it to a maintainer, who
either closes it as decided or changes the decision the one way it can be
changed — a dedicated pull request carrying the superseding entry, merged
with a maintainer override of the reviewer rule. No fix is made from the
report itself. The entry's path is its one canonical
thread: a search for it across issues lists every report that collided with
the decision, so a decision that keeps drawing reports stays countable for
the maintainer who could supersede it. Issue triage checks this directory before investigating an
issue (the Issue Radar crew brief and Investigate prompt both say so), and
the
recorded-decisions-are-not-regressionsrule inAUTOSDE.yamlholds reviewers to it. An entry outranks a report that contradicts it; a report that the product does not match an entry is a bug, and the entry is its spec. - Grep this directory before changing any user-facing label, wording, placement or behaviour. A pull request that reverses an entry without a superseding entry is a regression and is blocked.
# <Decision in one sentence>
Decided by: <name and role>
Date: YYYY-MM-DD
Supersedes: <file> (optional)
## Decision
One sentence.
## Why
Only what is true and was said at the time.
## Evidence
Links to the pull requests, issues and commits that carry the decision.
| Entry | Decision |
|---|---|
| 2026-06-14-chat-composer-model-and-effort-are-one-control.md | The chat composer offers model and reasoning effort as one control, never two. |
| 2026-11-11-fork-with-another-model-opens-the-new-chats-model-picker.md | "Fork with another model" forks with the earlier messages and opens the new chat's own model picker, so model and effort are picked in that one control; the fork request carries no model. |
| 2026-07-20-sessions-sidebar-create-button-says-new.md | The Sessions sidebar's primary create button shows the visible label "New". |
| 2026-09-25-incognito-and-temporary-chats-keep-their-transcript.md | Incognito and Temporary chats keep their transcript in History; the modes promise "learn nothing", not "leave no disk record". |
| 2026-10-02-conductor-introduces-itself-in-every-chat.md | Every Conductor chat introduces itself in plain words and reports with a task board, "Needs you" first, wherever it is opened, not only in Crew Mode. |
| 2026-10-10-conductor-board-tab-replaces-the-in-chat-board.md | A Conductor whose Dashboard tab shows goal-board or work-kanban does not write a second task board in the chat; it leads with "Needs you" and one status line. Supersedes the 2026-10-02 Conductor entry. |
| 2026-10-13-conductor-with-a-dashboard-tab-skips-its-intro-card.md | A Conductor whose session has a Dashboard tab, any template, skips its opening intro card; chats with no tab keep it. Supersedes the 2026-10-10 Conductor entry. |
| 2026-10-02-chat-transcript-scrolls-under-the-composer-glass.md | The chat transcript scrolls under the composer glass at every scroll position; the scroller never ends its box above the dock. |
| 2026-10-02-glass-material-has-five-thicknesses.md | The glass material has five named thicknesses (ultrathin, thin, regular, thick, ultrathick), picked per surface; a call site never sets a blur or alpha of its own. |
| 2026-09-05-sidebar-lanes-end-with-a-show-all-older-sessions-row.md | Every sidebar lane ends with an in-flow "Show all older sessions" row, kept alongside the Older Sessions footer; the two are not duplicates. |
| 2026-09-13-crew-members-message-through-session-send-not-an-inbox.md | Crew members message each other through session_send; there is no separate member inbox subsystem, hop counter or rate limit. |
| 2026-09-13-options-are-read-from-the-newest-reply-only.md | An [OPTIONS:] ask is read from the newest assistant reply only; the dashboard never walks back to resurrect an older one. |
| 2026-09-14-side-panel-tabs-are-fused-and-the-activity-toggle-is-on-the-title-row.md | The right SidePanel's workspace tabs are fused browser-style tabs, and the activity-panel toggle lives on the chat title row. |
| 2026-11-09-a-pinned-message-you-wrote-can-be-put-back-in-the-composer.md | In the Pins tab, a pin of a message the person wrote has a Put in composer button that brings the message into view and puts its full text in the composer after anything typed, never sending it; pins of replies are unchanged. |
| 2026-09-29-glass-pane-does-not-change-on-focus.md | A Liquid Glass pane does not change on focus; the caret is the only focus indicator on a glass input, and a glass button keeps the :focus-visible ring. |
| 2026-11-10-a-crew-board-row-keeps-focus-on-its-title-when-its-stop-goes-away.md | When an orphaned row's Stop or Take over controls go away on the Crew board while keyboard focus is on them, focus moves to that row's title; no extra announcement is added. |
| 2026-10-03-every-agent-turn-ends-with-text-or-nothing-to-do.md | Every agent turn ends with a closing text or a nothing_to_do call, never a bare tool stop; a bare stop keeps the recovery ladder. |
| 2026-10-08-crewmate-profile-card-tabs-are-sessions-schedules-goals-profile.md | The crewmate Profile card's tabs are Sessions, Schedules, Goals, Profile, and it opens on Sessions. |
| 2026-11-11-a-renamed-bot-keeps-its-workspace-and-the-tile-shows-the-bots-current-name.md | Renaming a bot renames nothing else (workspace, folder, chat thread, memory store); its Profile's Workspace tile shows the bot's current name only for a workspace stored as exactly member-<the bot's id>, with the stored name as the tooltip, and any other workspace by its stored name. |
| 2026-10-09-macos-has-no-agent-tree-memory-ceiling.md | macOS has no agent-tree memory ceiling; it stays best-effort because macOS has no cgroup or Job-object equivalent. |
| 2026-11-10-a-runtime-scope-with-no-agent-runtime-left-is-the-operators-to-stop.md | The gateway does not stop a runtime scope with no agent runtime left in it or a process it cannot attribute; kirocrew doctor lists each with its systemctl --user stop <unit> command and the operator decides. |
| 2026-10-16-crewmate-chat-draws-the-spawn-run-card.md | The crewmate chat draws one tool row, the spawn_run launch card, because it is the only sign that delegated work is alive after the crewmate's turn ends; every other rule of the 2026-10-09 entry stands. Supersedes the 2026-10-09 crewmate-chat entry. |
| 2026-10-17-crewmate-chat-hands-off-to-worker-sessions.md | A crewmate's chat starts no sub-agents and draws no tool row, the spawn_run launch card included; it hands work to worker sessions. Supersedes the 2026-10-16 crewmate-chat entry. |
| 2026-10-09-crewmate-chat-draws-messages-only.md | The crewmate chat draws the person's rows and the crewmate's speech only; runtime notices go to the crewmate on its next turn or to the log, never into the crewmate chat. |
| 2026-10-09-folder-glyph-sits-on-its-connector-line.md | A sidebar folder's glyph sits on its own connector line and folder rows share the session rows' 14px left pad; title width is never bought by moving either. |
| 2026-10-12-harness-card-has-seven-core-lines.md | The harness capability card shows exactly seven core lines; only those seven contribute to the "supports N of 7" count. |
| 2026-10-23-crewmate-watch-is-a-schedules-row-not-a-profile-readout.md | A crewmate's Profile tab carries no monitor readout; the patrol over the tasks it handed out is one Pause/Resume row under an On its own header on its Schedules tab, and the loop's budget bookkeeping is shown nowhere. |
| 2026-10-20-redaction-classifies-by-what-a-value-can-do.md | Credential redaction sorts every value into Secret, Bearer link or Identifier by what it can do, redacts Secrets and Bearer links, and never redacts an Identifier. |
| 2026-10-17-sidebar-create-controls-shift-opens-the-active-tab.md | Cmd/Ctrl-click opens a background tab everywhere in the sidebar; Cmd/Ctrl-Shift-click on New, a folder "+" or an empty-folder row opens the new chat in an active tab. |
| 2026-10-15-the-standing-teammate-agent-is-called-a-mate.md | Everywhere a person reads it, the standing teammate agent is a Mate (plural Mates); translations keep their teammate word, and code identifiers keep the crewmate spelling. |
| 2026-10-22-heartbeat-is-a-schedules-tab-row-not-a-goals-check-in.md | The crewmate's Heartbeat switch is the first row of the Profile card's Schedules tab, not a check-in on the Goals tab. |
| 2026-10-22-a-new-goal-starts-in-the-crewmate-chat.md | A new goal starts from the Goals tab's Create a goal row as a conversation in the crewmate's chat, with no text editor for it on the tab; the "Add something to track" row is gone. |
| 2026-10-27-every-used-crewmate-moves-to-the-conductor.md | On upgrade a crewmate moves onto its conductor even when its worker would lose a grant (told once) or its agent is unreadable (default template); a gain is withheld for the capability card, and a loosened limit still keeps it where it is. |
| 2026-10-28-every-crewmate-on-a-user-level-agent-moves-to-the-conductor.md | Every crewmate still bound to a user-level agent moves onto its conductor; a hook or permissions / toolsSettings restriction its file cannot carry moves with it and is named in its notice instead of keeping it in place, and the shared-template pass never writes a spec Kiro Crew does not own. Supersedes the 2026-10-27 crewmate-migration entry. |
| 2026-11-02-a-crewmates-worker-carries-its-template-policy.md | Adding an agent's abilities carries its hooks, permissions and an allowlist of toolsSettings keys (shell deniedCommands/allowedCommands, read/write deniedPaths, web_fetch.blocked) exactly onto the crewmate's worker on KAS; the crewmate's chat keeps the stock conductor spec; a field that cannot land exactly, or a non-KAS worker backend, is refused naming the field. |
| 2026-11-06-a-bots-worker-carries-its-templates-subagent-allowlist.md | The worker's toolsSettings allowlist also carries subagent.availableAgents (the subagent spelling only), held on KAS's sub-agent tool and on spawn_run / spawn_sub_agents; trustedAgents stays refused. Supersedes the 2026-11-02 template-policy entry. |
| 2026-11-13-a-bots-worker-carries-the-agents-tool-grants.md | A Bot's worker also carries the agent's shell.denyByDefault, shell.autoAllowReadonly, read/write allowedPaths and subagent.trustedAgents as an ordinary KAS session applies them, and carries shell.deniedCommands whole; while an entry nobody can enforce is carried, no non-read-only shell command runs without a person's answer, and the Abilities settings name those entries. Supersedes parts of the 2026-11-02, 2026-11-06 and 2026-11-07 worker entries. |
| 2026-11-10-silent-subagent-completion-notifications.md | A silent cron's sub-agents — and any they spawn — never ring the bell on completion, failed and cancelled included; spawn_run and spawn_sub_agents take a call-level silent (default false) passed to the gate's existing parameter, dropping only completion notifications (every bell route; under a cron also the channel post of the cron's reply) and changing no delivery and no approval alert. |
| 2026-10-28-the-crew-gradient-marks-crew-mode-surfaces.md | The crew gradient (--aim to --info, .crew-grad) is the one mark of a chat run by a crew, worn by every Crew Mode surface (session row, filter chip, composer chip, Crew panel cards), and the one decorative gradient the flat-fill rule admits. |
| 2026-10-29-crew-member-approvals-notify.md | A Crew member's tool approval always alerts the person (chime, unread mark, bell note, banner, OS toast), pointed at its open conductor and named for the crew member; the note offers no Approve or Reject, and the conductor's row shows the wait even while it runs. |
| 2026-10-29-crew-mode-ships-behind-a-default-off-feature-preview.md | The dashboard's Crew Mode is a default-off Feature Preview; off, no Crew Mode surface is shown and a Crew Mode chat reads as an ordinary chat on its conductor; on, it is named Ultra Mode and wears one solid accent (supersedes the crew gradient entry above, and the Crew Mode switch entry for the preview-off state and the name). |
| 2026-10-29-the-first-mate-welcome-introduces-mates-and-tours-their-tabs.md | The first Mate's welcome asks for its name first, explains what a mate is and tours its Profile, Schedules and Goals tabs, instead of offering to set up or fix Kiro Crew. |
| 2026-10-29-a-saved-goal-offers-the-heartbeat-in-plain-words.md | The Heartbeat is offered in plain words when a goal is saved, instead of after milestones are confirmed. |
| 2026-10-30-ultra-mode-is-marked-with-a-bolt-and-its-tab-is-the-board.md | With the preview on, Ultra Mode wears a lightning bolt, the Sessions row counts sessions with the chat icon, the side-panel tab is the Board (view id workers unchanged), an Ultra Mode row's own state is one word with the sentence in its tooltip, and no Ultra Mode text says "conductor" (supersedes "the Crew tab keeps its name" in the entry above). |
| 2026-11-02-an-ultra-mode-row-shows-only-what-needs-attention.md | With the preview on, an Ultra Mode Sessions row shows only "N needs you", "N stalled" (plus who stalled longest) and "N running", or "Done", with the full counts in its tooltip; an ongoing plain chat can switch on from the chip right of the permission button, one way; the Board reads Workers and Back, the welcome's first step Projects (supersedes the session count and one-word state in the entry above). |
| 2026-10-30-the-ultra-mode-name-wears-the-purple-to-blue-gradient.md | With the preview on, the words "Ultra Mode" (Sessions row tag, composer chip while on, welcome title) wear the --aim to --info text gradient at WCAG AA, and turning Ultra Mode on plays one short, input-transparent, turn-on-only effect (a fade under reduced motion); every other Ultra Mode surface keeps its solid accent (supersedes the solid accent of the 2026-10-29 entry for those words). |
| 2026-10-27-crew-mode-is-a-composer-switch-to-the-conductor-template.md | Crew Mode is a per-chat composer switch to the conductor template named by agent.crew_mode_agent; a conductor's crew members are ordinary sessions kept out of the person's own lists and folders and shown under their root in the Crew panel. |
| 2026-10-31-the-share-file-is-a-crewjam-file.md | Export writes the share file as .crewjam (kirocrew.crewjam, crewjam.json); import keeps taking the old .crewmate form through the same checks (supersedes the data-file-name part of the 2026-10-15 Mate entry for the share file only). |
| 2026-11-04-the-share-file-is-a-kirobot-file.md | Export writes the share file as .kirobot (kirocrew.kirobot, kirobot.json); import keeps taking the older .crewjam and .crewmate forms through the same checks (supersedes the 2026-10-31 .crewjam entry). |
| 2026-10-30-choosing-kas-runs-kiro-crews-own-engine-when-kiro-cli-cannot.md | Choosing KAS means Kiro Crew's own engine and sign-in: where kiro-cli's relay cannot run, the spawn takes the bundle route, the gateway installs a missing engine, every KAS prompt points to the Kiro sign-in, and the switch is logged and shown; a stored Kiro CLI pick stays on kiro-cli. |
| 2026-10-23-scrollbars-are-never-always-visible.md | No scrollbar in the dashboard is visible at rest: a scroll box either hides it entirely or shows a thin thumb only while it is being scrolled, in a column it already reserves so the reveal moves no content. |
| 2026-10-28-a-kiro-cli-choice-runs-on-kas.md | A stored Kiro CLI harness choice runs on Kiro Crew's KAS path once the gateway confirms kiro-cli offers its v3 engine, told once with a one-click save of kas; without that confirmation it keeps the v2 launch, and no session is refused. |
| 2026-10-27-a-crewmate-the-person-created-is-listed-with-an-empty-chat.md | A crewmate the person created (on the Mates page, or by approving Mate's card) is listed even with an empty chat; product-made rows still wait for a message, and the reserved default member waits for a message the person sent. |
| 2026-10-30-the-standing-agent-is-called-a-bot.md | Everywhere a person or the model reads it, the always-on agent is a Bot (plural Bots), untranslated in every locale; identifiers, keys, paths and the .crewmate extension keep their spelling. Supersedes the 2026-10-15 Mate entry. |
| 2026-11-01-kiro-crew-accepts-no-new-built-in-apps.md | Kiro Crew accepts no new built-in app: every app, first-party included, lives in a dedicated GitHub repository listed in the official registry (kirodotdev/KiroCrewApps), and the built-ins that still ship move to dedicated repositories in stages without changing anything for people who already use them. |
| 2026-11-01-shared-crews-give-each-person-one-role.md | Once the operator creates people_policy.json, each admitted person resolves to one role that sets their dashboard rights, narrows their agent and names the account their turns run as; with no file, everyone keeps the equal rights Shared Crew gives today. |
| 2026-11-10-a-chat-send-is-never-told-it-lost-to-a-send-that-was-not-accepted.md | A chat send is never told it lost to a send that was not accepted, including while another send to the same session is still pending. |
| 2026-11-02-kas-keeps-remote-mcp-sign-ins-by-default.md | agent.kas_persist_mcp_sign_in is on by default and a stored old-default false moves to true once; the grant vault is the gateway's, with no governance gate, as the kiro backend's sign-in cache is; a later false, a non-true value or an unreadable config keeps sign-ins in memory. |
| 2026-11-03-a-crewmates-sessions-leave-the-sidebar-for-its-sessions-tab.md | A crewmate's sessions are grouped by lineage stamps, not the mate home folder: dispatched sessions leave the person's session lists for the mate's Sessions tab (in-place crew-log recap), and Crew Mode and mate conductors lose their folder tools; supersedes the sidebar clause of the 2026-10-17 crewmate hand-off entry once the mate-worker preview flag is on by default. |
| 2026-11-03-kas-sign-ins-stay-stored-when-the-setting-is-off.md | The KAS sign-in vault stays on by default with the one-time move of a stored false; turning it off stops the stored grants being used but does not erase them, and erasing stays a manual step. Corrects where a stored false comes from (supersedes the 2026-11-02 KAS sign-in entry). |
| 2026-11-11-a-kas-sign-in-gets-the-engines-own-sign-in-wait.md | On KAS a remote MCP server with no timeout is sent 300 s, the engine's own sign-in wait, and a Settings or Connections sign-in keeps its engine until the attempt ends; the sign-in does not move to the Authorize click or to Settings. |
| 2026-11-04-conductors-stay-simple-and-new-abilities-go-to-workers.md | A conductor (Ultra Mode or a mate's) mounts only Crew's own MCP servers and loads only its own named skills; new MCP servers and skills go to workers; adding capability to a conductor, or binding Ultra Mode or mates back to custom agents, needs an explicit owner decision. |
| 2026-11-04-ultra-mode-pauses-its-crew-and-runs-on-the-team-lead.md | An Ultra Mode Board offers Pause all / Resume all for the whole crew; Ultra Mode runs on the team lead by default; the lead records the goal first when it changes (supersedes, in part, the default conductor of the 2026-10-27 entry). |
| 2026-11-09-pip-older-than-3-12-is-refused-not-given-a-pre-0-6-release.md | Every link on a channel's pip index carries data-requires-python; a link published before the attribute existed is stamped >=3.12 on purpose, so pip on an older interpreter is refused instead of being given a pre-0.6 release. |
| 2026-11-06-every-task-a-bot-dispatches-goes-into-its-work-ledger.md | Where a Bot has the work ledger, every task it hands to a worker gets an item, a single task too, bound before the seed; a single task needs no goal; the worker reads its item with work_brief and reports with work_report, as Ultra Mode already does. |
| 2026-11-09-cloud-launch-offers-a-stack-it-has-no-record-of-but-never-picks-it.md | When kirocrew cloud launch finds stacks it has no record of, it offers one only when it can resume it, names every other one, and never makes a found stack the default; --yes keeps none. |
| 2026-11-09-a-kiro-wide-uninstaller-wipe-is-an-accepted-risk.md | A Kiro-family uninstaller that removes ~/.kiro/ wholesale, and ~/.kiro/crew with it, is a documented accepted risk (UNINSTALLER-EXCLUDE-CREW), not a release gate; the data-home spec lists the protections Kiro Crew owns. |
| 2026-11-09-an-interrupted-cloud-launch-names-the-stack-it-may-leave.md | kirocrew cloud launch records a new stack before provisioning, and a Ctrl+C during it names the stack, says it may still be creating and billing, and prints the commands to check and remove it; it never deletes the stack or asks to. |
| 2026-11-10-the-discover-badge-counts-only-enabled-apps.md | The sidebar Discover badge counts only enabled apps with an update the store can install; the Discover Updates tab, its count and Update All keep listing disabled apps, and the badge has no off switch. |
| 2026-11-10-a-failed-cloud-launch-says-what-it-left-in-aws.md | After a failed provision the dashboard says a stack that never existed "was never created, so it is not billing" (still deleting first), and kirocrew cloud launch names the stack a failed deploy left, whether it bills, and the cloud destroy --tag … --region … line that removes it. |
| 2026-11-06-the-ultra-mode-chip-is-grey-while-off.md | While Ultra Mode is off, the composer's Ultra Mode chip is grey like the composer's other chips (bolt and label); the accent is only for its on state (supersedes, in part, the solid-accent bolt of the 2026-10-30 gradient entry for the off chip only). |
| 2026-11-10-a-claude-workers-native-excludes-ride-an-allow-list.md | On claude, a Bot worker whose file excludes a native tool runs with a tools allow-list of the built-ins it keeps instead of being refused; a native entry no claude built-in covers is still refused. |
| 2026-11-06-a-channel-picture-is-kept-with-its-session.md | A picture the gateway downloads from a channel message is copied into its session's attachments store and shown from there after the turn; it is kept and deleted with the transcript, Incognito and Temporary included, and a path the user typed is never copied. |
| 2026-11-11-a-cut-channel-text-attachment-hands-over-its-whole-redacted-text.md | A channel text file or document longer than the inline limit keeps its inline part, says how much was shown of how much, and hands the agent its whole redacted text as a temporary .txt for the turn; under the limit nothing changes, and text above 512 KB stays refused. |
| 2026-11-08-the-job-sdk-retention-cap-ships-with-the-backup-jobs.md | The Job SDK's register gains only an opt-in per-kind count cap, retention, landing with aws_control's backup kinds as its caller; the live predicate and on_evict callback wait for an app whose work continues after a run finishes. |
| 2026-11-10-under-a-sign-in-error-the-composer-hint-names-the-sign-in-first.md | While a sign-in error is the newest row of a chat, the composer's interrupted hint names the sign-in first ("follow the message above, then press Resume or send your message again") instead of offering Resume alone. |
| 2026-11-07-the-measure-button-counts-only-servers-a-pass-can-still-finish.md | The Sharing assessment's Measure button counts only the servers the gateway marks as still due for a measure pass, never one only another agent declares, and with none left it says nothing is left for it to measure. |
| 2026-11-07-a-crew-deep-link-names-the-crew-by-id-and-follows-auto-connect.md | kirocrew://chat?crew=<crew id>&sid=<session> names the crew by its id, never the display name; the app switches to it like a tab click and sends its pane an open-session message; an unknown or unavailable crew shows an error and opens nothing; the link follows auto-connect (off: never connects, refused as "crew not connected"). |
| 2026-11-07-a-registered-themes-overlays-can-be-turned-off.md | A registered theme's decorative overlays get the Experience section's Overlays switch, on by default and shared by light and dark; turned off, they unmount. |
| 2026-11-07-a-launch-added-beside-an-approved-one-reads-as-a-new-launch.md | On MCP Management, a changed_needs_reapproval row whose approved launches all still run beside an unapproved one reads Paused · new launch to approve (doctor: new launch not approved yet); a row whose approved launch changed keeps Paused · command changed. |
| 2026-11-07-installed-kiro-powers-are-listed-not-loaded-until-the-plugin-rulings.md | Kiro Crew lists every installed Kiro Power and Agent Plugin to the owner (Customize > Kiro Powers, GET /api/agent-plugins) and loads none; the switch, launcher, plugin MCP source, any includePowers pin and install wait for the rulings it names; the shipped includePowers forwarding stays; no POWER.md loader or converter, and the kirodotdev/powers catalog is asked to republish as plugin.json. |
| 2026-11-07-a-gone-approval-reads-as-status-not-an-error.md | A press that finds its approval gone (isTerminalApprovalRefusal) is shown as status, not as an ErrorNotice, on every dashboard approval surface; a decide that failed while the approval may still be pending stays an ErrorNotice. |
| 2026-11-08-bot-is-lowercase-after-another-word.md | In English copy, "Bot" is lowercase after another word and capitalized only alone or at a sentence start. Supersedes the casing of the 2026-10-30 Bot entry. |
| 2026-11-08-a-bot-chat-does-not-announce-inherited-skills.md | A new bot chat session shows no notice, and the bot says nothing in its reply, about the person's own skills its conductor still loads this release; a skill to keep is added in the bot's Abilities (supersedes, in part, the "mate tells the person" clause of the 2026-11-04 conductors entry). |
| 2026-11-10-a-bots-worktree-branch-takes-one-configurable-prefix-not-a-template.md | agent.member_branch_prefix (default crew/) replaces crew/ in front of <bot>/<repo> on the branch a bot's new worktree is cut on; the name is not a placeholder template, and a worktree that exists keeps its branch. |
| 2026-10-27-every-completed-sign-in-counts-as-an-account-change.md | Every completed Kiro Crew sign-in moves the vault's sign-in marker, so a same-account re-sign-in also retires idle kiro-backed sessions once; the sign-in response carries no per-account id that could tell it from another account with the same profileArn. |
| 2026-11-07-a-connections-card-names-its-own-next-step-for-a-spent-approval.md | When a pasted return address belongs to an approval that is no longer active, the Connections card says so in the reader's language and names its own next step (Cancel, then connect again), never an Authorize button the card does not have; the spent address is cleared and the card keeps waiting, so its Cancel stays on screen. |
| 2026-11-08-an-svg-artifact-keeps-its-own-stylesheet-in-a-shadow-root.md | The SVG viewer and the library card draw an SVG artifact in a shadow root of its own and keep its <style> elements there, so it renders as authored and its stylesheet cannot restyle the dashboard. |
| 2026-11-08-a-channel-names-its-owner-only-from-one-configured-dm.md | A channel names its owner only when it advertises exactly one configured user: target, available or not, and only while that one is available; who has written to the bot never picks the owner. |
| 2026-11-08-a-meetings-sketch-exports-as-one-self-contained-html-file.md | A meeting's More menu exports each sketch agent's output as one self-contained HTML file built with the sketch frame's own sanitising and content policy, keeping diagrams and tables; an all-outputs bundle is a separate request. |
| 2026-11-08-the-policy-floor-pip-upgrade-says-to-run-it-from-your-own-terminal.md | When a plain pip install is below the policy minimum, the version-compliance log line says to run its in-place upgrade and the restart from your own terminal; the kirocrew update print and the extras install commands keep their text. |
| 2026-11-07-add-abilities-leaves-out-a-grant-the-worker-already-holds.md | Add abilities leaves out a grant-only toolsSettings key the Bot's merged worker already grants (web_fetch.trusted under a bare web_fetch allow, subagent.trustedAgents whose literal names a carried subagent allow lists) and shows it as an "Already has" row instead of refusing; the worker merge still refuses either key in a file (supersedes the 2026-11-02 template-policy entry in part). |
| 2026-11-09-only-a-bots-own-thread-hands-work-to-its-worker.md | Only a bot's own thread on the Bots page hands work to its worker; a chat that runs it anywhere else (the agent picker, a chat folder's default agent, an agent channel) is still offered, does the work itself and is told so, and cannot use abilities added to the bot. |
| 2026-11-10-a-saved-task-plan-workflow-is-refused-while-task-runner-is-off.md | While Task Runner is off in Library, a saved task-plan workflow is refused with the same 409 app_disabled as the other Task Runner starts; saved Python workflows are not affected. |
| 2026-11-10-a-harness-sign-in-message-names-the-gateway-host-terminal.md | A third-party harness's sign-in message says it runs in a terminal on the gateway host and that, after setup, the gateway owner can open such a terminal from the dashboard's Terminal panel where that panel is on; the Strands key messages name its Model provider card; per-vendor Sign in and Install buttons are not planned. |
| 2026-11-10-the-claude-slash-menu-lists-each-chats-own-commands.md | On a claude chat, the / menu adds the commands that chat's own live session last advertised (its project and user commands and skills) to the list every chat gets; what a typed command runs does not change. |
| 2026-11-10-the-update-preview-lives-inline-in-about-under-update.md | The advance notice of the next update is shown inline in Settings > About, in the Updates card under the update controls, never as a modal, pop-up, toast or auto-opened dialog, and it says the update takes effect the next time the person restarts Kiro Crew. |
| 2026-11-09-a-folder-default-agent-holding-a-bots-name-is-kept-and-named.md | A folder whose Default agent is exactly one bot's label is kept as saved and named once in a bell notice, so the person picks the bot where it was meant; it is never rewritten, and folders the rewrite shipped in v0.12.1 and lts-v0.1.0 already moved keep that change. |
| 2026-11-10-updates-never-restart-a-running-gateway.md | No path applies an update to, or restarts, a running gateway: a click on Update ("Update when I restart") only arms it, the apply runs at the next start before the gateway serves or restores anything, nothing runs at shutdown, auto update only prepares beside the running install (a git checkout or a policy command only notifies), the stale-asset watchdog no longer exits the gateway, and a user-clicked Restart (which applies an armed update) warns first while work is running. |
| 2026-11-08-a-non-shell-tool-call-has-its-own-silence-timer.md | Every non-shell tool call gets a silence timer from dispatch that only its own frames restart (built-ins and network MCP 5 min, stdio MCP 30 min, sub-agent calls 10 min from the sub-agent's frames, held while a native sub-agent has a call open); the timer runs only while the session can prove it would see the call's activity and otherwise leaves the call to the oracle and the hard cap; a built-in its harness never terminates (kiro-cli's introspect) gets none; on expiry the call is cancelled and, on the surfaces the entry names, handed back to the model as a timeout error to retry; Kiro Crew's long tools heartbeat about every 30 s, a wait on a person pauses it, shells keep the oracle rules and the hard cap stays the backstop. Supersedes the acp-client.md rule that untagged evidence keeps the full suspect window. |
| 2026-11-11-the-mcp-servers-list-names-a-config-file-it-skipped-for-its-encoding.md | The MCP servers list on the Connections page (now the Customize → MCP Servers tab) shows one error line for each MCP config file it skipped because the file is saved as UTF-16 (with or without a byte-order mark) or UTF-32, naming the file and the same fixed "re-save it as UTF-8" reason the chat's session-start notice gives. |
| 2026-11-05-a-picture-is-sent-once-only-where-crew-sees-the-compaction.md | A picture a session already holds is sent once, then as its path with a note, only on harnesses whose compaction Crew sees (kiro, kas, codex, claude); every other harness sends a named picture on every turn. |
| 2026-11-12-a-full-key-link-to-a-closed-session-offers-resume.md | A /chat?sid=<full key> link, or a tab reloading one, that names a session which is not open but still has a transcript offers to resume it instead of answering "not found"; the fix stays in the page, with no session-map rollback and no wider live-backend recovery ladder. |
| 2026-11-12-a-bots-sessions-tab-opens-a-session-and-shows-the-task-it-was-last-given.md | On a Bot's Sessions tab a row click still expands the recap in place; the opened recap has a button that opens the session in the chat view ("Reopen session" for a closed one); a session with no report, or with no work item, shows a bounded excerpt of the latest message the Bot sent to that worker in place of "No report yet" (supersedes, in part, the crew-log-only recap of the 2026-11-03 Sessions tab entry). |
| 2026-11-13-the-crew-mode-feature-is-named-conductor-mode.md | The Crew Mode feature is named conductor mode in every user-facing place and in the code names that carried the old name; the earlier entries that say Ultra Mode stay as written and apply to conductor mode, and the ultra_mode_only refusal code, the telemetry.traces_ultra_mode config key and the ultra telemetry values keep their spelling (supersedes, in part, the Ultra Mode name of the 2026-10-29 Feature Preview entry and the 2026-10-30 bolt entry's "no Ultra Mode text says conductor" for the feature's own name). |
| 2026-11-13-conductor-mode-keeps-no-ultra-names.md | Conductor mode keeps no Ultra name for compatibility (refusal code, config key and trace values are conductor-mode forms, no fallback), and Title Case labels write it in lower case (supersedes, in part, the 2026-11-13 entry that named the feature). |