Repository navigation
The Linux packages use the WebKitGTK runtime (libwebkit2gtk-4.1-0): the .deb installs it through your package manager, the AppImage carries its own. The macOS app is for Apple Silicon Macs.
These packages are unsigned: linux-x86_64, macos-aarch64, windows-x86_64. Your system will warn before opening them; they are not offered as updates.
The verdict runs the base's tests against the change and runs in CI; the command line is a set of nouns.
Breaking
-
Commands are noun first. An old name is refused with the new one:
Old New psstatus(lsstays an alias)open,serve,appup,up --no-browser,up --windowquitdownshow,watch,attachrun show,run watch,run attachanswer,snoozeinbox answer,inbox snoozeforge prs,forge issuespr list,issue listspeckitgate install --speckitcheck,explainconfig check,config explaintrustproject trustagents,connect,disconnectagent list,agent connect,agent disconnectlogin,logoutauth login,auth logoutdiagnosticsdoctor -
Removed:
reportand[reports],rewind,modes(usestatus --modes) andattention(indoctor). -
--jsonis one global flag. Every change, run and ask id accepts a unique prefix. -
devplane.tomlkeys, refused by name under the old spelling:[policy] never_auto/always_ask→deny/ask;
[project] default_agent→[agent] default;[policy] max_parallel_runs/stall_timeout→[agent] max_parallel/stall_timeout;[transcripts] keep→[agent] keep_transcripts;[gates.named.X]→
[gates.X];[budget] usd→max_usd.[gates] on_failand[github] draftare gone. -
Store schema 18: an older store is set aside, not migrated. Repository trust moves to
~/.devplane/trusted.toml
and is carried over. -
change offercommits the tree the last passingcheckran on, then pushes; it refuses if the tree moved.
archiveafter an offer needs no--discard-uncommitted. -
devplane gatereportspassed, notverified.gate install --speckitneeds a gate, unless--anyway. -
POST /api/projects/trustneeds the window's proof; the control token alone is refused. -
The record names where an answer came from as
window,notificationorcli;boardis no longer written. -
Minimum Rust is 1.94.
Added
The verdict
- Base checks run the base's tests on the change and its new tests on the base. A base test failing on the change
holds the offer; new tests that fail on the base are named.[gates] base_checks = "auto"runs them after every pass. - Test counts beside verified (cargo, nextest, pytest, jest, vitest, go);
[gates] junitnames failing tests. [gates] serial = truemakes gates that share a database take turns across worktrees.- Edits to agent controls (hooks, settings,
CLAUDE.md/AGENTS.md, skills, MCP), ownership (CODEOWNERS) or
dependencies (lockfiles, manifests) are shown with the weakened checks and hold the offer. - An agent can stop with
spec_and_tests_conflict(MCP) when the specification and tests conflict; the claim is
shown on the change and never changes verified.change claim-readmarks it read. - The offer names the files nobody opened, by path.
CI and the certificate
devplane verifyruns the base'scheckon a checkout with no host or network and writes a job summary led by
the weakened checks. Exit 0 passed, 1 failed, 2 could not run.action.ymlwraps it.- On GitHub Actions,
verifyannotates weakened rows and failing tests on their lines;--sarif <path>writes SARIF. verify --approvals(the action'sapprovalsinput) and the change say whether required approvals came from a
person, a vendor's review model or a bot.- The certificate uses the in-toto Test Result predicate;
change export --sign sshsigns it with your SSH key.
Permissions and the record
- Grants: answer the same permission the same way several times and the inbox offers an allow rule for that project
in your~/.devplane/policy.toml.config grantslists them;config revokeremoves one. - Claude Code sessions you start yourself record who decided each permission; what cannot be attributed is listed
byaudit --without-me. - A driven session's permission mode is shown on the change;
modeinagents.tomlchooses one.
The inbox and notifications
- Answer from the notification: Allow/Deny, a question's options, or a typed reply (macOS, Windows).
- Keys:
1–9choose,ttypes an answer,a/dallow or deny,ssnoozes,oopens,rreviews;?lists them. - An answer from the window waits 5 seconds before it is sent;
ztakes it back. ssnoozes until the next activity (inbox snooze --until-activity); snoozed items are listed with a way back.- The inbox, status bar and tray or dock badge show one count.
⌘Kover an item lists its actions first. - Each open question in a specification is its own inbox item; answer it in place with
change clarify.
The review and the window
- The review reads in one scroll;
j/kcross files. The line that weakened a check is marked in the gutter. - Review comments: press a line number or
f; Send N comments (⌘↵) sends them to the agent as one turn. - A first-run checklist in Setup, from connecting an agent to a first verified change.
- From the window: declare a check from the commands the repository already has, connect an agent, trust a repository.
- One keyboard cursor on every list; the open view is kept in the address.
Agents
change draft <name> -- <intent>drafts a specification with Spec Kit's or OpenSpec's own command;
draft-accept/draft-rejectdecide it.change resume <change> --agent <id>continues a change with another agent in the same worktree.change login <change> --method <id>signs in an agent that asked for it.- The diff an agent reported for an edit is shown on its permission request and decision.
- Adapters pinned to claude-agent-acp 0.85.1, codex-acp 2.1.1, Copilot 1.0.91 and Gemini CLI 0.62.0.
Specifications
- GSD is read as a fourth layout (
.planning/). gate install --skilloffers the gate as Claude Code'sverifyskill; the Spec Kit extension adds a workflow step.
The desktop app
- Packages for macOS (Apple Silicon), Windows,
.deband AppImage, each with a.sha256; unsigned ones say so. - Update checks, off until you turn them on; nothing is downloaded before Install and restart.
- Launched from Finder, the Start menu or a launcher, the executable opens the window.
devplane doctorreports the window, signing, update checks, notifications and dangling hooks.
Changed
- OpenSpec task counts match
openspec list --json, andconfig.ymlis read. Kiro is detected by.kiro/specs/. - Seen marks are kept by the host; a hunk the agent rewrites is unread again.
- A failed read names
devplane doctorand offers Retry. The forge offers Sign in when sign-in is missing. - A tool call reported in pieces is joined before a rule reads it.
Security
- A weakened check could be hidden from the review (
assume-unchanged,-diff,info/exclude, an embedded
repository, a truncated diff, runner configuration). The review now diffs the digested tree. - The policy reader catches prohibited commands run through
git config alias,tar --to-command,sed e,
zip -TT,less,man -P,tmux, or a script run by path. - Agents are denied reading or writing Devplane's home,
trusted.tomlincluded, on every vendor's hook. - An answer counts as the window's only with the app's in-memory proof.
project trustis refused inside an agent. - A telemetry event no longer clears a waiting permission.
- CI judges a pull request with the base's
action.yml, which installs a pinned, checksummed release. - Opening a worktree in an editor or terminal no longer goes through a shell.
- A line in the change cannot forge or silence a
verifyannotation.
Fixed
- An Alt shortcut typed in a text field (
⌥3for£) switched the view and dropped the draft. - The command palette opened without focus, and listed some commands twice.
- Offer was enabled while a weakened check was unread.
- A
devplane://link opened with the app closed was rejected on Linux and Windows. - On Linux, opening a terminal reported success when none had started.
- An older run snapshot could overwrite a newer one and lose events.
- A missing gate program read as a failing check; it now says not on PATH.
- An uncommitted
devplane.tomlblocked a new change. - Claude Code telemetry events named by the bare
event.namewere not read.
| Package | Platform | Signed | SHA-256 |
|---|---|---|---|
Devplane_0.12.0_aarch64-unsigned.dmg |
macOS (Apple Silicon) | no | 12e0f7db41c900f06bbf916d701507c562472fa94d5313c012870a5e1c1ddc31 |
Devplane_0.12.0_amd64-unsigned.AppImage |
Linux (x86-64, AppImage) | no | 520ee47e6ce9eacdfebb21e71fcdba9f88109a9650063a3b167674af08db6f92 |
Devplane_0.12.0_amd64-unsigned.deb |
Linux (x86-64, .deb) | no | ea2420fb8fcb4734361388dcdecde0c74ae5bc2d6ae67557e4b46c624f5622d5 |
Devplane_0.12.0_x64-setup-unsigned.exe |
Windows (x86-64) | no | 3d3e7de15e0401b0f3c2cff9ce4116acbd0cfe4e06a297a9b17e2c8867426884 |
Install: curl -LsSf https://github.com/hupe1980/devplane/releases/download/v0.12.0/devplane-installer.sh | sh