@anhlp/alp 0.0.0-beta.1

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 (175) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +416 -0
  4. package/dist/THIRD-PARTY-NOTICES.txt +626 -0
  5. package/dist/acp.js +19723 -0
  6. package/dist/alpd.js +41053 -0
  7. package/docs/modular-monorepo.md +210 -0
  8. package/package.json +126 -0
  9. package/packages/cli/README.md +7 -0
  10. package/packages/cli/dist/THIRD-PARTY-NOTICES.txt +626 -0
  11. package/packages/cli/dist/acp/agent.d.ts +29 -0
  12. package/packages/cli/dist/acp/agent.js +390 -0
  13. package/packages/cli/dist/acp/main.d.ts +4 -0
  14. package/packages/cli/dist/acp/main.js +23 -0
  15. package/packages/cli/dist/acp.js +19723 -0
  16. package/packages/cli/dist/alpd.js +41053 -0
  17. package/packages/cli/dist/backup.d.ts +4 -0
  18. package/packages/cli/dist/backup.js +146 -0
  19. package/packages/cli/dist/build-manifest.json +139 -0
  20. package/packages/cli/dist/cli.d.ts +2 -0
  21. package/packages/cli/dist/cli.js +24 -0
  22. package/packages/cli/dist/daemon.d.ts +35 -0
  23. package/packages/cli/dist/daemon.js +122 -0
  24. package/packages/cli/dist/index.d.ts +1 -0
  25. package/packages/cli/dist/index.js +5 -0
  26. package/packages/cli/dist/interfaces.d.ts +16 -0
  27. package/packages/cli/dist/interfaces.js +96 -0
  28. package/packages/cli/dist/library.d.ts +140 -0
  29. package/packages/cli/dist/library.js +319 -0
  30. package/packages/cli/dist/paths.d.ts +3 -0
  31. package/packages/cli/dist/paths.js +18 -0
  32. package/packages/cli/dist/projects.d.ts +9 -0
  33. package/packages/cli/dist/projects.js +159 -0
  34. package/packages/cli/dist/sessions.d.ts +39 -0
  35. package/packages/cli/dist/sessions.js +425 -0
  36. package/packages/cli/dist/tasks.d.ts +29 -0
  37. package/packages/cli/dist/tasks.js +345 -0
  38. package/packages/cli/dist/usage.d.ts +3 -0
  39. package/packages/cli/dist/usage.js +72 -0
  40. package/packages/client/README.md +24 -0
  41. package/packages/client/dist/acp-probe.d.ts +44 -0
  42. package/packages/client/dist/acp-probe.js +37 -0
  43. package/packages/client/dist/antigravity-probe.d.ts +34 -0
  44. package/packages/client/dist/antigravity-probe.js +95 -0
  45. package/packages/client/dist/command.d.ts +5 -0
  46. package/packages/client/dist/command.js +33 -0
  47. package/packages/client/dist/doctor.d.ts +13 -0
  48. package/packages/client/dist/doctor.js +587 -0
  49. package/packages/client/dist/index.d.ts +101 -0
  50. package/packages/client/dist/index.js +422 -0
  51. package/packages/client/dist/ipc.d.ts +42 -0
  52. package/packages/client/dist/ipc.js +69 -0
  53. package/packages/client/dist/library-test.d.ts +94 -0
  54. package/packages/client/dist/library-test.js +37 -0
  55. package/packages/client/dist/mcp-probe.d.ts +24 -0
  56. package/packages/client/dist/mcp-probe.js +147 -0
  57. package/packages/client/dist/portable.d.ts +18 -0
  58. package/packages/client/dist/portable.js +27 -0
  59. package/packages/client/dist/prompt.d.ts +32 -0
  60. package/packages/client/dist/prompt.js +59 -0
  61. package/packages/client/dist/render.d.ts +6 -0
  62. package/packages/client/dist/render.js +120 -0
  63. package/packages/client/dist/rpc/client.d.ts +82 -0
  64. package/packages/client/dist/rpc/client.js +292 -0
  65. package/packages/client/dist/rpc/errors.d.ts +42 -0
  66. package/packages/client/dist/rpc/errors.js +34 -0
  67. package/packages/client/dist/rpc/framing.d.ts +21 -0
  68. package/packages/client/dist/rpc/framing.js +57 -0
  69. package/packages/client/dist/rpc/handshake.d.ts +19 -0
  70. package/packages/client/dist/rpc/handshake.js +8 -0
  71. package/packages/client/dist/rpc/reconnect.d.ts +97 -0
  72. package/packages/client/dist/rpc/reconnect.js +227 -0
  73. package/packages/client/dist/rpc/timers.d.ts +11 -0
  74. package/packages/client/dist/rpc/timers.js +11 -0
  75. package/packages/client/dist/service.d.ts +50 -0
  76. package/packages/client/dist/service.js +143 -0
  77. package/packages/client/dist/setup.d.ts +2 -0
  78. package/packages/client/dist/setup.js +146 -0
  79. package/packages/client/dist/supervise.d.ts +12 -0
  80. package/packages/client/dist/supervise.js +81 -0
  81. package/packages/client/dist/websocket.d.ts +51 -0
  82. package/packages/client/dist/websocket.js +190 -0
  83. package/packages/core/README.md +7 -0
  84. package/packages/core/dist/adapter.d.ts +20 -0
  85. package/packages/core/dist/adapter.js +30 -0
  86. package/packages/core/dist/atomic.d.ts +2 -0
  87. package/packages/core/dist/atomic.js +28 -0
  88. package/packages/core/dist/backup.d.ts +27 -0
  89. package/packages/core/dist/backup.js +582 -0
  90. package/packages/core/dist/beads.d.ts +65 -0
  91. package/packages/core/dist/beads.js +213 -0
  92. package/packages/core/dist/delegation.d.ts +2 -0
  93. package/packages/core/dist/delegation.js +32 -0
  94. package/packages/core/dist/errors.d.ts +4 -0
  95. package/packages/core/dist/errors.js +11 -0
  96. package/packages/core/dist/formulas.d.ts +25 -0
  97. package/packages/core/dist/formulas.js +201 -0
  98. package/packages/core/dist/hook-run.d.ts +44 -0
  99. package/packages/core/dist/hook-run.js +60 -0
  100. package/packages/core/dist/hooks.d.ts +35 -0
  101. package/packages/core/dist/hooks.js +30 -0
  102. package/packages/core/dist/index.d.ts +30 -0
  103. package/packages/core/dist/index.js +63 -0
  104. package/packages/core/dist/init.d.ts +30 -0
  105. package/packages/core/dist/init.js +88 -0
  106. package/packages/core/dist/library-edit.d.ts +90 -0
  107. package/packages/core/dist/library-edit.js +315 -0
  108. package/packages/core/dist/library.d.ts +28 -0
  109. package/packages/core/dist/library.js +108 -0
  110. package/packages/core/dist/log.d.ts +37 -0
  111. package/packages/core/dist/log.js +156 -0
  112. package/packages/core/dist/migrations.d.ts +9 -0
  113. package/packages/core/dist/migrations.js +95 -0
  114. package/packages/core/dist/models.d.ts +11 -0
  115. package/packages/core/dist/models.js +44 -0
  116. package/packages/core/dist/permissions.d.ts +14 -0
  117. package/packages/core/dist/permissions.js +229 -0
  118. package/packages/core/dist/profiles.d.ts +27 -0
  119. package/packages/core/dist/profiles.js +122 -0
  120. package/packages/core/dist/promptsafe.d.ts +1 -0
  121. package/packages/core/dist/promptsafe.js +13 -0
  122. package/packages/core/dist/providers.d.ts +90 -0
  123. package/packages/core/dist/providers.js +101 -0
  124. package/packages/core/dist/resolver.d.ts +41 -0
  125. package/packages/core/dist/resolver.js +240 -0
  126. package/packages/core/dist/safe-path.d.ts +2 -0
  127. package/packages/core/dist/safe-path.js +24 -0
  128. package/packages/core/dist/shell.d.ts +16 -0
  129. package/packages/core/dist/shell.js +22 -0
  130. package/packages/core/dist/state-schema.d.ts +9 -0
  131. package/packages/core/dist/state-schema.js +54 -0
  132. package/packages/core/dist/task-rows.d.ts +47 -0
  133. package/packages/core/dist/task-rows.js +45 -0
  134. package/packages/core/dist/tasks.d.ts +128 -0
  135. package/packages/core/dist/tasks.js +835 -0
  136. package/packages/core/dist/teams.d.ts +69 -0
  137. package/packages/core/dist/teams.js +159 -0
  138. package/packages/core/dist/template-path.d.ts +2 -0
  139. package/packages/core/dist/template-path.js +10 -0
  140. package/packages/core/dist/trust.d.ts +8 -0
  141. package/packages/core/dist/trust.js +47 -0
  142. package/packages/core/dist/types.d.ts +51 -0
  143. package/packages/core/dist/upgrade.d.ts +10 -0
  144. package/packages/core/dist/upgrade.js +200 -0
  145. package/packages/core/dist/user-settings.d.ts +6 -0
  146. package/packages/core/dist/user-settings.js +72 -0
  147. package/packages/core/dist/validation.d.ts +17 -0
  148. package/packages/core/dist/validation.js +295 -0
  149. package/packages/core/dist/verify.d.ts +15 -0
  150. package/packages/core/dist/verify.js +123 -0
  151. package/packages/core/dist/workflow.d.ts +14 -0
  152. package/packages/core/dist/workflow.js +24 -0
  153. package/templates/ALP.md +52 -0
  154. package/templates/agents/lead/AGENT.md +90 -0
  155. package/templates/agents/main/AGENT.md +150 -0
  156. package/templates/agents/oracle/AGENT.md +44 -0
  157. package/templates/agents/peer/AGENT.md +55 -0
  158. package/templates/agents/reviewer/AGENT.md +80 -0
  159. package/templates/agents/supervisor/AGENT.md +72 -0
  160. package/templates/providers/antigravity.json +6 -0
  161. package/templates/providers/opencode.json +7 -0
  162. package/templates/role-skills.json +8 -0
  163. package/templates/skills/bug-loop/SKILL.md +44 -0
  164. package/templates/skills/bug-loop/references/test-proof.md +25 -0
  165. package/templates/skills/goal-griller/SKILL.md +49 -0
  166. package/templates/skills/prompt-leverage/SKILL.md +37 -0
  167. package/templates/skills/prompt-leverage/references/brief-template.md +27 -0
  168. package/templates/skills/sequence-execution-plan/SKILL.md +42 -0
  169. package/templates/skills/sequence-execution-plan/references/plan-template.md +22 -0
  170. package/templates/skills/smart-commits/SKILL.md +40 -0
  171. package/templates/skills/xia/SKILL.md +42 -0
  172. package/templates/teams/cafe/HOUSE_RULES.md +1 -0
  173. package/templates/teams/cafe/team.json +15 -0
  174. package/templates/teams/pho/HOUSE_RULES.md +1 -0
  175. package/templates/teams/pho/team.json +14 -0
package/LICENSE ADDED
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
package/NOTICE ADDED
@@ -0,0 +1,7 @@
1
+ ALP
2
+ Copyright 2026 Lê Phúc Anh
3
+
4
+ Licensed under the Apache License, Version 2.0 (see LICENSE).
5
+
6
+ Where a package's bundled files include third-party code, its
7
+ THIRD-PARTY-NOTICES.txt names each package and reproduces its licence.
package/README.md ADDED
@@ -0,0 +1,416 @@
1
+ # ALP prototype
2
+
3
+ Provider-neutral filesystem agent resolution with a server-side Paseo provider. Includes project initialization and the existing Phases 2–5 prototype. Editors that speak the Agent Client Protocol use ALP through `alp acp`.
4
+
5
+ ## Install
6
+
7
+ The current release is the beta `0.0.0-beta.1` (not published yet): see the
8
+ [release notes](docs/alp/beta-release-notes.md) for what it includes and its known issues, and
9
+ [installing, upgrading and removing the beta](docs/alp/beta-install.md) for every step. Name the
10
+ beta when you install (`@beta`, or exactly `@0.0.0-beta.1`); a plain `npm install -g @anhlp/alp`
11
+ installs the older `0.10.0`.
12
+
13
+ Supported: Linux or macOS, Node.js 22 (22.12 or later) or 24, and a signed-in Codex CLI or
14
+ Claude Code on PATH. Windows and Node.js 26 are experimental; Node.js 20 is not supported.
15
+
16
+ ```sh
17
+ npm install -g @anhlp/alp@beta
18
+ alp doctor # checks Codex and Claude, settings, and leftovers; --fix repairs the safe ones
19
+ alp daemon start
20
+ ```
21
+
22
+ Choose the models Phở and Cafe run on in a project, for Codex only, Claude only, or a mix:
23
+
24
+ ```sh
25
+ alp setup # select boxes: runtime, which provider first, then Save / Change a model
26
+ alp setup --runtime codex # Codex only
27
+ alp setup --runtime claude # Claude only
28
+ alp setup --runtime mix # both, Claude first
29
+ alp setup --runtime mix --prefer codex --codex-model gpt-6-sol --claude-oracle claude-fable-5-1
30
+ ```
31
+
32
+ Setup writes `team.pho` and `team.cafe` into the project's `.alp/settings.json`
33
+ (running `alp init` first when there is none) and keeps the rest of the file. Main runs
34
+ on one model, of the preferred provider. Lead and reviewer take `--claude-model` /
35
+ `--codex-model`, the supervisor `--claude-supervisor` / `--codex-supervisor`, and the
36
+ oracle `--claude-oracle` / `--codex-oracle`; in mix each lists both providers, the
37
+ preferred one first, and an only mode lists its own. Peers get `claude:*` and/or
38
+ `codex:*`: any model of the enabled providers, chosen with its effort for each task by
39
+ whoever assigns it. Defaults: Opus 5.5 / GPT-6.1 Sol at high, Sonnet 5 / GPT-6 Luna at
40
+ medium, Fable 5.1 at high / GPT-6 Astra at low (the only effort it takes). Setup does
41
+ not install CLIs, log in or call models: run `alp doctor` for that. New sessions use
42
+ the profiles; running sessions keep theirs.
43
+
44
+ The package provides the `alp` command and `alpd`, the per-user daemon that runs ALP sessions. To view and drive sessions in Paseo, also install the [Paseo plugin](integrations/paseo/README.md).
45
+
46
+ ## Initialize a project
47
+
48
+ Run `alp init [directory]` (or `node /path/to/alp/packages/cli/dist/cli.js init [directory]` when running a source checkout after `npm run build`). The directory defaults to the current working directory.
49
+
50
+ When the Paseo plugin opens an ALP session in a repository that lacks `ALP.md` or `.alp/settings.json`, it performs this initialization automatically. Initialization fills missing scaffold files and never replaces existing files, so partial and customized ALP setups are preserved.
51
+
52
+ Initialization creates `ALP.md` and `.alp/settings.json`. The six agents `main`, `lead`, `peer`, `oracle`, `reviewer` and `supervisor` are built into ALP and follow its updates; a project does not copy them. To change one, make an agent of the same name in your library (`~/.alp/agents/`) or in the project (`.alp/agents/`); see [agent library](docs/alp/agent-library.md). Main owns delivery; Phở lets main implement or call peer, while Cafe assigns technical execution to lead. Oracle and reviewer provide read-only advice and review; the supervisor reviews main's process after each turn.
53
+
54
+ The default settings select main with the Phở team. Main runs on Opus 5.5 with high effort and full access unless settings or the caller choose otherwise. Paseo exposes an `alp_delegate` tool that executes real child sessions and returns their evidence. See [Phở and Cafe teams](docs/alp/team-workflow.md).
55
+
56
+ Six [role skills](docs/alp/role-skills.md) cover intake, research, planning, delegation briefs, bug diagnosis, and commit packaging. They live in your skill library in `$ALP_HOME` (default `~/.alp`), seeded on first use, together with `role-skills.json`, which assigns six to main, five to lead and three to peer. Edit either freely: app updates replace only library files you have not changed. Each agent selects directly from its skills and loads contents only when needed.
57
+
58
+ Repeated runs fill in missing files and preserve existing file contents, including custom settings. Conflicting filesystem entry types cause an error; files already created before an error remain available for a later retry. Run `npm run test:init` to verify initialization independently.
59
+
60
+ For projects created with an earlier scaffold, run `alp upgrade [directory]` (or the built CLI above). This backs up and updates recognized original instructions, adds team settings, renames the old `smart`/`supervised` profiles to `pho`/`cafe`, and archives project copies of skills that still match the shipped ones, so the library applies. Copies of the built-in agents that are still as ALP shipped them are put away too, so the project uses the built-ins; a copy you edited, or added skills, MCP servers or hooks to, stays as the project's override. The old shipped graph migrates to Cafe; custom graphs and customized instructions/skills remain unchanged.
61
+
62
+ ## Development
63
+
64
+ Use Node 22 (22.12 or later) or 24 and an npm version compatible with your Node installation:
65
+
66
+ ```sh
67
+ npm ci
68
+ npm run check
69
+ npm test
70
+ ```
71
+
72
+ `npm test` builds every workspace and runs the hermetic suites (unit and integration together, each file once) in a throwaway `ALP_HOME`. `npm run build` builds only the core CLI, daemon, ACP and runtime bundles; `npm run build:paseo` builds the optional plugin. The runtime in `packages/runtime/src` owns native harnesses, sessions, delegation, and mail without importing Paseo; `alpd` hosts it, and the plugin is a viewer over the daemon ([design](plans/reference/ALPD.md)).
73
+
74
+ Tests are split by owner:
75
+
76
+ | Group | Location | Run |
77
+ | --- | --- | --- |
78
+ | Unit and package-level contract | `packages/<name>/tests/` (plugin: `integrations/paseo/tests/`) | `npm test -w @anhlp/alp-core` (or `-runtime`, `-client`, `-daemon`, `-cli`, `-protocol`, `@anhlp/alp-paseo`); all at once: `npm run test:unit` |
79
+ | Integration (several packages, CLI processes, repository checks) | `test/integration/` | `npm run test:integration` |
80
+ | E2E (live providers, opt-in) | `test/e2e/` | `npm run test:e2e` or one of `test:e2e:*` |
81
+ | Shared fixtures such as fake transports | `test/support/` | imported by package and integration tests |
82
+
83
+ `npm test` runs unit and integration; `npm run test:all` adds E2E. A package test imports only its own package and the packages it declares as dependencies; `npm run check:boundaries` and `test/integration/layout.test.js` enforce that. The core packages (protocol, core, runtime, client, daemon, cli) test without installing Paseo.
84
+
85
+ Runtime tests drive scripted agents from `test/support/fake-agent.js` instead of Codex or Claude: they call ALP tools, report context fill, hand off slowly, crash mid-turn or hit a usage limit on cue. `packages/client/tests/golden.test.js` compares what `alp log`, `alp ps` and `alp task report` print with `packages/client/tests/golden/*.txt`; after checking an intended change, accept it with `ALP_UPDATE_GOLDEN=1 npm test -w @anhlp/alp-client`.
86
+
87
+ ## Project files
88
+
89
+ ```text
90
+ your-project/
91
+ ALP.md
92
+ .alp/
93
+ settings.json
94
+ tasks/ # one JSON file per task; commit it with the project
95
+ agents/ # optional: project agents, and overrides of built-in or library ones
96
+ your-agent/AGENT.md
97
+ your-agent/agent.json
98
+ skills/ mcp/ hooks/ # optional: project entries; each overrides a library entry of its name
99
+ ```
100
+
101
+ `alp agents`, `alp skills`, `alp mcp` and `alp hooks` list what a project can use: ALP's built-ins, your library in `~/.alp`, and the project's own entries, with what each overrides and which agents use it. `alp agent|team|skill|mcp|hook new|edit|cp|mv|rm` change them, in your library or with `--project` in the project, and `alp mcp test` and `alp hook test` try one out ([editing](docs/alp/agent-library.md#editing)).
102
+
103
+ `alp init` now writes editable `team.pho` and `team.cafe` choices into
104
+ `.alp/settings.json`, taking a snapshot of your current user team configuration.
105
+ `alp upgrade` migrates the old `profile` key to `team` and adds these team settings to older projects, backs up the settings it changes,
106
+ and converts earlier single-model choices to lists without changing their values.
107
+ Every agent (main, lead, peer, reviewer, supervisor, oracle, or a custom member) has
108
+ `profiles`: a list of `"provider:model:effort"` (the effort may be left out), or
109
+ `"provider:*"` for any model of that provider. Main and oracle name their models, and
110
+ main runs on exactly one. Include both providers for dual-lens oracle advice:
111
+
112
+ ```json
113
+ {
114
+ "workflow": { "mode": "cafe", "maxPeers": 2 },
115
+ "team": {
116
+ "cafe": {
117
+ "main": { "profiles": ["claude:claude-opus-5-5:high"], "autocompact": "auto" },
118
+ "lead": { "profiles": ["claude:claude-opus-5-5:high", "codex:gpt-6.1-sol:high"] },
119
+ "peer": { "profiles": ["claude:*", "codex:*"], "autocompact": 200000 },
120
+ "oracle": { "profiles": ["claude:claude-fable-5-1:high", "codex:gpt-6-astra:low"] }
121
+ }
122
+ }
123
+ }
124
+ ```
125
+
126
+ An agent that runs by itself (main, the supervisor) starts on its first profile, at its
127
+ effort or else its team's. When main or lead assigns work to an agent with several
128
+ profiles or a `provider:*`, such as a peer, it picks a model they offer and an effort
129
+ that model takes for each task, by its difficulty, risk and the autonomy it needs, and
130
+ says why; a listed effort is only the usual one. ALP refuses an assignment without both
131
+ or with a model they do not offer. An agent with one named profile runs on it. A list
132
+ does not enable automatic fallback. Oracle still requires an explicit lens selection.
133
+ An effort a model does not take is refused (GPT-6 Astra takes only low). The earlier
134
+ form, `{ "provider", "model", "effort" }`, still works; `alp upgrade` rewrites it as
135
+ `"provider:model:effort"`.
136
+
137
+ `autocompact` belongs to the agent, beside `profiles`, and applies to every model in
138
+ its list. A whole number from 100000 to 1000000 requests compaction at that many tokens
139
+ on Codex, or sets Claude's native auto-compact window (Claude can compact earlier to
140
+ reserve response space). The model's capacity still applies. `"auto"` or omission
141
+ keeps the agent's existing native/context defaults. The same field is supported in
142
+ `agent.json`; a numeric project setting takes precedence. 200000 here is an example,
143
+ not a shipped default. New and upgraded configurations use `"auto"`.
144
+
145
+ Unspecified agents keep the team's choices. Explicit session/delegation model and
146
+ effort win, then project team choices, then the older `runtime` settings, then
147
+ team and agent defaults. Run `alp setup` again to rewrite Phở and Cafe's profiles, or
148
+ edit the file to change one agent. Only configured oracle lenses are available, and an
149
+ unavailable lens is reported rather than substituted.
150
+
151
+ Example `.alp/settings.json`:
152
+
153
+ ```json
154
+ {
155
+ "defaultAgent": "main",
156
+ "workflow": { "mode": "pho" },
157
+ "runtime": { "provider": "codex", "model": "gpt-5.6-sol", "reasoning": "low" }
158
+ }
159
+ ```
160
+
161
+ `workflow.mode` names a team: `pho`, `cafe` or your own (`smart` and `supervised`, Phở and Cafe's names before 0.4, are still accepted); `workflow.supervisor: false` turns the supervisor off. `runtime.provider` selects `codex` or `claude` behind the ALP Paseo plugin; the Paseo provider ID itself is `alp`. Without `runtime.provider` and `runtime.model`, main runs on `claude:claude-opus-5-5` with `high` effort; setting either replaces that default. `runtime.model` is passed through to the selected native harness, so it accepts any model name supported by that installed Codex or Claude Code version. Core treats these strings as provider-neutral data. An agent's `agent.json` can pick its own provider, model, thinking and mode, and name the skills, MCP servers and hooks it uses ([agent library](docs/alp/agent-library.md)). ALP runs hooks itself at its own events, the same for Codex and Claude; a project's hooks run after you trust the workspace once ([hooks](docs/alp/agent-library.md#hooks)). Besides Codex and Claude, an agent can run on any agent that speaks the Agent Client Protocol, such as Gemini CLI or opencode (experimental in the beta), added to your library with `alp provider add` or in the web app's Providers settings ([ACP providers](docs/alp/agent-library.md#acp-providers)).
162
+
163
+ For example, select Claude Code and one of its model aliases in `.alp/settings.json`:
164
+
165
+ ```json
166
+ {
167
+ "defaultAgent": "main",
168
+ "workflow": { "mode": "pho", "maxPeers": 2 },
169
+ "runtime": { "provider": "claude", "model": "sonnet", "reasoning": "high" }
170
+ }
171
+ ```
172
+
173
+ The Paseo model picker shows the teams, Phở and Cafe first; a session's model and effort follow from the team and are not chosen in Paseo. `runtime.model` in `.alp/settings.json`, or `--model` and `--thinking` on `alp run`, still override them. Those take runtime-prefixed IDs such as `codex:gpt-6.1-sol` or `claude:claude-opus-5-5`, or any native model name the installed Codex or Claude Code accepts.
174
+
175
+ `permissions` in `.alp/settings.json` (and in `$ALP_HOME/settings.json`) gives agents permission profiles with Claude Code-style rules. A profile caps an agent's mode, lets it run commands beyond that mode, asks you before others (`ask`, or `"beyondMode": "ask"` for anything the mode refuses), or refuses them in any mode. You answer Allow once, Always allow (written to the profile) or Deny, in Paseo or with `alp answer`. For example, a read-only reviewer may run the tests:
176
+
177
+ ```json
178
+ "permissions": {
179
+ "profiles": { "review": { "base": "read-only", "allow": ["Bash(npm test:*)"], "deny": ["Bash(rm:*)"] } },
180
+ "agents": { "reviewer": "review" }
181
+ }
182
+ ```
183
+
184
+ On Claude, read-only and workspace-write profiles also put Bash in the OS sandbox, so a read-only reviewer can run tests that only read. With `"workdir": "copy"` an agent works in a disposable copy of your tree, where it may build and test without touching yours. `alp permissions` shows each agent's profile, and `alp permissions check <agent> "<command>"` tests a rule. Details: [Permission profiles](docs/alp/team-workflow.md#permission-profiles).
185
+
186
+ Use `resolveAgent(projectRoot, { agent: 'your-agent' })` from `src/core/resolver.js` to resolve an agent without starting a runtime. Explicit selection overrides settings; missing settings default to `main`. There is no central agent registry.
187
+
188
+ ## Daemon and CLI
189
+
190
+ `alpd` hosts ALP sessions for all projects of a user. After `npm run build`:
191
+
192
+ ```sh
193
+ alp daemon start # or: status [--json] | stop | restart | install | uninstall (install: experimental)
194
+ alp doctor [--fix] # what ALP needs here, what earlier runs left behind, and what alpd's log and readiness say; only --fix repairs
195
+ alp backup --stop # sessions, settings, library and the projects' tasks in one file; also: verify | list
196
+ alp restore FILE --stop # checks the whole backup first, keeps what it replaces; --dry-run changes nothing
197
+ alp run --team cafe "Your task" # streams the agent tree; Ctrl-C interrupts
198
+ alp ps [--all] # live sessions as a tree; --all adds closed ones
199
+ alp top [session] # live dashboard: who runs, who waits, questions, worktrees, leases
200
+ alp attach <session> # follow a running tree, or print a closed one
201
+ alp send <session> "More context" # resumes a closed root first; to an agent, mail from you
202
+ alp questions # questions agents asked you
203
+ alp answer <question> "Your answer" # or: --dismiss [--reason R]
204
+ alp log <session> # delegations, mail, handoffs, worktrees, pins and questions of a tree
205
+ alp board [--project DIR] # the project board: claims, decisions and findings
206
+ alp tasks [ready] # the project's tasks; ready: what nothing blocks
207
+ alp task add "Title" -p 1 --after t-91c2 # also: show | edit | close | reopen | dep
208
+ alp formula pour release --var version=0.4.0 # also: list | show; tasks export | import for beads
209
+ alp verify [--task t-77e0] # run the project's verify commands; --task records the result
210
+ alp recall <assignment|task> "Why did you…?" # ask a finished assignment about its work
211
+ alp pause [codex|claude] [--now] # hold delegation; --now parks running assignments
212
+ alp resume [codex|claude] # parked assignments continue
213
+ alp interrupt <session>
214
+ ```
215
+
216
+ You talk with main. Main can ask you a question with `alp_ask` without ending its turn; `run`, `attach` and `send` show it and, in a terminal, read the answer, and `alp answer` answers from anywhere by question id or a unique prefix. In Paseo the question appears as a question prompt. Other agents do not talk to you unless you write to them first with `alp send <agent session>`; ALP then tells the agent that assigned them, and they may ask you questions too.
217
+
218
+ Agents on one project share a board, even when they belong to different trees. Each one claims the paths it is about to change, and an overlapping claim from another tree is refused. Agents also pin decisions and findings, which reach other agents that are working and start every new assignment. `alp board` shows the board.
219
+
220
+ Each project keeps its tasks in `.alp/tasks`, one JSON file per task, modelled on [beads](https://github.com/gastownhall/beads): types, priorities 0–4, `blockedBy`, epic parents, and a ready list of open tasks that nothing blocks. Only you and main create or change tasks: you with `alp task`, main with its `alp_task` tool. Other agents read them and report work they find to their requester. Main gives a task to lead or peer with `alp_delegate { taskId }`: the task starts, its paths are claimed, and the handoff moves it to review until main accepts it. Each of main's turns starts with what waits for review and what is ready, and Paseo shows the tasks a session worked on as a task list. When every child of an epic is closed, main closes the epic, and you get a report of what it came to: tasks, time, rework and verification. `alp task report <epic>` shows it at any time.
221
+
222
+ A gate holds a task back until it clears:
223
+ - `human`: you approve it with `alp task gate clear` or in Paseo.
224
+ - `timer`: a time passes.
225
+ - `gh:pr`: a pull request merges.
226
+ - `gh:run`: a workflow run succeeds.
227
+
228
+ Formulas are workflow templates, as in beads: a `<name>.formula.toml` (or `.json`) file in `.alp/formulas`, `$ALP_HOME/formulas` or `.beads/formulas` lists steps with `needs` and `{{vars}}`. `alp formula pour release --var version=0.4.0`, or main with `alp_task pour`, turns one into an epic with a task per step; a `human` step waits for your approval. `alp tasks export` and `alp tasks import` move tasks to and from beads' JSONL (`bd export` / `bd import`, default `.beads/issues.jsonl`).
229
+
230
+ `alp tasks gates` and main's turns check the GitHub gates. `alp tasks compact` shrinks tasks closed more than 30 days ago. In Paseo, each workspace has a **Tasks** panel: you approve gates, add tasks, and accept or reopen them there. The CLI writes the files directly, so it works without alpd.
231
+
232
+ `ALP_HOME` selects the daemon's directory (default `~/.alp`); `ALP_RUN_LOG_DIR` overrides where assignment logs go (default `$ALP_HOME/runs`). alpd records sessions, their timelines, and prompt receipts under `$ALP_HOME/state`, project boards under `$ALP_HOME/boards`, and its own location in `$ALP_HOME/alpd.json`. After a restart, or a crash, a root can be resumed with `send` or imported into Paseo; work that was running is marked `daemon_restarted`. A task an assignment held goes back to open at main's next turn, with the branch that kept the assignment's work, and main's task list shows it as interrupted.
233
+
234
+ With `"verify": { "test": "npm test" }` (also `setup`, `typecheck`) in `.alp/settings.json`, alpd runs the project's checks itself:
235
+ - before `alp_merge` applies a worktree change; if they fail, nothing is applied and main can fix the change with `alp_delegate { continueFrom }`;
236
+ - in the checkout after a shared writer finishes;
237
+ - on demand with `alp_verify` or `alp verify`.
238
+
239
+ The result is recorded on the task, and an agent cannot close a task as done after a failed check without saying why. A timed-out command gets SIGTERM before SIGKILL, `idleSec` stops a silent one, and a step exiting 75 counts as could-not-run (skipped), not failed. Details: [Verification gates](docs/alp/team-workflow.md#verification-gates).
240
+
241
+ `alp_delegate { continueFrom: assignmentId }` also continues a finished Codex or Claude shared assignment while its record is retained (14 days). It creates a new assignment in the same checkout, carrying the previous brief and handoff, and preserves an external `writeRoot`. It does not reopen the old conversation or restore a file snapshot. Running or parked assignments must finish or be canceled first. Older records without this context can be continued by delegating again with their handoff; shared changes need no merge or discard.
242
+
243
+ When recovering an assignment saved by an older ALP version, an effort no longer accepted by the current model catalog falls back to that model's default. ALP tells the requester and records the change in the run log. Newly requested unsupported efforts are still rejected.
244
+
245
+ Text one agent wrote reaches another without `<system-reminder>` tags, so a peer cannot pose as the harness.
246
+
247
+ Work survives alpd: after a crash, `alp daemon stop` or `alp daemon restart`, the next alpd reopens trees that were working, by itself, and their assignments continue with their thread, worktree and task. When a Codex or Claude process dies under a session, ALP restarts it and the session continues; three restarts in a row with no progress end it. `alp daemon install` (experimental in the beta) runs alpd as a login service (launchd on macOS, systemd on Linux) that starts it again after a crash. Details: [Crashes and restarts](docs/alp/team-workflow.md#crashes-and-restarts).
248
+
249
+ `alp backup` writes your sessions, timelines, receipts, settings, library and the projects' tasks to one checked file, and `alp restore` puts them back only after checking all of it, keeping what it replaced so the restore can be undone; an interrupted restore is rolled back. alpd migrates an older state when an upgrade needs it, after saving a backup, and an older ALP refuses state a newer one wrote instead of changing it. Session trees unused for 30 days are deleted, but never while one of them is live or a prompt receipt of theirs (7 days) is still honoured. Codex and Claude keep their own threads, which a backup does not hold. Details: [Backups, restores, upgrades and recovery](docs/alp/data-recovery.md).
250
+
251
+ When a runtime hits its usage limit, ALP pauses it by itself. Assignments the limit stopped are parked instead of failed, and every open session shows a notice saying when the limit resets. Agents on the other runtime keep working. alpd asks the paused runtime every minute, and at once when an agent delegates to it. It resumes the runtime as soon as the runtime says the limit lifted, and the parked assignments continue. With `"limits": { "autoResume": false }` in `$ALP_HOME/settings.json`, ALP only tells you, and `alp resume codex` continues. Details: [Pause and usage limits](docs/alp/team-workflow.md#pause-and-usage-limits).
252
+
253
+ Agents and ALP write to you in the language set in Settings → ALP → General → Language, or with `alp language English`; unset, it is Vietnamese. That covers replies, questions, approval requests and notices. Details: [The user's language](docs/alp/team-workflow.md#the-users-language).
254
+
255
+ Finished assignments stay recallable for 14 days: main, or the agent that assigned one, asks it with `alp_recall` why it did something, and you ask with `alp recall <assignment|task> "question"`. ALP forks the assignment's session read-only, asks, and drops the fork; the question never changes the assignment's own session. ALP keeps the native threads of assignments for this, and deletes them after 14 days. The Paseo plugin keeps the same daemon running while Paseo runs: it starts alpd with Paseo and again whenever alpd goes down, except after `alp daemon stop`, and its sessions reconnect.
256
+
257
+ ## The web app
258
+
259
+ The optional `@anhlp/alp-paseo` package serves the ALP web app as a separate process, on this machine only (loopback). The core `@anhlp/alp` distribution includes no Paseo SDK or web app; ALP 0.10.0 and earlier bundled it. This is not the standalone app in `apps/web`, which is deferred and not published. Install the plugin once to keep using the existing web commands:
260
+
261
+ ```sh
262
+ npm install -g @anhlp/alp-paseo@beta
263
+ alp-web-integration --register # register in the selected ALP_HOME (also discoverable on PATH)
264
+ alp web # opens http://127.0.0.1:7433 with its access token
265
+ alp web --print # prints the address instead
266
+ ```
267
+
268
+ The app is [Paseo](https://github.com/getpaseo/paseo)'s web app (Apache 2.0), built from a pinned commit with ALP's patches (`paseo-web/`) and run over alpd, so it looks and works like Paseo:
269
+
270
+ - **Sidebar:** your projects and their workspaces, with their branch, pins, labels and unread marks. Add a project by typing its folder or browsing to it (Add project → Browse folders); a new workspace starts with its first agent.
271
+ - **Agents:** each session is an agent of the provider ALP, its team (Phở, Cafe, …) as the model. The timeline streams main's replies and tool calls; questions from the team are cards to answer; History and Find in chat search past sessions. The team members are the agent's subagents, each with its own timeline.
272
+ - **ALP's own parts:** the Tasks panel and screen, the ALP project panel and the ALP settings screen (Settings → Plugins → alp-provider) come from ALP's Paseo plugin, which alpd runs.
273
+ - **Changes and Files:** the checkout's diff, uncommitted or against its base branch, and its files, read-only.
274
+ - **Usage:** the sidebar Usage button and Settings → Usage show Codex and Claude account limits, plan names and reset windows. ALP's Usage workspace panel and plugin settings also show paused runtimes and parked assignment counts. Reads are cached for 30 seconds; Refresh requests fresh data. Missing provider data is shown as unavailable. These are account-wide provider limits, not ALP token costs.
275
+ - What Paseo has and ALP not yet (terminals, committing and pushing, worktrees from the app, voice, …) says "Tính năng đang phát triển" (in your language) when used.
276
+
277
+ The web app listens on 127.0.0.1 only. The page needs the token `alp web` puts in its address (kept in `~/.alp/web.json`), and the integration refuses requests for another host name and sockets from another site. `"web": { "port": 8000 }` in `~/.alp/settings.json` moves it, and `"web": { "enabled": false }` turns it off. In a checkout of this repository, build the app with `npm run build:web` (it clones Paseo into `.cache/paseo-web`). Details: [ALPD §62](plans/reference/ALPD.md#62-the-alp-web-app-on-paseos-app-2026-10-10).
278
+
279
+ ### Paseo's app on your phone (experimental)
280
+
281
+ Relay pairing is experimental in the beta and off by default. The integration can also reach alpd from [Paseo](https://paseo.sh)'s own app on another device, through Paseo's relay (`relay.paseo.sh`):
282
+
283
+ ```sh
284
+ alp web pair --on # turns the relay on and prints the pairing link
285
+ alp web pair # the link again; --off turns the relay off
286
+ ```
287
+
288
+ Or in the web app: Settings → your host → Pair device → Enable relay, then scan the QR code with Paseo's app. Traffic between the device and alpd is end-to-end encrypted; the relay only passes it on. The link carries alpd's public key, not its token: when Paseo's app asks for a password, give it the token (the part after `#token=` in `alp web --print`). The relay stays off until you turn it on; `"web": { "relay": { "endpoint": "host:port" } }` points the integration at another relay. Paseo's app shows ALP's sessions and teams, and answers what ALP has not built yet as an error. Details: [ALPD §64](plans/reference/ALPD.md#64-paseos-relay-and-its-app-on-another-device-2026-10-12).
289
+
290
+ ## Antigravity CLI (experimental)
291
+
292
+ The Antigravity and ACP providers (OpenCode, Gemini CLI) are experimental in the beta. With `agy` installed and signed in:
293
+
294
+ ```sh
295
+ alp provider test antigravity
296
+ alp run --model antigravity:gemini-3.8-flash-high --mode full-access "Describe this project"
297
+ ```
298
+
299
+ A main profile can select `antigravity:gemini-3.8-flash-high` too. By default this adapter supports full access only. To run oracle, reviewer and supervisor on Antigravity, explicitly enable instruction-based read-only behavior:
300
+
301
+ ```sh
302
+ alp provider edit antigravity --read-only-mode instructions
303
+ ```
304
+
305
+ This stores `"readOnlyMode": "instructions"` in your library's provider configuration. ALP keeps advisory sessions read-only for its own tools and tells the agent to avoid changing files or external state, while the native agy process still runs with full access. This is a prompt constraint, not an OS sandbox or filesystem protection. It applies to new sessions; ALP does not downgrade an existing full-access AGY process to read-only. Use `--read-only-mode reject` to restore the default rejection. Workspace-write, review copies and custom permission rules remain unsupported.
306
+
307
+ MCP tools supplied by the project or editor are connected separately for each AGY session over stdio or streamable HTTP, then exposed through ALP's MCP bridge. The tool aliases and descriptions identify their original server. Commands, environment variables and HTTP authorization headers stay out of agy's global configuration. MCP resources and prompts are not forwarded through this tool bridge; configure a server directly in agy if you need those capabilities.
308
+
309
+ OpenCode (`opencode acp`) and Antigravity (`agy`) are added to your library by default, including on upgrades. Settings → Providers shows a switch at the end of each row to enable or disable them. Install and sign in to the corresponding CLI to use it; an absent CLI is shown as not installed. Existing commands, model settings and disabled switches are preserved across upgrades. OpenCode models use `acp:opencode/<model>`. To change a default command, use `alp provider edit opencode --command /path/to/opencode --arg acp` or `alp provider edit antigravity --command /path/to/agy`.
310
+
311
+ ALP installs one `alp` MCP launcher in `~/.gemini/config/mcp_config.json`, preserving other entries. Each agy process inherits its own socket and token; neither is saved in that file. The launcher remains available across sessions and exposes no ALP tools outside an ALP process. Invalid configuration and a conflicting user-owned `alp` entry cause an error without overwriting the file.
312
+
313
+ ## Editors (ACP, experimental)
314
+
315
+ `alp acp` is experimental in the beta. It serves ALP over the [Agent Client Protocol](https://agentclientprotocol.com) on stdio, so an editor such as Zed or a JetBrains IDE can use ALP as its agent. In Zed's `settings.json`:
316
+
317
+ ```json
318
+ {
319
+ "agent_servers": {
320
+ "ALP": { "type": "custom", "command": "alp", "args": ["acp"], "env": {} }
321
+ }
322
+ }
323
+ ```
324
+
325
+ - Each editor thread is an ALP session in its project, worked by a team. Choose the team (Phở, Cafe, or your own) and the permission mode in the thread's options before the first prompt; the team is fixed after that.
326
+ - Main's replies, commands and tool calls stream into the thread, and so do the steps its team reports back after the prompt ended. Delegations show as tool calls.
327
+ - When an agent asks you something, the question appears in the thread: reply with `/answer <text>`, or `/dismiss`.
328
+ - Stop cancels main's turn and the work it started. Closing the editor leaves running work to finish in alpd; the thread's history lists ALP sessions of the project, and opening one shows its history.
329
+ - MCP servers the editor offers are given to the agents beside their own.
330
+
331
+ Details: [ALPD §60](plans/reference/ALPD.md#60-alp-as-an-acp-agent-2026-10-10).
332
+
333
+ ## Paseo
334
+
335
+ To use the published plugin, follow [the plugin's README](integrations/paseo/README.md) or [beta-install.md](docs/alp/beta-install.md#paseo-plugin): `paseo plugin add npm:@anhlp/alp-paseo@beta`. The beta supports Paseo `>=0.11.1 <0.12.0`. See [installation and runtime behavior](docs/alp/paseo-plugin.md) and the historical [phase acceptance evidence](docs/alp/phase-2-5-results.md). The plugin was verified with Paseo 0.11.1 and live Codex and Claude Code permission changes before the beta; the beta's own runs are in [beta-scope.md](docs/alp/beta-scope.md) §6.
336
+
337
+ **Settings → ALP** manages your library of teams, agents, skills, MCP servers, hooks and ACP providers, and the **ALP project** workspace panel manages a project's overrides ([settings screen](docs/alp/paseo-plugin.md#alp-settings-and-the-project-panel)).
338
+
339
+ ### Build and add the plugin to Paseo
340
+
341
+ This section builds the plugin from a checkout of this repository. Prerequisites: Node.js 22 (22.12 or later) or 24, Paseo 0.11.1 or a later 0.11 release (the Tasks panel needs its plugin client API), and a logged-in Codex CLI and/or Claude Code installation. Set `ALP_CODEX_BIN` or `ALP_CLAUDE_BIN` to an absolute native executable path when it is not available on `PATH`.
342
+
343
+ Install dependencies, type-check the plugin, and build its server bundle:
344
+
345
+ ```sh
346
+ npm ci
347
+ npm run check
348
+ npm run build:paseo
349
+ ```
350
+
351
+ The build output is written to `integrations/paseo/server/dist/index.js`. Paseo plugins are trusted, unsandboxed code, so enable plugins only on a daemon where you trust this repository. In Paseo, open **Settings → Plugins** and turn on **Enable plugins**.
352
+
353
+ For a headless daemon, run `paseo daemon status --json` to find its `home`, set the root `pluginsEnabled` field in `<home>/config.json` to `true`, preserve the rest of the file, then apply the change:
354
+
355
+ ```sh
356
+ paseo reload --json
357
+ ```
358
+
359
+ Paseo requires an absolute path when adding a local plugin. From the repository root, run one of the following commands.
360
+
361
+ PowerShell:
362
+
363
+ ```powershell
364
+ paseo plugin add (Resolve-Path .\integrations\paseo).Path
365
+ ```
366
+
367
+ macOS/Linux:
368
+
369
+ ```sh
370
+ paseo plugin add "$(pwd)/integrations/paseo"
371
+ ```
372
+
373
+ Confirm that `alp-provider` is running and that the `alp` provider is available:
374
+
375
+ ```sh
376
+ paseo plugin ls
377
+ paseo provider models alp
378
+ ```
379
+
380
+ After changing the plugin source, rebuild and reload the installed plugin:
381
+
382
+ ```sh
383
+ npm run check
384
+ npm run build:paseo
385
+ paseo plugin reload alp-provider
386
+ ```
387
+
388
+ If loading fails, inspect the plugin process output with `paseo plugin logs alp-provider`. A full daemon restart is not required for source changes.
389
+
390
+ ### Phở and Cafe
391
+
392
+ New projects default to Phở: main works directly or delegates to peer. Cafe
393
+ keeps main as supervisor while lead implements or delegates. In both, main runs on
394
+ Opus 5.5 with high effort and full access, and starts a supervisor on Sonnet 5
395
+ that reviews its process after each turn and asks main about mistakes; main records
396
+ lessons it follows in later sessions. Main can distill recurring lessons into a
397
+ skill for the roles it chooses, and open or comment on GitHub issues of the
398
+ project or of ALP; the user approves each skill and each post first. Both use read-only oracle/reviewer. Phở and Cafe
399
+ are ALP's built-in teams; you can make your own, with its own main, members,
400
+ delegation and house rules ([teams](docs/alp/agent-library.md#teams)). Select the
401
+ team in the Paseo model picker, with `alp run --team`, or in
402
+ `.alp/settings.json` → `workflow.mode`; `alp teams` lists them. The default concurrent peer limit is 2;
403
+ raise `workflow.maxPeers` only at the user's request. Writers in the shared checkout
404
+ run one at a time, across all sessions; writing peers can run in parallel in their own
405
+ git worktrees (`isolation: "worktree"`) and are merged with `alp_merge`. Oracle runs
406
+ on Fable (`claude:claude-fable-5-1`) or Astra (`codex:gpt-6-astra`); main may ask
407
+ both in parallel for two opinions. Runtime catalog and available plan/usage snapshots
408
+ inform coordination. See [team configuration and migration](docs/alp/team-workflow.md).
409
+
410
+ ## Modular monorepo development
411
+
412
+ ALP is organized into npm workspaces for protocol, core, runtime, daemon, client, CLI, a reserved TUI, and the Paseo integration. See [package boundaries, build/test/release commands and the Rust migration seam](docs/modular-monorepo.md). Existing commands and checkout entry points remain compatible.
413
+
414
+ ## License
415
+
416
+ ALP is licensed under the [Apache License 2.0](LICENSE); see [NOTICE](NOTICE). Packages that bundle third-party code ship a `THIRD-PARTY-NOTICES.txt`. The `alp web` app in `@anhlp/alp-paseo` is Paseo's web app (Apache-2.0, © Mohamed Boudra) with ALP's patches; see that package's `NOTICE`. The web app's third-party licences are in `server/dist/web-app/THIRD-PARTY-NOTICES.txt`.