{"id":50719562,"url":"https://github.com/rob-otix-ai/lexius","last_synced_at":"2026-06-09T22:30:28.434Z","repository":{"id":352480075,"uuid":"1211647182","full_name":"rob-otix-ai/lexius","owner":"rob-otix-ai","description":"AI regulatory compliance tool with provenance-tracked verbatim law. 20 regulations, 2 jurisdictions (EU + Cayman Islands CIMA). 1,456 articles, 8,123 deterministic extracts. No hallucinated numbers. Works with Claude, GPT-4, Ollama, or any model via OpenRouter.","archived":false,"fork":false,"pushed_at":"2026-05-03T14:14:03.000Z","size":843,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T16:14:56.552Z","etag":null,"topics":["ai","cayman-islands","cima","compliance","dora","eu-ai-act","gdpr","legal-tech","mcp","offshore","openrouter","pdf-parsing","provenance","regtech","regulation"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@robotixai/lexius-mcp","language":"TypeScript","has_issues":true,"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/rob-otix-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":null,"dco":null,"cla":null}},"created_at":"2026-04-15T15:50:42.000Z","updated_at":"2026-04-19T19:16:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rob-otix-ai/lexius","commit_stats":null,"previous_names":["rob-otix-ai/lexius"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/rob-otix-ai/lexius","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-otix-ai%2Flexius","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-otix-ai%2Flexius/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-otix-ai%2Flexius/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-otix-ai%2Flexius/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rob-otix-ai","download_url":"https://codeload.github.com/rob-otix-ai/lexius/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-otix-ai%2Flexius/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34129072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ai","cayman-islands","cima","compliance","dora","eu-ai-act","gdpr","legal-tech","mcp","offshore","openrouter","pdf-parsing","provenance","regtech","regulation"],"created_at":"2026-06-09T22:30:26.996Z","updated_at":"2026-06-09T22:30:28.427Z","avatar_url":"https://github.com/rob-otix-ai.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lexius\n\nLegislation-agnostic AI compliance platform with provenance-tracked, deterministic regulatory analysis. Verbatim regulation text from EUR-Lex and offshore PDF sources, deterministic fact extraction, parallel hivemind assessment, and honest provenance labelling on every claim.\n\n20 regulations across 2 jurisdictions — 10 EU (via EUR-Lex CELLAR) and 10 Cayman Islands CIMA (via PDF). Adding a new regulation is two commands — the fetcher, extractor, and swarm handle the rest.\n\n\u003e Lexius provides general regulatory guidance and does not constitute legal advice. For implementation support, consult qualified legal counsel.\n\n## Install\n\n```bash\n# MCP server — connect Claude Desktop to the compliance database\nnpx @robotixai/lexius-mcp\n\n# CLI — query from your terminal\nnpx @robotixai/lexius-cli\n\n# Interactive agent — Claude-powered compliance consultant\nnpx @robotixai/lexius-agent\n\n# Database — schema-ready Postgres with pgvector\ndocker pull robotixai/lexius-db\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/rob-otix-ai/lexius.git\ncd lexius\ncp .env.example .env         # set OPENAI_API_KEY + ANTHROPIC_API_KEY\npnpm setup                   # install → build → DB → migrate → seed → fetch → extract\n```\n\n## Architecture\n\n```\n┌──────────────────────────────────────────────────────────────┐\n│  Consumers                                                    │\n│  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────────┐ ┌────────┐ ┌───────┐ │\n│  │ API │ │ MCP │ │ CLI │ │  Agent  │ │ Skills │ │ Swarm │ │\n│  └──┬──┘ └──┬──┘ └──┬──┘ └────┬────┘ └───┬────┘ └───┬───┘ │\n│     └───────┴───────┴─────────┴───────────┴──────────┘     │\n│                      │                                       │\n│              ┌───────┴───────┐                               │\n│              │     Core      │ use cases + domain             │\n│              │  + Plugins    │ legislation-agnostic            │\n│              └───────┬───────┘                               │\n│                      │                                       │\n│     ┌────────────────┼────────────────┐                      │\n│     │                │                │                      │\n│ ┌───┴───┐    ┌───────┴───────┐  ┌────┴─────┐               │\n│ │Fetcher│    │      DB       │  │Extractor │               │\n│ │CELLAR │    │Postgres+pgvec │  │regex/det │               │\n│ └───────┘    └───────────────┘  └──────────┘               │\n└──────────────────────────────────────────────────────────────┘\n```\n\n## Published Packages\n\n### npm\n\n| Package | Version | Description |\n|---------|---------|-------------|\n| [@robotixai/lexius-api](https://www.npmjs.com/package/@robotixai/lexius-api) | [![npm](https://img.shields.io/npm/v/@robotixai/lexius-api)](https://www.npmjs.com/package/@robotixai/lexius-api) | REST API + SSE MCP server (15 endpoints) |\n| [@robotixai/lexius-mcp](https://www.npmjs.com/package/@robotixai/lexius-mcp) | [![npm](https://img.shields.io/npm/v/@robotixai/lexius-mcp)](https://www.npmjs.com/package/@robotixai/lexius-mcp) | MCP server for Claude Desktop / Claude Code (13 tools, stdio + SSE) |\n| [@robotixai/lexius-cli](https://www.npmjs.com/package/@robotixai/lexius-cli) | [![npm](https://img.shields.io/npm/v/@robotixai/lexius-cli)](https://www.npmjs.com/package/@robotixai/lexius-cli) | Command-line interface (9 commands) |\n| [@robotixai/lexius-agent](https://www.npmjs.com/package/@robotixai/lexius-agent) | [![npm](https://img.shields.io/npm/v/@robotixai/lexius-agent)](https://www.npmjs.com/package/@robotixai/lexius-agent) | Interactive Claude compliance consultant + hivemind swarm |\n| [@robotixai/lexius-fetcher](https://www.npmjs.com/package/@robotixai/lexius-fetcher) | [![npm](https://img.shields.io/npm/v/@robotixai/lexius-fetcher)](https://www.npmjs.com/package/@robotixai/lexius-fetcher) | EUR-Lex CELLAR fetcher + deterministic extractor |\n\n### Docker\n\n| Image | Tag | Description |\n|-------|-----|-------------|\n| [robotixai/lexius-db](https://hub.docker.com/r/robotixai/lexius-db) | 0.1.0 | PostgreSQL 16 + pgvector, schema auto-applied (13 tables, 5 migrations) |\n| [robotixai/lexius-api](https://hub.docker.com/r/robotixai/lexius-api) | 0.3.0 | Express REST API + SSE MCP + swarm (full platform server) |\n| [robotixai/lexius-mcp](https://hub.docker.com/r/robotixai/lexius-mcp) | 0.1.3 | MCP server (node:20-slim, 202MB, self-contained bundle) |\n\n### Workspace Packages (from source)\n\n| Package | Description |\n|---------|-------------|\n| `@lexius/core` | Domain entities, ports, 14 use cases, legislation plugin system |\n| `@lexius/db` | Drizzle schema, 5 migrations (0000-0004), seeds for 10 legislations |\n| `@lexius/infra` | Drizzle repositories + OpenAI embedding service |\n| `@lexius/logger` | Pino logger factory |\n\n## Quick Start\n\n### Zero to running — all via npm + Docker\n\n```bash\n# 1. Start the database (schema auto-applied, no migration needed)\ndocker run -d -p 5432:5432 \\\n  -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \\\n  -e POSTGRES_DB=$POSTGRES_DB \\\n  -e POSTGRES_USER=$POSTGRES_USER \\\n  robotixai/lexius-db\nexport DATABASE_URL=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:5432/$POSTGRES_DB\n\n# 2. Fetch verbatim regulation text from EUR-Lex + run extractor\nnpx @robotixai/lexius-fetcher ingest --celex 32024R1689 --legislation eu-ai-act\nnpx @robotixai/lexius-fetcher ingest --celex 32022R2554 --legislation dora\n\n# 3. Query from the CLI\nnpx @robotixai/lexius-cli legislations\nnpx @robotixai/lexius-cli article 99 --legislation eu-ai-act\n\n# 4. Or run the interactive agent\nexport ANTHROPIC_API_KEY=sk-ant-...\nnpx @robotixai/lexius-agent\n```\n\nNo git clone needed. The Docker image provides the schema; the fetcher populates it from EUR-Lex; the CLI/agent/MCP server query it.\n\n### Docker Compose (full stack)\n\n```bash\n# Set your passwords\nexport POSTGRES_PASSWORD=secret\nexport OPENAI_API_KEY=sk-...\n\n# Start DB + API\ndocker compose -f docker-compose.production.yml up -d\n\n# The API is now at http://localhost:3000\n# MCP proxy mode can point at it:\nLEXIUS_API_URL=http://localhost:3000 LEXIUS_API_KEY=lx_... npx @robotixai/lexius-mcp\n```\n\n### Claude Desktop Integration\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"lexius\": {\n      \"command\": \"npx\",\n      \"args\": [\"@robotixai/lexius-mcp\"],\n      \"env\": {\n        \"DATABASE_URL\": \"postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@localhost:5432/$POSTGRES_DB\"\n      }\n    }\n  }\n}\n```\n\nOr use proxy mode (no local DB needed):\n\n```json\n{\n  \"mcpServers\": {\n    \"lexius\": {\n      \"command\": \"npx\",\n      \"args\": [\"@robotixai/lexius-mcp\"],\n      \"env\": {\n        \"LEXIUS_API_URL\": \"https://your-lexius-instance.example.com\",\n        \"LEXIUS_API_KEY\": \"lx_your_key_here\"\n      }\n    }\n  }\n}\n```\n\n### Docker MCP\n\n```bash\n# Proxy mode\ndocker run -e LEXIUS_API_URL=https://your-lexius-instance.example.com \\\n           -e LEXIUS_API_KEY=lx_... \\\n           robotixai/lexius-mcp\n\n# Direct mode\ndocker run -e DATABASE_URL=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@host:5432/$POSTGRES_DB \\\n           robotixai/lexius-mcp\n```\n\n## Provenance\n\nEvery fact Lexius returns is labelled with its trust level:\n\n| Tier | Meaning | Enforced by |\n|------|---------|-------------|\n| **AUTHORITATIVE** | Verbatim from official source (EUR-Lex CELLAR). SHA-256 hash-verified. | DB CHECK constraint + Specflow PROV-001 |\n| **CURATED** | Written or reviewed by a domain expert. `curated_by` + `reviewed_at` recorded. | DB CHECK constraint + PROV-003 |\n| **AI_GENERATED** | Model output, not expert-reviewed. `generated_by_model` recorded. | DB CHECK constraint |\n\n## Data Pipeline\n\n```\nEUR-Lex CELLAR (XHTML)\n    ↓ fetcher (lexius-fetch ingest --celex 32024R1689 or --source cima)\nArticles table — 1,456 AUTHORITATIVE sections across 20 regulations, hash-verified\n    ↓ extractor (lexius-fetch extract --legislation eu-ai-act)\nArticle Extracts — 8,123+ typed facts (fines EUR/KYD, %, dates, cross-refs, shall-clauses, imprisonment terms)\n    ↓ cross-check (pnpm crosscheck)\nCI fails if curated penalty amounts ≠ extracted values from verbatim law\n    ↓ swarm (POST /api/v1/swarm/run)\nCompliance workspace — 1,882 findings in 2.6s with 4 parallel agents\n    ↓ synthesis\nComplianceReport with relianceByTier breakdown\n```\n\n## Legislations\n\n### EU Regulations (via EUR-Lex CELLAR — XHTML)\n\n| Legislation | CELEX | Articles | Extracts |\n|-------------|-------|----------|----------|\n| GDPR | 32016R0679 | 99 | 637 |\n| EU AI Act | 32024R1689 | 126 | 1,181 |\n| DORA | 32022R2554 | 64 | 554 |\n| Digital Services Act | 32022R2065 | 93 | 699 |\n| Digital Markets Act | 32022R1925 | 54 | 475 |\n| Data Act | 32023R2854 | 50 | 397 |\n| Data Governance Act | 32022R0868 | 38 | 273 |\n| Cyber Resilience Act | 32024R2847 | 79 | 700 |\n| MiCA | 32023R1114 | 155 | 1,672 |\n| eIDAS 2.0 | 32024R1183 | 48 | 335 |\n\n### Cayman Islands CIMA (via PDF)\n\n| Legislation | Sections | Extracts |\n|-------------|----------|----------|\n| Monetary Authority Act (2020 Rev.) | 63 | ~180 |\n| Banks and Trust Companies Act (2025 Rev.) | 29 | ~60 |\n| Mutual Funds Act (2025 Rev.) | 52 | ~140 |\n| Private Funds Act (2025 Rev.) | 33 | ~80 |\n| Securities Investment Business Act (2020 Rev.) | 44 | ~100 |\n| Insurance Act (2010) | 41 | ~80 |\n| Anti-Money Laundering Regulations (2025 Rev.) | 107 | ~250 |\n| Virtual Asset (Service Providers) Act (2024 Rev.) | 41 | ~110 |\n| Proceeds of Crime Act (2024 Rev.) | 205 | ~350 |\n| Beneficial Ownership Transparency Act (2023) | 35 | ~50 |\n\n### Totals\n\n| | Legislations | Sections/Articles | Extracts |\n|---|---|---|---|\n| EU | 10 | 806 | 6,923 |\n| Cayman Islands | 10 | 650 | ~1,200 |\n| **Total** | **20** | **1,456** | **~8,123** |\n\n### Adding a New Regulation\n\n```bash\n# EU regulation (via EUR-Lex CELLAR)\nlexius-fetch ingest --celex \u003cCELEX\u003e --legislation \u003cid\u003e\n\n# Offshore regulation (via PDF)\nlexius-fetch ingest --source pdf --url \u003cpdf-url\u003e --legislation \u003cid\u003e\n\n# All CIMA acts (via registry)\nlexius-fetch ingest --source cima\n\n# Auto-populate derivedFrom on curated rows from cross-references\nlexius-fetch backfill-derivation --legislation \u003cid\u003e --apply\n```\n\n## Hivemind Swarm\n\nParallel compliance analysis via autonomous agents sharing a Postgres workspace (stigmergic communication):\n\n- **Deterministic** — no LLM in the agent loop; same data = same findings\n- **Fast** — 1,882 findings in ~2.6s (4 agents, 126 EU AI Act articles)\n- **Gap detection** — discovers obligations in the law that the curated set misses (701 candidates)\n- **Provenance** — every finding inherits AUTHORITATIVE / CURATED / AI_GENERATED from its source\n\n```bash\n# Via API\ncurl -X POST localhost:3000/api/v1/swarm/run \\\n  -H \"Authorization: Bearer lx_...\" \\\n  -d '{\"legislationId\":\"eu-ai-act\",\"concurrency\":4}'\n\n# Via MCP\n# Tool: legalai_run_swarm_assessment({ legislationId: \"eu-ai-act\" })\n```\n\n## API Endpoints\n\n```\nPOST /api/v1/classify                     Classify an AI system\nGET  /api/v1/obligations                  Obligations by role/risk level\nPOST /api/v1/penalties/calculate          Calculate penalty exposure\nGET  /api/v1/articles/:number             Verbatim article text\nGET  /api/v1/articles/:id/history         Article revision history\nGET  /api/v1/articles/:id/extracts        Extracted facts (fines, dates, cross-refs)\nGET  /api/v1/deadlines                    Compliance deadlines\nGET  /api/v1/obligations/:id/derivation   Trace obligation to source articles\nPOST /api/v1/knowledge/search             Semantic search\nPOST /api/v1/faq/search                   FAQ search\nGET  /api/v1/legislations                 List legislations\nPOST /api/v1/audit                        Full compliance report\nPOST /api/v1/swarm/run                    Start hivemind swarm\nGET  /api/v1/swarm/:sessionId/findings    Query swarm workspace\nPOST /api/v1/swarm/:sessionId/synthesise  Report from swarm findings\nGET  /health                              DB stats + uptime\nGET  /mcp/sse                             Remote MCP via SSE\nGET  /integration-manifest.json           Claude.ai integration manifest\n```\n\nAuth: `Authorization: Bearer lx_...` on all `/api/v1/*` routes. Health + manifest are unauthenticated.\n\n## MCP Tools (13)\n\n| Tool | Description |\n|------|-------------|\n| `legalai_classify_system` | Risk classification (signals + keywords + semantic) |\n| `legalai_get_obligations` | Obligations filtered by role and risk level |\n| `legalai_calculate_penalty` | Penalty calculation with SME rules |\n| `legalai_get_article` | Verbatim article text (AUTHORITATIVE) |\n| `legalai_get_deadlines` | Compliance deadlines with days remaining |\n| `legalai_search_knowledge` | Semantic search across all content |\n| `legalai_answer_question` | FAQ lookup |\n| `legalai_run_assessment` | Structured assessments (Art. 6(3), GPAI) |\n| `legalai_list_legislations` | Available legislations |\n| `legalai_get_article_history` | Article revision history |\n| `legalai_get_derivation_chain` | Obligation → source article trace |\n| `legalai_get_article_extracts` | Deterministically extracted facts |\n| `legalai_run_swarm_assessment` | Parallel hivemind assessment |\n\n## CLI Commands\n\n```bash\nnpx @robotixai/lexius-cli legislations\nnpx @robotixai/lexius-cli classify --legislation eu-ai-act --description \"recruitment AI\" --role provider\nnpx @robotixai/lexius-cli obligations --legislation eu-ai-act --role provider --risk-level high-risk\nnpx @robotixai/lexius-cli penalty --legislation eu-ai-act --violation high-risk-non-compliance --turnover 500000000\nnpx @robotixai/lexius-cli article 99 --legislation eu-ai-act\nnpx @robotixai/lexius-cli deadlines --legislation eu-ai-act\nnpx @robotixai/lexius-cli search \"risk management\" --legislation eu-ai-act --type obligation\nnpx @robotixai/lexius-cli audit --legislation eu-ai-act --description \"recruitment AI\" --role provider\n```\n\n## Contract Enforcement\n\n22 contracts, 64 rules enforced by [Specflow](https://www.npmjs.com/package/@robotixai/specflow-cli):\n\n```bash\nnpx @robotixai/specflow-cli enforce .\n```\n\n| Category | Contracts | Key Rules |\n|----------|-----------|-----------|\n| **Architecture** | `arch_clean_layers`, `arch_package_boundaries`, `arch_legislation_plugins` | Domain has no infra imports; consumers don't cross-import |\n| **Provenance** | `provenance_tiers` | Every entity has `provenance_tier`; fetcher = AUTHORITATIVE only; seeds use helpers |\n| **Extractor** | `extractor_determinism` | Pure/sync modules; no LLM; cross-check exits non-zero on mismatch |\n| **Integration** | `integration_security` | No key hashes in responses; SSE uses auth |\n| **Swarm** | `hivemind_swarm` | No LLM in agent loop; atomic claims; cleanup complete |\n| **Offshore** | `offshore_adapters` | No LLM in PDF parsing; source_format=pdf; section merge; dynamic header detection |\n| **Model Harness** | `model_harness` | No direct SDK imports in agent code; providers don't import domain |\n| **Fetcher** | `fetcher_verbatim` | Records sourceHash + fetchedAt |\n| **Curator** | `curator_audit`, `curator_auth`, `curator_integrity` | Audit atomicity, role-gated routes, AUTHORITATIVE immutable, tier transitions, `If-Match` concurrency, `derivedFrom` anchoring (C-INT-007) |\n| **Audit** | `audit_report_integrity`, `audit_enhancement_layer`, `audit_agent_layer` | GenerateAuditReport is deterministic; enhancement via port |\n| **Security** | `security_secrets`, `security_sql_safety`, `security_input_validation`, `security_no_eval` | No hardcoded creds; parameterised queries; Zod validation |\n| **Quality** | `qa_domain_types` | No `any` in domain layer |\n\n## Testing\n\n```bash\npnpm test                              # All tests\npnpm --filter @lexius/core test        # 183 unit tests\npnpm --filter @lexius/api test         # 36 functional tests\npnpm --filter @lexius/fetcher test     # 78 extractor + parser tests\npnpm crosscheck                        # Penalty cross-check vs verbatim law\nnpx @robotixai/specflow-cli enforce .  # 20 contracts, 45 rules\n```\n\n## Documentation\n\nFull spec documents in `docs/`:\n\n| Type | Count | Index |\n|------|-------|-------|\n| **PRD** (Product Requirements) | 12 | [docs/prd/INDEX.md](docs/prd/INDEX.md) |\n| **ARD** (Architecture Decisions) | 16 | [docs/ard/INDEX.md](docs/ard/INDEX.md) |\n| **DDD** (Domain Design) | 15 | [docs/ddd/INDEX.md](docs/ddd/INDEX.md) |\n\n## Environment Variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `DATABASE_URL` | Yes | PostgreSQL connection string |\n| `OPENAI_API_KEY` | Embeddings | OpenAI API key for semantic search |\n| `ANTHROPIC_API_KEY` | Agent only | Anthropic API key for Claude agent |\n| `DB_PASSWORD` | Docker | PostgreSQL password for docker-compose |\n| `LEXIUS_API_URL` | MCP proxy | Hosted API URL (proxy mode) |\n| `LEXIUS_API_KEY` | MCP proxy | API key for hosted API |\n| `LEXIUS_PROFILE` | Curator | Profile name to load from credentials file (default: `default`) |\n| `LEXIUS_CREDENTIALS_FILE` | Curator | Override path to the credentials file (default: `~/.config/lexius/credentials`) |\n| `LEXIUS_CURATOR_ID` | Curator | Override the curator identity stamped on edits |\n| `LEXIUS_ROLE` | MCP | Force the MCP server role (`reader` or `curator`), bypassing credentials file |\n\n## Curator Workflow\n\nNamed domain experts can edit CURATED-tier facts (obligations in v1) via CLI without a code deploy. Every edit is audited, concurrency-safe, and re-embedded.\n\n```bash\n# 1. Admin generates a curator key\npnpm create-api-key --role curator --owner expert@example.com\n\n# 2. Expert logs in (paste-a-key flow)\nnpx @robotixai/lexius-curate login --key lx_curator_... --url https://lexius.example.com\nnpx @robotixai/lexius-curate whoami\n\n# 3. Expert works: dry-run by default, --apply to commit\nnpx @robotixai/lexius-curate obligations list --stale\nnpx @robotixai/lexius-curate obligations edit eu-ai-act-art-9-provider \\\n  --row-version 3 \\\n  --changes '{\"obligation\":\"Establish and maintain a risk management system\"}' \\\n  --reason \"clarifying per Art. 9(2)\" \\\n  --apply\n\n# 4. View history + revert\nnpx @robotixai/lexius-curate obligations history eu-ai-act-art-9-provider\nnpx @robotixai/lexius-curate revert \u003cedit_id\u003e --reason \"too aggressive\" --apply\n```\n\n**Guarantees (PRD-013 / ARD-017):**\n\n- **Transactional:** row update, audit insert, re-embed all land in one DB transaction.\n- **Concurrency-safe:** `If-Match: \u003crow_version\u003e` required; mismatch returns 409.\n- **Auditable:** every edit writes an append-only `curator_edits` row with editor, source (`cli`/`api`/`mcp`/etc.), reason, old/new values, and row_version before/after.\n- **Anchored:** every CURATED row carries non-empty `derivedFrom` resolving to AUTHORITATIVE articles. No orphan interpretations.\n- **Honest:** curators cannot override mined facts. If an `article_extracts` value is wrong, fix the extractor — don't paper over it with a curator edit.\n- **Staleness-aware:** when the fetcher re-ingests an article with a changed `source_hash`, every CURATED obligation citing that article is flagged `needs_review`. Curators triage via `lexius-curate obligations list --stale`.\n\nSee [PRD-013](docs/prd/PRD-013-curator-workflow.md), [ARD-017](docs/ard/ARD-017-curator-workflow.md), and [DDD-016](docs/ddd/DDD-016-curator-workflow.md) for design detail.\n\n## Tech Stack\n\n- **Runtime:** Node.js 20+ (ESM)\n- **Language:** TypeScript (strict)\n- **Database:** PostgreSQL 16 + pgvector\n- **ORM:** Drizzle\n- **Embeddings:** OpenAI text-embedding-3-small (1536 dimensions)\n- **API:** Express 5\n- **MCP:** @modelcontextprotocol/sdk (stdio + SSE)\n- **CLI:** Commander\n- **Agent:** @anthropic-ai/sdk (Claude, temperature 0)\n- **Bundler:** esbuild\n- **Monorepo:** Turborepo + pnpm workspaces\n- **PDF Parsing:** pdfjs-dist (offshore legislation)\n- **Contracts:** Specflow (20 contracts, 45 rules)\n- **Testing:** Vitest + Supertest (297 tests)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frob-otix-ai%2Flexius","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frob-otix-ai%2Flexius","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frob-otix-ai%2Flexius/lists"}