Releases: CKGrafico/loop-task
Release list
v2.0.0 — Loop-task rebuild
v2.0.0: The big rebuild
This release rebuilds loop-task from the ground up: a new TUI rendering engine, an HTTP API with Swagger documentation, polished forms, and dozens of UX improvements. No more Bun dependency: everything runs on Node >= 20.
Highlights
HTTP API + Swagger UI
The daemon now exposes a full REST + SSE API on \localhost:8845. Manage loops, tasks, projects, and logs from any HTTP client: curl, Postman, a browser dashboard, or automation scripts.
\\�ash
Swagger UI (interactive docs)
open http://127.0.0.1:8845/api/docs
Or from the CLI
loop-task api
List, create, pause, stream logs: all via HTTP
curl http://127.0.0.1:8845/api/loops
curl -N http://127.0.0.1:8845/api/loops/abc/logs/stream # SSE
curl -N http://127.0.0.1:8845/api/events # SSE events
\\
- 20+ REST endpoints (loops, tasks, projects, logs)
- Server-Sent Events for live log streaming and daemon event push
- OpenAPI 3.0 spec at /api/openapi.json\
- Swagger UI served inline at /api/docs\ (no external deps)
- Localhost-only (\127.0.0.1), configurable port via \LOOP_CLI_HTTP_PORT\
- Graceful degradation: if port is taken, IPC still works
Ink 7 + React 19 TUI
Rebuilt the entire terminal UI on Ink 7 with React 19. The board is faster, more responsive, and no longer requires Bun.
Polished loop create/edit forms
- Task mode toggle: switch between inline command and existing task selection
- Per-field validation: duration, command, description, CWD, maxRuns: errors shown inline
- Smart CWD default: pre-fills \process.cwd()\ on create
- Clipboard copy: copy command/cwd to clipboard from the edit form
- Direct edit navigation: selecting a loop goes straight to the edit form (no detail view detour)
- Works across both board and TUI forms
Board UX improvements
- Visual hierarchy: status colors, muted waiting state, red failure indicators
- Right-aligned numeric columns (RUNS, SKIP)
- Confirm mode with inline options and danger accent
- Filter chips replacing duplicate status filters
- SelectModal: filterable modal replaces arrow-cycle selects
- Hint bar with keyboard shortcuts
- Humanized durations in run history
- Command display unescaping in lists
All closed issues in this release
- #4 v2.0.0 Epic: Loop-task rebuild
- #5 Migrate TUI rendering engine from OpenTUI to Ink
- #6 Establish design system: colors, spacing, focus model, themes
- #7 Rebuild all TUI views on Ink with proper architecture
- #8 Multi-line command editor with cursor, copy/paste, and syntax awareness
- #9 Rich log viewer with search, filter, fold, scroll lock, and export
- #10 Hot-reloading JSON configs with fs.watch + reconcile
- #11 Exposed API: CLI --json, export/import, optional HTTP server
- #12 Run history trends: sparklines, streaks, averages
- #13 Chain visual editor: tree view of task chains with wiring
- #14 Docker support and GitHub Actions CI
- #15 First-run onboarding with example loops
- #16 Daemon push notifications (replace 2s polling with real-time events)
- #17 v2.0.0 release: version bump, docs, npm publish
- #18 Fix and expand test suite: existing failures, TUI coverage, hot-reload tests
- #21 Polished loop create/edit form with task selection, inline command editing, smart defaults, and field validation
Breaking changes from v1.x
- Bun is no longer required. The board runs on Node >= 20 via Ink 7 + React 19.
- \loop-task\ (no args) opens the board using Node/tsx, not Bun.
Full changelog
v1.5.0 - Chain Context Sharing + Searchable Selects
What's New
Chain Context Sharing
Tasks in a chain can now pass data to each other. Each task's stdout is automatically captured and parsed into a context object that downstream tasks can reference via {{key}}\ templates.
Zero config - no flags, no schema changes. Just emit JSON from your tasks and use {{key}}\ in downstream commands.
\\Task 1 (primary): gh issue list --label "to refine" --json number,title,body --jq '{number: .[0].number, title: .[0].title, body: .[0].body}'
Task 2 (chain): gh issue edit {{number}} --add-label "refining" --remove-label "to refine"
Task 3 (chain): opencode run "Rewrite this GitHub issue as a detailed user story..." --model "opencode/big-pickle"
Task 4 (chain): gh issue edit {{number}} --title "{{title}}" --body "{{body}}" --remove-label "refining" --add-label "to implement"
\\
Parse rules:
- JSON object: merges keys into context
- JSONL (multiple JSON lines): merges each line
- Plain text: stored under \output\ key
- Empty: no change
Template syntax: {{key}}\ replaced before spawning chain tasks. Missing keys resolve to empty string.
Press ?\ in the task list to open the Context Help modal with the full contract.
Searchable Selects
Replaced the broken OpenTUI <select>\ with a new reusable \SearchSelect\ component:
- Inline filter: type to filter options by name/value (case-insensitive)
- Keyboard navigation: up/down to navigate filtered list (wraps around), Enter to select, Escape to clear filter
- No more key hijacking: up/down inside a select no longer jumps to another form field
- Tab propagates: Tab still moves to the next form field
Replaced selects in:
- TaskForm (chain task selection: onSuccessTaskId, onFailureTaskId)
- CreateForm (project selection)
Stop Button for Running Loops
Running loops now show a Stop button in the action bar (previously only Edit and Delete were shown).
Action Buttons Refactor
Refactored the if/else chain in \getActions()\ to a dictionary-based \STATUS_ACTIONS\ lookup, following the project's convention of no nested if/else for dispatch.
Full Changelog: https://github.com/anomalyco/loop-cli/commits/v1.5.0
