Skip to content

Releases: StuJLans/lazy-tasks-releases

IndieGent 2.6.4

Choose a tag to compare

@StuJLans StuJLans released this 11 Aug 12:25

IndieGent 2.6.4

Two refinements to how sessions run unattended. Tank's session-watch no longer reports the same completion twice, and headless sessions — including the ones Tank dispatches on your behalf — get more breathing room before the watchdog steps in.

Tank's session-watch stops double-alerting (#202)

The session-watch pattern Tank arms after dispatching work (added last release, #198) used to speak up twice for the same session: once when it completed, and again later when that entry rotated out of the state file — you dismissing it, or it simply aging off. Tank's watch now emits one line per genuinely new event instead of re-announcing whenever the summary changes, so a completed session is reported once, with no repeat pings for something you already saw.

Headless sessions get more runway, and Tank can ask for even more (#208)

A background session's watchdog — the ceiling before a still-running headless run is stopped and left on Unfinished with its workspace kept — is now 59 minutes, up from 45. And Tank can now ask for a different ceiling per session: its start_session action takes an optional "timeoutMinutes": N (10-120), for a job it expects to run long. Omit it and a session gets the new 59-minute default; an out-of-range value is rejected with a clear error rather than silently capped.

IndieGent 2.6.3

Choose a tag to compare

@StuJLans StuJLans released this 11 Aug 03:44

IndieGent 2.6.3

Tank gets more autonomous this release. Dispatch it and it now watches its own work and reports back on its own — no more circling back to ask "did that finish?" It can also create and edit scheduled tasks on the spot, no restart needed. And the Suggested queue finally surfaces every kind of idea a scheduled run proposes, not just GitHub issues.

Tank now watches its own dispatches and reports back unprompted (#198)

Tank's operating instructions now document the session-watch pattern: after dispatching one or more sessions, Tank arms a persistent 20-second poll of state.json and only speaks up when something actually changes — a session finishing, timing out, or needing attention. Previously this only happened when a session happened to rediscover the trick on its own; now it's standard practice, so leaving Tank unattended while it dispatches work reliably surfaces completions and follow-ups without you having to come back and ask.

Tank can create and edit scheduled tasks without a restart (#194)

Tank could only add a scheduled task by hand-editing schedules.json, which the app reads once at launch — a schedule created this way sat dark until you quit and reopened. Tank now has three actions for this in the same actions-inbox it already uses for everything else: adding, updating, and deleting scheduled tasks. A schedule Tank creates arms immediately and shows up in the sidebar within seconds — no restart. A one-time schedule whose fire time has already passed is now rejected with a clear error instead of being silently added and never firing.

Suggested now surfaces every kind of scheduled-run proposal (#195)

Scheduled runs can propose three kinds of work — a GitHub issue, a session worth dispatching, or a plain note — but the Suggested queue only ever showed the issues; session and note proposals were silently dropped, even though the run's own summary still reported the full count. Now all three land in Suggested: issue and session proposals get a yes/no (confirming a session starts it immediately), and note proposals are a simple read-and-dismiss. A scheduled run's summary also reports what actually reached the queue, e.g. "3 proposals (2 suggested, 1 note)" instead of a bare count. And a launch-time sweep rescues any past run whose proposals never made it into the queue, so a missed intake doesn't lose that run's ideas for good.

IndieGent 2.6.2

Choose a tag to compare

@StuJLans StuJLans released this 08 Aug 01:39

IndieGent 2.6.2

Every session now starts knowing where the files are. 2.6.2 leads with a file tree of each project, baked into every session that project runs — an agent can look a path up instead of spending its first few turns on ls and find, which is tokens saved on every single session. Behind it: shipping a session full of big files works, PR descriptions say what the agent actually did, and My Issues is grouped, sorted and filterable.

A file tree for each project's sessions to explore (#185)

Issues sometimes mention a file an agent has to go hunting for, and hunting is the most expensive way to learn a repo's shape — a handful of turns of ls and find before any of the actual work starts.

The project header now has a Tree chip that generates a tree-style listing of the repo straight from GitHub. Nothing is cloned, and there is no node_modules to exclude by hand: it only ever lists what git actually tracks, so anything gitignored is already absent. Once generated, every session of that project gets it baked in at .lazytasks/tree.md and the brief points the agent at it, so a path is a lookup rather than a search.

The chip also knows when it's out of date. It checks the tree it stored against the repo's current commit each time you open the project, and turns warm yellow once the branch has moved on — so refreshing it is a click when it's needed, not a guess. If the check can't reach GitHub it leaves the chip alone rather than crying stale.

Shipping a session with big files in it now works (#154)

A session that committed something chunky — fonts, a video, a folder of screenshots — could fail to ship, because git only buffers 1MB of a push over HTTPS by default. Ship it now pushes with room for the whole thing.

Worse, that failure used to be reported as a success: the session note quoted git's parting words, "Everything up-to-date", which reads exactly like a retry that worked on a branch that was never on GitHub at all. Ship it now checks GitHub for the branch before claiming anything, and says plainly when the push didn't land — the workspace is kept, and the Ship button on an Unfinished session retries it.

PR descriptions now say what the agent actually did (#187)

A shipped PR used to show the brief that was sent to the agent, verbatim — what was asked for, not what came back. Any caveat, discovery, or thing the agent deliberately skipped only ever showed up if you read the diff. Sessions now write a short summary before they stop, and Ship it appends it to the PR body under "What actually happened," ahead of the Closes #N line.

My Issues is grouped, sorted and filterable (#188)

My Issues used to be one flat list — fine at a handful of items, useless once it grows, because a single busy project could bury the two or three issues on a smaller one you were about to forget. It now groups by project, biggest backlog first, each section collapsible with its count always showing so folding one away never hides how much is in it. Issues sort oldest-first by default (the things quietly rotting surface at the top), with newest and recently-updated as alternatives, and you can filter down to specific projects or labels.

IndieGent 2.6.1

Choose a tag to compare

@StuJLans StuJLans released this 06 Aug 08:55

IndieGent 2.6.1

A quieter sidebar, two new settings, and a button that stopped pretending. 2.6.1 is a polish release: the sidebar loses the chrome it didn't need, IndieGent can open itself when you log in, full-auto sessions can run under Claude Code's Auto Mode instead of skipping permission checks, and "Draft them all" now does what it says.

The sidebar runs the full height of the window (#140)

The console now uses a full-height sidebar, like Finder and Mail: the divider between the rail and the stage runs from the very top edge of the window to the bottom, instead of stopping below an undivided title strip. The window title has gone with it — "IndieGent" was already right there in the sidebar header, so the titlebar was saying it twice.

Scrollbars stay out of the way (#138)

The projects list in the sidebar no longer sits behind a permanently visible scrollbar. Console scroll surfaces now genuinely use macOS overlay scrollers — the knob appears while you scroll and fades out afterwards — instead of falling back to the always-on kind, which is what any Mac with a mouse plugged in was getting. The list also gets back the few points of width the old permanent gutter was taking.

The Suggested row hides itself when there's nothing to decide (#137)

An empty Suggested queue is the ordinary state — scheduled runs propose at most three ideas each and dismissals are permanent — so the row was mostly a label with a blank badge, plus a band of empty space above PROJECTS. It now appears the moment a suggestion arrives and steps aside when the queue is clear. If you are looking at the Suggested screen, the row stays put until you leave it.

Launch at login (#143)

Settings has a Launch at login switch — off unless you turn it on. With it on, IndieGent opens when you log in, so scheduled runs fire and sessions are watched without you starting it first.

The switch reads the Mac rather than remembering its own answer, so it always agrees with System Settings › General › Login Items: change it there and the switch follows the moment you come back to IndieGent. If macOS is holding the login item pending your approval, the card says so and takes you straight to that pane.

Auto Mode for sessions that open in a terminal (#141)

Settings has a new Session permissions choice. A full-auto session can now launch into Claude Code's Auto Mode — a classifier reviews every action, waves through the safe ones and asks you about anything destructive — instead of skipping permission checks entirely.

It starts on Skip all permissions, which is exactly what sessions have always done, so nothing changes until you pick the other one. Sessions already running keep the mode they started with.

Background runs are the deliberate exception: they always skip every prompt, whichever option you choose. There is no terminal for Auto Mode to ask in, so a background run would sit on the question until it timed out.

"Draft them all" looks at GitHub again (#142)

Drafting a project summary from its README now re-reads the README at the moment you click, instead of trusting what the app decided earlier in the session. If three projects had no README when IndieGent last looked — and then your sessions merged one into each — "Draft them all" used to do nothing at all until you restarted the app. It now drafts them.

If a repo genuinely has no README, it says so and names the branch it checked ("No README found on pb-cutover"), rather than leaving you clicking a button that seems dead. And when a session ships work to a project, IndieGent stops believing that project has no README — sessions are how READMEs usually turn up.

IndieGent 2.6.0

Choose a tag to compare

@StuJLans StuJLans released this 05 Aug 10:07

IndieGent 2.6.0

Lazy Tasks is now IndieGent. New name, new mark, new look, and a first-class dark mode — plus an Inbox that brings work to you, project summaries that write themselves, and a Garden that finally explains what a day was.

Nothing moved on your Mac. Your projects, sessions, schedules, Tank's memory, your licence and every permission you've granted all carry over: under the hood the bundle identifier and the Application Support folder deliberately keep their old names, so this update is a rename you read rather than something you redo.

The app has a new name (#108)

Everywhere a name shows up — the Dock, the menu bar, the About and Quit items, the window title, onboarding, Settings and the session briefs your agents read — now says IndieGent.

…and a new face (#109)

The Dock, Cmd-Tab and the About window show the IndieGent mark: near-black on the brand's accent yellow, drawn to Apple's icon grid so it sits right alongside everything else in your Dock and still reads at the smallest sizes. The menu bar carries the mark too, monochrome like every other status icon, with a small pip when a session needs you. Inside the app, the old broadcast badge is gone — onboarding opens on the full IndieGent lockup, and the sidebar and welcome-back screen use the mark itself.

…and IndieGent's look, all the way through (#110)

The rebrand reaches the pixels. The app is white where the page is, warm beige where the surfaces are — cards, panels and the project sidebar — with near-black text and one accent, IndieGent yellow, spent only on the thing you're meant to click: the Start session button, the live-session dots, the pill that says an agent is running.

It reads in IndieGent's own type, too. Plus Jakarta Sans carries the headings and Inter carries everything else; both ship inside the app, so they look the same on every Mac whether or not you have them installed. Branch names, timers and paths stay monospaced, where they belong.

And the app finally follows your Mac's appearance. Switch to Dark Mode and IndieGent goes with you — every colour has a dark counterpart rather than the app pinning itself to light.

The name reaches everything the app sends out (#117)

The rebrand now follows the app past its own window. The pull requests your sessions open are signed by IndieGent, background operator runs introduce themselves as IndieGent, the licence email you get after buying says IndieGent, and the download itself arrives as IndieGent-2.6.0.dmg — the first build where nothing you receive still says Lazy Tasks.

Work now comes to you: the Inbox (#114)

IndieGent has always been where you send work out. It's now also where you find out about it coming in. A new Inbox at the top of the sidebar shows what happened on your projects — an issue assigned to you, someone @mentioning you, a review someone's waiting on — with an unread count on the bell so you can see it without going looking.

Each row says what happened, where, and (where GitHub tells us) who did it. Click it to open the thread on GitHub; for issues, there's a Start session button right there, so going from "someone assigned me this" to an agent working on it is one click. New events show up within a couple of minutes.

It stays short on purpose. Only the three things that name you personally appear by default, anything you did yourself never counts, and your first run arrives calm rather than with a backlog of unread. If you do want everything a repo gets up to — new issues, replies on threads you follow — right-click it in the sidebar and turn on "Watch all activity".

Sidebar counts stop counting other people's work (#115)

The number beside a project used to be every open issue in the repo, which made a collaborator's workload look like yours. It now counts what you can actually pick up: issues assigned to you, plus issues nobody has claimed. Anything already assigned to a teammate sits beside it as a plain, unboxed number, so you can still see it's there without it reading as a todo. A project whose issues all belong to other people no longer shows a badge at all. Home's summary line and Tank both follow the same rule — Tank's snapshot now carries the actionable count alongside the total, so it recommends work that's genuinely yours.

Every project can say what it is (#118)

A project's one-line summary came straight from its GitHub description, and most repos don't have one — so most projects said nothing about themselves, including in the snapshot your agents triage from.

You can now write that line yourself: hover the summary under a project's name and edit it. And you usually won't have to write it — IndieGent reads the repo's README and drafts a one-liner for you, which you take with a click, tweak first if you like, or ignore. Repos you add from now on offer their draft as they arrive; the ones already sitting blank are gathered on Home under "projects with no summary", where "Draft them all" does the lot. Accept one and it's yours; "Use it & set on GitHub" writes it as the repo's description too — only ever when you ask, never from a background run. Descriptions written on GitHub now reach the app on their own as well.

The Garden tells you what a day actually was (#125, #107)

The chart on the home screen looked good and said nothing: a bar was a height, and there was no way to find out what it was a height of.

Now run the cursor along it. Each day lights up as you reach it and tells you what happened — how many sessions, how many issues you picked up, how many PRs shipped, how long agents were actually working, and which repos. A quiet day answers too, with the date and "Nothing that day", instead of being a gap you can't click on. It works the same on the weekly grid once your garden outgrows the daily bars. The card also shares its exact left and right edges with the Field Notes rows below it at every window size, so Home no longer reads ragged.

Suggested clears itself as you work it (#119, #120)

Confirming a suggestion used to leave the done card sitting in the queue, so a tab whose whole point is "things waiting on you" slowly filled with things that weren't. The confirmation is now a moment rather than a resident: the card turns yellow, ticks, and tells you the issue number it was filed as — with an Open button straight to it on GitHub — then slides out of the list a few seconds later.

And clearing the queue lands you somewhere designed instead of on a bare line of text: "All clear", a quiet dial that pulses while something is armed to look, and the facts you'd otherwise go hunting for — when the next run fires ("Nightly review runs tonight 9pm"), when suggestions last arrived, and a Run now button if you don't feel like waiting for tonight. A failed run says so in orange instead of letting a broken night look like a quiet one.

Open issues read oldest first (#127)

A project's open issues arrived in whatever order GitHub handed them over — newest first, which meant the backlog you'd been carrying longest sat at the bottom. They're now sorted by issue number, lowest at the top: your oldest open work first, the freshest ideas last, the same way every time. An issue you file while the list is on screen still appears immediately at the top, then settles into its place once GitHub gives it a number.

LazyTasks 2.5.0

Choose a tag to compare

@StuJLans StuJLans released this 31 Jul 03:59

LazyTasks 2.5.0

LazyTasks now plans ahead, not just executes. Put Tank on a schedule, review what it proposes from a new Suggested queue, and let the built-in nightly review turn today's closed issues into tomorrow's tasks — nothing touches your repos until you say yes.

Scheduled operator tasks (#100)

Put Tank on a schedule. The new SCHEDULED section in the sidebar holds standing orders — "Mon–Fri 9pm: review closed issues and suggest tasks" — that run headlessly in the background, no terminal window. Create one from the + button with a proper editor: prompt, time picker, day-of-week chips, an optional single-project focus, and a one-time variant. Each entry shows its next run in plain words ("tonight 9pm", "Mon 9am"), how the last run went, and a spinner while it works. Runs came due while the app was closed or the Mac asleep? You get one catch-up ask on launch — "was due yesterday 9pm — run now?" — never a silent skip, and never a double-run. Scheduled runs report rather than act: each deposits structured proposals for your review instead of changing your repos behind your back.

Suggested: pre-baked issues waiting for your yes (#101)

A new Suggested section in the sidebar collects draft GitHub issues proposed by scheduled runs (capped at 3 per run). Each card leads with the title, target project, and a one-line "why"; the full body expands in place, and you can touch up the title or body before filing. Confirm creates the issue on GitHub in one click; Dismiss buries the idea permanently — it's remembered, never suggested again, and future runs are told what you said no to. Nothing reaches GitHub until you confirm.

Nightly review: the scheduler and suggestions, joined up (#102)

The built-in nightly review makes the two features one story: Mon–Fri at 9pm, Tank reviews every issue that closed across your projects since its last successful run — a catch-up after a weekend away covers the whole gap — and proposes up to 3 follow-up issues into Suggested, each with a one-line "why now" tied to the specific issue or PR that prompted it. Nothing meaningful closed? It proposes nothing — an empty night is a valid result. Suggestion cards show which run proposed them ("Nightly review · Jul 31, 9pm").

LazyTasks 2.4.3

Choose a tag to compare

@StuJLans StuJLans released this 30 Jul 15:08

LazyTasks 2.4.3

The sidebar stays put. Fixed the sidebar getting cut off when selecting a project after resizing the window.

Sidebar no longer clips when a project is selected (#96)

Selecting a project could shave the left edge off the sidebar ("PROJECTS" became "ROJECTS"): the project view's deploy row could demand more width than the window had, overflowing the layout and pushing the sidebar partly off-screen. The deploy row now wraps its buttons onto a second line when the window is narrow, and the main content area is structurally capped so it can never displace the sidebar again.

LazyTasks 2.4.2

Choose a tag to compare

@StuJLans StuJLans released this 30 Jul 14:29

LazyTasks 2.4.2

The window behaves after a resize. Enlarging the window no longer leaves dead space, shrinking it back no longer squishes the sidebar, and the README now explains how model selection works.

Home fills the window and sidebar rows stay put after resize (#92)

Enlarging the window now makes the home view expand to fill the full width instead of holding a fixed-width column with dead space on the right. Sidebar project rows (and group headers) now truncate long names to one line, so selecting a project can no longer make its row render wider than the sidebar — the cause behind the sidebar squish some users saw after resizing.

Model selection is documented (#91)

The README now documents the model-selection feature: setting a project's default model via the model chip, and overriding it for a single dispatch from an issue row's "Start session with model" menu.

LazyTasks 2.4.1

Choose a tag to compare

@StuJLans StuJLans released this 30 Jul 13:48

LazyTasks 2.4.1

Headless sessions are back on their feet. 2.4.0 could pick up a stale claude install and fail every headless dispatch with a bare "exit 1" — 2.4.1 fixes that, tells you what actually went wrong when a tool does fail, and freshens the model picker's suggestions.

Headless sessions no longer pick up a stale claude install (#85)

Headless dispatches could silently run the wrong claude: if an old copy sat on the non-interactive shell PATH (e.g. a year-old homebrew install), it shadowed the current one your version manager (nvm/fnm/asdf) puts on the interactive PATH — and every dispatch died with "exit 1". Tool resolution now probes the interactive shell first — the same environment your terminal sessions run in — so the CLI your terminal uses is the one headless runs use too.

Failure notes now show the real error (#85)

When a tool fails printing its error to stdout (as claude -p does), the session note used to read as a bare exit code. It now includes the tool's actual error text, so you can see what went wrong without digging.

Current Claude aliases in the model picker (#86)

The model picker menus (project default and per-dispatch) now suggest all current claude CLI aliases — fable, opus, sonnet, haiku, opusplan, opus[1m], sonnet[1m] — instead of just opus/sonnet/haiku. The field is still free text, so any model name the CLI accepts continues to work.

LazyTasks 2.4.0

Choose a tag to compare

@StuJLans StuJLans released this 30 Jul 13:24

LazyTasks 2.4.0

You pick the model, you pull the trigger. 2.4.0 puts two controls where they belong: which model a session runs with — set per project or per dispatch — and a confirming click before anything ships. Plus headless sessions now start on every Mac, however node is installed.

Choose the model a session runs with (#76)

Each project can now set a default model: click the model chip next to the profile chip on the project page and pick a suggestion or type any model name the CLI accepts. Any single dispatch can override it from an issue row's "Start session with model" menu, and Tank can do the same by adding "model" to a start_session action. Nothing set means the provider default, exactly as before — and cheap tasks no longer have to burn an expensive model.

Ship now asks for a confirming click (#75)

Shipping is no longer a single click. The first click on any Ship control — the "Ship it" pill or the paperplane buttons — arms it: it turns amber and reads "Ship?". A second click within 3 seconds ships; clicking anywhere else or waiting disarms it. No more accidental ships from a stray click.

Headless sessions now work on nvm-only machines (#78)

Headless dispatches failed instantly with "env: node: No such file or directory" when node was installed only through a version manager (nvm, fnm, asdf, …). Those tools set up their PATH in interactive shell config (.zshrc), which the runner's non-interactive probe never read. Tool and PATH resolution now probes your shell the same way a terminal window would (with the old behavior as fallback), so headless runs see exactly the PATH your terminal has.