loom-os 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- loom_os-0.2.0/PKG-INFO +222 -0
- loom_os-0.2.0/README.md +188 -0
- loom_os-0.2.0/daemon/__init__.py +1 -0
- loom_os-0.2.0/daemon/api.py +1134 -0
- loom_os-0.2.0/daemon/audit.py +155 -0
- loom_os-0.2.0/daemon/embeddings.py +122 -0
- loom_os-0.2.0/daemon/evals.py +195 -0
- loom_os-0.2.0/daemon/extracted_store.py +46 -0
- loom_os-0.2.0/daemon/extractors.py +320 -0
- loom_os-0.2.0/daemon/graph_engine.py +318 -0
- loom_os-0.2.0/daemon/ingest.py +176 -0
- loom_os-0.2.0/daemon/known_agents.py +125 -0
- loom_os-0.2.0/daemon/main.py +220 -0
- loom_os-0.2.0/daemon/mcp_server.py +292 -0
- loom_os-0.2.0/daemon/models.py +218 -0
- loom_os-0.2.0/daemon/patterns.py +209 -0
- loom_os-0.2.0/daemon/project_knowledge.py +265 -0
- loom_os-0.2.0/daemon/recall.py +163 -0
- loom_os-0.2.0/daemon/registry.py +558 -0
- loom_os-0.2.0/daemon/router.py +310 -0
- loom_os-0.2.0/daemon/runners.py +99 -0
- loom_os-0.2.0/daemon/sessions.py +128 -0
- loom_os-0.2.0/daemon/shared_context.py +232 -0
- loom_os-0.2.0/daemon/snapshots.py +126 -0
- loom_os-0.2.0/daemon/supervisor.py +62 -0
- loom_os-0.2.0/daemon/temporal.py +152 -0
- loom_os-0.2.0/daemon/traces.py +159 -0
- loom_os-0.2.0/daemon/watcher.py +72 -0
- loom_os-0.2.0/daemon/worker.py +301 -0
- loom_os-0.2.0/daemon/worktree.py +132 -0
- loom_os-0.2.0/loom_os.egg-info/PKG-INFO +222 -0
- loom_os-0.2.0/loom_os.egg-info/SOURCES.txt +60 -0
- loom_os-0.2.0/loom_os.egg-info/dependency_links.txt +1 -0
- loom_os-0.2.0/loom_os.egg-info/entry_points.txt +3 -0
- loom_os-0.2.0/loom_os.egg-info/requires.txt +17 -0
- loom_os-0.2.0/loom_os.egg-info/top_level.txt +1 -0
- loom_os-0.2.0/pyproject.toml +54 -0
- loom_os-0.2.0/setup.cfg +4 -0
- loom_os-0.2.0/tests/test_api.py +872 -0
- loom_os-0.2.0/tests/test_audit.py +83 -0
- loom_os-0.2.0/tests/test_cli.py +14 -0
- loom_os-0.2.0/tests/test_embeddings.py +75 -0
- loom_os-0.2.0/tests/test_evals.py +117 -0
- loom_os-0.2.0/tests/test_extracted_store.py +25 -0
- loom_os-0.2.0/tests/test_extractors.py +98 -0
- loom_os-0.2.0/tests/test_graph_engine.py +98 -0
- loom_os-0.2.0/tests/test_ingest.py +88 -0
- loom_os-0.2.0/tests/test_mcp.py +177 -0
- loom_os-0.2.0/tests/test_patterns.py +121 -0
- loom_os-0.2.0/tests/test_recall.py +161 -0
- loom_os-0.2.0/tests/test_registry.py +147 -0
- loom_os-0.2.0/tests/test_router.py +190 -0
- loom_os-0.2.0/tests/test_runners.py +46 -0
- loom_os-0.2.0/tests/test_sessions.py +81 -0
- loom_os-0.2.0/tests/test_snapshots.py +66 -0
- loom_os-0.2.0/tests/test_supervisor.py +106 -0
- loom_os-0.2.0/tests/test_tasks.py +157 -0
- loom_os-0.2.0/tests/test_temporal.py +88 -0
- loom_os-0.2.0/tests/test_traces.py +120 -0
- loom_os-0.2.0/tests/test_watcher.py +32 -0
- loom_os-0.2.0/tests/test_worker.py +226 -0
- loom_os-0.2.0/tests/test_worktree.py +139 -0
loom_os-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: loom-os
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Loom OS — unified agent memory fabric for multi-agent coding
|
|
5
|
+
Author: Mohamed Hussien
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/mohamedhusseinios/Loom-OS
|
|
8
|
+
Project-URL: Repository, https://github.com/mohamedhusseinios/Loom-OS
|
|
9
|
+
Project-URL: Issues, https://github.com/mohamedhusseinios/Loom-OS/issues
|
|
10
|
+
Keywords: ai-agents,knowledge-graph,agent-memory,mcp,code-graph
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
17
|
+
Requires-Python: >=3.11
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
Requires-Dist: fastapi>=0.115.0
|
|
20
|
+
Requires-Dist: uvicorn[standard]>=0.30.0
|
|
21
|
+
Requires-Dist: watchdog>=5.0.0
|
|
22
|
+
Requires-Dist: graphifyy>=0.8.0
|
|
23
|
+
Requires-Dist: pydantic>=2.0
|
|
24
|
+
Requires-Dist: aiosqlite>=0.20.0
|
|
25
|
+
Requires-Dist: pyyaml>=6.0
|
|
26
|
+
Provides-Extra: llm
|
|
27
|
+
Requires-Dist: openai>=1.0; extra == "llm"
|
|
28
|
+
Requires-Dist: anthropic>=0.39; extra == "llm"
|
|
29
|
+
Requires-Dist: httpx>=0.27; extra == "llm"
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest-asyncio>=0.24.0; extra == "dev"
|
|
33
|
+
Requires-Dist: httpx>=0.27.0; extra == "dev"
|
|
34
|
+
|
|
35
|
+
<div align="center">
|
|
36
|
+
|
|
37
|
+
<img src="docs/branding/loom-icon-warp-256.png" alt="Loom OS" width="120" height="120" />
|
|
38
|
+
|
|
39
|
+
# Loom OS
|
|
40
|
+
|
|
41
|
+
**Unified agent memory fabric**
|
|
42
|
+
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
**Loom OS** is a unified agent memory fabric that weaves multiple AI coding agents — Claude Code, Codex, Hermes, Cursor, and more — into one shared, [Graphify](https://github.com/nousresearch/graphify)-powered knowledge graph per project. Agents talk to Loom OS **only through the filesystem**: they drop files into a per-project inbox and the daemon does the rest. There is no SDK, no API client, and no auth. A Next.js dashboard is the control plane for browsing the graph, managing agents, and dispatching work.
|
|
46
|
+
|
|
47
|
+
> **Naming.** The product is **Loom OS**. The installable package and CLI are **`loom`** (`pip install loom`). The repository directory and design/plan docs are named **`agentic-os`**. They all refer to the same project.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Quick Start
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pip install loom # base install — no LLM keys required
|
|
55
|
+
loom start # starts daemon on http://127.0.0.1:8472
|
|
56
|
+
loom init --project my-app --project-path . # bootstraps inbox + starter register.json
|
|
57
|
+
# (or register a specific agent instead of init):
|
|
58
|
+
# loom register --agent claude-code --project my-app --project-path /abs/path
|
|
59
|
+
open http://localhost:3000 # dashboard (run the Next.js app — see below)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The dashboard is a Next.js app under `dashboard/`. Start it with:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
cd dashboard && npm install && npm run dev # http://localhost:3000
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
| What | Where |
|
|
69
|
+
|------|-------|
|
|
70
|
+
| Daemon (REST + WebSocket) | `http://127.0.0.1:8472` |
|
|
71
|
+
| Dashboard | `http://localhost:3000` |
|
|
72
|
+
|
|
73
|
+
**Prerequisites:** Python 3.11+, Node.js 20+. Graphify ships as a dependency (`graphifyy`).
|
|
74
|
+
|
|
75
|
+
> Want optional LLM-powered extraction (Ollama / OpenAI / Claude)?
|
|
76
|
+
> `pip install loom[llm]` — the base install works without any LLM.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Capabilities
|
|
81
|
+
|
|
82
|
+
- **Multi-agent knowledge graph** — Graphify parses your codebase AST (zero API keys, code-only builds) and builds a per-project graph of files, functions, classes, communities, and execution flows. An optional LLM extraction layer can enrich the graph with semantic edges.
|
|
83
|
+
- **Filesystem inbox protocol** — agents never call an API. They write files into `~/.loom/inbox/<project>/`: `register.json`, `heartbeat.json`, `finding-*.md` (markdown + YAML frontmatter), `decision-*.md` (ADRs), `task-*.json` (dispatched tasks). The daemon watches, processes, and moves each file to `.processed/`.
|
|
84
|
+
- **Next.js dashboard** — interactive graph visualization (reagraph/cytoscape), agent management with live status, a Kanban task board (Todo · Ready · Running · Blocked · Done), project CRUD, knowledge-source discovery, and hybrid search. Bilingual (en/ar) with RTL support.
|
|
85
|
+
- **Task dispatch + worker execution** — dispatch tasks from the dashboard; a `loom worker` process picks up Running tasks, executes them in an isolated **git worktree**, and enforces a per-task USD budget cap. Results flow back as findings.
|
|
86
|
+
- **Hybrid search** — text (FTS) + vector embeddings + graph traversal in a single query path.
|
|
87
|
+
- **Optional LLM backends** — Ollama (default, local), OpenAI, or Anthropic Claude. Install with `pip install loom[llm]`. The base package needs no LLM at all.
|
|
88
|
+
- **MCP server** — `loom-mcp` exposes graph queries and finding ingestion over the Model Context Protocol so any MCP-aware agent can read from and write to Loom OS.
|
|
89
|
+
- **Single-process daemon, zero infrastructure** — no Docker, no Neo4j, no cloud. One Python process (FastAPI + uvicorn) plus the Next.js dashboard. State lives in SQLite (`~/.loom/state.db`).
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Architecture
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Browser :3000 ──▶ ┌──────────────────────────────────┐
|
|
97
|
+
│ Next.js Dashboard │
|
|
98
|
+
└──────────────┬───────────────────┘
|
|
99
|
+
│ REST + WebSocket
|
|
100
|
+
┌─────────────────────────────────┼───────────────────┐
|
|
101
|
+
│ Loom Daemon (Python, :8472) │
|
|
102
|
+
│ │
|
|
103
|
+
│ watcher ──▶ router ──▶ registry / graph_engine ──▶ api
|
|
104
|
+
│ │ │ │
|
|
105
|
+
│ (SQLite) (Graphify CLI subprocess, │
|
|
106
|
+
│ ~/.loom/ graph.json sidecar) │
|
|
107
|
+
│ state.db │
|
|
108
|
+
└───────────────────────────────────────────────────────┘
|
|
109
|
+
▲ ▲ ▲
|
|
110
|
+
│ │ │
|
|
111
|
+
~/.loom/inbox/proj ~/.loom/inbox/proj ~/.loom/inbox/proj
|
|
112
|
+
Claude Code Codex Hermes
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Two processes:**
|
|
116
|
+
|
|
117
|
+
1. **Python daemon** (`daemon/`) — FastAPI + uvicorn on `127.0.0.1:8472`. REST routes plus a single `/ws` WebSocket for live updates. CORS allows `http://localhost:3000`.
|
|
118
|
+
2. **Next.js dashboard** (`dashboard/`) — App Router on `:3000`. Talks to the daemon over REST + WebSocket.
|
|
119
|
+
|
|
120
|
+
**Filesystem protocol.** Agents write files into `~/.loom/inbox/<project>/`. The daemon watches the inbox, dispatches by filename, builds/updates the knowledge graph, and pushes live events to the dashboard.
|
|
121
|
+
|
|
122
|
+
**Daemon module map & data flow:**
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
watcher.py watchdog observer on ~/.loom/inbox (recursive).
|
|
126
|
+
Marshals filesystem events onto the asyncio loop.
|
|
127
|
+
↓
|
|
128
|
+
router.py Dispatches by filename → _handle_register, _handle_heartbeat,
|
|
129
|
+
_handle_finding, _handle_decision, _handle_task.
|
|
130
|
+
Moves processed files to .processed/. Rate-limits graph
|
|
131
|
+
updates (1 / 30s / project). Emits WsEvents to a queue.
|
|
132
|
+
↓
|
|
133
|
+
registry.py AgentRegistry: aiosqlite over ~/.loom/state.db.
|
|
134
|
+
Tables: agents, projects, tasks. CRUD + graph-stat persistence.
|
|
135
|
+
graph_engine.py GraphEngine: build / update / query / stats / topology /
|
|
136
|
+
communities / flows. Invokes `graphify` as a CLI subprocess
|
|
137
|
+
(asyncio.to_thread); reads <project>/graphify-out/graph.json.
|
|
138
|
+
extractors.py Optional LLM extraction layer (injectable backend).
|
|
139
|
+
extracted_store.py Sidecar store for LLM-extracted semantic edges.
|
|
140
|
+
api.py FastAPI routes + WebSocket fan-out.
|
|
141
|
+
mcp_server.py MCP server (loom-mcp entry point).
|
|
142
|
+
worker.py Worker: executes Running tasks in git-worktree isolation.
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## CLI Reference
|
|
148
|
+
|
|
149
|
+
| Command | Description |
|
|
150
|
+
|---------|-------------|
|
|
151
|
+
| `loom start` | Start the daemon (FastAPI + uvicorn on `:8472`) |
|
|
152
|
+
| `loom init --project <name> --project-path <path>` | Bootstrap a project: create inbox + starter `register.json` |
|
|
153
|
+
| `loom register --agent <name> --project <name> --project-path <path>` | Register a coding agent with a project |
|
|
154
|
+
| `loom unregister --agent <name> --project <name>` | Remove an agent from a project |
|
|
155
|
+
| `loom detect-agents` | List coding agents detected on this machine |
|
|
156
|
+
| `loom worker --project <name> --agent <name> --project-path <path>` | Run a worker that executes Running tasks (git worktree isolation, `--max-budget-usd` cap) |
|
|
157
|
+
| `loom-mcp` | Start the MCP server |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Development
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
git clone https://github.com/mohamedhusseinios/Loom-OS.git
|
|
165
|
+
cd Loom-OS
|
|
166
|
+
python3 -m venv .venv && source .venv/bin/activate
|
|
167
|
+
pip install -e ".[dev]"
|
|
168
|
+
|
|
169
|
+
pytest tests/ -v # full test suite (pytest-asyncio)
|
|
170
|
+
bash scripts/smoke-test.sh # end-to-end: daemon + agent + API
|
|
171
|
+
cd dashboard && npm run dev # dashboard hot-reload
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
See the [Development Guide](docs/DEVELOPMENT.md) for project structure, test patterns, and contribution conventions.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Documentation
|
|
179
|
+
|
|
180
|
+
| Guide | Covers |
|
|
181
|
+
|-------|--------|
|
|
182
|
+
| [Architecture](docs/ARCHITECTURE.md) | Two-process design, module map, data flow, design principles |
|
|
183
|
+
| [Filesystem Protocol](docs/FILESYSTEM-PROTOCOL.md) | Full inbox protocol spec — every file type, format, processing rule |
|
|
184
|
+
| [API Reference](docs/API.md) | Complete REST + WebSocket API, all endpoints and event types |
|
|
185
|
+
| [Dashboard Guide](docs/DASHBOARD.md) | Page-by-page tour, tech stack, i18n, component map |
|
|
186
|
+
| [Task Board & Worker](docs/TASK-BOARD.md) | Kanban lifecycle, worker execution model, git worktree isolation |
|
|
187
|
+
| [Agent Lifecycle](docs/AGENT-LIFECYCLE.md) | Registration → contribution → dispatch flow, agent status, shared context |
|
|
188
|
+
| [Development Guide](docs/DEVELOPMENT.md) | Setup, project structure, test suite, daemon patterns, contribution conventions |
|
|
189
|
+
|
|
190
|
+
### Design specs & implementation plans
|
|
191
|
+
|
|
192
|
+
- [Design spec](docs/superpowers/specs/2026-06-25-agentic-os-design.md) — original system design
|
|
193
|
+
- [Dashboard features design](docs/superpowers/specs/2026-06-26-agentic-os-dashboard-features-design.md)
|
|
194
|
+
- [Kanban task board design](docs/superpowers/specs/2026-06-27-agentic-os-kanban-task-board-design.md)
|
|
195
|
+
- [Live task execution design](docs/superpowers/specs/2026-06-27-agentic-os-live-task-execution-design.md)
|
|
196
|
+
- [Multi-agent worker runners design](docs/superpowers/specs/2026-06-28-multi-agent-worker-runners-design.md)
|
|
197
|
+
- [Post-parity roadmap design](docs/superpowers/specs/2026-06-29-loom-post-parity-roadmap-design.md)
|
|
198
|
+
- [Implementation plan](docs/plans/2026-06-25-agentic-os-implementation.md)
|
|
199
|
+
- [Dashboard features plan](docs/plans/2026-06-26-dashboard-features-implementation.md)
|
|
200
|
+
- [Competitor gap-closure roadmap](docs/plans/2026-06-26-competitor-gap-closure-implementation.md)
|
|
201
|
+
- [Live task execution plan](docs/plans/2026-06-27-agentic-os-live-task-execution-implementation.md)
|
|
202
|
+
- [Post-parity roadmap plan](docs/plans/2026-06-29-post-parity-roadmap-implementation.md)
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Brand
|
|
207
|
+
|
|
208
|
+
Monochrome, geometric. **Warp** (an L woven on a loom) is the primary mark; **Lattice** (an L traced through a knowledge graph) is the alternate.
|
|
209
|
+
|
|
210
|
+
| | Warp (primary) | Lattice (alternate) |
|
|
211
|
+
|---|---|---|
|
|
212
|
+
| Icon | <img src="docs/branding/loom-icon-warp-256.png" width="64" /> | <img src="docs/branding/loom-icon-lattice-512.png" width="64" /> |
|
|
213
|
+
|
|
214
|
+
- **Ink** `#141414` · **Paper** `#FFFFFF` · greys `#6F6F6F`, `#E5E5E5`
|
|
215
|
+
- **Wordmark** Space Grotesk 600, tracking −3.5%
|
|
216
|
+
- Full asset kit: [`docs/branding/`](docs/branding/README.md)
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## License
|
|
221
|
+
|
|
222
|
+
MIT © Mohamed Hussien
|
loom_os-0.2.0/README.md
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="docs/branding/loom-icon-warp-256.png" alt="Loom OS" width="120" height="120" />
|
|
4
|
+
|
|
5
|
+
# Loom OS
|
|
6
|
+
|
|
7
|
+
**Unified agent memory fabric**
|
|
8
|
+
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
**Loom OS** is a unified agent memory fabric that weaves multiple AI coding agents — Claude Code, Codex, Hermes, Cursor, and more — into one shared, [Graphify](https://github.com/nousresearch/graphify)-powered knowledge graph per project. Agents talk to Loom OS **only through the filesystem**: they drop files into a per-project inbox and the daemon does the rest. There is no SDK, no API client, and no auth. A Next.js dashboard is the control plane for browsing the graph, managing agents, and dispatching work.
|
|
12
|
+
|
|
13
|
+
> **Naming.** The product is **Loom OS**. The installable package and CLI are **`loom`** (`pip install loom`). The repository directory and design/plan docs are named **`agentic-os`**. They all refer to the same project.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pip install loom # base install — no LLM keys required
|
|
21
|
+
loom start # starts daemon on http://127.0.0.1:8472
|
|
22
|
+
loom init --project my-app --project-path . # bootstraps inbox + starter register.json
|
|
23
|
+
# (or register a specific agent instead of init):
|
|
24
|
+
# loom register --agent claude-code --project my-app --project-path /abs/path
|
|
25
|
+
open http://localhost:3000 # dashboard (run the Next.js app — see below)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The dashboard is a Next.js app under `dashboard/`. Start it with:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
cd dashboard && npm install && npm run dev # http://localhost:3000
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
| What | Where |
|
|
35
|
+
|------|-------|
|
|
36
|
+
| Daemon (REST + WebSocket) | `http://127.0.0.1:8472` |
|
|
37
|
+
| Dashboard | `http://localhost:3000` |
|
|
38
|
+
|
|
39
|
+
**Prerequisites:** Python 3.11+, Node.js 20+. Graphify ships as a dependency (`graphifyy`).
|
|
40
|
+
|
|
41
|
+
> Want optional LLM-powered extraction (Ollama / OpenAI / Claude)?
|
|
42
|
+
> `pip install loom[llm]` — the base install works without any LLM.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Capabilities
|
|
47
|
+
|
|
48
|
+
- **Multi-agent knowledge graph** — Graphify parses your codebase AST (zero API keys, code-only builds) and builds a per-project graph of files, functions, classes, communities, and execution flows. An optional LLM extraction layer can enrich the graph with semantic edges.
|
|
49
|
+
- **Filesystem inbox protocol** — agents never call an API. They write files into `~/.loom/inbox/<project>/`: `register.json`, `heartbeat.json`, `finding-*.md` (markdown + YAML frontmatter), `decision-*.md` (ADRs), `task-*.json` (dispatched tasks). The daemon watches, processes, and moves each file to `.processed/`.
|
|
50
|
+
- **Next.js dashboard** — interactive graph visualization (reagraph/cytoscape), agent management with live status, a Kanban task board (Todo · Ready · Running · Blocked · Done), project CRUD, knowledge-source discovery, and hybrid search. Bilingual (en/ar) with RTL support.
|
|
51
|
+
- **Task dispatch + worker execution** — dispatch tasks from the dashboard; a `loom worker` process picks up Running tasks, executes them in an isolated **git worktree**, and enforces a per-task USD budget cap. Results flow back as findings.
|
|
52
|
+
- **Hybrid search** — text (FTS) + vector embeddings + graph traversal in a single query path.
|
|
53
|
+
- **Optional LLM backends** — Ollama (default, local), OpenAI, or Anthropic Claude. Install with `pip install loom[llm]`. The base package needs no LLM at all.
|
|
54
|
+
- **MCP server** — `loom-mcp` exposes graph queries and finding ingestion over the Model Context Protocol so any MCP-aware agent can read from and write to Loom OS.
|
|
55
|
+
- **Single-process daemon, zero infrastructure** — no Docker, no Neo4j, no cloud. One Python process (FastAPI + uvicorn) plus the Next.js dashboard. State lives in SQLite (`~/.loom/state.db`).
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Architecture
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Browser :3000 ──▶ ┌──────────────────────────────────┐
|
|
63
|
+
│ Next.js Dashboard │
|
|
64
|
+
└──────────────┬───────────────────┘
|
|
65
|
+
│ REST + WebSocket
|
|
66
|
+
┌─────────────────────────────────┼───────────────────┐
|
|
67
|
+
│ Loom Daemon (Python, :8472) │
|
|
68
|
+
│ │
|
|
69
|
+
│ watcher ──▶ router ──▶ registry / graph_engine ──▶ api
|
|
70
|
+
│ │ │ │
|
|
71
|
+
│ (SQLite) (Graphify CLI subprocess, │
|
|
72
|
+
│ ~/.loom/ graph.json sidecar) │
|
|
73
|
+
│ state.db │
|
|
74
|
+
└───────────────────────────────────────────────────────┘
|
|
75
|
+
▲ ▲ ▲
|
|
76
|
+
│ │ │
|
|
77
|
+
~/.loom/inbox/proj ~/.loom/inbox/proj ~/.loom/inbox/proj
|
|
78
|
+
Claude Code Codex Hermes
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Two processes:**
|
|
82
|
+
|
|
83
|
+
1. **Python daemon** (`daemon/`) — FastAPI + uvicorn on `127.0.0.1:8472`. REST routes plus a single `/ws` WebSocket for live updates. CORS allows `http://localhost:3000`.
|
|
84
|
+
2. **Next.js dashboard** (`dashboard/`) — App Router on `:3000`. Talks to the daemon over REST + WebSocket.
|
|
85
|
+
|
|
86
|
+
**Filesystem protocol.** Agents write files into `~/.loom/inbox/<project>/`. The daemon watches the inbox, dispatches by filename, builds/updates the knowledge graph, and pushes live events to the dashboard.
|
|
87
|
+
|
|
88
|
+
**Daemon module map & data flow:**
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
watcher.py watchdog observer on ~/.loom/inbox (recursive).
|
|
92
|
+
Marshals filesystem events onto the asyncio loop.
|
|
93
|
+
↓
|
|
94
|
+
router.py Dispatches by filename → _handle_register, _handle_heartbeat,
|
|
95
|
+
_handle_finding, _handle_decision, _handle_task.
|
|
96
|
+
Moves processed files to .processed/. Rate-limits graph
|
|
97
|
+
updates (1 / 30s / project). Emits WsEvents to a queue.
|
|
98
|
+
↓
|
|
99
|
+
registry.py AgentRegistry: aiosqlite over ~/.loom/state.db.
|
|
100
|
+
Tables: agents, projects, tasks. CRUD + graph-stat persistence.
|
|
101
|
+
graph_engine.py GraphEngine: build / update / query / stats / topology /
|
|
102
|
+
communities / flows. Invokes `graphify` as a CLI subprocess
|
|
103
|
+
(asyncio.to_thread); reads <project>/graphify-out/graph.json.
|
|
104
|
+
extractors.py Optional LLM extraction layer (injectable backend).
|
|
105
|
+
extracted_store.py Sidecar store for LLM-extracted semantic edges.
|
|
106
|
+
api.py FastAPI routes + WebSocket fan-out.
|
|
107
|
+
mcp_server.py MCP server (loom-mcp entry point).
|
|
108
|
+
worker.py Worker: executes Running tasks in git-worktree isolation.
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## CLI Reference
|
|
114
|
+
|
|
115
|
+
| Command | Description |
|
|
116
|
+
|---------|-------------|
|
|
117
|
+
| `loom start` | Start the daemon (FastAPI + uvicorn on `:8472`) |
|
|
118
|
+
| `loom init --project <name> --project-path <path>` | Bootstrap a project: create inbox + starter `register.json` |
|
|
119
|
+
| `loom register --agent <name> --project <name> --project-path <path>` | Register a coding agent with a project |
|
|
120
|
+
| `loom unregister --agent <name> --project <name>` | Remove an agent from a project |
|
|
121
|
+
| `loom detect-agents` | List coding agents detected on this machine |
|
|
122
|
+
| `loom worker --project <name> --agent <name> --project-path <path>` | Run a worker that executes Running tasks (git worktree isolation, `--max-budget-usd` cap) |
|
|
123
|
+
| `loom-mcp` | Start the MCP server |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Development
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
git clone https://github.com/mohamedhusseinios/Loom-OS.git
|
|
131
|
+
cd Loom-OS
|
|
132
|
+
python3 -m venv .venv && source .venv/bin/activate
|
|
133
|
+
pip install -e ".[dev]"
|
|
134
|
+
|
|
135
|
+
pytest tests/ -v # full test suite (pytest-asyncio)
|
|
136
|
+
bash scripts/smoke-test.sh # end-to-end: daemon + agent + API
|
|
137
|
+
cd dashboard && npm run dev # dashboard hot-reload
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
See the [Development Guide](docs/DEVELOPMENT.md) for project structure, test patterns, and contribution conventions.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Documentation
|
|
145
|
+
|
|
146
|
+
| Guide | Covers |
|
|
147
|
+
|-------|--------|
|
|
148
|
+
| [Architecture](docs/ARCHITECTURE.md) | Two-process design, module map, data flow, design principles |
|
|
149
|
+
| [Filesystem Protocol](docs/FILESYSTEM-PROTOCOL.md) | Full inbox protocol spec — every file type, format, processing rule |
|
|
150
|
+
| [API Reference](docs/API.md) | Complete REST + WebSocket API, all endpoints and event types |
|
|
151
|
+
| [Dashboard Guide](docs/DASHBOARD.md) | Page-by-page tour, tech stack, i18n, component map |
|
|
152
|
+
| [Task Board & Worker](docs/TASK-BOARD.md) | Kanban lifecycle, worker execution model, git worktree isolation |
|
|
153
|
+
| [Agent Lifecycle](docs/AGENT-LIFECYCLE.md) | Registration → contribution → dispatch flow, agent status, shared context |
|
|
154
|
+
| [Development Guide](docs/DEVELOPMENT.md) | Setup, project structure, test suite, daemon patterns, contribution conventions |
|
|
155
|
+
|
|
156
|
+
### Design specs & implementation plans
|
|
157
|
+
|
|
158
|
+
- [Design spec](docs/superpowers/specs/2026-06-25-agentic-os-design.md) — original system design
|
|
159
|
+
- [Dashboard features design](docs/superpowers/specs/2026-06-26-agentic-os-dashboard-features-design.md)
|
|
160
|
+
- [Kanban task board design](docs/superpowers/specs/2026-06-27-agentic-os-kanban-task-board-design.md)
|
|
161
|
+
- [Live task execution design](docs/superpowers/specs/2026-06-27-agentic-os-live-task-execution-design.md)
|
|
162
|
+
- [Multi-agent worker runners design](docs/superpowers/specs/2026-06-28-multi-agent-worker-runners-design.md)
|
|
163
|
+
- [Post-parity roadmap design](docs/superpowers/specs/2026-06-29-loom-post-parity-roadmap-design.md)
|
|
164
|
+
- [Implementation plan](docs/plans/2026-06-25-agentic-os-implementation.md)
|
|
165
|
+
- [Dashboard features plan](docs/plans/2026-06-26-dashboard-features-implementation.md)
|
|
166
|
+
- [Competitor gap-closure roadmap](docs/plans/2026-06-26-competitor-gap-closure-implementation.md)
|
|
167
|
+
- [Live task execution plan](docs/plans/2026-06-27-agentic-os-live-task-execution-implementation.md)
|
|
168
|
+
- [Post-parity roadmap plan](docs/plans/2026-06-29-post-parity-roadmap-implementation.md)
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Brand
|
|
173
|
+
|
|
174
|
+
Monochrome, geometric. **Warp** (an L woven on a loom) is the primary mark; **Lattice** (an L traced through a knowledge graph) is the alternate.
|
|
175
|
+
|
|
176
|
+
| | Warp (primary) | Lattice (alternate) |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| Icon | <img src="docs/branding/loom-icon-warp-256.png" width="64" /> | <img src="docs/branding/loom-icon-lattice-512.png" width="64" /> |
|
|
179
|
+
|
|
180
|
+
- **Ink** `#141414` · **Paper** `#FFFFFF` · greys `#6F6F6F`, `#E5E5E5`
|
|
181
|
+
- **Wordmark** Space Grotesk 600, tracking −3.5%
|
|
182
|
+
- Full asset kit: [`docs/branding/`](docs/branding/README.md)
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## License
|
|
187
|
+
|
|
188
|
+
MIT © Mohamed Hussien
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Loom — unified agent memory fabric."""
|