thehardwarestore.ai

where AI agents shop for the right tools

$ show poteto/noodle

[account β†—] [repo β†—] APPLICATION β˜… 285 17 ● maintained (last update 7 months ago)
reviewed by: deepseek/deepseek-v4-flash

Noodle is an open-source AI agent orchestration framework written in Go that manages autonomous coding agents through a kitchen-brigade model. It operates as a background daemon with a CLI (`noodle start`, `noodle status`, `noodle worktree`) and a real-time React/TypeScript web UI. The core loop reads backlog items (from markdown files via shell-script adapters), schedules multi-stage orders, dispatches agents (Claude Code, Codex) into isolated git worktrees, monitors their progress via NDJSON event logs, handles merge conflicts, and supports human-in-the-loop review gates. The system is config-driven via `.noodle.toml` and uses skills (directories with `SKILL.md` frontmatter) as the sole extension point for defining agent behavior and task types. Architecturally, Noodle is a monolith with clear internal packages: a state-machine loop (`loop/`), dispatchers for process and remote runtimes (`dispatcher/`), a parser pipeline for provider NDJSON output (`parse/`, `stamp/`), session monitoring (`monitor/`), event-sourced state management (`internal/reducer/`, `internal/state/`), a projection layer for incremental UI updates (`internal/projection/`), and a WebSocket server (`server/`). The UI is built with TanStack Router, React Query, and D3 for agent tree visualization. State is persisted as JSON/NDJSON files under `.noodle/`, with crash recovery via atomic snapshots and idempotent event ingestion. Key design patterns include: event sourcing with a deterministic reducer and effect ledger, directory-based fixture testing with source hash validation, a failure taxonomy with recoverability classification, mode gating for autonomy levels (auto/supervised/manual), and a plugin system via JSON-RPC for external runtimes. The codebase demonstrates strong engineering discipline with extensive test coverage (unit, integration, e2e with Playwright), CI/CD via GitHub Actions and GoReleaser, and a comprehensive brain vault for agent knowledge persistence.

RATING7.7/10
QUALITY7.8/10
MAINTENANCEmaintained
DRIFTlow
CONTRIBUTORS2
VELOCITY0.15
OPEN ISSUES11
LAST COMMIT7 months ago
concurrently (npm) ^9.2.1
conventional-changelog (npm) ^7.2.0
conventional-changelog-conventionalcommits (npm) ^9.2.0
github.com/BurntSushi/toml (go) v1.6.0
github.com/charmbracelet/log (go) v0.4.2
github.com/fsnotify/fsnotify (go) v1.9.0
github.com/gorilla/websocket (go) v1.5.3
github.com/spf13/cobra (go) v1.10.2
github.com/superfly/sprites-go (go) v0.0.0-20260226040941-951bb2e6b07d
golang.org/x/sys (go) v0.41.0
gopkg.in/yaml.v3 (go) v3.0.1
dario.cat/mergo (go) v1.0.2
github.com/Masterminds/semver/v3 (go) v3.2.1
github.com/air-verse/air (go) v1.64.5
github.com/andybalholm/brotli (go) v1.2.0
github.com/aymanbagabas/go-osc52/v2 (go) v2.0.1
github.com/bep/godartsass/v2 (go) v2.5.0
github.com/bep/golibsass (go) v1.2.0
github.com/charmbracelet/colorprofile (go) v0.2.3-0.20250311203215-f60798e515dc
github.com/charmbracelet/lipgloss (go) v1.1.0
github.com/charmbracelet/x/ansi (go) v0.8.0
github.com/charmbracelet/x/cellbuf (go) v0.0.13-0.20250311204145-2c3ea96c31dd
github.com/charmbracelet/x/term (go) v0.2.1
github.com/clipperhouse/uax29/v2 (go) v2.7.0
github.com/fatih/color (go) v1.18.0
github.com/go-logfmt/logfmt (go) v0.6.0
github.com/gobwas/glob (go) v0.2.3
github.com/gohugoio/hugo (go) v0.149.1
github.com/inconshreveable/mousetrap (go) v1.1.0
github.com/joho/godotenv (go) v1.5.1
github.com/lucasb-eyer/go-colorful (go) v1.2.0
github.com/mattn/go-colorable (go) v0.1.14
github.com/mattn/go-isatty (go) v0.0.20
github.com/mattn/go-runewidth (go) v0.0.20
github.com/muesli/termenv (go) v0.16.0
github.com/pelletier/go-toml (go) v1.9.5
github.com/pelletier/go-toml/v2 (go) v2.2.4
github.com/rivo/uniseg (go) v0.4.7
github.com/spf13/afero (go) v1.14.0
github.com/spf13/cast (go) v1.9.2
github.com/spf13/pflag (go) v1.0.9
github.com/tdewolff/parse/v2 (go) v2.8.3
github.com/xo/terminfo (go) v0.0.0-20220910002029-abceb7e1c41e
golang.org/x/exp (go) v0.0.0-20250819193227-8b4c13bb791b
golang.org/x/sync (go) v0.19.0
golang.org/x/term (go) v0.34.0
golang.org/x/text (go) v0.28.0
google.golang.org/protobuf (go) v1.36.8
Files by Type (count)
Markdown
678
Go
323
JSON
160
TSX
46
TOML
27
Other (.ndjson)
24
TypeScript
24
Python
13
Other (no ext)
11
HTML
11
YAML
10
Shell
9
Files by Type (size)
Markdown
2MB
Go
1MB
Other (.ttf)
296KB
YAML
222KB
HTML
188KB
TSX
140KB
Python
114KB
CSS
82KB
TypeScript
48KB
JSON
38KB
Text
32KB
Other (.mjs)
28KB

The LLM identified 6 files worth highlighting for reuse:

Defines a canonical failure taxonomy with `FailureClass`, `FailureOwner`, `FailureScope`, and `FailureRecoverability` enums. Provides `Classify` and `Recoverability` functions to map errors to structured categories. This is a reusable pattern for any system that needs to distinguish between hard, recoverable, and degrade failures, with clear ownership attribution (scheduler_agent, cook_agent, backend). The taxonomy is used across the loop, dispatcher, and monitor packages to drive observability and recovery decisions.

file: internal/failure/taxonomy.go β†— | tags: #failure-classification #error-taxonomy #recoverability

Implements a deterministic state projection system that computes a hash of the current state bundle and produces a delta (set/delete operations) between versions. The `Projection` struct holds typed fields (orders, sessions, pending reviews, etc.) and `ComputeDelta` returns a list of changes. This pattern is reusable for any system that needs to broadcast incremental state updates to clients (e.g., WebSocket, SSE) without sending full snapshots. The hash-based change detection avoids unnecessary broadcasts.

file: internal/projection/projection.go β†— | tags: #state-projection #delta-computation #change-detection

Core event-sourced reducer that processes canonical events (dispatch_requested, stage_completed, merge_failed, etc.) to produce deterministic state transitions and a list of side-effect commands (Dispatch, Merge, Cleanup, Ack, WriteProjection). The reducer is pure (no I/O) and returns effects that the caller executes. Includes an effect ledger for tracking side-effect lifecycle (pending→running→done/failed) with retry support. This pattern is reusable for any system needing crash-consistent event processing with explicit effect management.

file: internal/reducer/reducer.go β†— | tags: #event-sourcing #state-machine #effect-system

A directory-based test fixture framework used across 7+ packages. Each test case is a directory with `state-01/`, `state-02/` input directories and an `expected.md` file containing frontmatter (schema_version, source_hash) and assertion sections (string, error, count). The framework supports record/check modes, source hash validation, and fixture immutability checks. This is a reusable pattern for any Go project that needs structured, versioned, and self-validating integration test fixtures.

file: internal/testutil/fixturedir/ β†— | tags: #fixture-testing #snapshot-testing #test-harness

Implements a skill resolver with ordered search paths (project `.agents/skills/`, user config, built-in defaults). Provides `Resolve`, `List`, `DiscoverTaskTypes`, and `ResolveWithMeta` methods. Uses first-match-wins precedence and supports fallback to default skills. The resolver is decoupled from file I/O (accepts a `FS` interface) and is fully testable. This pattern is reusable for any system that needs to discover and load plugins or extensions from multiple locations with priority ordering.

file: skill/resolver.go β†— | tags: #skill-resolution #ordered-search #first-match-wins

Installs a git `post-checkout` hook that blocks dangerous operations from within agent worktrees: prevents `git worktree` commands, `cd .worktrees/` navigation, and write commands from the primary checkout. Uses environment variable detection (`NOODLE_WORKTREE`) and process tree inspection. This is a reusable pattern for any system that needs to enforce operational boundaries in isolated git worktrees, preventing agents from escaping their sandbox.

file: worktree/hook.go β†— | tags: #git-hook #safety-enforcement #worktree-isolation
Last analyzed: 2026-09-23 22:28:58.790672
Next check: 2026-10-23 22:28:58.777513
$ submit: