Features
-
Sub-sessions in the session list — Sessions started from another session now sit under it in the session list: a task's subtasks, sessions an agent starts with
spawn_session, subtasks added on the Tasks board, and branches. A toggle under the parent's status icon folds its sub-sessions away, and tree lines show which session belongs where. When the parent's second line has nothing else to show, it says how many sub-sessions it has. A family stays together when the list is sorted, grouped (by date, unread, status or project) or loaded page by page, and the list remembers which parents you folded. A branch now also gets its source session's project. -
Task brief before a task runs — Opening a task that hasn't run yet shows its goal, acceptance criteria and subtasks, with Run task and Edit task buttons, instead of the empty new-chat screen.
-
More tools in Coding mode — Coding sessions now get the built-in browser (while Built-in browser is on in Settings), Craft Pages, previews of HTML, PDF, image and Markdown files in the chat, data tables with
transform_datafor large ones, Mermaid diagrams,call_llmfor focused model calls,spawn_session,get_session_info,list_sessionsand the bundled document tools, each with the instructions the regular prompt gives.source_testis always available, so the agent can turn on a source itself. A session an agent starts from a Coding session opens in the same folder and in Coding mode. Partially addresses #1120.
Improvements
- Claude Agent SDK 0.3.316 — Claude sessions run on Claude Code 2.1.316 (from 2.1.302). Stop and new messages no longer wait behind a context usage check, and an effort level your organization caps is lowered instead of failing every turn. A session that isn't on the 1M context window and runs past 200K tokens now compacts the conversation and continues, instead of stopping with "Usage credits required for 1M context".
Bug Fixes
-
The app opens when iCloud has offloaded session files — On macOS, if iCloud or another cloud storage provider had offloaded any workspace's session files from your Mac, the app started but never opened a window. The window now opens right away and the session list loads behind it. Offloaded sessions are left out of the list until macOS has downloaded them again, and show up on the next launch after that. Fixes #1113.
-
Automation prompts can't read the app's secrets — A prompt action expanded any environment variable, so
$CLAUDE_CODE_OAUTH_TOKENor$ANTHROPIC_API_KEYin a prompt, label or Telegram topic put the real value into the chat. Prompts now expand only the event'sCRAFT_*variables; anything else,$HOMEincluded, expands to nothing. Session names and labels also arrive as they are, without the backslashes that were added before quotes and$. -
Webhook bodies stay valid with quotes in values — A JSON body broke when a variable's value contained a quote or a line break (for example a session named
Fix "login"). Values are now inserted as proper JSON strings. A value is also no longer expanded a second time, so a session named$CRAFT_WH_SLACK_URLcan't pull your webhook secret into a request. -
One broken automation no longer stops the rest — When a single automation in
automations.jsonwas invalid (for example one using the removedcommandaction, or a typo in a cron expression or regex), the whole file was ignored and none of your automations ran, while the Automations list still showed them all. Now only that automation is skipped: the list marks it Not running and its page says why. If the file isn't valid JSON, the list now says so instead of showing nothing, and automations that were already running keep running until it's fixed. The list now also shows script automations, which were missing from it. -
Automation docs match what runs — The automations guide the agent follows, and the automations page on the website, still described the removed
commandaction and listed agent events such asPreToolUseandStop, which never run actions. The agent could set up automations that silently did nothing. Both now list only the events that trigger automations and document webhook and script actions; scripts are the way to run your own code when an event fires. Fixes #1117. -
A task's agent knows the task — A session that belongs to a task on the Tasks board started without the task's content, so asking its agent to "do the task" reached an agent that had never seen the goal. The session now gets the task's goal, acceptance criteria and subtasks with your first message, and again whenever the task changes. Other agents can read a task with
get_session_info, andlist_sessionsmarks the sessions of a task.create_tasknow asks for a description that stands on its own, because the agent that runs the task sees none of the conversation that created it. -
Sources turned on mid-session reach Claude sessions — A source enabled while a Claude session was running never reached it: the agent kept the tools it started with, and
source_testonly got around this by restarting the session's Claude Code process, which also stopped its background agents. Each new turn now applies the session's current sources, and turning a source off removes its tools. A call a background agent is making to a source finishes before the source changes. When the agent turns on a source in the middle of a turn, the request still restarts with the source's tools, but like Stop it leaves the background agents, workflows and commands it started running. -
Using a source that isn't enabled no longer stalls the session — When the agent called a tool of a source that wasn't enabled in the session, Craft enabled the source but ended the turn without a reply, so the session looked stuck until you sent another message. The request now restarts with the source's tools. Fixes #1102.
-
Replies stopped by Claude's safeguards — When Claude's safeguards stopped a reply and Claude Code answered it with another model, the stopped reply stayed in the chat, nothing said the model had changed, and the session went on with the other model while the model picker still showed yours. The stopped reply is now removed, a notice says what happened, and the session's model becomes the one that answered: pick yours again to switch back. A reply stopped once and retried gets a notice too. When no other model answers, the chat explains why instead of showing "Invalid Request". Behind a custom endpoint, Claude Code no longer switches to a model the endpoint may not serve.
-
A model picked mid-session is used right away — In a running Claude session, a model you picked took effect only after the session's Claude Code process restarted. The next message now uses it.
-
Explore mode runs only read-only tools — Explore mode let any tool it had no rule for run, so tools added in recent Claude Code releases worked there: creating and removing git worktrees, and scheduling prompts. Explore now blocks every tool it doesn't know to be read-only. Subagents still run, but not in their own copy of the repository, and sending messages to other Claude sessions on your computer is blocked. A source tool named like a built-in one, such as Read or WebFetch, is now checked like any other source tool, in Explore and Guarded mode.
-
Pi sessions drop a turned-off source's tools — In Pi sessions, a source's tools stayed available after you turned the source off, and calling one turned the source back on. They now go with the source.
-
Branches of Pi sessions keep their own conversation — When the app restarted or the session's tools changed, a branched Pi session's agent got its parent's conversation again in place of the branch's own, and after a restart also what the parent said after the branch point. It now keeps the branch's conversation.
-
Monitor commands follow the permission mode — Claude's Monitor tool runs a shell command and reports its output as it comes, but Explore mode let any Monitor command run, Ask mode never asked before running one, and Guarded mode didn't check it. Monitor commands now follow the same rules as Bash commands in every mode. A Monitor that only watches a WebSocket is still allowed.
-
HEIC images keep their colors — On macOS, HEIC photos and screenshots you attach are now converted with the system's own decoder. Colors match the original: iPhone photos (Display P3) are converted to sRGB instead of looking washed out, and no blocks come out in the wrong colors. Conversion is also faster. Windows and Linux keep the previous converter.
Also from v0.15.7
v0.15.7 wasn't published separately, so its changes come with this release:
-
Sign in to MCP servers that reject the OAuth relay — Some MCP servers only accept a local (loopback) redirect address when signing in, and refuse the Craft Agents relay with an error like "only HTTP loopback callbacks". Add
"oauthRelay": falseto the source'smcpblock to send the sign-in straight back to the app onlocalhostinstead. Leave it unset to keep using the relay. See Sources → MCP servers → Authentication in the docs. -
Request OAuth scopes for MCP servers — Sign-in to an MCP server never asked for specific scopes, so servers that grant less by default (for example read-only) issued tokens that couldn't use their write tools. List the scopes you need in the source's
mcpblock, for example"scopes": ["app:read", "app:write"], and sign in to the source again. Leave it unset to keep the server's default scopes. See Sources → MCP servers → Authentication in the docs.