Releases: layermix-labs/cli
v2.4.0
Minor Changes
-
2138910: change(cli): fail loudly on empty or unknown targets in CI/AI mode
Two user-input failure modes that used to silently exit 0 now exit 1:
- Unknown task id / tag (in every mode, TUI included).
layermix buildd(typo) previously resolved to an empty task set and exited green; now it printsError: Unknown task: "buildd"to stderr and exits 1. Same for-t <tag>when no task carries the tag. Applies todefaultRuntoo — a misconfigured"defaultRun": "-t teest"no longer silently no-ops. - Empty target in CI/AI mode (
--ci,--ai,CLAUDECODE/CURSOR_AGENT/etc., or anyis-ci-detected env). Previously printed a yellow hint and exited 0 — the same as a piped non-CI shell. That was too quiet for a scheduled agent or CI job: the run would appear green while nothing had been done. Now it prints an error and exits 1.
Piped non-CI linear mode (e.g.
layermix | lessfrom a dev terminal) is unchanged — it still prints the yellow hint and exits 0, since a human is there to read it. TUI sessions are unchanged: they stay idle on empty target and never fail on construction for a missing id (you navigate and pick).Migration: if your CI pipeline relied on
layermix --cibeing a no-op when nothing was configured, either pass an explicit target (layermix --ci -t test) or setdefaultRunintask-runner.json:"defaultRun": "-t test"
- Unknown task id / tag (in every mode, TUI included).
-
0c9a78a: change(cli): remove the implicit "run everything" fallback in CI/AI mode
Bare
layermix --ci(or--ai, or any CI-detected invocation) with no explicit target no longer runs every task. It now prints the sameNo tasks specified…hint the piped non-CI path does and exits 0.layermix --aiin an unfamiliar repo shouldn't silently execute the whole pipeline.Migration: set
defaultRunintask-runner.json— it kicks in in every linear-mode shape (CI/AI and piped non-CI) and is unchanged:"defaultRun": "-t test" // or a task id, or "id1 id2"
TUI sessions are unchanged: they still stay idle on an empty target.
Patch Changes
-
addb737: docs: add agent skill template for downstream projects
New
agent-skill.mdat the repo root — a copy-paste Claude Code skill (with YAML frontmatter) that teaches coding agents how to uselayermixcorrectly in projects that consume the CLI: which flags are safe, how to readtask-runner.json, when to prefer--dry-run-json, how to interpret exit codes. README.md gains an "Agent skill template" subsection under "For CI / AI agents" with a one-linercurlto drop it into.claude/skills/layermix/SKILL.md. Not shipped in the npm tarball — pulled from GitHub directly. -
fe913e2: fix(cli): read version from package.json so
--versionand scaffolded$schemastay in syncTwo spots hardcoded the version string (
2.2.0) and drifted frompackage.json(2.3.0):program.version(...)in Commander, and the$schemaURL in theinitscaffold. Both now read frompackage.jsonat startup, so futurepnpm changeset versionbumps don't leave stale strings behind.No behavioural change for existing configs. Newly scaffolded
task-runner.jsonfiles will point at the installed CLI's version of the schema on Unpkg.
v2.3.0
Minor Changes
-
664a2ed: feat(config): add optional
labelto tasks for the TUI sidebar display nameTasks can now declare
label, a UI-only display name that renders in the TUI sidebar, Overview waterfall, task-detail header,listoutput, and linear-mode log prefixes ([label] Starting...) in place ofid.idstays the canonical handle everywhere else — CLI targets,dependsOn, JUnittestcasenames, and dry-run JSON keys are unchanged, so labels are safe to add or rename without breaking CI integrations. The sidebar search (/) now matches on id and label.
v2.2.0
Minor Changes
-
13eeb63:
defaultRunconfig field. New top-level option that sets a CLI-style fallback target for non-TUI invocations:"defaultRun": "-t test" // tag selector "defaultRun": "build" // single task id "defaultRun": "build deploy" // multiple task ids
Fires in any non-TUI run (
--ci,--ai, auto-detected CI/AI env, or piped non-TTY shells) when no explicit target is supplied. TUI sessions stay idle so the explicit "pick what to run" UX is preserved. Explicit user targets always win overdefaultRun.In CI/AI mode, this pre-empts the previous "run everything" fallback — invocations like
layermix --cinow run only the configured target instead of the full graph. In piped non-CI mode, it pre-empts the "No tasks specified" hint. -
a70b42f: Task arguments + TUI workflow upgrades:
- Per-task positional inputs. Tasks can declare
argsmapping$1,$2, ... incmdto typed inputs: freetext,select(one-of),file(glob-filtered file picker), andfolder(glob-filtered directory picker). File/folder supportmultiplefor checklist-style multi-select. - TUI args picker. When a task with declared args is launched (Enter on the sidebar, or
layermix <task>from the CLI), an overlay walks the user through each input in turn, with shell-quoted substitution into the final command. - Rerun + post-failure Run. Success-with-args menus get a "Rerun" option (replays last args, no picker) — placed first so Enter does the expected thing. Failure-with-args menus get a "Run" option that re-opens the picker. "Run With Deps" is now hidden for tasks with no
dependsOn. - CLI
--argflag. Repeatable-a/--arg <value>for non-interactive runs. Comma-separated values feed multi-select args. Rejected when targeting more than one task (positional ambiguity). - Task search. Press
/in the TUI to filter the sidebar by task id; auto-expands matching groups/tags. - UI-only task groups. Tasks sharing a
groupfield render under a collapsible header in the sidebar, hidden from the flat task list. Pure UI — no CLI behavior. - Tag-scoped retry-failed. "Retry Failed" inside a tag detail only resets failed tasks within that tag. New
forceoption onscheduleRunre-runs already-completed tasks (used by tag re-run). - Queued state. New
taskQueuedevent flips tasks to a visible QUEUED status the moment they enter the pending set, so users see scheduled-but-not-started work.
- Per-task positional inputs. Tasks can declare
v2.1.0
Minor Changes
-
9065b7c: TUI improvements:
- Keyboard navigation: added single-key shortcuts (
r,R,c,K,x) for the TaskDetail action menu, plus arrow/h/lcycling andEnterto activate. - UX polish: clearer overview waterfall, refreshed sidebar/tag/task layout, and improved status visibility in the top bar.
- Performance: drastically reduced TUI flicker for chatty tasks. Stdout chunks are now coalesced into one render per ~16ms frame, the Overview duration ticker only runs while tasks are active, and the log pane reuses rows on scroll/tail instead of remounting them. A 5000-line per-task log buffer keeps memory bounded for long-running tasks.
- Keyboard navigation: added single-key shortcuts (
v2.0.0
Major Changes
-
Complete rewrite of
@layermix/clias a DAG-based task runner with an Ink TUI. The previous0.xline was a framework helper (codegen + AI enhancement); this2.xline is a generic task orchestrator. Existing users on0.xwill be upgraded — the CLI surface is entirely different.- Define tasks + dependencies in
task-runner.json(zod-validated, JSON-schema-backed for IDE autocompletion). - Parallel execution up to dependency constraints, with cascade-skip on failure and per-task retry from the TUI.
- TUI with sidebar, live Gantt overview, and per-task streamed output; linear buffered output for CI/AI agents.
- Subcommands:
init,list,validate,run(default). - Auto-detects CI (
is-ci) and coding-agent envs (Claude Code, Cursor, Aider, Continue) to switch to linear mode. --junit <path>writes a JUnit XML report (works in both modes);--dry-run-jsonemits a machine-readable execution plan.- Monorepo-friendly: configs are discovered via
cosmiconfigand merged upward through parent directories.
- Define tasks + dependencies in