Skip to content

Releases: drilonrecica/igris

igris v1.0.0-rc.1

igris v1.0.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@drilonrecica drilonrecica released this 14 Oct 19:13
v1.0.0-rc.1

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v1.0.0-rc.1 is the first release candidate for igris 1.0. It adds no features. It decides what 1.0 promises not to break, writes it down, and tests it, and it makes the few breaking changes that had to come before that promise. Try it on your projects and report anything that breaks: what this release freezes is what 1.x keeps.

What 1.0 promises

From 1.0 until 2.0, these keep working unchanged (SPEC §19). 1.x may add to them, never remove or change them:

  • The plan format, now on its own page: docs/plan-format.md. A plan may say <!-- igris:format 1 -->; it never has to.
  • igris.toml: keys, defaults and validation.
  • The CLI: commands, flags, arguments, and exit codes (0 success, 1 failure, 2 usage error, 3–9 reserved), with what exits 1 for each command in SPEC §14.
  • --json of check, phases, status, history, report and doctor, each with a JSON schema in docs/json/.
  • igris done, skip and reset and the signal files they write, .igris/ with state.json and the run log, the template variables, the generic webhook (payload and headers) and the task-hook environment (IGRIS_*).

Not promised: the TUI, the default prompt's wording, text output, and igris's Go packages.

A compatibility suite keeps the promise honest: the configs, plans and signal files every release from 0.1.0 to 0.6.0 wrote, captured by building each release from its tag, plus the state files and run logs of each format, all checked on every change.

Upgrade

Homebrew stays on 0.6.0 until 1.0.0. To try the candidate:

go install github.com/drilonrecica/igris/cmd/igris@v1.0.0-rc.1

Or download the archive for your platform below, with checksums.txt and checksums.txt.sig, verify them, and put the binary on your PATH:

curl -fsSLO https://raw.githubusercontent.com/drilonrecica/igris/v1.0.0-rc.1/allowed_signers
ssh-keygen -Y verify -f allowed_signers -I igris -n file -s checksums.txt.sig < checksums.txt
sha256sum --ignore-missing -c checksums.txt    # macOS: shasum -a 256 --ignore-missing -c checksums.txt
tar xzf igris_1.0.0-rc.1_<os>_<arch>.tar.gz
install -m 755 igris ~/.local/bin/igris
igris version

The first command must print Good "file" signature for igris. Check that allowed_signers holds the key printed in the README's Verifying a download.

Then, in each project:

igris config migrate     # once: removes claude.command, which every igris init before 0.7 wrote
igris check

config migrate shows the line it removes, asks first and keeps a backup in .igris/config/. The config's hash doesn't change, so a run interrupted under 0.6 resumes.

Behavior changes

  • claude.command is removed. It never did anything (igris starts claude from your PATH). A config that still has it stops check, arise and doctor with claude.command was removed in 0.7 …; run igris config migrate.
  • --json changed (scripts need updating): every output starts with "v": 1; doctor prints {"v": 1, "checks": [...]} instead of an array; an empty rank or mode is left out instead of "—"; the count key in progress is in_progress; pending signals are {"task", "action"} objects. Readers should ignore fields they don't know.
  • Exit codes: a malformed task ID in done/skip and an unknown notify test --event exit 2 (usage error), not 1. adapt stopped with Ctrl-C exits 0, like arise.
  • Help: igris help COMMAND shows that command's help; -h output goes to stdout.
  • state.json is version 3. Older state is read and upgraded. A state file from a newer igris says to upgrade, a damaged one says it is damaged. igris 0.6 can't read version 3: finish the run or delete .igris/state.json before going back.
  • A plan marked with a newer format (<!-- igris:format 2 -->) gets one error, plan format 2 needs a newer igris, and igris suggests upgrading instead of igris adapt.

Known limitations

  • Linux and macOS; Windows through WSL2 only, not yet verified on a real Windows machine.
  • On a public ntfy server without a token, the topic is the only protection: use a long random one, or set a token.

See CHANGELOG.md for every change in this release and the README for the full guide.

igris v0.6.0

Choose a tag to compare

@drilonrecica drilonrecica released this 14 Oct 16:18
v0.6.0

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.6.0 is about trust. It is the first signed release, and every archive comes with an SBOM. A run can work on a branch of its own, so your checkout stays as it is while an unattended agent works. The commands igris runs no longer see your notification secrets, and the threat model is written down, reviewed and tied to tests. igris also stops calling for you while Claude is only waiting on background work. Everything is additive: no plan or config migration is needed.

Highlights

  • Signed releases. checksums.txt and the v0.6.0 tag are signed with the igris release key, an SSH key; checking a download needs only ssh-keygen (below). The key is in allowed_signers and the README.
  • Worktree mode. igris arise P1 --worktree (or worktree = true under [run]) runs the sessions, verify, task hooks and commits in .igris/worktrees/<run-id> on a new branch igris/<run-id>. Your checkout and branch stay as they are, and the plan stays in your checkout, where igris updates it as usual. An interrupted run continues in its worktree. A completed one tells you git merge igris/<run-id>; igris never merges. This is the safe way to leave an auto or skip-permissions run alone. See Worktree mode.
  • No "needs you" while Claude waits on background work. When Claude ends its turn with tests on a simulator, a long build or a scheduled wakeup still running, the card says waiting on background work (4m), and nothing is raised until waiting_limit (default 30m). This works with herdr too, which shows the turn as finished. When Claude stops without igris done and nothing is pending, igris first reminds it once before it calls you (nudge = false turns that off).
  • Secrets stay out of your project's commands. Verify commands, task hooks and git never get the environment variables your notification tokens come from (env: references). The new [run] env limits verify and hooks to the variables you list. See What verify and hooks see.
  • A threat model and a second security review. docs/threat-model.md says what igris protects and from whom, lists the accepted risks, and maps every safety rule to the test that enforces it. The review of everything added since v0.1 found 12 issues, none high: 10 are fixed and 2 accepted, all listed there.
  • Supply chain. An SPDX SBOM per archive, govulncheck on every push and weekly, a check that the release build is reproducible on Linux and macOS, and short fuzz runs in CI. Built with Go 1.27.2, which fixes 8 standard-library advisories that affected builds up to 0.5.1 (see Security in the CHANGELOG).
  • Hover. With the mouse on, whatever a click would act on is underlined while the pointer is over it.

Upgrade

brew upgrade igris                         # or: brew install drilonrecica/tap/igris
go install github.com/drilonrecica/igris/cmd/igris@v0.6.0

Or download the archive for your platform below, with checksums.txt and checksums.txt.sig, verify them, and put the binary on your PATH:

curl -fsSLO https://raw.githubusercontent.com/drilonrecica/igris/v0.6.0/allowed_signers
ssh-keygen -Y verify -f allowed_signers -I igris -n file -s checksums.txt.sig < checksums.txt
sha256sum --ignore-missing -c checksums.txt    # macOS: shasum -a 256 --ignore-missing -c checksums.txt
tar xzf igris_0.6.0_<os>_<arch>.tar.gz
install -m 755 igris ~/.local/bin/igris
igris version

The first command must print Good "file" signature for igris. Check that allowed_signers holds the key printed in the README's Verifying a download.

Your v0.5 plans and configs work unchanged and keep their config hash, so a run interrupted under v0.5 resumes without a config-changed notice.

Behavior changes

  • state.json is checked more strictly. A file whose current task, mode, verify attempts or worktree igris didn't write (a session's edit, or yours) is reported as damaged with "delete the file to start a new run". Files igris wrote read as before.
  • Verify, task hooks and git no longer get your notification secrets' variables, with or without [run] env. A verify command that read one of them on purpose has to get it another way.
  • Everything igris prints to stderr is cleaned of escape sequences, so colored output from a git hook shows as plain text in igris's error messages.
  • The verify excerpt sent back to a session is at most 16 KiB (still the last 60 lines).
  • The TUI asks the terminal for all mouse motion to draw hover; [tui] mouse = false turns the mouse off entirely.
  • A secret set to env:PATH or env:HOME is now a config error, and check and arise warn about a webhook URL from an env: reference that is plain http://.

Known limitations

  • Linux and macOS; Windows through WSL2 only, not yet verified on a real Windows machine.
  • Releases before 0.6.0 are not signed (checksums only).
  • On a public ntfy server without a token, the topic is the only protection: use a long random one, or set a token.

See CHANGELOG.md for every change in this release and the README for the full guide.

igris v0.5.1

Choose a tag to compare

@drilonrecica drilonrecica released this 08 Oct 15:16

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.5.1 is a small patch for v0.5.0: a first prompt that sometimes stays unsubmitted, blank rows in the live tail, report help and completion, a second Ctrl-C that didn't always exit, an external interrupt that could hang the screen, and a huge or odd run log that could stall igris. No change to the plan format, config keys or file formats.

Fixed

  • A pasted prompt gets submitted. Rarely, Claude Code shows a session's first prompt in its input box but never submits it. When the session sits idle 15 s and its hooks never saw the prompt submitted, igris presses Enter once in the pane and says the prompt didn't seem submitted; sent Enter once in the feed. It never re-sends the prompt text; if that doesn't help, Needs you follows as before. Works in tmux and herdr.
  • No blank rows in the live tail. A line Claude Code pads to the pane's width, such as the right-aligned ◐ medium · /effort, now shows its text instead of a blank row ending in ….
  • igris report help and completion. igris report -h and igris history -h show the RUN argument, and bash, zsh and fish complete run IDs after igris report, newest first.
  • A second Ctrl-C quits. While igris winds down after a run (from igris arise or home), it prints stopping… (Ctrl-C again to quit now) and another Ctrl-C exits at once; igris adapt and igris notify test exit on a second Ctrl-C too.
  • kill no longer hangs the screen. A SIGINT or SIGTERM sent from outside (kill -INT <pid>, kill <pid>) could leave the home screen, the run view or the adapt review frozen on the alternate screen. igris now handles both signals itself, and the screen always closes.
  • A huge or odd run log can't stall igris. igris history, igris report, run-ID completion and the home screen read only the last 16 MiB of .igris/runs.jsonl (saying so when the log is larger), and a FIFO in its place is an error instead of a hang.

Upgrade

brew upgrade igris
go install github.com/drilonrecica/igris/cmd/igris@v0.5.1

Or download the archive for your platform below, check it against checksums.txt, and put the binary on your PATH. A run interrupted under v0.5.0 resumes normally.

See CHANGELOG.md for every change in this release.

igris v0.5.0

Choose a tag to compare

@drilonrecica drilonrecica released this 08 Oct 13:50

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.5.0 shows you what a run is doing and what it did: the run view gets the phase's progress, an estimate for the current task and a live tail of its session, and igris report turns a finished run into markdown for your PR. Notifications reach Slack, Gotify and your own automation through a signed webhook, with message templates, quiet hours and digests. Everything is additive: no plan or config migration is needed.

Highlights

  • igris report [RUN] [--json]. One run as markdown, ready to paste into a PR description: how it ended, what was done and skipped, per task its duration, attempts, verify results, commit and how long it waited on you, the done notes and skip reasons, and a claude --resume <uuid> for each session you can reopen. RUN is 1 (the newest), 2, … or a run ID from igris history. See Quick start.
  • Progress and ETA. The run view's header shows phase M1 · 7/12 · 58% ██████░░░░ (or the slice's progress for --only/--from/--until). Once your past runs have at least 3 finished tasks of the current rank, the task card adds ≈ 14m left from their median.
  • Live tail. The current-task card shows the session's last lines (6, or 3 on a narrow terminal), so you can see what Claude is doing without switching tabs. It is only drawn, never logged, sent or stored; [tui] tail = false turns it off.
  • Slack, Gotify and a generic webhook. [notify.slack], [notify.gotify] and [notify.webhook], with secrets as env:VAR references. The webhook POSTs a fixed JSON payload and signs it with HMAC-SHA256 when you give it a secret. See Notifications.
  • Templates, quiet hours and digests. A template per channel (Go text/template over the event, project, phase, task, title, run ID and time) is checked when igris.toml loads. [notify] quiet = "22:00-07:00" holds everything but the urgent events and sends one digest per channel when the window ends; task_done_digest groups finished tasks into one message per N tasks or per phase.
  • A documented run log. .igris/runs.jsonl lines are now versioned ("v":1) and carry the run ID, attempt, Claude session, verify profile, commit SHA, durations and when igris waited on you. The format is in docs/runlog.md; igris history shows each run's ID.

Upgrade

brew upgrade igris                         # or: brew install drilonrecica/tap/igris
go install github.com/drilonrecica/igris/cmd/igris@v0.5.0

Or download the archive for your platform below, check it against checksums.txt, and put the binary on your PATH:

sha256sum --ignore-missing -c checksums.txt    # macOS: shasum -a 256 --ignore-missing -c checksums.txt
tar xzf igris_0.5.0_<os>_<arch>.tar.gz
install -m 755 igris ~/.local/bin/igris
igris version

Your v0.4 plans and configs work unchanged, and keep their config hash: a run interrupted under v0.4 resumes without a config-changed notice. Your existing runs.jsonl keeps working; history and report show — for details old runs didn't record.

Behavior changes

  • The live tail is on by default. igris reads the current session's pane every poll_interval to draw it. Set tail = false under [tui] to turn it off; igris then never reads the pane.
  • igris history shows run IDs after each run's start time ("run" in --json). Scripts parsing the text output may need adjusting.
  • A damaged runs.jsonl line no longer breaks igris history: lines that can't be read are skipped with a note, and the rest shows.
  • runs.jsonl lines carry "v":1 and new fields and events (task_retried, needs_you, needs_you_clear). Existing fields keep their meaning; scripts reading the file should ignore what they don't know.
  • The narrow run view's top line shows the phase's progress (M0 · 3/7) instead of phase M0.
  • Notifications don't follow redirects (ntfy and Discord included): a 3xx is reported as a failure, so set the final URL. Failures say only what went wrong (connection refused, TLS failed, server answered 403 Forbidden, …), never the URL or host. Discord and Slack webhook URLs must be https.

Known limitations

  • Linux and macOS; Windows through WSL2 only, not yet verified on a real Windows machine.
  • Release artifacts are not signed (SHA-256 checksums only).

See CHANGELOG.md for every change in this release and the README for the full guide.

igris v0.4.0

Choose a tag to compare

@drilonrecica drilonrecica released this 08 Oct 10:02

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.4.0 lets your plan say more about each task: which checks to run when it's done, how long it should take, and which files the session must read first. igris can also run just part of a plan, put a task back, run your own commands around every session, and lint a plan for CI. Everything is optional: no plan migration is needed. One default changes: sessions now run in Claude Code's auto permission mode unless your igris.toml sets default_mode.

Highlights

  • Verify profiles. Name your checks in igris.toml ([verify] fast = "go test ./internal/...", full = "make fmt lint test"), give a phase its own with [phases.<id>] verify, and pick one per task with the new Verify column, or none to skip. Plans name profiles, never commands. run.verify keeps working as the profile default. See Verification and commits.
  • Timeout column. 45m, 1h30m (at least 1s): a session running longer is marked overdue, raises Needs you and sends the new task_overdue notification, once per attempt. igris never stops the session for it.
  • Context column. Repo-relative files and directories the session reads before changing anything, listed in the task prompt as required reading. igris names the paths and never sends their contents; every path must exist inside the project.
  • Run a slice. igris arise --only M1-03,M1-05, --from M1-03, --until M2-02. Dependencies still count: a slice task that waits on unfinished work is reported as not run, never forced. A bare arise resumes the same slice.
  • igris reset ID [--force]. Put a task back to ready or blocked to run it again, with or without an igris running. While igris runs, it asks you to confirm the reset first (a session could request one too). Resetting the task igris is on closes its session and pauses the run.
  • Task hooks. [hooks] before_task / after_task run your own commands (argv lists, no shell) around every agent session, e.g. to start a dev database. A failing before_task opens no session and asks you what to do.
  • igris check --strict. Lints the plan (missing bold titles, overlong rows, gates that miss tasks of their phase, yolo rows, …) and exits 1 on any plan or config warning. Machine warnings never fail it, so it runs in CI without Claude Code.

A worked example is in examples/advanced/: the example plan with Verify profiles, Timeouts and Context paths, and the igris.toml that defines its profiles.

Upgrade

brew upgrade igris                         # or: brew install drilonrecica/tap/igris
go install github.com/drilonrecica/igris/cmd/igris@v0.4.0

Or download the archive for your platform below, check it against checksums.txt, and put the binary on your PATH:

sha256sum --ignore-missing -c checksums.txt    # macOS: shasum -a 256 --ignore-missing -c checksums.txt
tar xzf igris_0.4.0_<os>_<arch>.tar.gz
install -m 755 igris ~/.local/bin/igris
igris version

Your v0.3 plans and configs work unchanged, with the exceptions below: a config without default_mode now runs sessions in auto mode, a plan column already named Verify, Timeout or Context is read as the new column, and a config written by v0.3 igris init doesn't send the new task_overdue on ntfy or Discord by itself. A run interrupted under v0.3.x resumes normally; if your config sets neither default_mode nor an events list, you get a one-time warning that igris.toml changed since the interrupted run (both defaults changed, so the config's hash differs even if you didn't edit the file).

Behavior changes

  • auto is the default run mode. Configs that don't set default_mode now run sessions with --permission-mode auto: Claude Code approves routine actions itself and still asks you about risky ones. Set default_mode = "default" to keep every prompt going to you. Skip-permissions (yolo) still needs the typed skip permissions confirmation every run.
  • Verify, Timeout and Context are now column names igris reads. If your plan already has a column with one of these names for something else (a command, an estimate, notes), igris check may now reject it. Rename the column (e.g. Verify notes), let igris adapt do it, or keep it as an extra column with an alias in igris.toml ([columns] Context = "Background"). These columns no longer reach the session prompt as extra columns.
  • task_overdue is in every channel's default events. If your config lists events (every config written by v0.3 igris init does), add it there or remove the events line to hear about overdue tasks. igris init now leaves events out while it is the default list, so new configs follow the defaults.
  • igris adapt keeps Verify, Timeout and Context cells as written and never invents profiles, timeouts or paths.
  • Plain igris check is unchanged; the lint hints appear only with --strict.

Known limitations

  • Linux and macOS; Windows through WSL2 only, not yet verified on a real Windows machine.
  • Release artifacts are not signed (SHA-256 checksums only).

See CHANGELOG.md for every change in this release and the README for the full guide.

igris v0.3.0

Choose a tag to compare

@drilonrecica drilonrecica released this 07 Oct 22:08

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.3.0 brings tmux. Run igris inside tmux and every task gets its own tmux window, just as it gets a herdr tab inside herdr. igris also learns what Claude Code is doing (working, waiting for you, idle) from Claude Code's own hooks, so it no longer depends on herdr's integration for that. No change to the plan format.

Highlights

  • tmux backend. Inside tmux 3.2 or newer, each session opens in a background window named <task> · <rank>. o switches to it, toasts show in tmux's status line, and everything survives a detach and an SSH reconnect. See tmux setup.
  • backend = "auto". New projects pick herdr inside a herdr pane and tmux inside tmux, with no setting to change. Existing backend = "herdr" configs keep working.
  • Agent state from Claude Code hooks. Each session gets a small hooks-only settings file (--settings), so igris knows when a session is blocked on a question or permission prompt, idle, or gone. It works in tmux, and in herdr with or without herdr's Claude integration. Nothing is added to your .claude/ settings, and the hook state only drives Needs you: a task still advances only on igris done or your action.
  • One test suite for every backend. fake, herdr and tmux pass the same conformance tests, so the next multiplexer has a bar to meet.

Upgrade

brew upgrade igris                         # or: brew install drilonrecica/tap/igris
go install github.com/drilonrecica/igris/cmd/igris@v0.3.0

Or download the archive for your platform below, check it against checksums.txt, and put the binary on your PATH:

sha256sum --ignore-missing -c checksums.txt    # macOS: shasum -a 256 --ignore-missing -c checksums.txt
tar xzf igris_0.3.0_<os>_<arch>.tar.gz
install -m 755 igris ~/.local/bin/igris
igris version

A run interrupted under v0.2.x resumes normally under v0.3.0 in the same multiplexer. Resumed under the other one (started in herdr, resumed in tmux), the old session can't be reattached, and igris offers to continue the conversation, start fresh, mark it done, skip it or stop.

Behavior changes

  • The default backend is auto. Without a backend key, igris now uses tmux when it runs in tmux. Inside herdr nothing changes.
  • igris doctor --json: the check herdr-available is now backend, and the version check covers the backend you run in (herdr or tmux).
  • A missing herdr integration is no longer a warning. igris reads the agent state from hooks without it.

Good to know

  • In a folder Claude Code hasn't seen, the first session waits on its folder-trust question. No hook fires until you answer it, so after about 15 seconds igris holds the task prompt and shows Needs you. Open the window, answer once, and the prompt goes out by itself.
  • Inside tmux running inside herdr, auto picks herdr. Set backend = "tmux" to override.
  • The tmux backend was verified on Linux (tmux 3.7c, Claude Code 2.1.293). The macOS tmux smoke run is still open.

Known limitations

  • Linux and macOS; Windows through WSL2 only, not yet verified on a real Windows machine.
  • Release artifacts are not signed (SHA-256 checksums only).

See CHANGELOG.md for every change in this release and the README for the full guide.

igris v0.2.1

Choose a tag to compare

@drilonrecica drilonrecica released this 07 Oct 21:08

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.2.1 is a small patch for v0.2.0: two wording bugs in the home screen and history. No change to the plan format, config keys or file formats.

Fixed

  • A completed run reads as done on home. After a run whose phases all completed, the NOW card is READY with a last run P1 completed line and the action bar says Arise…, instead of STOPPED with Resume. A stopped run whose phases still have work stays STOPPED.
  • A running task reads "running". In igris history, --json and the RUNNING card's recent: line, a task still being worked on in a live run shows running, not unfinished. unfinished is kept for tasks a run ended before they did.

Upgrade

brew upgrade igris
go install github.com/drilonrecica/igris/cmd/igris@v0.2.1

Or download the archive for your platform below, check it against checksums.txt, and put the binary on your PATH. A run interrupted under v0.2.0 resumes normally.

See CHANGELOG.md for every change in this release.

igris v0.2.0

Choose a tag to compare

@drilonrecica drilonrecica released this 07 Oct 20:48

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.2.0 gives igris a front door. Run igris in a terminal and you get a home screen: your phases and their progress, what runs next and on which rank, the health of your setup and your recent runs, with a button for everything you can do. New commands (doctor, history, completion) cover the same ground from the command line, and Homebrew is now an install option. No change to the plan format, config keys or file formats.

Highlights

  • A home screen. Bare igris opens it. Preview a run, check the plan, open the doctor, read the history, view the settings, edit the plan in $EDITOR, adapt a plan igris can't read, send a test notification, then start a run, all without leaving the app. It stacks into one column on a phone-width terminal. See the README.
  • Onboarding in the app. In a folder with no igris.toml the home screen walks you through init, the example plan, check, preview and your first run.
  • igris doctor. One line per check of your machine and project, and the command that fixes each problem. It never changes anything.
  • igris history. What ran, what finished, how long it took and how each run ended. igris status also shows the current run.
  • Shell completions. igris completion bash|zsh|fish completes subcommands, flags and the phase and task IDs of your plan.
  • A run view that tells you more. The current task's card shows what the task is about, t (or one click on any task) opens its full details, and when a session needs you the card says o opens it.
  • Your turn, explained. A user task now says it is yours to do outside igris and how to finish it, and d lets you leave a note (the name you picked, the key you got) that lands in igris history.
  • Copy with y (OSC 52), including over SSH: the claude --resume command of the current session, a log line, the adapt proposal's path.
  • A clearer adapt review, comparing your plan and the proposal table by table. And a plan convention for work that waits on something outside it: a user task that names the blocker.
  • Homebrew. brew install drilonrecica/tap/igris.

Upgrade

brew install drilonrecica/tap/igris        # or: brew upgrade igris
go install github.com/drilonrecica/igris/cmd/igris@v0.2.0

Or download the archive for your platform below, check it against checksums.txt, and put the binary on your PATH:

sha256sum --ignore-missing -c checksums.txt    # macOS: shasum -a 256 --ignore-missing -c checksums.txt
tar xzf igris_0.2.0_<os>_<arch>.tar.gz
install -m 755 igris ~/.local/bin/igris
igris version

A run interrupted under v0.1.x resumes normally under v0.2.0.

Behavior changes

  • Bare igris on a terminal opens the home screen instead of printing the help. Piped, scripted or under cron (stdin or stdout not a terminal, stdin /dev/null, TERM=dumb) it still prints the help and exits 2. igris help always prints it.
  • igris arise with no phase and nothing to resume opens the start-run wizard on a terminal instead of exiting 1. With --no-tui, --dry-run or without a terminal it behaves as before; igris arise PHASE is unchanged.

Good to know

  • The first session in a folder Claude Code hasn't seen waits on its folder-trust prompt; igris shows "needs you". Open the session and answer it once.
  • accept mode still asks before Bash commands, which is Claude Code's behavior.
  • After you quit, igris status keeps showing the last run: that is the resume state.

Known limitations

  • herdr only; a tmux backend is planned.
  • Linux and macOS; Windows through WSL2 only, not yet verified on a real Windows machine.
  • Release artifacts are not signed (SHA-256 checksums only).

See CHANGELOG.md for every change in this release and the README for the full guide.

igris v0.1.3

Choose a tag to compare

@drilonrecica drilonrecica released this 07 Oct 13:43

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.1.3 brings igris to Windows through WSL2. It also fixes one bug that plans saved by Windows editors could hit. Upgrading is safe: no flags or file formats changed, and every config and plan that worked before still works.

Highlights

  • Windows through WSL2. The README has a new Windows (WSL2) section. In short: install herdr, Claude Code and igris inside WSL (use the linux_amd64 archive), and keep your project on the Linux filesystem rather than under /mnt/c. A native Windows build is not planned.
  • Tested by simulation, not yet on real WSL2. No Windows machine was available for this release. Instead, the herdr smoke test was run on Linux under the conditions WSL users have: a project path with spaces (John Doe/my project), the plan a symlink onto another filesystem, tasks.md and igris.toml saved with a byte order mark and CRLF line endings, and core.autocrlf on. It passed after the fix below. docs/check-wsl.md is the checklist for a real WSL2 machine. If you run igris on WSL2, an issue saying how it went (good or bad) is very welcome.
  • Fix: plans with a byte order mark. Some Windows editors start UTF-8 files with a byte order mark (BOM). If the plan's first line was a ## Phase heading, the BOM hid it, and igris check reported "task table outside a phase". igris now ignores a leading BOM when reading the plan, and keeps it when it writes a Status cell, so the file stays exactly as your editor saved it.

Upgrade

go install github.com/drilonrecica/igris/cmd/igris@v0.1.3

Or download the archive for your platform below, check it against checksums.txt, and put the binary on your PATH (on Windows, do this inside WSL with the linux archive):

sha256sum --ignore-missing -c checksums.txt    # macOS: shasum -a 256 --ignore-missing -c checksums.txt
tar xzf igris_0.1.3_<os>_<arch>.tar.gz
install -m 755 igris ~/.local/bin/igris
igris version

A run interrupted under v0.1.2 resumes normally under v0.1.3.

Known limitations

  • herdr only; a tmux backend is planned.
  • Linux and macOS; Windows through WSL2 only, and WSL2 is not yet verified on a real Windows machine.
  • Artifacts are not signed (SHA-256 checksums only).
  • No Homebrew tap yet.

See CHANGELOG.md for every change in this release and the README for the full guide.

igris v0.1.2

Choose a tag to compare

@drilonrecica drilonrecica released this 07 Oct 13:19

igris runs the tasks in your markdown project plan one at a time, each in a fresh Claude Code session, started with exactly the model your plan assigns to that task.

v0.1.2 is about robustness. igris now tells you when the Claude Code or herdr on your machine isn't one it was verified with. The parser and the plan writer, the two parts that touch your plan, are now fuzzed, and error messages say what to do next. Upgrading is safe: no flags or file formats changed, every config that loaded still loads, and every plan that was valid stays valid.

Highlights

  • Version warnings. Claude Code and herdr change often, and igris depends on their flags and output. igris check and igris arise now run claude --version and herdr --version. They warn if a tool is missing, older than the oldest version igris is verified with (Claude Code 2.1.291, herdr 0.9.1), or a newer major version than the newest one re-verified. Newer minor and patch versions don't warn. It is only ever a warning: igris never refuses to run because of a version.

  • Your plan is safe, now with stronger evidence. igris writes your plan in one place only: a task's Status cell. That promise is now a fuzz property. For arbitrary plans (CRLF, no trailing newline, escaped pipes, backticks, fenced blocks that look like tables, non-ASCII, very long cells), a status change leaves every other byte of the file exactly as it was. Each target ran for 10 minutes without a finding. The parser, the config loader and the signal reader are fuzzed too: malformed input gives an error, never a crash.

  • Errors you can act on. The common failures now end with the next step:

    • herdr not installed;
    • no plan file;
    • Claude Code failing to start in a tab;
    • a failing git commit hook;
    • a stale lock;
    • a mistyped task ID;
    • a usage error.

    igris done run outside a live run says the signal is kept for the next igris arise.

  • Fewer silent surprises. igris check now warns when ANTHROPIC_API_KEY is set, and when you run it from a subfolder of your project (it reads igris.toml only from the current folder, so it was quietly using the defaults). igris arise, adapt and notify test no longer create .igris/ in a folder that isn't a project; they ask you to run igris init. claude.command is deprecated: it never had an effect, because herdr always starts claude from your PATH.

  • For contributors: make fuzz runs every fuzz target, and docs/reverify.md re-checks the Claude Code flags and herdr JSON shapes igris relies on. It ran clean against Claude Code 2.1.292 and herdr 0.9.1.

Upgrade

go install github.com/drilonrecica/igris/cmd/igris@v0.1.2

Or download the archive for your platform below, check it against checksums.txt, and put the binary on your PATH:

sha256sum --ignore-missing -c checksums.txt    # macOS: shasum -a 256 --ignore-missing -c checksums.txt
tar xzf igris_0.1.2_<os>_<arch>.tar.gz
install -m 755 igris ~/.local/bin/igris
igris version

A run interrupted under v0.1.1 resumes normally under v0.1.2. Run igris check once: if it warns about your Claude Code or herdr version, that tells you what to update; if it warns that claude.command is ignored, delete that line from igris.toml.

Known limitations

  • herdr only; a tmux backend is planned.
  • Linux and macOS only.
  • Artifacts are not signed (SHA-256 checksums only).
  • No Homebrew tap yet.

See CHANGELOG.md for every change in this release and the README for the full guide.