Skip to content

Releases: nicoten/speck

Speck 0.4.0

Choose a tag to compare

@nicoten nicoten released this 10 Sep 20:43

Find in the open view — ⌘F

A Tauri window has no find bar of its own, so Speck has one now. ⌘F searches
whichever view is in the main pane — a document, the project overview, or a
change's dashboard. Enter and ⇧Enter step through matches, ⌘G and ⇧⌘G do the
same from anywhere in the window, Esc closes.

Matches are painted rather than inserted into the page, which matters here: an
agent writing to the file you are reading re-renders it under you, and the
search re-runs against the text that replaced it without losing your place.

A new app icon

The step rail is gone; the icon now shows a document beside the artifacts that
follow it.

Speck 0.3.0

Choose a tag to compare

@nicoten nicoten released this 10 Sep 18:26

The whole OpenSpec circle runs from the app, a project opens on an overview
rather than a file, and changes link to their pull requests.

Workflows run in your terminal

This replaces how 0.2.0 worked. That version ran sessions inside the app,
streaming their activity into a panel. Running headless meant no step could be
approved as it happened, which is the wrong trade for an agent editing your
repository — and archive is worse than that: its workflow asks how to merge
delta specs into your main specs, and headless there is nobody to ask.

So a workflow now opens a Claude session in your terminal, in the project root,
where you approve each step. The activity panel and the permission choice are
both gone; there is nothing left to configure.

A change's dashboard carries Apply, Verify and Archive, and +
beside Active changes proposes one. Emphasis follows the work: Apply leads while
tasks remain, Verify once they are ticked, Archive stays quiet because it
rewrites your main specs.

A project opens on an overview

Three counts — active changes, open specs, archived — and then the project's own
words about itself, taken from the context block in openspec/config.yaml.
That prose exists to brief an agent on stack, conventions and domain, and it
introduces the project to a person just as well.

config.yaml used to open by default, which was an accident of being first in
the reading order rather than a decision.

Pull requests

OpenSpec records none — no field for one, nothing in the CLI that knows about
branches. So changes are matched to pull requests by inference, and the
dashboard says which strategy found them: a branch named after the change, or
pull requests containing commits that touched the change's own files. All
matches are shown, because a change is usually touched by several — proposing,
applying, archiving it. The repository itself is linked in the top bar.

Fixes

  • Opening a change's dashboard crashed. On a serde enum, rename_all
    renames the variants and leaves the fields alone, so Rust sent
    pull_requests while the app read pullRequests. The same mistake was
    silently blanking the model, duration and cost on session events.
  • A malformed stylesheet. A bad edit had duplicated ~270 lines into the
    middle of a media query, splitting a selector list. Browsers skip malformed
    rules, so it rendered and shipped unnoticed.
  • One unrenderable view no longer takes the window down.
  • The expand caret was 12px and flush against the window edge.
  • The schema spec-driven and read by openspec readouts are gone; a degraded
    read now says so in words, above whichever view you are in.

Install

Download the .dmg, drag Speck to Applications. Signed with a Developer ID and
notarised. Apple Silicon only.

Running an earlier version? Speck will offer this one on launch.

Speck 0.2.0

Choose a tag to compare

@nicoten nicoten released this 10 Sep 16:24

Speck stops being only a reader. It can now run a change, show you the state of
one, and let you tick a task off.

Run a change

Apply on a change, and + beside Active changes, run OpenSpec's agent
workflows — /opsx:apply and /opsx:propose. Neither is a plain CLI command:
openspec instructions apply --json produces a brief, and an agent carries it
out.

The session runs inside Speck and streams what it is doing into a panel: the
files it reads and edits, the commands it runs, what it says, how it ended. You
can stop it at any point, and the panel says the run was stopped rather than
implying it finished. Progress also arrives on its own — the agent ticks boxes
in tasks.md, the watcher notices, and Tasks 3/14 climbs while you read.

Authority is chosen at the button, described by what it does:

Choice Effect
Edits only (default) Files edited without asking. Commands refused, and the refusals listed when the run ends.
Edits and commands Nothing asked, nothing refused. Needed when a change's tasks build or test.

Refusals are reported rather than swallowed: a denied command is usually why an
apply stalled halfway. One session per project — two agents editing one
repository would each work from a tree the other is changing underneath it.

The same confirmation can hand off to your own terminal instead, if approvals
belong in the Claude Code UI.

A change's dashboard

Clicking a change's name opens a page about it; the caret beside the name shows
or hides its documents. The sidebar can say 5/14; the dashboard says which
nine
are still open — which is what you want before deciding whether to apply
it. Alongside: each artifact's state and files, and the progress bar.

Tick a task off

The checkboxes are clickable, in the dashboard and in any tasks.md view. This
is the only thing Speck writes into a project, and it is the smallest write
available: one character on one line.

A task is addressed by its text, never by line number — an agent may have
rewritten the file since it was read, and a line number would tick a different
task with nothing to reveal it. The rest of the file comes back byte for byte,
and the write is renamed over the original so an interruption cannot truncate
your task list. Anything but a change's own tasks.md is refused by path.

Also

  • A completion rule that matches how the work actually goes: a step is settled
    only once work has moved past it, so a written proposal is not "done" until
    the specs begin. The last step waits on its own checklist.
  • The progress stepper is one compact bar.
  • Fixed: the file watcher could go deaf after a reload, leaving the reader
    showing a stale tree — the one failure it exists to prevent.
  • Fixed: one unrenderable document no longer takes the window with it.

Install

Download the .dmg, drag Speck to Applications. Signed with a Developer ID and
notarised. Apple Silicon only.

Running an earlier version? Speck will offer this one on launch.

Speck 0.1.1

Choose a tag to compare

@nicoten nicoten released this 10 Sep 13:07

A real app icon, and three fixes found while reviewing 0.1.0.

Icon

Speck now has its own icon: the step rail the sidebar is built around — ordered
steps with the last not yet reached — in the brand terracotta. Drawn on Apple's
icon grid, and weighted so the marks still separate at 32px in a Finder list.

Fixes

  • The file watcher could go deaf. It was torn down and re-registered on
    every reload, so a burst of writes — an agent rewriting several files at once
    — could land in the gap and leave the reader showing a stale tree. That is
    the one failure the watcher exists to prevent. It now subscribes once.
  • A single bad document could take the window down. Markdown is parsed by a
    hand-written parser, so an unanticipated shape could throw and white-screen
    the app. Failures are now contained to one document: the sidebar stays
    usable and you can read something else.
  • Node typings were visible to frontend code, so a component could import
    node:fs and still type-check, then fail in the webview.

Also: clippy is clean, and the stylesheet has structural tests — twice a text
edit silently deleted neighbouring CSS rules while every other test still
passed.

Install

Download the .dmg, drag Speck to Applications. Signed with a Developer ID and
notarised. Apple Silicon only.

Running 0.1.0 already? Speck will offer this version on launch.

Speck 0.1.0

Choose a tag to compare

@nicoten nicoten released this 10 Sep 12:52

First release. A desktop reader for OpenSpec projects.

Speck groups a project's documents by where each one sits in its declared
workflow schema, and numbers every document into a single reading sequence, so
a project can be read start to finish instead of by guessing which file comes
next.

  • Order comes from the schema, not from Speck. A project names its schema in
    openspec/config.yaml; that schema declares its artifacts, and the tree is
    built by walking it. A custom schema is read in its own order.
  • Gaps stay visible. An artifact the schema expects but nobody has written
    yet shows as a step not started, rather than being hidden.
  • Progress per change. Each change shows its steps as a stepper: a step
    counts as done only once work has moved past it, and the last step waits on
    its own checklist.
  • Structure-aware reading. Requirements and scenarios render as anchored
    blocks, delta operations are badged ADDED / MODIFIED / REMOVED / RENAMED, and
    tasks.md renders as a checklist.
  • Read-only by construction. No filesystem write capability, shell
    execution scoped to the openspec binary, and reads refused outside an open
    project.
  • Live. Projects are watched, so a file rewritten by an agent refreshes in
    place and keeps your scroll position.

Install

Download the .dmg, drag Speck to Applications. Signed with a Developer ID and
notarised, so it opens with a double-click. Apple Silicon only.

Speck reads projects through the openspec CLI when it is installed and falls
back to its own scanner when it is not, saying which in the top bar.

Later versions are offered in-app and verified against the release signature.