{"id":48565410,"url":"https://github.com/ghuntley/loom","last_synced_at":"2026-04-23T12:00:55.475Z","repository":{"id":332774409,"uuid":"1118826815","full_name":"ghuntley/loom","owner":"ghuntley","description":"if your name is not Geoffrey Huntley then do not use loom","archived":false,"fork":false,"pushed_at":"2026-03-11T00:19:33.000Z","size":10454,"stargazers_count":1260,"open_issues_count":15,"forks_count":212,"subscribers_count":47,"default_branch":"trunk","last_synced_at":"2026-04-05T12:29:06.090Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ghuntley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"ghuntley"}},"created_at":"2025-12-18T10:34:50.000Z","updated_at":"2026-04-04T22:45:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ghuntley/loom","commit_stats":null,"previous_names":["ghuntley/loom"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ghuntley/loom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghuntley%2Floom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghuntley%2Floom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghuntley%2Floom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghuntley%2Floom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ghuntley","download_url":"https://codeload.github.com/ghuntley/loom/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghuntley%2Floom/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32179387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T11:42:27.955Z","status":"ssl_error","status_checked_at":"2026-04-23T11:42:18.877Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-08T13:00:22.271Z","updated_at":"2026-04-23T12:00:55.470Z","avatar_url":"https://github.com/ghuntley.png","language":"Rust","funding_links":["https://github.com/sponsors/ghuntley"],"categories":["Multi-Agent Swarms","Harnesses \u0026 orchestration"],"sub_categories":["Orchestrators \u0026 autonomous loops"],"readme":"\u003c!--\n Copyright (c) 2025 Geoffrey Huntley \u003cghuntley@ghuntley.com\u003e. All rights reserved.\n SPDX-License-Identifier: Proprietary\n--\u003e\n\n# Loom\n\n\u003e [!CAUTION]\n\u003e **Loom is a research project. If your name is not Geoffrey Huntley then do not use.**\n\u003e\n\u003e This software is experimental, unstable, and under active development. APIs will change without notice. Features may be incomplete or broken. There is no support, no documentation guarantees, and no warranty of any kind. Use at your own risk.\n\n## Overview\n\nLoom is an AI-powered coding agent built in Rust. It provides a REPL interface for interacting with LLM-powered agents that can execute tools to perform file system operations, code analysis, and other development tasks.\n\nThe system is designed around three core principles:\n\n1. **Modularity** - Clean separation between core abstractions, LLM providers, and tools\n2. **Extensibility** - Easy addition of new LLM providers and tools via trait implementations\n3. **Reliability** - Robust error handling with retry mechanisms and structured logging\n\n## Architecture\n\nLoom is organized as a Cargo workspace with 30+ crates:\n\n```\nloom/\n├── crates/\n│   ├── loom-core/           # Core abstractions, state machine, types\n│   ├── loom-server/         # HTTP API server with LLM proxy\n│   ├── loom-cli/            # Command-line interface\n│   ├── loom-thread/         # Conversation persistence and sync\n│   ├── loom-tools/          # Agent tool implementations\n│   ├── loom-llm-*/          # LLM provider integrations\n│   ├── loom-auth*/          # Authentication and authorization\n│   ├── loom-tui-*/          # Terminal UI components\n│   └── ...                  # Many more specialized crates\n├── web/\n│   └── loom-web/            # Svelte 5 web frontend\n├── specs/                   # Design specifications\n└── infra/                   # Nix/K8s infrastructure\n```\n\n### Key Components\n\n| Component | Description |\n|-----------|-------------|\n| **Core Agent** | State machine for conversation flow and tool orchestration |\n| **LLM Proxy** | Server-side proxy architecture - API keys never leave the server |\n| **Tool System** | Registry and execution framework for agent capabilities |\n| **Weaver** | Remote execution environments via Kubernetes pods |\n| **Thread System** | Conversation persistence with FTS5 search |\n| **Analytics** | PostHog-style product analytics with identity resolution |\n| **Auth** | OAuth, magic links, ABAC authorization |\n| **Feature Flags** | Runtime feature toggles, experiments, and kill switches |\n\n### Server-Side LLM Proxy\n\nLoom uses a server-side proxy architecture for all LLM interactions:\n\n```\n┌─────────────┐      HTTP       ┌─────────────┐     Provider API    ┌─────────────┐\n│  loom-cli   │ ───────────────▶│ loom-server │ ──────────────────▶ │  Anthropic  │\n│             │ /proxy/{provider}│             │                     │   OpenAI    │\n│ ProxyLlm-   │  /complete      │  LlmService │                     │    etc.     │\n│ Client      │  /stream        │             │                     │             │\n└─────────────┘ ◀─────────────  └─────────────┘ ◀────────────────── └─────────────┘\n                  SSE stream                        SSE stream\n```\n\nAPI keys are stored server-side only. Clients communicate through the proxy.\n\n## Building\n\n### With Nix (Preferred)\n\nUses cargo2nix for reproducible builds with per-crate caching:\n\n```bash\n# Build CLI\nnix build .#loom-cli-c2n\n\n# Build server\nnix build .#loom-server-c2n\n\n# Build any crate\nnix build .#\u003ccrate-name\u003e-c2n\n```\n\n### With Cargo (Development)\n\n```bash\n# Build everything\ncargo build --workspace\n\n# Run tests\ncargo test --workspace\n\n# Lint\ncargo clippy --workspace -- -D warnings\n\n# Format\ncargo fmt --all\n\n# Full check\nmake check\n```\n\n## Specifications\n\nDesign documentation lives in `specs/`. See `specs/README.md` for a complete index organized by category:\n\n- Core Architecture\n- LLM Integration\n- Configuration \u0026 Security\n- Analytics \u0026 Experimentation\n- Editor Integration\n- Remote Execution (Weaver)\n- And more...\n\n## License\n\nProprietary. Copyright (c) 2025 Geoffrey Huntley. All rights reserved.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghuntley%2Floom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fghuntley%2Floom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghuntley%2Floom/lists"}