@anhlp/alp 0.0.1-beta.4 → 0.0.1-beta.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 (198) hide show
  1. package/README.md +11 -412
  2. package/bin/alp.js +3 -0
  3. package/package.json +11 -103
  4. package/dist/THIRD-PARTY-NOTICES.txt +0 -626
  5. package/dist/acp.js +0 -19936
  6. package/dist/alpd.js +0 -49562
  7. package/docs/modular-monorepo.md +0 -214
  8. package/packages/cli/README.md +0 -7
  9. package/packages/cli/dist/THIRD-PARTY-NOTICES.txt +0 -651
  10. package/packages/cli/dist/acp/agent.d.ts +0 -37
  11. package/packages/cli/dist/acp/agent.js +0 -489
  12. package/packages/cli/dist/acp/main.d.ts +0 -4
  13. package/packages/cli/dist/acp/main.js +0 -23
  14. package/packages/cli/dist/acp.js +0 -19936
  15. package/packages/cli/dist/alp-web/THIRD-PARTY-NOTICES.txt +0 -2590
  16. package/packages/cli/dist/alp-web/alp-boundary.json +0 -15
  17. package/packages/cli/dist/alp-web/apple-touch-icon.png +0 -0
  18. package/packages/cli/dist/alp-web/assets/TerminalPanel-DLuoa74B.css +0 -1
  19. package/packages/cli/dist/alp-web/assets/TerminalPanel-PrU2l3u5.js +0 -16
  20. package/packages/cli/dist/alp-web/assets/index-BJdBTDFX.css +0 -1
  21. package/packages/cli/dist/alp-web/assets/index-DpfiPv5s.js +0 -52
  22. package/packages/cli/dist/alp-web/favicon-attention.svg +0 -6
  23. package/packages/cli/dist/alp-web/favicon-running.svg +0 -6
  24. package/packages/cli/dist/alp-web/favicon.svg +0 -5
  25. package/packages/cli/dist/alp-web/index.html +0 -20
  26. package/packages/cli/dist/alp-web.js +0 -9640
  27. package/packages/cli/dist/alpd.js +0 -49562
  28. package/packages/cli/dist/backup.d.ts +0 -4
  29. package/packages/cli/dist/backup.js +0 -146
  30. package/packages/cli/dist/build-manifest.json +0 -240
  31. package/packages/cli/dist/cli.d.ts +0 -2
  32. package/packages/cli/dist/cli.js +0 -30
  33. package/packages/cli/dist/daemon.d.ts +0 -35
  34. package/packages/cli/dist/daemon.js +0 -126
  35. package/packages/cli/dist/index.d.ts +0 -1
  36. package/packages/cli/dist/index.js +0 -5
  37. package/packages/cli/dist/interfaces.d.ts +0 -24
  38. package/packages/cli/dist/interfaces.js +0 -156
  39. package/packages/cli/dist/library.d.ts +0 -140
  40. package/packages/cli/dist/library.js +0 -319
  41. package/packages/cli/dist/paths.d.ts +0 -3
  42. package/packages/cli/dist/paths.js +0 -18
  43. package/packages/cli/dist/projects.d.ts +0 -9
  44. package/packages/cli/dist/projects.js +0 -159
  45. package/packages/cli/dist/schedules.d.ts +0 -2
  46. package/packages/cli/dist/schedules.js +0 -45
  47. package/packages/cli/dist/sessions.d.ts +0 -43
  48. package/packages/cli/dist/sessions.js +0 -458
  49. package/packages/cli/dist/tasks.d.ts +0 -29
  50. package/packages/cli/dist/tasks.js +0 -345
  51. package/packages/cli/dist/terminal.d.ts +0 -8
  52. package/packages/cli/dist/terminal.js +0 -79
  53. package/packages/cli/dist/usage.d.ts +0 -3
  54. package/packages/cli/dist/usage.js +0 -78
  55. package/packages/cli/dist/web-service.d.ts +0 -38
  56. package/packages/cli/dist/web-service.js +0 -119
  57. package/packages/client/README.md +0 -29
  58. package/packages/client/dist/acp-probe.d.ts +0 -44
  59. package/packages/client/dist/acp-probe.js +0 -37
  60. package/packages/client/dist/antigravity-probe.d.ts +0 -34
  61. package/packages/client/dist/antigravity-probe.js +0 -95
  62. package/packages/client/dist/command.d.ts +0 -5
  63. package/packages/client/dist/command.js +0 -33
  64. package/packages/client/dist/doctor.d.ts +0 -13
  65. package/packages/client/dist/doctor.js +0 -587
  66. package/packages/client/dist/index.d.ts +0 -151
  67. package/packages/client/dist/index.js +0 -533
  68. package/packages/client/dist/integration-lock.d.ts +0 -35
  69. package/packages/client/dist/integration-lock.js +0 -179
  70. package/packages/client/dist/ipc.d.ts +0 -42
  71. package/packages/client/dist/ipc.js +0 -69
  72. package/packages/client/dist/library-test.d.ts +0 -94
  73. package/packages/client/dist/library-test.js +0 -37
  74. package/packages/client/dist/mcp-probe.d.ts +0 -24
  75. package/packages/client/dist/mcp-probe.js +0 -147
  76. package/packages/client/dist/portable.d.ts +0 -19
  77. package/packages/client/dist/portable.js +0 -33
  78. package/packages/client/dist/prompt.d.ts +0 -32
  79. package/packages/client/dist/prompt.js +0 -59
  80. package/packages/client/dist/render.d.ts +0 -6
  81. package/packages/client/dist/render.js +0 -120
  82. package/packages/client/dist/rpc/client.d.ts +0 -82
  83. package/packages/client/dist/rpc/client.js +0 -292
  84. package/packages/client/dist/rpc/errors.d.ts +0 -42
  85. package/packages/client/dist/rpc/errors.js +0 -34
  86. package/packages/client/dist/rpc/framing.d.ts +0 -21
  87. package/packages/client/dist/rpc/framing.js +0 -57
  88. package/packages/client/dist/rpc/handshake.d.ts +0 -19
  89. package/packages/client/dist/rpc/handshake.js +0 -8
  90. package/packages/client/dist/rpc/reconnect.d.ts +0 -97
  91. package/packages/client/dist/rpc/reconnect.js +0 -227
  92. package/packages/client/dist/rpc/registry.d.ts +0 -211
  93. package/packages/client/dist/rpc/registry.js +0 -145
  94. package/packages/client/dist/rpc/timers.d.ts +0 -11
  95. package/packages/client/dist/rpc/timers.js +0 -11
  96. package/packages/client/dist/service.d.ts +0 -50
  97. package/packages/client/dist/service.js +0 -143
  98. package/packages/client/dist/setup.d.ts +0 -2
  99. package/packages/client/dist/setup.js +0 -146
  100. package/packages/client/dist/supervise.d.ts +0 -14
  101. package/packages/client/dist/supervise.js +0 -87
  102. package/packages/client/dist/websocket.d.ts +0 -51
  103. package/packages/client/dist/websocket.js +0 -190
  104. package/packages/core/README.md +0 -7
  105. package/packages/core/dist/adapter.d.ts +0 -20
  106. package/packages/core/dist/adapter.js +0 -30
  107. package/packages/core/dist/atomic.d.ts +0 -2
  108. package/packages/core/dist/atomic.js +0 -28
  109. package/packages/core/dist/backup.d.ts +0 -27
  110. package/packages/core/dist/backup.js +0 -681
  111. package/packages/core/dist/beads.d.ts +0 -65
  112. package/packages/core/dist/beads.js +0 -213
  113. package/packages/core/dist/delegation.d.ts +0 -2
  114. package/packages/core/dist/delegation.js +0 -32
  115. package/packages/core/dist/errors.d.ts +0 -4
  116. package/packages/core/dist/errors.js +0 -11
  117. package/packages/core/dist/formulas.d.ts +0 -25
  118. package/packages/core/dist/formulas.js +0 -201
  119. package/packages/core/dist/hook-run.d.ts +0 -44
  120. package/packages/core/dist/hook-run.js +0 -60
  121. package/packages/core/dist/hooks.d.ts +0 -35
  122. package/packages/core/dist/hooks.js +0 -30
  123. package/packages/core/dist/index.d.ts +0 -31
  124. package/packages/core/dist/index.js +0 -65
  125. package/packages/core/dist/init.d.ts +0 -30
  126. package/packages/core/dist/init.js +0 -89
  127. package/packages/core/dist/library-edit.d.ts +0 -93
  128. package/packages/core/dist/library-edit.js +0 -368
  129. package/packages/core/dist/library.d.ts +0 -28
  130. package/packages/core/dist/library.js +0 -108
  131. package/packages/core/dist/log.d.ts +0 -37
  132. package/packages/core/dist/log.js +0 -156
  133. package/packages/core/dist/migrations.d.ts +0 -9
  134. package/packages/core/dist/migrations.js +0 -95
  135. package/packages/core/dist/models.d.ts +0 -11
  136. package/packages/core/dist/models.js +0 -44
  137. package/packages/core/dist/permissions.d.ts +0 -14
  138. package/packages/core/dist/permissions.js +0 -229
  139. package/packages/core/dist/profiles.d.ts +0 -27
  140. package/packages/core/dist/profiles.js +0 -122
  141. package/packages/core/dist/promptsafe.d.ts +0 -1
  142. package/packages/core/dist/promptsafe.js +0 -13
  143. package/packages/core/dist/providers.d.ts +0 -90
  144. package/packages/core/dist/providers.js +0 -101
  145. package/packages/core/dist/resolver.d.ts +0 -41
  146. package/packages/core/dist/resolver.js +0 -240
  147. package/packages/core/dist/safe-path.d.ts +0 -2
  148. package/packages/core/dist/safe-path.js +0 -24
  149. package/packages/core/dist/shell.d.ts +0 -16
  150. package/packages/core/dist/shell.js +0 -22
  151. package/packages/core/dist/state-schema.d.ts +0 -9
  152. package/packages/core/dist/state-schema.js +0 -54
  153. package/packages/core/dist/task-rows.d.ts +0 -47
  154. package/packages/core/dist/task-rows.js +0 -45
  155. package/packages/core/dist/tasks.d.ts +0 -128
  156. package/packages/core/dist/tasks.js +0 -835
  157. package/packages/core/dist/teams.d.ts +0 -80
  158. package/packages/core/dist/teams.js +0 -159
  159. package/packages/core/dist/template-path.d.ts +0 -2
  160. package/packages/core/dist/template-path.js +0 -10
  161. package/packages/core/dist/trust.d.ts +0 -8
  162. package/packages/core/dist/trust.js +0 -47
  163. package/packages/core/dist/types.d.ts +0 -51
  164. package/packages/core/dist/upgrade.d.ts +0 -10
  165. package/packages/core/dist/upgrade.js +0 -200
  166. package/packages/core/dist/user-settings.d.ts +0 -6
  167. package/packages/core/dist/user-settings.js +0 -72
  168. package/packages/core/dist/user-worktree.d.ts +0 -29
  169. package/packages/core/dist/user-worktree.js +0 -242
  170. package/packages/core/dist/validation.d.ts +0 -17
  171. package/packages/core/dist/validation.js +0 -296
  172. package/packages/core/dist/verify.d.ts +0 -15
  173. package/packages/core/dist/verify.js +0 -123
  174. package/packages/core/dist/workflow.d.ts +0 -45
  175. package/packages/core/dist/workflow.js +0 -33
  176. package/templates/ALP.md +0 -52
  177. package/templates/agents/lead/AGENT.md +0 -90
  178. package/templates/agents/main/AGENT.md +0 -150
  179. package/templates/agents/oracle/AGENT.md +0 -44
  180. package/templates/agents/peer/AGENT.md +0 -55
  181. package/templates/agents/reviewer/AGENT.md +0 -80
  182. package/templates/agents/supervisor/AGENT.md +0 -72
  183. package/templates/providers/antigravity.json +0 -6
  184. package/templates/providers/opencode.json +0 -7
  185. package/templates/role-skills.json +0 -8
  186. package/templates/skills/bug-loop/SKILL.md +0 -44
  187. package/templates/skills/bug-loop/references/test-proof.md +0 -25
  188. package/templates/skills/goal-griller/SKILL.md +0 -49
  189. package/templates/skills/prompt-leverage/SKILL.md +0 -37
  190. package/templates/skills/prompt-leverage/references/brief-template.md +0 -27
  191. package/templates/skills/sequence-execution-plan/SKILL.md +0 -42
  192. package/templates/skills/sequence-execution-plan/references/plan-template.md +0 -22
  193. package/templates/skills/smart-commits/SKILL.md +0 -40
  194. package/templates/skills/xia/SKILL.md +0 -42
  195. package/templates/teams/cafe/HOUSE_RULES.md +0 -1
  196. package/templates/teams/cafe/team.json +0 -15
  197. package/templates/teams/pho/HOUSE_RULES.md +0 -1
  198. package/templates/teams/pho/team.json +0 -14
package/README.md CHANGED
@@ -1,420 +1,19 @@
1
- # ALP prototype
1
+ # @anhlp/alp
2
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.1-beta.3` (until it is on npm, `@beta` installs
8
- `0.0.0-beta.2`; check with `npm view @anhlp/alp dist-tags`): see the
9
- [release notes](docs/alp/beta-release-notes.md) for what it includes and its known issues, and
10
- [installing, upgrading and removing the beta](docs/alp/beta-install.md) for every step. Name the
11
- beta when you install (`@beta`, or exactly `@0.0.1-beta.3`); a plain `npm install -g @anhlp/alp`
12
- installs whatever npm's `latest` tag points at, which moves to a new beta only after that
13
- beta's post-publish checks.
14
-
15
- Supported: Linux or macOS, Node.js 22 (22.12 or later) or 24, and a signed-in Codex CLI or
16
- Claude Code on PATH. Windows and Node.js 26 are experimental; Node.js 20 is not supported.
3
+ The `alp` command of [ALP](https://github.com/phucanh08/alp) for npm users. This package is a
4
+ thin wrapper: it depends on `@anhlp/alp-cli` (pinned to the same version) and its `alp` runs that
5
+ CLI on your Node (22.12 or later). Nothing is downloaded after install.
17
6
 
18
7
  ```sh
19
8
  npm install -g @anhlp/alp@beta
20
- alp doctor # checks Codex and Claude, settings, and leftovers; --fix repairs the safe ones
21
- alp daemon start
22
- ```
23
-
24
- Choose the models Phở and Cafe run on in a project, for Codex only, Claude only, or a mix:
25
-
26
- ```sh
27
- alp setup # select boxes: runtime, which provider first, then Save / Change a model
28
- alp setup --runtime codex # Codex only
29
- alp setup --runtime claude # Claude only
30
- alp setup --runtime mix # both, Claude first
31
- alp setup --runtime mix --prefer codex --codex-model gpt-6-sol --claude-oracle claude-fable-5-1
32
- ```
33
-
34
- Setup writes `team.pho` and `team.cafe` into the project's `.alp/settings.json`
35
- (running `alp init` first when there is none) and keeps the rest of the file. Main runs
36
- on one model, of the preferred provider. Lead and reviewer take `--claude-model` /
37
- `--codex-model`, the supervisor `--claude-supervisor` / `--codex-supervisor`, and the
38
- oracle `--claude-oracle` / `--codex-oracle`; in mix each lists both providers, the
39
- preferred one first, and an only mode lists its own. Peers get `claude:*` and/or
40
- `codex:*`: any model of the enabled providers, chosen with its effort for each task by
41
- whoever assigns it. Defaults: Opus 5.5 / GPT-6.1 Sol at high, Sonnet 5 / GPT-6 Luna at
42
- medium, Fable 5.1 at high / GPT-6 Astra at low (the only effort it takes). Setup does
43
- not install CLIs, log in or call models: run `alp doctor` for that. New sessions use
44
- the profiles; running sessions keep theirs.
45
-
46
- 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).
47
-
48
- ## Initialize a project
49
-
50
- 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.
51
-
52
- 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.
53
-
54
- 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.
55
-
56
- 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).
57
-
58
- 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.
59
-
60
- 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.
61
-
62
- 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.
63
-
64
- ## Development
65
-
66
- Use Node 22 (22.12 or later) or 24 and an npm version compatible with your Node installation:
67
-
68
- ```sh
69
- npm ci
70
- npm run check
71
- npm test
72
- ```
73
-
74
- `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)).
75
-
76
- Tests are split by owner:
77
-
78
- | Group | Location | Run |
79
- | --- | --- | --- |
80
- | 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` |
81
- | Integration (several packages, CLI processes, repository checks) | `test/integration/` | `npm run test:integration` |
82
- | E2E (live providers, opt-in) | `test/e2e/` | `npm run test:e2e` or one of `test:e2e:*` |
83
- | Shared fixtures such as fake transports | `test/support/` | imported by package and integration tests |
84
-
85
- `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.
86
-
87
- 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`.
88
-
89
- ## Project files
90
-
91
- ```text
92
- your-project/
93
- ALP.md
94
- .alp/
95
- settings.json
96
- tasks/ # one JSON file per task; commit it with the project
97
- agents/ # optional: project agents, and overrides of built-in or library ones
98
- your-agent/AGENT.md
99
- your-agent/agent.json
100
- skills/ mcp/ hooks/ # optional: project entries; each overrides a library entry of its name
101
- ```
102
-
103
- `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)).
104
-
105
- `alp init` now writes editable `team.pho` and `team.cafe` choices into
106
- `.alp/settings.json`, taking a snapshot of your current user team configuration.
107
- `alp upgrade` migrates the old `profile` key to `team` and adds these team settings to older projects, backs up the settings it changes,
108
- and converts earlier single-model choices to lists without changing their values.
109
- Every agent (main, lead, peer, reviewer, supervisor, oracle, or a custom member) has
110
- `profiles`: a list of `"provider:model:effort"` (the effort may be left out), or
111
- `"provider:*"` for any model of that provider. Main and oracle name their models, and
112
- main runs on exactly one. Include both providers for dual-lens oracle advice:
113
-
114
- ```json
115
- {
116
- "workflow": { "mode": "cafe", "maxPeers": 2 },
117
- "team": {
118
- "cafe": {
119
- "main": { "profiles": ["claude:claude-opus-5-5:high"], "autocompact": "auto" },
120
- "lead": { "profiles": ["claude:claude-opus-5-5:high", "codex:gpt-6.1-sol:high"] },
121
- "peer": { "profiles": ["claude:*", "codex:*"], "autocompact": 200000 },
122
- "oracle": { "profiles": ["claude:claude-fable-5-1:high", "codex:gpt-6-astra:low"] }
123
- }
124
- }
125
- }
126
- ```
127
-
128
- An agent that runs by itself (main, the supervisor) starts on its first profile, at its
129
- effort or else its team's. When main or lead assigns work to an agent with several
130
- profiles or a `provider:*`, such as a peer, it picks a model they offer and an effort
131
- that model takes for each task, by its difficulty, risk and the autonomy it needs, and
132
- says why; a listed effort is only the usual one. ALP refuses an assignment without both
133
- or with a model they do not offer. An agent with one named profile runs on it. A list
134
- does not enable automatic fallback. Oracle still requires an explicit lens selection.
135
- An effort a model does not take is refused (GPT-6 Astra takes only low). The earlier
136
- form, `{ "provider", "model", "effort" }`, still works; `alp upgrade` rewrites it as
137
- `"provider:model:effort"`.
138
-
139
- `autocompact` belongs to the agent, beside `profiles`, and applies to every model in
140
- its list. A whole number from 100000 to 1000000 requests compaction at that many tokens
141
- on Codex, or sets Claude's native auto-compact window (Claude can compact earlier to
142
- reserve response space). The model's capacity still applies. `"auto"` or omission
143
- keeps the agent's existing native/context defaults. The same field is supported in
144
- `agent.json`; a numeric project setting takes precedence. 200000 here is an example,
145
- not a shipped default. New and upgraded configurations use `"auto"`.
146
-
147
- Unspecified agents keep the team's choices. Explicit session/delegation model and
148
- effort win, then project team choices, then the older `runtime` settings, then
149
- team and agent defaults. Run `alp setup` again to rewrite Phở and Cafe's profiles, or
150
- edit the file to change one agent. Only configured oracle lenses are available, and an
151
- unavailable lens is reported rather than substituted.
152
-
153
- Example `.alp/settings.json`:
154
-
155
- ```json
156
- {
157
- "defaultAgent": "main",
158
- "workflow": { "mode": "pho" },
159
- "runtime": { "provider": "codex", "model": "gpt-5.6-sol", "reasoning": "low" }
160
- }
161
- ```
162
-
163
- `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)).
164
-
165
- For example, select Claude Code and one of its model aliases in `.alp/settings.json`:
166
-
167
- ```json
168
- {
169
- "defaultAgent": "main",
170
- "workflow": { "mode": "pho", "maxPeers": 2 },
171
- "runtime": { "provider": "claude", "model": "sonnet", "reasoning": "high" }
172
- }
173
- ```
174
-
175
- 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.
176
-
177
- `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:
178
-
179
- ```json
180
- "permissions": {
181
- "profiles": { "review": { "base": "read-only", "allow": ["Bash(npm test:*)"], "deny": ["Bash(rm:*)"] } },
182
- "agents": { "reviewer": "review" }
183
- }
184
- ```
185
-
186
- 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).
187
-
188
- 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.
189
-
190
- ## Daemon and CLI
191
-
192
- `alpd` hosts ALP sessions for all projects of a user. After `npm run build`:
193
-
194
- ```sh
195
- alp daemon start # or: status [--json] | stop | restart | install | uninstall (install: experimental)
196
- alp doctor [--fix] # what ALP needs here, what earlier runs left behind, and what alpd's log and readiness say; only --fix repairs
197
- alp backup --stop # sessions, settings, library and the projects' tasks in one file; also: verify | list
198
- alp restore FILE --stop # checks the whole backup first, keeps what it replaces; --dry-run changes nothing
199
- alp run --team cafe "Your task" # streams the agent tree; Ctrl-C interrupts
200
- alp ps [--all] # live sessions as a tree; --all adds closed ones
201
- alp top [session] # live dashboard: who runs, who waits, questions, worktrees, leases
202
- alp attach <session> # follow a running tree, or print a closed one
203
- alp send <session> "More context" # resumes a closed root first; to an agent, mail from you
204
- alp send <live-session> --prompt "Continue with this instruction" # explicit new prompt, including a recovery child
205
- alp questions # questions agents asked you
206
- alp answer <question> "Your answer" # or: --dismiss [--reason R]
207
- alp log <session> # delegations, mail, handoffs, worktrees, pins and questions of a tree
208
- alp board [--project DIR] # the project board: claims, decisions and findings
209
- alp tasks [ready] # the project's tasks; ready: what nothing blocks
210
- alp task add "Title" -p 1 --after t-91c2 # also: show | edit | close | reopen | dep
211
- alp formula pour release --var version=0.4.0 # also: list | show; tasks export | import for beads
212
- alp verify [--task t-77e0] # run the project's verify commands; --task records the result
213
- alp recall <assignment|task> "Why did you…?" # ask a finished assignment about its work
214
- alp pause [codex|claude] [--now] # hold delegation; --now parks running assignments
215
- alp resume [codex|claude] # parked assignments continue
216
- alp interrupt <session>
217
- ```
218
-
219
- `alp send <child> --prompt <text>` explicitly prompts an existing live child and follows only its output. An active turn refuses this new prompt; default root send keeps its steering behavior. It does not replay the saved recovery continuation; supply the instruction you want it to follow. Existing queued mail is consumed by the ordinary runtime once. The existing runtime prompt rules remain authoritative; this command does not lift provider pauses. Default child `alp send` remains user mail and does not unpark manual recovery. `alp resume` only continues sessions parked for the matching provider or global pause; manual and legacy recovery need an explicit prompt.
220
-
221
- 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.
222
-
223
- 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.
224
-
225
- 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.
226
-
227
- A gate holds a task back until it clears:
228
- - `human`: you approve it with `alp task gate clear` or in Paseo.
229
- - `timer`: a time passes.
230
- - `gh:pr`: a pull request merges.
231
- - `gh:run`: a workflow run succeeds.
232
-
233
- 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`).
234
-
235
- `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.
236
-
237
- `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.
238
-
239
- With `"verify": { "test": "npm test" }` (also `setup`, `typecheck`) in `.alp/settings.json`, alpd runs the project's checks itself:
240
- - before `alp_merge` applies a worktree change; if they fail, nothing is applied and main can fix the change with `alp_delegate { continueFrom }`;
241
- - in the checkout after a shared writer finishes;
242
- - on demand with `alp_verify` or `alp verify`.
243
-
244
- 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).
245
-
246
- `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.
247
-
248
- 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.
249
-
250
- Text one agent wrote reaches another without `<system-reminder>` tags, so a peer cannot pose as the harness.
251
-
252
- 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).
253
-
254
- `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).
255
-
256
- 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).
257
-
258
- 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).
259
-
260
- 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.
261
-
262
- ## The web app
263
-
264
- `alp web` opens ALP's own web app (`apps/web`) on this machine. It ships in the CLI (`@anhlp/alp`, `@anhlp/alp-cli`); you do not need Paseo or its plugin:
265
-
266
- ```sh
267
- alp web # starts the alp-web service if needed and opens its address with its access token
268
- alp web --print # prints the address instead
269
- alp web rotate # replaces the access token; open pages lose access
270
- ```
271
-
272
- `alp web` runs the `alp-web` service: one listener on `127.0.0.1` at `web.port` (default 7433; if it is busy, the next nine ports are tried) that serves the app's files and an embedded ALP gateway. The address is `http://127.0.0.1:<port>/#token=alpgw1.…`. The token is a gateway credential that alp-web keeps in `~/.alp/web/credentials.json`, apart from the standalone `alp-gateway` and its `credential list`. The page takes the token out of the address at once and keeps it only in that tab's session storage, so a reload reconnects and a new tab needs the link again. alp-web keeps alpd running (`ALP_SUPERVISE=0` turns that off) and records its pid, port and token in `~/.alp/web.json`.
273
-
274
- - **What the token may do:** sessions, projects and adding projects (`session.read`/`write`, `project.read`/`write`, `workspace.write`). File reading, attachments, terminals and changing a live session's team are off until you add them: `"web": { "permissions": ["files.read", "attachments.write"] }` in `~/.alp/settings.json`. If one entry is not a permission, alp-web warns and ignores the whole list; an entry that is not a lowercase name with dots (such as `"files-read"`) makes the whole `settings.json` invalid, so both alpd and alp-web ignore all of it (alp-web's `web.port` included, alpd's own settings too) and log `ALP_SETTINGS_INVALID`.
275
- - **Which projects:** the projects alpd knows, and the folder `alp web` ran in when it started the service, if that folder is an ALP project (it has `.alp/`). New projects are added while alp-web runs; open pages reconnect by themselves.
276
- - **Settings:** `web.port`, `web.permissions` and `"web": { "enabled": false }` (turns `alp web` off). alp-web reads them when it starts; `alp daemon stop` does not stop it. To apply a change, stop the process whose pid `~/.alp/web.json` names (`kill <pid>` on macOS and Linux, `taskkill /PID <pid>` on Windows), then run `alp web`; `alp web rotate` also restarts it, with a new token.
277
- - **Coming from the Paseo-based `alp web`:** the first `alp web` stops the old Paseo integration if it still holds `integrations/web.lock` (only when it is provably your process from this boot) and copies its token and server id to `~/.alp/paseo.json`, unless that file exists, so paired devices keep working.
278
-
279
- The app's features and limits: [docs/alp/web.md](docs/alp/web.md). macOS is the primary platform. `alp web` is untested on Windows: CI runs its tests on Linux and macOS only (a Windows trial found credential-file writes failing now and then with `EPERM`). On Windows, `alp web rotate` and the upgrade takeover do not stop a running alp-web for you: end the pid in `~/.alp/web.json` (`taskkill /PID <pid>`) first.
280
-
281
- ### Paseo's app on your phone (experimental)
282
-
283
- The optional `@anhlp/alp-paseo` package is the Paseo plugin and the Paseo integration, which runs as integration `paseo` (`~/.alp/integrations/paseo.lock`, `~/.alp/paseo.json`) on a port the system picks, never `web.port`. It no longer carries Paseo's web app: ALP's patched build of it (`paseo-web/`) was removed once `alp web` served ALP's own app (t-55ce.3). Relay pairing is experimental in the beta and off by default. The integration can reach alpd from [Paseo](https://paseo.sh)'s own app on another device, through Paseo's relay (`relay.paseo.sh`):
284
-
285
- ```sh
286
- npm install -g @anhlp/alp-paseo@beta
287
- alp-paseo-integration --register # register in the selected ALP_HOME (also discoverable on PATH)
288
- alp web pair --on # turns the relay on and prints the pairing link
289
- alp web pair # the link again; --off turns the relay off
290
- ```
291
-
292
- Open the link on the device that runs 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 password `alp web pair` prints (the token in `~/.alp/paseo.json`). 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. `alp-web-integration` remains an alias of `alp-paseo-integration`, and `ALP_WEB_INTEGRATION` of `ALP_PASEO_INTEGRATION`, for one release; a home registered with the old name (`integrations/web.json`) still starts the integration, with a hint to re-register. Details: [ALPD §64](plans/reference/ALPD.md#64-paseos-relay-and-its-app-on-another-device-2026-10-12).
293
-
294
- ## Antigravity CLI (experimental)
295
-
296
- The Antigravity and ACP providers (OpenCode, Gemini CLI) are experimental in the beta. With `agy` installed and signed in:
297
-
298
- ```sh
299
- alp provider test antigravity
300
- alp run --model antigravity:gemini-3.8-flash-high --mode full-access "Describe this project"
301
- ```
302
-
303
- 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:
304
-
305
- ```sh
306
- alp provider edit antigravity --read-only-mode instructions
307
- ```
308
-
309
- 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.
310
-
311
- 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.
312
-
313
- 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`.
314
-
315
- 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.
316
-
317
- ## Editors (ACP, experimental)
318
-
319
- `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`:
320
-
321
- ```json
322
- {
323
- "agent_servers": {
324
- "ALP": { "type": "custom", "command": "alp", "args": ["acp"], "env": {} }
325
- }
326
- }
327
- ```
328
-
329
- - 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.
330
- - 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.
331
- - When an agent asks you something, the question appears in the thread: reply with `/answer <text>`, or `/dismiss`.
332
- - 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.
333
- - MCP servers the editor offers are given to the agents beside their own.
334
-
335
- Details: [ALPD §60](plans/reference/ALPD.md#60-alp-as-an-acp-agent-2026-10-10).
336
-
337
- ## Paseo
338
-
339
- 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` (from `0.0.0-beta.2`; in beta.1 the `npm:` source fails, [#111](https://github.com/phucanh08/alp/issues/111), so there run `npm install -g @anhlp/alp-paseo@beta`, then `paseo plugin add "$(npm root -g)/@anhlp/alp-paseo"`). The plugin on `main` declares Paseo `>=0.11.1 <1.0.0`; the published `0.0.1-beta.3` declares `>=0.11.1 <0.13.0`, and `0.0.0-beta.2` and earlier `<0.12.0` (so Paseo 0.12 needs `0.0.1-beta.3` or later, and Paseo 0.13 needs a release after `0.0.1-beta.3`). 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.
340
-
341
- **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)).
342
-
343
- ### Build and add the plugin to Paseo
344
-
345
- 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 later, up to 0.12.x (the Tasks panel needs the 0.11.1 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`.
346
-
347
- Install dependencies, type-check the plugin, and build its server bundle:
348
-
349
- ```sh
350
- npm ci
351
- npm run check
352
- npm run build:paseo
9
+ alp --version
353
10
  ```
354
11
 
355
- 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**.
356
-
357
- 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:
358
-
359
- ```sh
360
- paseo reload --json
361
- ```
362
-
363
- Paseo requires an absolute path when adding a local plugin. From the repository root, run one of the following commands.
364
-
365
- PowerShell:
366
-
367
- ```powershell
368
- paseo plugin add (Resolve-Path .\integrations\paseo).Path
369
- ```
370
-
371
- macOS/Linux:
372
-
373
- ```sh
374
- paseo plugin add "$(pwd)/integrations/paseo"
375
- ```
376
-
377
- Confirm that `alp-provider` is running and that the `alp` provider is available:
378
-
379
- ```sh
380
- paseo plugin ls
381
- paseo provider models alp
382
- ```
383
-
384
- After changing the plugin source, rebuild and reload the installed plugin:
385
-
386
- ```sh
387
- npm run check
388
- npm run build:paseo
389
- paseo plugin reload alp-provider
390
- ```
391
-
392
- If loading fails, inspect the plugin process output with `paseo plugin logs alp-provider`. A full daemon restart is not required for source changes.
393
-
394
- ### Phở and Cafe
395
-
396
- New projects default to Phở: main works directly or delegates to peer. Cafe
397
- keeps main as supervisor while lead implements or delegates. In both, main runs on
398
- Opus 5.5 with high effort and full access, and starts a supervisor on Sonnet 5
399
- that reviews its process after each turn and asks main about mistakes; main records
400
- lessons it follows in later sessions. Main can distill recurring lessons into a
401
- skill for the roles it chooses, and open or comment on GitHub issues of the
402
- project or of ALP; the user approves each skill and each post first. Both use read-only oracle/reviewer. Phở and Cafe
403
- are ALP's built-in teams; you can make your own, with its own main, members,
404
- delegation and house rules ([teams](docs/alp/agent-library.md#teams)). Select the
405
- team in the Paseo model picker, with `alp run --team`, or in
406
- `.alp/settings.json` → `workflow.mode`; `alp teams` lists them. The default concurrent peer limit is 2;
407
- raise `workflow.maxPeers` only at the user's request. Writers in the shared checkout
408
- run one at a time, across all sessions; writing peers can run in parallel in their own
409
- git worktrees (`isolation: "worktree"`) and are merged with `alp_merge`. Oracle runs
410
- on Fable (`claude:claude-fable-5-1`) or Astra (`codex:gpt-6-astra`); main may ask
411
- both in parallel for two opinions. Runtime catalog and available plan/usage snapshots
412
- inform coordination. See [team configuration and migration](docs/alp/team-workflow.md).
413
-
414
- ## Modular monorepo development
415
-
416
- 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.
12
+ Update an npm install with npm (`npm install -g @anhlp/alp@beta`); `alp update` updates only the
13
+ ALP bundle installed from [GitHub Releases](https://github.com/phucanh08/alp/releases) with
14
+ `install.sh` (`install.ps1` on Windows), which brings its own Node.
417
15
 
418
- ## License
16
+ The libraries (`@anhlp/alp-core`, `-protocol`, `-runtime`, `-client`, `-daemon`, `-cli`) and the
17
+ Paseo plugin (`@anhlp/alp-paseo`) are JavaScript packages too.
419
18
 
420
- 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's third-party licences are in `dist/alp-web/THIRD-PARTY-NOTICES.txt` of `@anhlp/alp-cli` (`packages/cli/dist/alp-web/` in `@anhlp/alp`). `@anhlp/alp-paseo` includes code taken from Paseo (Apache-2.0, © Mohamed Boudra) and ships Paseo's licence as `LICENSE.paseo.txt`; see that package's `NOTICE`. Its bundled third-party licences are in `server/dist/THIRD-PARTY-NOTICES.txt`.
19
+ Apache-2.0; see LICENSE and NOTICE.
package/bin/alp.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ // @anhlp/alp's `alp` (t-1807): runs the CLI of its one dependency, @anhlp/alp-cli, on this Node.
3
+ import '@anhlp/alp-cli/cli';
package/package.json CHANGED
@@ -1,105 +1,28 @@
1
1
  {
2
2
  "name": "@anhlp/alp",
3
- "version": "0.0.1-beta.4",
4
- "description": "ALP command line and alpd, the per-user daemon that runs filesystem-defined Codex and Claude Code agent teams",
3
+ "version": "0.0.1-beta.7",
4
+ "description": "ALP command line for npm: runs the CLI of @anhlp/alp-cli on your Node (22.12 or later)",
5
5
  "type": "module",
6
+ "bin": {
7
+ "alp": "bin/alp.js"
8
+ },
6
9
  "files": [
7
- "packages/cli/dist",
8
- "packages/core/dist",
9
- "packages/client/dist",
10
- "dist/alpd.js",
11
- "dist/acp.js",
12
- "templates",
10
+ "bin/alp.js",
13
11
  "README.md",
14
- "docs/modular-monorepo.md",
15
- "/NOTICE",
16
- "dist/THIRD-PARTY-NOTICES.txt"
12
+ "LICENSE",
13
+ "NOTICE"
17
14
  ],
18
- "bin": {
19
- "alp": "packages/cli/dist/cli.js"
20
- },
21
- "scripts": {
22
- "test": "node scripts/test.mjs",
23
- "test:unit": "node scripts/test.mjs unit",
24
- "test:integration": "node scripts/test.mjs integration",
25
- "test:e2e": "node scripts/test.mjs e2e",
26
- "test:all": "node scripts/test.mjs all",
27
- "check": "tsc -p tsconfig.paseo.json && tsc -p tsconfig.client.json",
28
- "build": "node scripts/build-workspace.mjs cli && node scripts/build-core.mjs",
29
- "test:e2e:workflow": "node test/e2e/workflow-e2e.mjs pho && node test/e2e/workflow-e2e.mjs cafe",
30
- "test:e2e:mailbox": "node test/e2e/mailbox-e2e.mjs ask && node test/e2e/mailbox-e2e.mjs wake && node test/e2e/mailbox-e2e.mjs steer",
31
- "test:e2e:team": "node test/e2e/team-e2e.mjs",
32
- "test:e2e:claude": "node test/e2e/claude-e2e.mjs",
33
- "test:e2e:claude-runtime": "node test/e2e/claude-runtime-e2e.mjs",
34
- "test:e2e:paseo": "node test/e2e/paseo-e2e.mjs",
35
- "test:e2e:paseo-remote": "node test/e2e/paseo-remote-e2e.mjs",
36
- "test:e2e:alpd": "node scripts/build-core.mjs && node test/e2e/alpd-e2e.mjs",
37
- "test:e2e:detach": "node test/e2e/viewer-detach-e2e.mjs",
38
- "test:e2e:persistence": "node scripts/build-core.mjs && node test/e2e/persistence-e2e.mjs",
39
- "test:e2e:import": "node test/e2e/import-e2e.mjs",
40
- "test:e2e:worktree": "node scripts/build-core.mjs && node test/e2e/worktree-e2e.mjs",
41
- "test:e2e:human": "node test/e2e/human-e2e.mjs cli && node test/e2e/human-e2e.mjs paseo",
42
- "test:e2e:board": "node scripts/build-core.mjs && node test/e2e/board-e2e.mjs",
43
- "prepack": "npm run build",
44
- "build:packages": "npm run build --workspaces --if-present",
45
- "test:packages": "npm run test --workspaces --if-present",
46
- "check:boundaries": "node scripts/check-boundaries.mjs",
47
- "release:check": "npm run check:boundaries && npm run check && npm test && npm run build:packages && npm run release:pack-check",
48
- "version:package": "node scripts/version-package.mjs",
49
- "release:pack-check": "node scripts/pack-check.mjs",
50
- "release:tarball-check": "node scripts/tarball-consumer.mjs",
51
- "release:check-version": "node scripts/release-check.mjs",
52
- "release:pack": "node scripts/release-pack.mjs",
53
- "release:verify": "node scripts/release-verify.mjs",
54
- "release:consumer": "node scripts/release-consumer.mjs",
55
- "release:gate": "node scripts/release-gate.mjs",
56
- "test:packages:smoke": "node scripts/package-smoke.mjs",
57
- "test:gateway:smoke": "node scripts/gateway-smoke.mjs",
58
- "validate": "node scripts/validate.mjs",
59
- "validate:core": "node scripts/validate.mjs core",
60
- "validate:paseo": "node scripts/validate.mjs paseo",
61
- "validate:packages": "node scripts/validate.mjs packages",
62
- "check:core": "tsc -p tsconfig.core.json",
63
- "test:core:standalone": "node scripts/core-standalone-smoke.mjs",
64
- "build:paseo": "node scripts/build-workspace.mjs paseo",
65
- "dev:alp-web": "npm run dev --workspace @anhlp/alp-web",
66
- "build:alp-web": "npm run build --workspace @anhlp/alp-web",
67
- "typecheck:alp-web": "npm run typecheck --workspace @anhlp/alp-web",
68
- "test:alp-web": "npm test --workspace @anhlp/alp-web",
69
- "test:alp-web:e2e": "npm run test:e2e --workspace @anhlp/alp-web",
70
- "validate:web": "node scripts/validate.mjs web"
71
- },
72
15
  "engines": {
73
16
  "node": ">=22.12"
74
17
  },
75
- "devDependencies": {
76
- "@agentclientprotocol/sdk": "1.7.0",
77
- "@anthropic-ai/sdk": "^0.131.0",
78
- "@modelcontextprotocol/sdk": "^1.32.1",
79
- "@types/node": "22.20.5",
80
- "@types/react": "19.1.17",
81
- "@types/react-dom": "19.1",
82
- "@types/ws": "^8.18.2",
83
- "ajv": "8.20.0",
84
- "esbuild": "0.25.12",
85
- "react": "19.1.0",
86
- "react-dom": "19.1.0",
87
- "react-native": "0.81.5",
88
- "typescript": "5.9.3",
89
- "ws": "^8.22.0",
90
- "zod": "4.4.3"
91
- },
92
18
  "dependencies": {
93
- "@anhlp/alp-client": "0.0.1-beta.4",
94
- "@anhlp/alp-core": "0.0.1-beta.4",
95
- "@anhlp/alp-protocol": "0.0.1-beta.4",
96
- "@anthropic-ai/claude-agent-sdk": "^0.3.292",
97
- "smol-toml": "1.9.0"
19
+ "@anhlp/alp-cli": "0.0.1-beta.7"
98
20
  },
99
21
  "license": "Apache-2.0",
100
22
  "repository": {
101
23
  "type": "git",
102
- "url": "git+https://github.com/phucanh08/alp.git"
24
+ "url": "git+https://github.com/phucanh08/alp.git",
25
+ "directory": "npm/alp"
103
26
  },
104
27
  "homepage": "https://github.com/phucanh08/alp#readme",
105
28
  "bugs": {
@@ -109,20 +32,5 @@
109
32
  "access": "public",
110
33
  "registry": "https://registry.npmjs.org/",
111
34
  "tag": "beta"
112
- },
113
- "workspaces": [
114
- "packages/protocol",
115
- "packages/core",
116
- "packages/runtime",
117
- "packages/client",
118
- "packages/daemon",
119
- "packages/cli",
120
- "apps/tui",
121
- "apps/gateway",
122
- "integrations/paseo",
123
- "apps/web"
124
- ],
125
- "optionalDependencies": {
126
- "node-pty": "1.2.0-beta.15"
127
35
  }
128
36
  }