Skip to content

Releases: devarispbrown/idea-harness

v0.7.2

Choose a tag to compare

@github-actions github-actions released this 20 Oct 05:25

See CHANGELOG.md
for what changed.

checksums.txt is signed with keyless cosign (checksums.txt.sigstore.json), each
archive carries an SPDX SBOM (*.sbom.json), and each archive has a GitHub build-provenance
attestation. RELEASING.md
has the verification commands.

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 20 Oct 03:27

See CHANGELOG.md
for what changed.

checksums.txt is signed with keyless cosign (checksums.txt.sigstore.json), each
archive carries an SPDX SBOM (*.sbom.json), and each archive has a GitHub build-provenance
attestation. RELEASING.md
has the verification commands.

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 01:15

See CHANGELOG.md
for what changed.

checksums.txt is signed with keyless cosign (checksums.txt.sigstore.json), each
archive carries an SPDX SBOM (*.sbom.json), and each archive has a GitHub build-provenance
attestation. RELEASING.md
has the verification commands.

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 10:01

The ICP round: the secret sweep stops blocking ordinary code, the plan becomes an editable graph, runs can commit and open PRs, and every phase shows what it cost and what changed. Five founder-journey evaluations and three adversarial reviews drove this release; the verdict moved from "trial" to "adopt".

Breaking

  • Adding or editing a task now requires naming at least one requirement (requirement_ids; a task may implement several). A task with no requirement used to be accepted silently.
  • A vocabulary marker (password, token, secret, auth) in a patch no longer blocks a change set. It raises a non-blocking sensitive_area finding; only a real credential value blocks.
  • Approving a change set whose adversarial review never completed is refused. Run idea review <id> rerun (a fresh, paid review). A change set created before this release predates review tracking and says so.
  • idea verify --json exits non-zero on an unmet gate, like the human-readable form. It always exited 0.
  • Deleting a task with dependents names them in the error.
  • Near-duplicate judgment items merge on a stricter measure, so some items that used to merge now stay distinct.

What's new

  • The secret sweep tells you what it found and lets you overrule it. A finding names the file, the line and the kind, with a masked preview. Placeholders and test fixtures no longer block; real provider keys still do. "Not a secret" records a per-project exemption scoped to that value in that file, revocable in Settings. Configured secrets can never be exempted.
  • The plan is an editable graph. Merge, split, reorder, set dependencies (cycles refused), and see each task's requirements. Requirements keep their codes across revisions.
  • Git-native. Opt-in commits, a branch per idea, and idea pr with CI status. Guards refuse to commit on your default branch or over uncommitted work, and never commit files the change set didn't produce.
  • Review rigor scales to the work (review.rigor: auto), so a small change gets one pass, not five.
  • Verification from your tests. Passing tests map to requirements, with one action to confirm them. Evidence only counts from an applied, non-reverted change set whose check run exited cleanly.
  • You can see where the money and time went: cost and duration per phase, the current step while a run is in progress, and a timeline of what changed per idea.
  • A cross-idea "Needs you" queue, triage, "accept all recommendations", and a stale banner when a decision you reopened invalidates work.
  • The CLI judgment loop: idea questions, answer, resolve, reopen-decision, accept-recommendations, triage.
  • Runs are resumable and legible: live agent output, an optional note when you re-run, "Stopped by you" instead of a raw cancellation, and detected build/test commands for Go, Node, Python and Rust projects.

Notable fixes

  • A change set could delete tracked files that matched a .gitignore pattern, and commit those deletions.
  • Credential redaction was gated by the detection rules, so some real secrets were persisted unmasked.
  • An empty change set could mark its task done and strand every dependent task.
  • A revised requirement could stay "verified" for a statement it no longer had.
  • Approving used to re-run the paid adversarial review every time and reword findings you had rejected.
  • A truncated review could wedge an idea with no way forward that didn't involve editing config.

Known limitations

  • Coding-agent spend is not measured; idea status says so rather than showing a misleading total.
  • Plan editing (merge, split, dependencies) has no CLI verb yet — web UI or API only.
  • Exemptions granted before this release must be re-granted: fingerprints are now per-project HMACs.

Installing

Download the archive for your platform and put idea on your PATH. The web UI is embedded — no Go or Node toolchain needed.

shasum -a 256 -c checksums.txt

linux/arm64 is built and shipped, but its SQLite driver is compiled per-architecture and is not exercised in CI; see the install section of the README.

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 18 Sep 21:29

Watching, testing and resuming coding-agent runs from the web UI. No breaking changes.

What's new

  • Run the smoke test from Settings. Settings → Executor → Run smoke test runs a trivial task through the coding agent with the daemon's own configuration and keys, so it tests what a real run will use (idea executors setup --smoke runs it in your terminal's environment, which is not always the daemon's). It makes one small real model call. The last result stays on the page for as long as the setup it tested is unchanged.
  • Live agent output. While the agent runs, the Build page's running card shows its latest output — the last 100 lines, refreshed every couple of seconds, with known secrets redacted. When the run finishes, those lines stay on the change set it produced, under Agent output.
  • Stop no longer throws the agent's work away. When a run stops without a change set — Stop, a failure, a timeout, the daemon stopping — the files the agent had written are kept, and the Run button reads Continue TASK-n (N files from the stopped run). Carried files are applied only where your workspace hasn't changed since, and the change set lists what was carried and what was skipped. Start over discards them. Kept files that look like they hold a secret are never kept.

Behaviour change

Running a task again after Stop now continues from the files the agent had written, instead of starting from nothing. Choose Start over (or send {"fresh": true} to POST …/execute) for the old behaviour.

Also fixed

  • An auto-started daemon wrote every line of daemon.log twice.
  • The missing-key message now says to restart the daemon, and appears once.

API additions

POST …/executors/smoke, GET …/initiatives/{id}/agent-output, DELETE …/initiatives/{id}/partial-work; status.last_smoke on GET …/executors; partial_work on GET …/guidance; agent_output on change sets; an optional {"fresh": true} body on POST …/execute; the carried_over finding category. See docs/openapi.yaml.

Installing

Download the archive for your platform and put idea on your PATH. The web UI is embedded — no Go or Node toolchain needed.

shasum -a 256 -c checksums.txt

linux/arm64 is built and shipped, but its SQLite driver is compiled per-architecture and is not exercised in CI; see the install section of the README.

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 06:53

The coding agent now writes real code, and the web UI can run the whole loop — from a new idea to an applied change — without the CLI. 7 breaking changes, with Was/Now rows in CHANGELOG.md.

The coding agent works

v0.4.0 shipped a Hermes executor that could not produce a file: its command line was rejected by the pinned image, the hardened container could not create the agent's home, and setup reported the CLI missing from the image it had just downloaded. All three are fixed, and idea executors setup --kind hermes --model <provider/model> --smoke --yes passes for OpenAI, Anthropic, Gemini, DeepSeek, OpenRouter and Ollama, each producing a real file.

The agent is pinned to the provider you configured — base URL and key variable — rather than Hermes's own provider names, which sent an OpenAI key's work to OpenRouter and did not know Ollama at all.

The agent now works on a copy of your project. Its working directory used to start empty, so asked to change server.js it wrote a new one from nothing, and applying it deleted the code that was there. Each run now starts from a fresh copy (git's tracked and untracked, non-ignored files). .env files and anything that looks like a credential are never copied, because the agent has network access; what was left out is listed on the change set. Applying refuses — and writes nothing — if a file was edited after the agent ran, and keeps file permissions.

The web UI runs the loop

  • Build has a "Run TASK-n" button, disabled with the reason when a run can't start. A failed run shows the agent's own error. Diffs show only the changed lines; every finding shows on its change set before you approve; a conflict explains which files changed and offers "Reject and re-run".
  • Settings shows whether the agent's image is pulled and its key is set, and rejects a model it can't use with the reason.
  • Define and Plan show each finding and decision once, on the page where it's decided — including a dependency cycle that blocked plan approval and had shown on no page.
  • Demo mode is labelled everywhere; nothing demo-made is called "SHIPPED".
  • Works at phone width and in dark mode.

Current models

Defaults are models that answered a real call on 2026-09-17: claude-sonnet-5, gpt-5.6-luna, gemini-3.6-flash, deepseek-v4-pro, anthropic/claude-sonnet-5 on OpenRouter, and qwen3.8 on Ollama. Six ids that now return 404 were removed from the catalog. Every catalog model has a price, so max_cost_usd enforces at real rates — current models had been budgeted at a fraction of theirs.

Read this before upgrading

  • Ollama without a default_model now asks for qwen3.8. Run ollama pull qwen3.8, or set default_model: ollama/llama3.1 to keep the old one.
  • Tasks run one at a time. POST …/execute is refused while another task's change set in the same initiative is still open, and while the PRD or plan is waiting for review. Apply or reject each change set before running the next task.
  • PUT …/executors rejects a model the agent can't use with 400.
  • GET …/decisions lists each question once (?all=true for every row), and answering a decision answers its open duplicates.
  • One daemon per state directory, even on different addresses.
  • idea daemon stop waits for running work to be cancelled (up to 30 s) and prints the pid.

Installing

Download the archive for your platform and put idea on your PATH. The web UI is embedded — no Go or Node toolchain needed.

shasum -a 256 -c checksums.txt

linux/arm64 is built and shipped, but its SQLite driver is compiled per-architecture and is not exercised in CI; see the install section of the README.

Trying it

idea init && idea new "<your idea>" runs the whole loop on a built-in demo provider with no API key, and idea init prints the web UI's address. For real code, set up the coding agent — docs/agents.md covers the providers and the security tradeoffs.

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 23:09

The first release since v0.3.0, and the largest so far: 13 breaking changes, 4 additions and 41 fixes, almost all of them found by running the product against its own documentation and a real model rather than by reading the code.

Read this before upgrading

Most of the breaking changes are commands and endpoints that used to report success over a failure. If you have scripts, these are the ones that will change behaviour under them.

idea status exits non-zero when the newest initiative has failed. It printed ● failed with the provider's full error and returned 0, so a script running it as a health check could not tell. Any script that branched on its exit code saw success unconditionally and will now stop. Two deliberate limits: an initiative merely waiting on your judgment is not a failure and still exits 0, and only the newest initiative is considered — scanning all of them made the exit sticky, so one abandoned experiment gated the overview command forever. idea status --json now also carries failure_reason.

Three endpoints reject undeclared body fields. PUT …/providers, PUT …/executors and POST …/change-sets/{id}/review used to accept an unknown field, drop it silently and answer 200. They now answer 400 naming it. This matters most for an inline api_key, which was being discarded rather than rejected — the failure mode that costs money. Neither config endpoint is round-trippable from its own GET: the responses carry fields the writes do not accept, and GET /executors is a catalog of executor kinds rather than a projection of the config.

idea verify can no longer complete a failed initiative, and no longer discards a requirement you named. idea doctor now fails when the daemon lacks the API key your configured model needs, and when the daemon is running a different build than the CLI. Six endpoints answer 404 for an id matching nothing where they previously answered 200 over an empty result.

CHANGELOG.md has all thirteen with Was/Now rows and the reasoning.

What is better

Errors now tell you what to do. idea init against a held port used to print nothing for a code-bound ~51 minutes; it now fails in ~1 second quoting the bind error. A model call that hangs reports elapsed time and how to cancel it, instead of working… for fifteen minutes. idea next prescribes a change-set id that actually resolves. idea retry waits and reports what the retry reached rather than reporting that it started. All three of the recovery scenarios that previously exceeded the five-minute target now complete in seconds.

Installing

Download the archive for your platform and put idea on your PATH. The web UI is embedded — no Go or Node toolchain needed.

shasum -a 256 -c checksums.txt

linux/arm64 is built and shipped, but its SQLite driver is compiled per-architecture and is not exercised in CI; see the install section of the README.

Trying it

idea init && idea new "<your idea>" runs the whole loop on a built-in demo provider with no API key — deterministic, offline, synthetic output labelled as such, and it reaches a completed initiative in under two seconds.

With a real model the shape differs and the README says how: the adversarial reviewer genuinely blocks, so the run stops twice for your judgment before it reaches a change set, and the requirement codes are not REQ-1. The default executor writes a placeholder file rather than real code; wiring a coding agent is a separate opt-in step with security tradeoffs set out in docs/agents.md.

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 01:10

Guards and ergonomics. No P0s — 0.2.0 is safe to stay on. This exists so the published artifact does not drift behind main the way 0.1.0 did, when every P0 four audit rounds fixed stayed live in the only installable binary the whole time.

Added

  • idea <command> --help works, on every command. It was rejected as an unknown flag on all 33 subcommands, so there was no way to learn what idea verify --waive does or what kinds idea export takes without opening docs/cli.md. Rendered from the same command table that drives idea help and the docs, so the three cannot disagree.
  • Provider wire-format goldens, plus an assertion that the token budget a provider emits never exceeds the ceiling it declares. Four rounds of guards compared artifacts to artifacts — routes to specs, docs to code — and nothing compared the request to what a provider accepts, which is how max_tokens: 32000 against a declared 16384 shipped in 0.1.0 and survived until someone spent a real API key. The cap now also lives inside each provider, so no caller can emit a request the provider will reject.

Changed

Both are the same class 0.2.0 listed under Changed — BREAKING (HTTP API), which is why this is a minor bump rather than a patch — the convention decides the number, not how forgiving the change happens to be. A client that null-checked keeps working; one generated from openapi.yaml now works where it did not.

  • /doctor and /diff return [] rather than null for empty arrays. The earlier sweep converted eight fields and missed these two, so the API had become mixed rather than consistent — /diff could return "added":[{…}],"removed":null in a single response. /doctor was the worse case: an empty finding list means the graph audit found nothing wrong, so the good outcome was the one returning null.
  • Unmatched paths under /api/ answer the documented {"error": …} envelope. openapi.yaml said every error has that shape "and nothing else"; ten API paths answered 404 page not found as text/plain, and the CLI surfaced it as idea: 404 Not Found — the only raw HTTP status it prints. The web UI is unaffected.

Still open

The 405 half of the error envelope (Go synthesizes it only when no route pattern matches, and the UI catch-all prevents that) and response-schema checking. Both are recorded in docs/plans/deferred.md with the reason each is still open.

Verify your download

shasum -a 256 -c checksums.txt
idea version        # v0.3.0 (62748eb)

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 05:04

Five developer-experience audits and their remediation.

Upgrade from 0.1.0

0.1.0 contains every P0 fixed here. If you installed it, upgrading is preferred to pinning:

  • a successful idea execute stranded the initiative in running forever — every later command answered "already running", with no way back short of editing the database;
  • the idea text and modern provider keys (sk-ant-…, sk-proj-…, sk-svcacct-…) reached the model provider unredacted;
  • a late panic rewrote a succeeded run as failed;
  • the PRD stage asked a token budget no provider accepts, so every real OpenAI run failed with a 400 whose explanation the code discarded;
  • idea model set silently reverted hand-edited harness.yaml at exit 0;
  • a model id without a provider (gpt-4o) routed the whole workflow to the synthetic demo stub while model set, config validate and doctor all reported success.

The documented eight-command quick start also did not work on the no-key path: it did nothing, then reported ✓ initiative complete over an initiative with zero change sets. Measured back-to-back: 0 of 5 runs passed before, 5 of 5 after.

Breaking

Pre-1.0, so these land in a minor release. Each entry in the changelog states its consumer impact.

  • Exit codes. Commands that printed a failure and exited 0 now exit non-zero: idea verify on an unmet gate, idea doctor on a failed check, idea daemon status when stopped, and every command given an unknown flag or subcommand. Scripts that relied on the old exit 0 will now stop.
  • HTTP. POST …/change-sets/{id}/revert and POST …/execute answer 409 instead of 202 when the precondition fails; advance and revise answer 409 rather than 500; setting a disposition on a finding that does not exist answers 404 rather than 200.
  • Response shapes. Empty arrays are [], not null — a client that null-checked them keeps working, one generated from openapi.yaml now works at all. The review endpoint's verdict enum is documented as the values the API actually accepts (approved/rejected), not the CLI's short forms.

Also

idea retry exists. idea new waits for the run it starts (--no-wait returns immediately). Provider errors carry the upstream message, bounded and scrubbed for credentials. Truncated model output is detected rather than silently accepted. idea version no longer reports a version that was never tagged.

Seven CI guards now check documentation and spec drift, including two added this cycle: ledger-check (defect ledgers agree with the tree) and enum-check (spec enums match the domain constants).

Full detail, including what each change means for a consumer, is in CHANGELOG.md.

Verify your download

shasum -a 256 -c checksums.txt
idea version        # v0.2.0 (e82f9c2)

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 20:27

See CHANGELOG.md
for what changed.

Pre-1.0: the CLI surface, HTTP API and config schema may change in any release.