@ulpi/cli 0.1.5 → 0.1.7

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.
Files changed (109) hide show
  1. package/README.md +143 -214
  2. package/dist/{auth-PN7TMQHV-2W4ICG64.js → auth-FWM7MM4Q-VZC3U2XZ.js} +1 -1
  3. package/dist/{auth-BFFBUJUC.js → auth-HDK7ECJL.js} +2 -1
  4. package/dist/{chunk-RJIRWQJD.js → chunk-3BCW6ABU.js} +402 -142
  5. package/dist/{chunk-L3PWNHSA.js → chunk-3WB5CXH4.js} +180 -5
  6. package/dist/{chunk-K4OVPFY2.js → chunk-4UCJIAOU.js} +2 -2
  7. package/dist/chunk-4XTHZVDS.js +109 -0
  8. package/dist/chunk-4ZPOZULQ.js +6522 -0
  9. package/dist/{chunk-SIAQVRKG.js → chunk-5MI5GIXM.js} +48 -2
  10. package/dist/{chunk-KLEASXUR.js → chunk-6ZL6NXMV.js} +1 -1
  11. package/dist/{chunk-AV5RB3N2.js → chunk-76D3BYJD.js} +48 -0
  12. package/dist/{chunk-DOIKS6C5.js → chunk-AWOSRA5F.js} +1 -1
  13. package/dist/{chunk-UCMT5OKP.js → chunk-BFEKZZHM.js} +274 -57
  14. package/dist/chunk-C7CLUQI6.js +1286 -0
  15. package/dist/{chunk-ELTGWMDE.js → chunk-E3B5NROU.js} +7 -7
  16. package/dist/chunk-EJ7TW77N.js +1418 -0
  17. package/dist/{chunk-P2RESJRN.js → chunk-EWLYVXQ4.js} +2 -2
  18. package/dist/{chunk-6OURRFP7.js → chunk-IV6MWETF.js} +383 -168
  19. package/dist/chunk-IZPJHSPX.js +1478 -0
  20. package/dist/chunk-JLHNLM3C.js +228 -0
  21. package/dist/chunk-PO4NUZUU.js +147 -0
  22. package/dist/chunk-S6ANCSYO.js +1271 -0
  23. package/dist/chunk-SEU7WWNQ.js +1251 -0
  24. package/dist/chunk-SNQ7NAIS.js +453 -0
  25. package/dist/{ulpi-RMMCUAGP-EWYUE7RU.js → chunk-TSLDGT5O.js} +73 -35
  26. package/dist/{chunk-EIWYSP3A.js → chunk-UXHCHOWQ.js} +83 -62
  27. package/dist/chunk-WED4LM5N.js +322 -0
  28. package/dist/chunk-WVOZE25N.js +6757 -0
  29. package/dist/{chunk-5SCG7UYM.js → chunk-XKF4DPUM.js} +7 -7
  30. package/dist/{chunk-74WVVWJ4.js → chunk-YOKL7RB5.js} +184 -15
  31. package/dist/chunk-Z53CAR7G.js +298 -0
  32. package/dist/{ci-JQ56YIKC.js → ci-COZRTPGQ.js} +124 -26
  33. package/dist/cloud-2F3NLVHN.js +274 -0
  34. package/dist/{codemap-HMYBXJL2.js → codemap-XNGMAF3F.js} +37 -37
  35. package/dist/codex-MB5YTMRT.js +132 -0
  36. package/dist/{config-YYWEN7U2.js → config-OOELBYTH.js} +1 -1
  37. package/dist/dist-2BJYR5EI.js +59 -0
  38. package/dist/dist-3EIQTZHT.js +1380 -0
  39. package/dist/{dist-WAMAQVPK.js → dist-4U5L2X2C.js} +2 -2
  40. package/dist/{dist-4XTJ6HLM.js → dist-54KAMNLO.js} +16 -15
  41. package/dist/dist-6M4MZWZW.js +58 -0
  42. package/dist/dist-6X576SU2.js +27 -0
  43. package/dist/dist-7QOEYLFX.js +103 -0
  44. package/dist/dist-AYBGHEDY.js +2541 -0
  45. package/dist/dist-EK45QNEM.js +45 -0
  46. package/dist/{dist-U7ZIJMZD.js → dist-FKFEJRPX.js} +16 -15
  47. package/dist/dist-GTEJUBBT.js +66 -0
  48. package/dist/dist-HA74OKJZ.js +40 -0
  49. package/dist/{dist-XG2GG5SD.js → dist-HU5RZAON.js} +14 -2
  50. package/dist/dist-IYE3OBRB.js +374 -0
  51. package/dist/{dist-7WLLPWWB.js → dist-JLU26AB6.js} +12 -9
  52. package/dist/{dist-6G7JC2RA.js → dist-KUCI6JFE.js} +49 -9
  53. package/dist/dist-NUEMFZFL.js +33 -0
  54. package/dist/{dist-GWGTAHNM.js → dist-NUXMDXZ3.js} +31 -3
  55. package/dist/{dist-5R4RYNQO.js → dist-YCNWHSLN.js} +15 -5
  56. package/dist/{dist-6MFVWIFF.js → dist-YFFG2ZD6.js} +9 -16
  57. package/dist/dist-ZG4OKCSR.js +15 -0
  58. package/dist/doctor-FKYSIHER.js +345 -0
  59. package/dist/{export-import-4A5MWLIA.js → export-import-JFQH4KSJ.js} +1 -1
  60. package/dist/{history-RNUWO4JZ.js → history-UMGQNQQ7.js} +7 -7
  61. package/dist/{hooks-installer-K2JXEBNN.js → hooks-installer-YEYTYA6Q.js} +2 -2
  62. package/dist/index.js +398 -622
  63. package/dist/{init-NQWFZPKO.js → init-TJYW5ROZ.js} +78 -12
  64. package/dist/job-HIDMAFW2.js +376 -0
  65. package/dist/jobs.memory-PLMMSFHB-VBECCTHN.js +33 -0
  66. package/dist/kiro-VMUHDFGK.js +153 -0
  67. package/dist/{launchd-OYXUAVW6.js → launchd-U3MSWBRH.js} +9 -17
  68. package/dist/mcp-PDUD7SGP.js +249 -0
  69. package/dist/mcp-installer-PQU3XOGO.js +259 -0
  70. package/dist/mcp-setup-OA7IB3H3.js +263 -0
  71. package/dist/{memory-D6ZFFCI2.js → memory-ZNAEAK3B.js} +17 -17
  72. package/dist/{ollama-3XCUZMZT-FYKHW4TZ.js → ollama-3XCUZMZT-4JMH6B7P.js} +1 -1
  73. package/dist/{openai-E7G2YAHU-IG33BFYF.js → openai-E7G2YAHU-T3HMBPH7.js} +2 -2
  74. package/dist/portal-JYWVHXDU.js +210 -0
  75. package/dist/prd-Q4J5NVAR.js +408 -0
  76. package/dist/repos-WWZXNN3P.js +271 -0
  77. package/dist/review-integration-RQE4KMAV.js +14 -0
  78. package/dist/{rules-3OFGWHP4.js → rules-Y4VSOY5Y.js} +3 -3
  79. package/dist/run-VPNXEIBY.js +687 -0
  80. package/dist/server-COL4AXKU-P7S7NNF6.js +11 -0
  81. package/dist/server-U7PQ6FTS-MG4MJPTS.js +20 -0
  82. package/dist/{skills-GY2CTPWN.js → skills-QEYU2N27.js} +4 -2
  83. package/dist/start-IJKY5RVT.js +303 -0
  84. package/dist/{status-SE43TIFJ.js → status-BHQYYGAL.js} +2 -2
  85. package/dist/{templates-O2XDKB5R.js → templates-CBRUJ66V.js} +6 -5
  86. package/dist/tui-DP7736EX.js +61 -0
  87. package/dist/ulpi-5EN6JCAS-LFE3WSL4.js +10 -0
  88. package/dist/{uninstall-KWGSGZTI.js → uninstall-BX6FOV77.js} +3 -3
  89. package/dist/{update-QYZA4D23.js → update-AQKTHFVQ.js} +3 -3
  90. package/dist/{version-checker-MVB74DEX.js → version-checker-5L5PUOEX.js} +2 -2
  91. package/package.json +13 -4
  92. package/dist/chunk-26LLDX2T.js +0 -553
  93. package/dist/chunk-DDRLI6JU.js +0 -331
  94. package/dist/chunk-IFATANHR.js +0 -453
  95. package/dist/chunk-JWUUVXIV.js +0 -13694
  96. package/dist/chunk-LD52XG3X.js +0 -4273
  97. package/dist/chunk-MIAQVCFW.js +0 -39
  98. package/dist/chunk-YYZOFYS6.js +0 -415
  99. package/dist/dist-XD4YI27T.js +0 -26
  100. package/dist/mcp-installer-TOYDP77X.js +0 -124
  101. package/dist/projects-COUJP4ZC.js +0 -271
  102. package/dist/review-KMGP2S25.js +0 -152
  103. package/dist/server-USLHY6GH-F4JSXCWA.js +0 -18
  104. package/dist/server-X5P6WH2M-ULZF5WHZ.js +0 -11
  105. package/dist/ui-4SM2SUI6.js +0 -167
  106. package/dist/ui.html +0 -698
  107. /package/dist/skills/{ulpi-generate-guardian → ulpi-generate-guards}/SKILL.md +0 -0
  108. /package/dist/skills/{ulpi-generate-guardian → ulpi-generate-guards}/references/framework-rules.md +0 -0
  109. /package/dist/skills/{ulpi-generate-guardian → ulpi-generate-guards}/references/language-rules.md +0 -0
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # ULPI
2
2
 
3
- **Take control of your AI coding agent.**
3
+ **Your Autonomous Engineering Fleet.**
4
4
 
5
- ULPI sits between you and Claude Code, automatically approving safe operations, blocking dangerous ones, and enforcing your project's rulesso you spend less time clicking "Allow" and more time building.
5
+ Dynamic hooks that govern any AI coding agent in real time. Centralized one-click MCP servers per project. Semantic code search, persistent memory, and a full visual dashboardlocally or in the cloud. Upload a sprint and watch your fleet execute dozens of tasks in parallel.
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/@ulpi/cli.svg)](https://www.npmjs.com/package/@ulpi/cli)
8
8
  [![license](https://img.shields.io/npm/l/@ulpi/cli.svg)](https://opensource.org/licenses/MIT)
@@ -10,309 +10,238 @@ ULPI sits between you and Claude Code, automatically approving safe operations,
10
10
 
11
11
  ---
12
12
 
13
- ## Why ULPI?
14
-
15
- Without ULPI, every Claude Code session is a stream of permission prompts. You click "Allow" for `npm test`. Allow for `git status`. Allow for reading a file. Over and over.
16
-
17
- With ULPI:
18
-
19
- - `npm test` runs automatically — you defined it as safe
20
- - `rm -rf /` gets blocked — before Claude can execute it
21
- - Editing a file requires reading it first — because you set that rule
22
- - Your session history is preserved — decisions, patterns, and context carry over
23
-
24
- You write the rules once. ULPI enforces them every session.
25
-
26
- ---
27
-
28
13
  ## Install
29
14
 
30
15
  ```bash
31
16
  npm install -g @ulpi/cli
32
- ```
33
-
34
- Requires **Node.js 20** or later.
35
-
36
- ## Get Started
37
-
38
- ```bash
39
- cd your-project
40
17
  ulpi init
41
18
  ```
42
19
 
43
- ULPI detects your stack language, framework, package manager, test runner, linter and generates a tailored rules configuration. Hooks are installed into Claude Code automatically.
44
-
45
- Next time you start a Claude Code session, ULPI is active.
46
-
47
- ### Try it without installing
48
-
49
- ```bash
50
- npx @ulpi/cli init
51
- ```
20
+ Requires **Node.js 20+**. `init` detects your stack, generates rules with AI, installs hooks, starts the daemon, and registers your project. Use `--no-ai` for template-only generation, or `--model=<id>` to pick a specific model.
52
21
 
53
22
  ---
54
23
 
55
- ## Features
56
-
57
- ### Automatic Permissions
58
-
59
- Stop clicking "Allow" for every safe command. Define what's safe once, and ULPI handles the rest.
60
-
61
- ```yaml
62
- permissions:
63
- auto-approve-tests:
64
- trigger: PermissionRequest
65
- matcher: Bash
66
- command_pattern: "npm test|pnpm test|yarn test"
67
- decision: allow
68
-
69
- auto-approve-git-read:
70
- trigger: PermissionRequest
71
- matcher: Bash
72
- command_pattern: "git (status|log|diff|branch)"
73
- decision: allow
74
- ```
75
-
76
- ### Guardrails
77
-
78
- Block destructive operations before they execute. ULPI ships with built-in protection against `rm -rf`, `git push --force`, `DROP TABLE`, and more — plus you can add your own.
79
-
80
- ### Preconditions
81
-
82
- Enforce good practices automatically. Require files to be read before editing. Require tests to pass before committing. Require linting before pushing.
83
-
84
- ```yaml
85
- preconditions:
86
- read-before-edit:
87
- trigger: PreToolUse
88
- matcher: "Write|Edit"
89
- message: "Read the file before editing it."
90
- requires_read: true
91
-
92
- test-before-commit:
93
- trigger: PreToolUse
94
- matcher: Bash
95
- command_pattern: "git commit"
96
- message: "Run tests before committing."
97
- requires:
98
- tests_run: true
99
- ```
100
-
101
- ### Pipelines
24
+ ## Commands
102
25
 
103
- Chain multiple steps into automated workflows that run after tool execution.
26
+ ### Core
104
27
 
105
- ```yaml
106
- pipelines:
107
- pre-commit-checks:
108
- trigger: PostToolUse
109
- matcher: Bash
110
- command_pattern: "git commit"
111
- steps:
112
- - name: build
113
- command: "pnpm -r build"
114
- - name: test
115
- command: "pnpm test"
116
- block_on_failure: true
117
- ```
28
+ | Command | What it does |
29
+ |---------|-------------|
30
+ | `ulpi init` | Detect stack, generate guards, install hooks |
31
+ | `ulpi start` | Start ULPI daemon (API server + codemap watcher + portal) |
32
+ | `ulpi run` | Start execution engine loop (`--prd`, `--agent`, `--tasks`) |
118
33
 
119
- ### Session Tracking
34
+ ### Management
120
35
 
121
- ULPI tracks every action in real time — files read and written, commands executed, rules enforced, tests passed or failed. Session state powers smarter rule evaluation and feeds into history, memory, and the web dashboard.
36
+ | Command | What it does |
37
+ |---------|-------------|
38
+ | `ulpi repos` | Manage registered repos (list/add/remove/default) |
39
+ | `ulpi rules` | List, add, enable, disable, or validate rules |
40
+ | `ulpi templates` | Browse, apply, save, export, or import templates |
41
+ | `ulpi skills` | List, add, get, or attach skills |
42
+ | `ulpi config` | Manage settings and API keys |
43
+ | `ulpi prd` | PRD management (create/convert/show) |
44
+ | `ulpi job` | Manage execution jobs (create/list/status/cancel/logs) |
122
45
 
123
- Each session follows a state machine (`idle` -> `active` -> `active_committed` -> `ended`) and logs up to 10,000 events as an append-only JSONL file.
46
+ ### Monitoring
124
47
 
125
- ### Web Dashboard
48
+ | Command | What it does |
49
+ |---------|-------------|
50
+ | `ulpi status` | Show current session state |
51
+ | `ulpi log` | View activity log |
52
+ | `ulpi history` | Shadow branch history (init/capture/list/show/enrich/backfill) |
53
+ | `ulpi tui` | Terminal UI client (connects to daemon) |
54
+ | `ulpi portal` | Start Portal dashboard in local mode |
55
+ | `ulpi doctor` | System health check (agents, MCP, hooks, intelligence) |
126
56
 
127
- A full web UI for managing rules, monitoring live sessions, reviewing plans and code, and browsing history.
57
+ ### Data & Intelligence
128
58
 
129
- ```bash
130
- ulpi ui
131
- ```
59
+ | Command | What it does |
60
+ |---------|-------------|
61
+ | `ulpi codemap` | Semantic code indexing (init/search/status/reindex/watch) |
62
+ | `ulpi memory` | Agent memory (init/search/remember/status/export/import) |
63
+ | `ulpi mcp` | MCP management (gateway/list/add/remove/enable/disable/catalog/setup) |
64
+ | `ulpi cloud` | Connect to Cloud MCP Gateway (connect/status/disconnect) |
132
65
 
133
- The dashboard shows:
66
+ ### Agent Integrations
134
67
 
135
- - **Guards** Active rule counts, enforcement stats, rule breakdown by type
136
- - **Session** — Live session state with real-time event timeline (WebSocket)
137
- - **Review** Pending plan and code reviews
138
- - **CodeMap** Index status, file and chunk counts
139
- - **Memory** — Memory count, classified sessions, importance breakdown
140
- - **History** — Captured entries with AI enrichment status
141
- - **Skills** — Available bundled, project, and global skills
142
- - **Responses** — Notification channel configuration
68
+ | Command | What it does |
69
+ |---------|-------------|
70
+ | `ulpi kiro` | Manage Kiro CLI integration (install/convert/uninstall/status) |
71
+ | `ulpi codex` | Manage Codex CLI integration (install/convert/uninstall/status) |
143
72
 
144
- ### Plan & Code Review
73
+ ### Utility
145
74
 
146
- Review AI-generated plans and code changes in a browser-based UI before they execute.
75
+ | Command | What it does |
76
+ |---------|-------------|
77
+ | `ulpi export` | Export rules configuration |
78
+ | `ulpi import` | Import rules configuration |
79
+ | `ulpi update` | Check for and install updates |
80
+ | `ulpi ci` | Run in CI/PR worker mode (used inside worker containers) |
81
+ | `ulpi auth` | Manage AI agent credentials for CI workers |
82
+ | `ulpi uninstall` | Remove hooks and ULPI from a project |
147
83
 
148
- **Plan review** intercepts `ExitPlanMode` the plan is parsed into sections, scored across 8 quality dimensions (test coverage, error handling, rollback strategy, scope clarity, and more), and presented for your review. You can annotate sections, assign priorities and risk levels, add per-section instructions, or make inline edits. Approve or deny with feedback that goes directly back to the agent.
84
+ Run `ulpi --help` for the full list, or use `-p <project>` to target a specific registered project.
149
85
 
150
- **Code review** intercepts `git commit` — the staged diff and commit message are shown for review with line-level annotation tools.
86
+ ---
151
87
 
152
- Both flows use long-poll HTTP transport with a 10-minute timeout. If the server isn't running, the agent continues normally (fail-open).
88
+ ## Five Pillars
153
89
 
154
- ### Semantic Code Search (CodeMap)
90
+ ### Govern
155
91
 
156
- ULPI indexes your entire codebase using hybrid vector + BM25 search with AST-aware chunking. The agent gets smarter search than grep it understands code semantics, symbol names, and file context.
92
+ Define what your AI agent can and cannot do. Four rule types — preconditions, permissions, postconditions, and pipelines — work together for layered enforcement. 28 bundled templates auto-selected for your detected stack. Auto-approve safe operations, block dangerous commands, enforce read-before-write. Session-aware tracks reads, writes, tests, and lints across the entire session. Fail-open — if ULPI errors, your agent continues unblocked.
157
93
 
158
- - **AST chunking** aligns chunks to function and class boundaries
159
- - **Symbol extraction** identifies functions, classes, interfaces, and types
160
- - **Hybrid ranking** fuses vector similarity (60%), keyword matching (25%), symbol boost (10%), and path relevance (5%)
161
- - **Incremental indexing** — only re-indexes changed files
162
- - **Per-branch indexes** — each git branch gets its own index
163
- - **Shadow branch export** — share indexes across machines via git
94
+ ### Understand
164
95
 
165
- Exposed to Claude Code as MCP tools: `search_code`, `search_symbols`, `get_file_summary`, `get_index_stats`, and `reindex`.
96
+ Your agent understands your entire codebase. CodeMap provides hybrid vector + BM25 semantic search with AST-aware chunking. DepGraph uses tree-sitter entity mapping across 35 languages to build dependency graphs with PageRank importance ranking, cycle detection, and coupling metrics. 18 MCP tools exposed directly to your agent. Stack detection with 10 detectors: runtime, language, framework, package manager, formatter, linter, test runner, ORM, git workflow, features.
166
97
 
167
- ```bash
168
- ulpi codemap init # Index your codebase
169
- ulpi codemap search "authentication middleware"
170
- ```
171
-
172
- ### Agent Memory
98
+ ### Remember
173
99
 
174
- Your AI agent builds institutional knowledge across sessions instead of starting fresh every conversation.
100
+ Your agent learns from every session instead of starting fresh. ULPI captures session events, classifies them with an LLM into 8 memory types — decisions, patterns, bug root causes, preferences, constraints, context, lessons, and relationships — then stores them with vector embeddings for semantic search. Relevant memories are surfaced automatically at the start of each new session. Deduplication, importance-weighted ranking, and redaction of secrets.
175
101
 
176
- ULPI captures session events, classifies them with an LLM into 8 memory types — **decisions**, **patterns**, **bug root causes**, **preferences**, **constraints**, **context**, **lessons**, and **relationships** — then stores them with vector embeddings for semantic search.
102
+ ### Record
177
103
 
178
- At the start of each session, the most relevant memories are surfaced to the agent automatically.
104
+ Complete audit trail of every AI action. Per-user shadow git branches (`ulpi/history-<user>`) store structured records without touching your working tree. Commit diffs, session analytics, metadata, full transcripts, and AI enrichment (summary, intent, challenges, learnings, recommendations). No database — everything lives in git and travels with your repo.
179
105
 
180
- - **Deduplication** — new memories are compared against existing ones (0.92 similarity threshold) to prevent redundancy
181
- - **Importance-weighted ranking** — critical memories never decay; low-importance ones fade over time
182
- - **Redaction** — API keys, tokens, and secrets are stripped before storage
183
- - **Soft delete** — memories can be superseded rather than permanently removed
106
+ ### Orchestrate
184
107
 
185
- Exposed as MCP tools: `search_memory`, `save_memory`, `get_timeline`, `get_session_context`, `forget`, and `memory_stats`.
108
+ From PRD to production. The execution engine (`ulpi run`) parses a PRD into structured tasks, builds a dependency graph, schedules parallel work across multiple agents, and auto-commits results. 6 agent adapters, 5 task trackers, configurable retries, branch management, and team delegation.
186
109
 
187
110
  ```bash
188
- ulpi memory search "authentication approach"
189
- ulpi memory status
111
+ ulpi run --prd feature.md --agent claude --auto-commit
112
+ ulpi run --tracker jira --agent gemini --branch feat/new-feature
113
+ ulpi run --tasks tasks.json --agent claude --parallel
190
114
  ```
191
115
 
192
- ### Session History
193
-
194
- Every coding session is recorded on a per-user orphan git branch (`ulpi/history-<username>`) — separate from your code, never touching your working tree.
116
+ ---
195
117
 
196
- Each commit gets a structured JSON entry with:
118
+ ## Supported Agents
197
119
 
198
- - Git metadata (SHA, message, author, branch, parents)
199
- - Diff statistics (files changed, insertions, deletions, per-file breakdown)
200
- - Session summary (files read/written, commands run, rules enforced)
201
- - Hook-derived analytics (rule evaluations, permission decisions, tool usage)
202
- - AI enrichment (summary, intent, challenges, learnings, recommendations)
203
- - Review plan snapshots and session transcripts
120
+ | Agent | Hook Support | MCP Support | Execution Engine |
121
+ |-------|-------------|-------------|-----------------|
122
+ | Claude Code | Full (7 hooks) | Full (18 tools) | `--agent claude` |
123
+ | Gemini CLI | Full (7 hooks) | Full (18 tools) | `--agent gemini` |
124
+ | OpenCode | Full (7 hooks) | Full (18 tools) | `--agent opencode` |
125
+ | Kiro CLI | Full (4 hooks) | Full (18 tools) | `--agent kiro` |
126
+ | Codex | Prompt governance | Full (18 tools) | `--agent codex` |
127
+ | Factory Droid | MCP only | Full (18 tools) | `--agent factory-droid` |
204
128
 
205
129
  ```bash
206
- ulpi history init # Create the history branch
207
- ulpi history list # Browse captured sessions
208
- ulpi history enrich --all # AI-enrich all entries
130
+ ulpi kiro install # Install ULPI governance for Kiro CLI
131
+ ulpi codex install # Install ULPI governance for Codex CLI
132
+ ulpi doctor # Check which agents are installed and configured
209
133
  ```
210
134
 
211
- ### Notifications
212
-
213
- Route events to desktop notifications, webhooks, terminal bells, or log files based on classification rules. Built-in deduplication prevents notification storms.
214
-
215
- ### Templates & Skills
135
+ ---
216
136
 
217
- ULPI ships with **28 built-in templates** for popular stacks — Node.js, Python, Go, Rust, Next.js, Express, Laravel, Django, FastAPI, Prisma, Docker, and more.
137
+ ## MCP Integration
218
138
 
219
- **Skills** are injectable markdown guides that ULPI attaches to blocked tool messages teaching the agent how to fix the issue instead of just blocking it.
139
+ - **18 MCP tools**CodeMap (12 tools) and Memory (6 tools) exposed via stdio transport
140
+ - **MCP gateway** — multiplexing proxy that aggregates third-party MCP backends through a single connection
141
+ - **MCP catalog** — curated registry of MCP server definitions installable with one command
142
+ - **Per-repo MCP** — enable or disable specific MCP servers per repository
143
+ - **Hot reload** — automatic tool list updates when MCP configuration changes
144
+ - **Crash recovery** — automatic backend restart on failure
220
145
 
221
146
  ```bash
222
- ulpi templates list
223
- ulpi skills list
147
+ ulpi mcp catalog # Browse available MCP servers
148
+ ulpi mcp add <server> # Add an MCP server
149
+ ulpi mcp setup # Auto-configure MCP connections
150
+ ulpi mcp gateway # Start MCP gateway
224
151
  ```
225
152
 
226
153
  ---
227
154
 
228
155
  ## Configuration
229
156
 
230
- Rules live in `.ulpi/guards.yml` at your project root:
157
+ Rules live in `.ulpi/guards.yml` plain YAML, auto-generated based on your stack:
231
158
 
232
159
  ```yaml
233
- project:
234
- name: my-app
235
- runtime: node
236
- package_manager: pnpm
237
- test_command: pnpm test
238
-
239
160
  preconditions:
240
- read-before-edit:
241
- trigger: PreToolUse
161
+ read-before-write:
242
162
  matcher: "Write|Edit"
243
- message: "Read the file before editing it."
244
163
  requires_read: true
164
+ message: "Read the file before editing it."
245
165
 
246
166
  permissions:
247
167
  auto-approve-tests:
248
- trigger: PermissionRequest
249
168
  matcher: Bash
250
169
  command_pattern: "pnpm test"
251
170
  decision: allow
252
171
 
253
- auto-approve-git-read:
254
- trigger: PermissionRequest
255
- matcher: Bash
256
- command_pattern: "git (status|log|diff|branch)"
257
- decision: allow
172
+ postconditions:
173
+ run-tests-after-edit:
174
+ matcher: "Write|Edit"
175
+ file_pattern: "src/**/*.ts"
176
+ command: "pnpm test"
258
177
 
259
- review:
260
- enabled: true
261
- plan_review: true
262
- code_review: true
263
- auto_open_browser: true
178
+ pipelines:
179
+ pre-commit-checks:
180
+ matcher: Bash
181
+ command_pattern: "git commit"
182
+ steps:
183
+ - name: build
184
+ command: "pnpm -r build"
185
+ - name: test
186
+ command: "pnpm test"
264
187
  ```
265
188
 
266
189
  ---
267
190
 
268
- ## Commands
191
+ ## Interfaces
269
192
 
270
- | Command | Description |
271
- |---------|-------------|
272
- | `ulpi init` | Detect your stack and install hooks |
273
- | `ulpi rules` | Manage rules (list, add, enable, disable, validate) |
274
- | `ulpi templates` | Browse and apply rule templates |
275
- | `ulpi skills` | Manage injectable skills |
276
- | `ulpi status` | Show current session state |
277
- | `ulpi log` | View activity log |
278
- | `ulpi ui` | Launch web dashboard |
279
- | `ulpi projects` | Manage multiple projects |
280
- | `ulpi history` | Browse session history |
281
- | `ulpi review` | Plan and code review management |
282
- | `ulpi codemap` | Semantic code search and indexing |
283
- | `ulpi memory` | Agent memory management |
284
- | `ulpi config` | View and update settings |
285
- | `ulpi update` | Check for and install updates |
286
- | `ulpi export` | Export your rules configuration |
287
- | `ulpi import` | Import a rules configuration |
288
- | `ulpi uninstall` | Remove ULPI hooks from project |
193
+ - **Portal** Next.js dashboard for rules, sessions, code search, memory, history, review, and execution monitoring (`ulpi start` or `ulpi portal`)
194
+ - **Terminal UI** — ink-based TUI client for live session monitoring (`ulpi tui`)
195
+ - **REST API** modular HTTP server with WebSocket for live updates and SSE for event streaming
196
+ - **macOS LaunchAgent** automatic background startup for daemon and codemap watcher
289
197
 
290
198
  ---
291
199
 
292
200
  ## How It Works
293
201
 
294
- ULPI uses [Claude Code hooks](https://docs.anthropic.com/en/docs/claude-code/hooks) — lifecycle events that fire before and after every tool execution.
295
-
296
- Seven hooks intercept the full session lifecycle:
202
+ ULPI uses hook protocols — lifecycle events that fire before and after every tool execution in your AI agent.
297
203
 
298
204
  | Hook | When | What ULPI Does |
299
205
  |------|------|----------------|
300
- | **SessionStart** | Claude Code session begins | Detect stack, capture branch/HEAD, surface memories, import CodeMap index |
301
- | **PreToolUse** | Before any tool runs | Evaluate preconditions, block dangerous commands, intercept git commits for code review |
302
- | **PostToolUse** | After a tool completes | Track files/commands, run postconditions, capture history on new commits, export CodeMap on git push |
303
- | **PermissionRequest** | Tool needs approval | Auto-approve or deny based on rules, intercept ExitPlanMode for plan review |
206
+ | **SessionStart** | Agent session begins | Detect stack, capture branch/HEAD, surface memories, import CodeMap index |
207
+ | **PreToolUse** | Before any tool runs | Evaluate preconditions, block dangerous commands |
208
+ | **PostToolUse** | After a tool completes | Track files/commands, run postconditions, capture history on new commits |
209
+ | **PermissionRequest** | Tool needs approval | Auto-approve or deny based on rules, plan review on ExitPlanMode |
304
210
  | **Notification** | Event notification | Classify and route to desktop, webhook, terminal, or log channels |
305
211
  | **Stop** | Session stopping | Final checks (warn about missing tests/lint) |
306
212
  | **SessionEnd** | Session complete | Persist summary, capture commits to history, classify memories, export indexes |
307
213
 
308
- If ULPI ever encounters an error, it fails open — Claude Code continues normally. Your agent is never blocked by a bug in ULPI.
214
+ If ULPI ever encounters an error, it fails open — your AI agent continues normally.
215
+
216
+ ---
217
+
218
+ ## Embedding Providers
219
+
220
+ | Provider | Setup | Cost | Data |
221
+ |----------|-------|------|------|
222
+ | **ULPI Cloud** (recommended) | No setup, use `ULPI_API_KEY` | Free tier included | Sent to ULPI servers |
223
+ | **Ollama** | Install Ollama locally | Free | Stays on your machine |
224
+ | **OpenAI** | Use your `OPENAI_API_KEY` | Per-token pricing | Sent to OpenAI |
225
+
226
+ Configure via `ulpi config set embedding.provider <ulpi|ollama|openai>`.
227
+
228
+ ---
229
+
230
+ ## Cloud
231
+
232
+ Upload a sprint with dozens of tasks — or import directly from Jira. ULPI Cloud spawns isolated Docker workers, each with a full AI agent, to execute them in parallel. GitHub webhooks trigger automated code review on PRs. Per-org quotas, member roles, API keys, and audit logs.
233
+
234
+ ```bash
235
+ ulpi cloud connect # Connect to ULPI Cloud
236
+ ulpi cloud status # Check connection status
237
+ ```
309
238
 
310
239
  ---
311
240
 
312
241
  ## Requirements
313
242
 
314
243
  - **Node.js** >= 20
315
- - **Claude Code** with [hooks support](https://docs.anthropic.com/en/docs/claude-code/hooks)
244
+ - An AI coding agent: Claude Code, Gemini CLI, OpenCode, Kiro, Codex, or Factory Droid
316
245
 
317
246
  ## License
318
247
 
@@ -4,7 +4,7 @@ import {
4
4
  setApiSecret,
5
5
  validateAuth,
6
6
  validateLoopback
7
- } from "./chunk-MIAQVCFW.js";
7
+ } from "./chunk-Z53CAR7G.js";
8
8
  import "./chunk-4VNS5WPM.js";
9
9
  export {
10
10
  generateApiSecret,
@@ -2,7 +2,8 @@ import {
2
2
  extractCredentials,
3
3
  getCredentialExpiry,
4
4
  validateCredentials
5
- } from "./chunk-AV5RB3N2.js";
5
+ } from "./chunk-76D3BYJD.js";
6
+ import "./chunk-KIKPIH6N.js";
6
7
  import "./chunk-4VNS5WPM.js";
7
8
 
8
9
  // src/commands/auth.ts