⚡ Claude Terminal v1.2.15
Automations you can set up in a form, and an engine that finally tells the truth.
The headline
🤖 AutomationsSay what Claude should do and when, in a form. No node graph, no cron syntax. Six starter presets, a live "next run" preview, and one click to a full workflow when you outgrow it. |
⚡ Event triggersAutomations don't only wait for a clock. React to a push, a file change, a failed command, a Claude session ending, or Claude replying — with an optional text filter. |
🧩 Four new nodesCode runs a JavaScript snippet — the escape hatch for everything the other nodes don't cover. Plus Template, Terminal and Quick action. |
🔐 Cloud remote, backRemote control returns behind a PIN handshake, with authenticated relay messages and a connection that backs off instead of flapping. |
🔧 The workflow engine, audited node by node
Every one of the 30 node types is now executed for real by a sandbox harness before it ships. That pass found things no amount of reading would have:
| What was broken | |
|---|---|
| Nothing could be created | Saving a new workflow failed outright — the graph editor too, not only Automations |
| Nodes vanished | Eight node types shipped with no palette entry and were silently deleted from a saved graph on reload |
| Agent mode was a lie | Picking an agent on the Claude node logged a warning and ran a plain prompt instead |
| Half of git crashed | merge, stash, stash pop and reset threw the moment they ran
|
| "5 s" meant 5 ms | A space between the number and the unit silently divided your wait by a thousand; 0 waited a full minute
|
| Wrong data on the wire | db and file disagreed with the graph builder about which output sat on which slot
|
| Globs skipped the root | The glob skipped every file at the top of a folder — including in the pattern the docs recommend |
| The week disagreed | Time tracking started on Sunday in the workflow node and the MCP tools, on Monday in the dashboard |
🔒 Security & privacy
- Untrusted input is validated before it reaches
git,spawnor the filesystem - Markdown sanitization tightened — the chat renders model output, so this is the load-bearing control
- Cloud relay messages are authenticated, and PIN auth hardened
- 22 known vulnerabilities patched in dependencies
- The security model in
CLAUDE.mdnow matches what the code actually does
Everything else
- Automations tab with presets, event triggers, and per-event project scoping
- Code, Template, Terminal and Quick action nodes
- Terminal output is captured, so the terminal read tools and the MCP tool return something instead of always being empty
- Commit messages and PR descriptions are now generated with Claude Haiku
- An error log that actually collects errors
- Chat streaming renders in linear time and coalesces token IPC
- Three unbounded memory leaks closed in the renderer
- The main process event loop no longer blocks, and orphaned watchers are released
- Timers that outlived their tab are now stopped
- PDF and 3D viewer imports repaired, trimming 509 KB from the bundle
- Failures that used to happen silently are now surfaced
- The model switch no longer reports a change it didn't make, and tool output growth is bounded
- Modal listeners are released on every close path, with focus traps added
- Blocking native dialogs replaced; modal promises settle on Esc
- Git tells "could not run" apart from "nothing to show"
- The MCP
quickaction_runtool emitted an event nobody listened to - The
project_openedtrigger never fired from clicking a project on_workflowchaining can finally be restricted to success or failure- Sync no longer overwrites local data when a read fails
- PWA login, duplicate cloud toasts, HTML preview blocks, and SDK prompt suggestions arriving late
- AA contrast met across the app
- The tab close button is named for screen readers
- Git staging is keyboard-usable
- 83 missing keys filled across English, French and Spanish
- Hardcoded French and two-language ternaries removed
- A miss now falls back to English instead of rendering a raw key
📜 Full changelog — 63 commits
feat(workflow) add simple-mode automations
feat(workflow) let automations trigger on events, not just the clock
feat(workflow) add a Claude-replied event trigger
feat(workflow) choose which project an automation event watches
feat(workflow) add a code node, the escape hatch the node set was missing
feat(workflow) add template, terminal and quickaction nodes
feat(terminal) capture terminal output so the read tools have something to read
feat(remote) restore cloud remote control behind a PIN handshake
fix(security) validate untrusted input before it reaches git, spawn and fs
fix(security) tighten markdown sanitization
fix(remote) authenticate cloud relay messages and harden PIN auth
chore(deps) patch 22 known vulnerabilities
docs correct the security model in CLAUDE.md
fix(workflow) stop rejecting every workflow creation
fix(workflow) show every shipped node in the editor palette
fix(workflow) stop deleting unknown node types when a graph is reloaded
fix(workflow) route data links by pin name, and realign the slot tables
fix(workflow) make claude agent mode actually use the chosen agent
fix(workflow) let on_workflow filter on the source outcome
fix(workflow) bound the registry wait and surface editor open failures
fix(workflow-nodes) repair wait durations and the four broken git actions
fix(workflow-nodes) resolve projectId to a path in the Claude node
fix(workflow-nodes) resolve the run project, and interpolate the webhook URL
fix(projects) fire project_opened on selection, not only on worktree switch
fix(time) align the week boundary with the app and stop labelling days in UTC
fix(mcp) start the week on Monday in the time tools
fix(mcp) connect the quickaction_run channel that had no listener
refactor(workflow) delete the dispatch fallbacks the registry shadows, harden what stays
refactor(workflow) share cron parsing between main and renderer
refactor(workflow) keep one duration parser instead of two
style(workflow) custom controls in the automations sheet, and unstack the zoom bar
style(workflow) replace the OS time spinner with themed pickers
fix(workflow) keep the task buttons visible and let the switch follow the accent
perf(chat) make streaming render linear and coalesce token IPC
perf(renderer) close three unbounded leaks
perf(main) unblock the event loop and release orphaned watchers
fix(viewers) repair the PDF and 3D dynamic imports, trim 509 KB from the bundle
fix(panels) stop the timers that outlived their tab
fix(panels) release modal listeners on every close path, add focus traps
fix(ui) surface failures that used to happen silently
fix(ui) repair dead IPC channels, the accent token and open-in-editor
fix(ui) replace blocking native dialogs, and settle modal promises on Escape
fix(a11y) meet AA contrast, name the tab close button, make git staging keyboard-usable
fix(chat) stop the model switch lying, and bound tool output growth
fix(chat) show SDK prompt suggestions arriving after result
fix(git) tell "git could not run" apart from "nothing to show"
fix(errorlog) make the error log actually collect something
fix(markdown) render html preview blocks over a dedicated scheme
fix(cloud) stop repeating the new cloud projects toast
fix(cloud) back off when the relay connection keeps flapping
fix(sync) stop overwriting local data when a read fails
fix(remote) restore pwa login broken by duplicate t declaration
fix(i18n) add the 53 keys the new error paths need
fix(i18n) add 30 missing keys and guard against the whole class
fix(i18n) fill the missing keys and fall back to English on a miss
fix(i18n) remove hardcoded French and the two-language ternaries
chore(i18n) update ai generation labels to reference claude haiku
refactor(git) generate commit messages and PR descriptions with claude haiku
test(workflow) add a sandbox lab that executes nodes for real
test(workflow) cover all 30 executable node types in the sandbox lab
test(workflow) give the lab a per-scenario timeout and self-healing cleanup
test(smoke) parse every unbundled file and check IPC channel symmetry