Add --source flag to tui/web/tail subcommands for specifying log source as file or directory (directories get workers.log appended). Add 'logs' as alias for 'tail' subcommand per plan.md CLI spec. Update README.md with fabric logs examples and --source usage. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .beads | ||
| .github/workflows | ||
| bin | ||
| docs | ||
| e2e | ||
| protos/opentelemetry/proto | ||
| scripts | ||
| src | ||
| test-results | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| README.md | ||
| ROADMAP.md | ||
| SESSION_REPLAY_SUMMARY.md | ||
| tsconfig.json | ||
| tsconfig.tsbuildinfo | ||
| vite.config.ts | ||
| vitest.config.ts | ||
FABRIC
Flow Analysis & Bead Reporting Interface Console
A live display for NEEDLE worker activity, available as TUI or web dashboard.
Purpose
FABRIC tails NEEDLE's logging output and renders it in real-time. It answers:
- What is each worker doing right now?
- What events are happening across all workers?
- Which workers are active, idle, or erroring?
- Is any worker stuck or looping?
- Are workers colliding on the same files?
- How much is this costing?
Display Modes
TUI (fabric tui)
Live terminal dashboard:
- Worker status grid
- Scrolling log stream
- Worker detail panel
- Keyboard navigation and filtering
Web (fabric web)
Live browser dashboard at localhost:3000:
- Worker overview cards
- Real-time activity feed
- Timeline visualization
- WebSocket-powered updates
Quick Start
# Terminal dashboard
fabric tui
# Web dashboard
fabric web
# Stream parsed events to stdout
fabric logs
# With OTLP live telemetry
fabric tui --otlp-grpc :4317
FABRIC reads from ~/.needle/logs/ by default.
Intelligence Features
Beyond simple log display, FABRIC provides:
| Feature | Description |
|---|---|
| Stuck & Loop Detection | Automatic alerts when workers spin their wheels |
| Inline Diff View | See actual code changes, not just "Edit was called" |
| Cross-Reference Links | Click any bead, file, or worker to navigate |
| Collision Detection | Know when workers edit the same files |
| Session Replay | Scrub through past sessions like a video |
| Smart Error Grouping | Errors with context, not scattered through logs |
| Command Palette | Ctrl+K for universal search and commands |
| Cost Tracking | Real-time token usage and budget alerts |
| Task Dependency DAG | Visual graph of task relationships |
| File Heatmap | See where all the action is at a glance |
| Conversation Transcript | See the full Claude conversation, not just tool calls |
| Semantic Narrative | Natural language summary of what workers are doing |
| AI Session Digest | Auto-generated session summaries for stakeholders |
| File Context Panel | See file contents alongside activity stream |
| Git Integration | Live git status, diff preview, conflict detection |
| Worker Analytics | Compare worker performance over time |
| Recovery Playbook | Suggestions based on similar past errors |
| Focus Mode | Pin workers/tasks, hide everything else |
Relationship to NEEDLE
NEEDLE (orchestrates workers) → logs → FABRIC (displays + analyzes)
NEEDLE does the work. FABRIC shows you what's happening and helps you understand it.
Wiring NEEDLE → FABRIC
NEEDLE ships with an otlp feature (enabled by default in Cargo.toml) that exports telemetry over the standard OpenTelemetry OTLP protocol. No rebuild or extra flags are needed — just set two environment variables before launching workers:
export OTEL_EXPORTER_OTLP_ENDPOINT=http://fabric-host:4317
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
needle run ...
| Variable | Default | Notes |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
— | FABRIC's OTLP listener address |
OTEL_EXPORTER_OTLP_PROTOCOL |
grpc |
grpc (port 4317) or http/protobuf (port 4318) |
Starting the FABRIC receiver
FABRIC must be started with an OTLP listener for live telemetry to flow. The --otlp-grpc and --otlp-http flags enable the receiver:
# gRPC receiver (recommended — lower latency, NEEDLE default)
fabric tui --otlp-grpc 0.0.0.0:4317
# HTTP receiver (alternative)
fabric web --otlp-http 0.0.0.0:4318
# Both sources merged (JSONL tail + OTLP live)
fabric tui --source ~/.needle/logs/ --otlp-grpc :4317
# Tail with OTLP and event-type filtering
fabric tail --otlp-grpc :4317 --event-type "bead.*"
# Stream logs to stdout with filtering (logs is an alias for tail)
fabric logs --event-type "bead.*"
fabric logs --worker tcb-a --otlp-grpc :4317
| Receiver flag | Default port | Protocol |
|---|---|---|
--otlp-grpc |
4317 |
OTLP/gRPC ( tonic) |
--otlp-http |
4318 |
OTLP/HTTP (protobuf + JSON) |
Everything stays on your machine — FABRIC is a local collector, not a third-party service. Telemetry is read-only: FABRIC ingests spans/logs/metrics for display but never writes back to NEEDLE or modifies worker state.
🚧 In Development - See docs/plan.md for implementation roadmap.
Documentation
- NeedleEvent Schema — canonical wire format shared with NEEDLE
- Implementation Plan