allye-pi 1.5.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.
package/README.md ADDED
@@ -0,0 +1,363 @@
1
+ <p align="center">
2
+ <strong>Allye Agent Plugin</strong><br>
3
+ <em>Structured workflows and specialized agents for AI coding tools</em>
4
+ </p>
5
+
6
+ <p align="center">
7
+ <a href="https://github.com/allye-app/allye-plugin/releases"><img src="https://img.shields.io/github/v/release/allye-app/allye-plugin" alt="Release"></a>
8
+ <a href="https://github.com/allye-app/allye-plugin/blob/main/LICENSE"><img src="https://img.shields.io/github/license/allye-app/allye-plugin" alt="License"></a>
9
+ <a href="https://www.npmjs.com/package/allye-opencode"><img src="https://img.shields.io/npm/v/allye-opencode" alt="npm"></a>
10
+ <a href="https://www.npmjs.com/package/allye-pi"><img src="https://img.shields.io/npm/v/allye-pi" alt="npm"></a>
11
+ <img src="https://img.shields.io/badge/Claude_Code-supported-blue" alt="Claude Code">
12
+ <img src="https://img.shields.io/badge/OpenCode-supported-green" alt="OpenCode">
13
+ <img src="https://img.shields.io/badge/Cursor-supported-purple" alt="Cursor">
14
+ <img src="https://img.shields.io/badge/Codex-supported-orange" alt="Codex">
15
+ <img src="https://img.shields.io/badge/Gemini_CLI-supported-red" alt="Gemini CLI">
16
+ <img src="https://img.shields.io/badge/Hermes_Agent-supported-yellow" alt="Hermes Agent">
17
+ <img src="https://img.shields.io/badge/Pi-supported-cyan" alt="Pi">
18
+ </p>
19
+
20
+ ---
21
+
22
+ Your AI agent has **68+ tools** but no idea when to use them. Allye adds the methodology layer — structured workflows, specialized agents, cross-session memory, and team-specific skills — so your agent plans before coding, tests before shipping, and remembers what happened yesterday.
23
+
24
+ **[Create a free Allye account →](https://allye.app/)**
25
+
26
+ **Authentication is handled via OAuth 2.1** — on every supported platform, since the MCP connection itself is OAuth-gated. Your browser opens once for login, and tokens are managed automatically.
27
+
28
+ ## What you get
29
+
30
+ | | Feature | Description |
31
+ |---|---------|-------------|
32
+ | **Workflow** | Guided delivery | Sandbox → Product Planning → Technical Planning → Orchestrator → Executor → Reviewer (Standards + Spec axes), connected by handovers between fresh, lean-context chats |
33
+ | **Planning** | Discussion phase | Gray areas identified, options presented with trade-offs, decisions captured |
34
+ | **Memory** | Cross-session continuity | Agent searches past context at start, saves session state at end |
35
+ | **TDD** | Test-driven development | Red-Green-Refactor with automatic detection of when TDD applies |
36
+ | **Skills** | Dynamic discovery | Agents find and follow your team's standards automatically — no manual config |
37
+ | **Standards** | Guided creation | No team standards? Agent suggests creating them with your chosen scope |
38
+ | **Boards** | Status progression | Correct transitions: backlog → todo → in_progress → review → done |
39
+ | **Context** | Auto-loaded profile | User context, team info, and preferences injected before first message |
40
+ | **Language** | Multi-language | Agent responds in your language — configs are English, conversations are yours |
41
+
42
+ ---
43
+
44
+ ## Installation
45
+
46
+ ### Unified installer (all agents)
47
+
48
+ The fastest path if you have a terminal — one script detects every supported agent on your machine and configures each by the path it actually uses (MCP for agents that fetch it, skills-on-disk for agents that read them from a directory):
49
+
50
+ ```bash
51
+ git clone https://github.com/allye-app/allye-plugin.git
52
+ cd allye-plugin
53
+ ./install.sh # every detected agent
54
+ ./install.sh status # what is installed, and at which version
55
+ ./install.sh install hermes
56
+ ./install.sh install pi
57
+ ./install.sh uninstall hermes
58
+ ```
59
+
60
+ Every write is additive and idempotent — your own MCP servers, plugins, and settings in each agent's config survive untouched. See [`docs/install-hermes.md`](docs/install-hermes.md) for Hermes Agent specifically (its OAuth step needs a terminal either way).
61
+
62
+ Prefer the paste-into-agent or marketplace routes below? They still work — the unified installer doesn't replace them for Claude Code, OpenCode, Cursor, Codex, or Gemini CLI.
63
+
64
+ ### Claude Code
65
+
66
+ **Step 1 — Install the plugin:**
67
+ ```
68
+ /plugin marketplace add allye-app/allye-plugin
69
+ /plugin install allye
70
+ /reload-plugins
71
+ ```
72
+
73
+ **Step 2 — Authenticate:**
74
+ 1. Run `/plugin` to open the plugin panel
75
+ 2. Find **Allye MCP Server** and click **Connect**
76
+ 3. Your browser opens for OAuth login — sign in with your Allye account, select a team, and approve
77
+ 4. Done! The MCP server connects automatically
78
+
79
+ > Authentication is handled via OAuth 2.1 — your browser opens once, and tokens are cached automatically.
80
+
81
+ After installing, you get:
82
+ - **OAuth authentication** — browser-based login, no tokens to manage
83
+ - **Bootstrap hook** — injects workflow methodology at session start
84
+ - **5 dispatched subagents** — reviewer-standards, reviewer-spec, deep-search, code-analyzer, executor, delegated via the Agent tool for phases that don't need to pause and ask you anything (executor only runs this way if you opt into automatic mode — manual is the default)
85
+ - **17 skills** — Sandbox, Planning, Technical Planning, Orchestrator, and Delivery run as skills loaded directly into your conversation, loaded on-demand by the bootstrap, so they can ask you questions when something's ambiguous
86
+ - **Parallel delivery, when a runtime is detected** — the Orchestrator can drive several independent stories at once, each in its own git worktree and its own watchable agent process; without a detected runtime, delivery degrades to the existing manual and automatic-subagent modes
87
+
88
+ #### Multiple Allye accounts (multi-tenant)
89
+
90
+ If you use different Allye accounts in different projects (e.g., personal account in `~/dev/myproject` and work account in `~/dev/company`), install the plugin with the **"local" scope** (per-project). Each project directory automatically gets its own OAuth session — no extra configuration needed.
91
+
92
+ 1. Open Claude Code in each project directory
93
+ 2. Install with local scope: `/plugin install allye` (select "local" when prompted)
94
+ 3. Run `/reload-plugins`
95
+ 4. Go to `/plugin` → **Connect** on the Allye MCP Server
96
+ 5. Log in with the Allye account you want for that project
97
+
98
+ The plugin automatically generates a unique identifier per project directory, so each project authenticates independently. You can use a different Allye account in each project without conflicts.
99
+
100
+ > **Single account users don't need this.** If you only use one Allye account, just install and authenticate — it works out of the box.
101
+
102
+ **To update:** `/plugin update allye` then `/reload-plugins`
103
+
104
+ ### OpenCode
105
+
106
+ Paste this into your agent:
107
+
108
+ ```
109
+ Install allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/install-opencode.md
110
+ ```
111
+
112
+ The agent will configure the MCP server via OAuth and install the `allye-opencode` plugin.
113
+
114
+ After installing, you get:
115
+ - **6 agents in the picker** — Allye, Allye Plan, Allye Orchestrator, Allye Build, Allye Review, Allye Deliver (Ctrl+T to switch)
116
+ - **Auto-loaded context** — your profile and team info injected before every conversation
117
+ - **Dynamic skill discovery** — agents search for your team's standards via MCP
118
+
119
+ **To update:** Paste this into your agent:
120
+ ```
121
+ Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-opencode.md
122
+ ```
123
+
124
+ ### Cursor
125
+
126
+ Paste this into Cursor's agent chat:
127
+
128
+ ```
129
+ Install allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/install-cursor.md
130
+ ```
131
+
132
+ After installing:
133
+ - **MCP server** configured in `~/.cursor/mcp.json`
134
+ - **`.cursorrules`** installed with workflow routing and non-negotiable rules
135
+
136
+ **To update:** Paste this into your agent:
137
+ ```
138
+ Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-cursor.md
139
+ ```
140
+
141
+ ### Codex (OpenAI)
142
+
143
+ Paste this into Codex:
144
+
145
+ ```
146
+ Install allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/install-codex.md
147
+ ```
148
+
149
+ After installing:
150
+ - **MCP server** configured in `~/.codex/config.toml`
151
+ - **`AGENTS.md`** installed with workflow instructions
152
+
153
+ **To update:** Paste this into your agent:
154
+ ```
155
+ Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-codex.md
156
+ ```
157
+
158
+ ### Gemini CLI
159
+
160
+ Paste this into Gemini:
161
+
162
+ ```
163
+ Install allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/install-gemini.md
164
+ ```
165
+
166
+ After installing:
167
+ - **MCP server** configured in `~/.gemini/settings.json`
168
+ - **`GEMINI.md`** installed with workflow instructions
169
+
170
+ **To update:** Paste this into your agent:
171
+ ```
172
+ Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-gemini.md
173
+ ```
174
+
175
+ ### Pi
176
+
177
+ Pi uses the published native package `allye-pi`, while keeping
178
+ `skills/*/SKILL.md` as the only canonical skill source. The installer delegates
179
+ installation to Pi's official package manager and does not edit Pi's
180
+ `settings.json` or MCP configuration:
181
+
182
+ ```bash
183
+ ./install.sh install pi # production: npm:allye-pi
184
+ ./install.sh uninstall pi # removes npm:allye-pi
185
+ ```
186
+
187
+ Other official Pi sources are available when you choose them explicitly:
188
+
189
+ ```bash
190
+ pi install npm:allye-pi
191
+ pi install git:github.com/allye-app/allye-plugin
192
+ ALLYE_PI_INSTALL_SOURCE=local ./install.sh install pi # checkout development only
193
+ ```
194
+
195
+ The installer defaults to npm. Use the Git command for a tagged repository
196
+ checkout, and the `local` opt-in only while developing this repository. See
197
+ [`docs/install-pi.md`](docs/install-pi.md) for MCP setup, mode selection, and
198
+ Herdr integration.
199
+
200
+ ### Hermes Agent
201
+
202
+ ```bash
203
+ git clone https://github.com/allye-app/allye-plugin.git
204
+ cd allye-plugin
205
+ ./install.sh install hermes
206
+ ```
207
+
208
+ After installing:
209
+ - **MCP server** configured in `~/.hermes/config.yaml` (OAuth needs a terminal — see [`docs/install-hermes.md`](docs/install-hermes.md))
210
+ - **16 skills** exported to `~/.hermes/skills/allye/` — Hermes reads skills from disk, not over MCP
211
+ - **`allye-bootstrap` plugin** installed and enabled — injects `using-allye` at session start
212
+
213
+ **To update:** `cd allye-plugin && git pull && ./install.sh install hermes`
214
+
215
+ ### Manual (all agents)
216
+
217
+ ```bash
218
+ git clone https://github.com/allye-app/allye-plugin.git
219
+ cd allye-plugin
220
+ ./install.sh
221
+ ```
222
+
223
+ Auto-detects every installed agent and configures each one — MCP for agents that fetch skills over it, skills-on-disk for Hermes.
224
+
225
+ **To update:** `cd allye-plugin && git pull && ./install.sh`
226
+
227
+ ---
228
+
229
+ ## Updating
230
+
231
+ ### Claude Code
232
+
233
+ ```
234
+ /plugin update allye
235
+ /reload-plugins
236
+ ```
237
+
238
+ ### Other agents (agent-assisted)
239
+
240
+ Paste this into your agent's chat:
241
+
242
+ | Agent | Paste this |
243
+ |-------|-----------|
244
+ | OpenCode | `Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-opencode.md` |
245
+ | Cursor | `Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-cursor.md` |
246
+ | Codex | `Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-codex.md` |
247
+ | Gemini CLI | `Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-gemini.md` |
248
+ | Hermes Agent | see [`docs/update-hermes.md`](docs/update-hermes.md) — run `./install.sh install hermes` after `git pull` |
249
+
250
+ ### Manual
251
+
252
+ ```bash
253
+ cd allye-plugin && git pull && ./install.sh
254
+ ```
255
+
256
+ ---
257
+
258
+ ## Agents
259
+
260
+ How multi-phase workflow support is implemented differs by platform, because not every platform lets a dispatched agent pause mid-task to ask you a question:
261
+
262
+ - **Claude Code** ships five dispatched subagents — **Reviewer-Standards**, **Reviewer-Spec**, **Deep Search**, **Code Analyzer**, and **Executor** — for phases that never need to interrupt you (Executor only runs this way if the Orchestrator's automatic mode is chosen for a story; its default is manual). Sandbox, Product Planning, Technical Planning, Orchestrator, and manual-mode Executor run as skills loaded directly into your conversation instead, precisely so they *can* stop and ask when something's ambiguous.
263
+ - **OpenCode** ships 6 agent-picker personas (Ctrl+T to switch) — Allye, Allye Plan, Allye Orchestrator, Allye Build, Allye Review, Allye Deliver — OpenCode's agent model supports switching personas interactively within a session, so all 6 can be full agents. The automatic-Executor dispatch mode is Claude-Code-only for now; OpenCode always runs Executor (Allye Build) as an interactive agent.
264
+ - **Cursor, Codex, Gemini CLI** — a single agent handles all phases with the same workflow knowledge (no multi-agent picker on these platforms).
265
+ - **Hermes Agent** reads skills from a directory (`~/.hermes/skills/allye/`) rather than fetching them over MCP, and gets the `using-allye` bootstrap injected by a small Python plugin at session start instead of a hook — otherwise the same single-agent, same-workflow-knowledge shape as Cursor/Codex/Gemini CLI.
266
+ - **Pi** loads the canonical repository skills through a native Pi package, injects Allye context through the configured MCP adapter, and supports explicit executor or orchestrator mode. Executor mode is the safe default for Hermes-led work; orchestrator mode can drive Herdr through the five-primitive runtime contract.
267
+
268
+ Every phase, on every platform:
269
+ - Responds in **your language** (detected from your messages, falling back to your profile only before you've said anything)
270
+ - Calls `initialize` to load your profile and team context
271
+ - **Discovers team skills** before starting — coding standards, templates, checklists
272
+ - If no standards found → **suggests creating them** with your chosen scope (personal/team/org/marketplace)
273
+ - Searches memories for past decisions and session state
274
+ - Saves session state before ending
275
+
276
+ ---
277
+
278
+ ## Workflow
279
+
280
+ Each phase runs in its own fresh, lean-context chat. When one finishes, it emits a **handover** — a block of chat text you review and paste as the first message of the next chat, which auto-detects it and loads the right skill.
281
+
282
+ ```
283
+ Sandbox → Product Planning → Technical Planning → Orchestrator ⇄ Executor → Reviewer (Standards + Spec)
284
+ ↑ |
285
+ └──── next story ───────┘
286
+ ```
287
+
288
+ ### Sandbox
289
+ Explore ideas, research before committing to scope, think out loud — no work items created here. Dispatches Deep Search / Code Analyzer subagents for research. Exits with a Discovery Doc once a direction is approved.
290
+
291
+ ### Product Planning
292
+ Understand business context → discover team templates → define hierarchy (Epic → Feature → Story) → create work items with acceptance criteria.
293
+
294
+ ### Technical Planning
295
+ Get story → **discussion phase** (identify gray areas, present options with trade-offs, capture locked decisions) → create tasks with dependency waves.
296
+
297
+ ### Orchestrator
298
+ Coordinates delivery of an already-planned feature: manages assignee and status, dispatches **Executor**, dispatches **Reviewer-Standards** and **Reviewer-Spec** in parallel once a report comes back, runs the correction loop, and cascades status up the work-item hierarchy. With a detected agent runtime (Herdr), it can dispatch several independent stories at once, each in its own git worktree and its own watchable agent process; without one, it falls back to one story at a time (manual handover, or automatic subagent dispatch — your choice per story).
299
+
300
+ ### Executor
301
+ Implements exactly one story's tasks with TDD (Red → Green → Refactor). Runs either as an interactive skill (manual mode, can ask you questions) or as a dispatched subagent (automatic mode — halts and reports back instead of guessing when a task is underspecified).
302
+
303
+ ### Reviewer — two axes
304
+ Two independent passes, dispatched together and never merged: **reviewer-standards** checks how the code is written (conventions, security, test quality), **reviewer-spec** checks whether it's what was asked for (acceptance criteria against the verification evidence, locked decisions, unrequested scope). Always dispatched automatically in parallel, since review never needs to pause and ask anyone anything. A ❌ on either axis triggers a correction round — one axis passing never offsets the other failing.
305
+
306
+ ### Delivery
307
+ Once an epic's whole status cascade completes, the Orchestrator offers — never forces — a close-out: verify all tasks done, update documentation, clean up TODOs, save a delivery memory. A deliberate step, not an automatic one.
308
+
309
+ ---
310
+
311
+ ## Skills
312
+
313
+ Skills are the knowledge base that powers the agents. 16 workflow skills are published in the **Allye marketplace** — available to all users without setup (`setup` itself is Claude Code's local install-time skill and isn't marketplace-published).
314
+
315
+ | Skill | What it teaches |
316
+ |-------|----------------|
317
+ | `using-allye` | Bootstrap — memory protocol, skill routing, handover detection, workflow gates |
318
+ | `sandbox` | Explore ideas, research a direction, exit with a Discovery Doc — no work items created |
319
+ | `product-planning` | Business requirements → Epics → Features → Stories |
320
+ | `technical-planning` | Story → Discussion Phase → Tasks with acceptance criteria |
321
+ | `orchestrator` | Coordinate delivery — assignee, dispatch Executor/Reviewer (both axes), correction loop, status cascade |
322
+ | `execution` | Task → TDD → Implementation with wave execution |
323
+ | `review` | Code review with decision context from planning |
324
+ | `delivery` | Verify → Close story → Update docs → Save memory |
325
+ | `handover-protocol` | The shared contract for handing off context between phases as chat text |
326
+ | `memory-protocol` | When and how to search/save memories across sessions |
327
+ | `tdd-workflow` | Red-Green-Refactor cycle with detection heuristic |
328
+ | `board-progression` | Status transitions and board mechanics |
329
+ | `tools-quickref` | Complete reference for all 12 MCP tools and 68+ actions |
330
+ | `verification-loop` | Deriving the AFK/HITL label from whether every task has a runnable verification command |
331
+ | `agent-runtime` | The five-primitive contract for driving an external agent runtime (Herdr), for parallel dispatch |
332
+ | `branch-landing` | Decide how a finished branch lands — merge, PR, or leave it — and tear down without losing work |
333
+
334
+ ### Custom team skills
335
+
336
+ Your team can create custom skills in Allye — agents discover and follow them automatically:
337
+
338
+ - **Code review checklist** → Allye Review follows it
339
+ - **Backend story standard** → Allye Plan uses it as template
340
+ - **Deploy checklist** → Allye Deliver follows it
341
+ - **Coding conventions** → Allye Build applies them
342
+
343
+ No team skills yet? Each agent will suggest creating them when it doesn't find standards for its domain.
344
+
345
+ ---
346
+
347
+ ## Prerequisites
348
+
349
+ - An [Allye](https://allye.app/) account — authentication is OAuth 2.1 on every platform (the MCP connection itself is OAuth-gated)
350
+ - At least one supported AI coding agent installed
351
+ - `jq` and `curl` (used by the installer and Claude Code hook)
352
+
353
+ ## Contributing
354
+
355
+ Issues and PRs are welcome. Open an issue first for anything beyond a small fix, so the approach can be agreed on before you write code. PRs are reviewed before merge — expect feedback, and please keep unrelated changes out of a single PR.
356
+
357
+ ## Roadmap
358
+
359
+ Today, Allye Agent Plugin is built around the Allye workspace. The long-term direction is to make the workflow layer (planning, orchestration, TDD, memory) work with other backends too — issue trackers like Jira and Linear, and memory stores like Obsidian or other local options — so teams can keep their existing tools and still get the methodology layer on top. Nothing here is scheduled yet; treat it as direction, not a commitment.
360
+
361
+ ## License
362
+
363
+ MIT
@@ -0,0 +1,174 @@
1
+ # Install Allye for Pi
2
+
3
+ The Pi adapter is a thin native Pi package. It does not copy workflow skills or
4
+ replace Pi's MCP configuration:
5
+
6
+ - `skills/*/SKILL.md` in this repository remains the canonical skill source;
7
+ - the adapter exposes that directory through Pi's `resources_discover` event;
8
+ - Allye context and memory are loaded through the already configured `allye`
9
+ MCP server via `pi-mcp-adapter`;
10
+ - Herdr is exposed only in explicit Pi orchestrator mode.
11
+
12
+ ## Official package sources
13
+
14
+ ### npm (default production install)
15
+
16
+ ```text
17
+ ./install.sh install pi
18
+ # equivalent to:
19
+ pi install npm:allye-pi
20
+
21
+ ./install.sh uninstall pi
22
+ # equivalent to:
23
+ pi remove npm:allye-pi
24
+ ```
25
+
26
+ The installer delegates installation and persistence to Pi's official package
27
+ manager. It never edits `~/.pi/agent/settings.json` manually and the default
28
+ source is always the published npm package. Restart Pi (or run `/reload`) after
29
+ installation.
30
+
31
+ ### Git
32
+
33
+ Use Git when you want Pi to install the repository package directly, preferably
34
+ at a tag for reproducibility:
35
+
36
+ ```text
37
+ pi install git:github.com/allye-app/allye-plugin
38
+ pi remove git:github.com/allye-app/allye-plugin
39
+ ```
40
+
41
+ This is separate from `./install.sh install pi`, which intentionally remains an
42
+ npm install.
43
+
44
+ ### Local checkout (development only)
45
+
46
+ A checkout path is supported, but only through an explicit opt-in so a normal
47
+ production install cannot accidentally load uncommitted code:
48
+
49
+ ```text
50
+ cd /path/to/allye-plugin
51
+ ALLYE_PI_INSTALL_SOURCE=local ./install.sh install pi
52
+ ALLYE_PI_INSTALL_SOURCE=local ./install.sh uninstall pi
53
+ ```
54
+
55
+ That delegates to `pi install /absolute/path/to/allye-plugin` and
56
+ `pi remove /absolute/path/to/allye-plugin`. Pi manages the package settings and
57
+ runtime dependencies in every case; `skills/*/SKILL.md` remains the single
58
+ canonical skill tree.
59
+
60
+ The installer deliberately does **not** edit any MCP file. Relative project
61
+ paths are resolved from the installer `PWD`, or from `ALLYE_PI_PROJECT_DIR` when
62
+ installing for a different project. Configure Allye in
63
+ one of the sources supported by `pi-mcp-adapter`: project `.mcp.json` or
64
+ `.pi/mcp.json`, `~/.config/mcp/mcp.json`, `~/.agents/mcp.json`, `~/.agents/mcp/mcp.json`, or
65
+ `~/.pi/agent/mcp.json` (or `$PI_CODING_AGENT_DIR/mcp.json` when that Pi
66
+ override is set). For example, use an
67
+ `allye` server pointing to `https://mcp.allye.app/mcp/<tenant-slug>`.
68
+ Authenticate with `/mcp-auth allye` when required. Existing MCP servers are
69
+ preserved. `./install.sh install pi` reports the first supported source that
70
+ already contains Allye and warns only when none does.
71
+
72
+ Both npm and Git packages use the root Pi manifest and let Pi install
73
+ `pi-mcp-adapter` as a runtime dependency. The npm tarball contains the adapter
74
+ source, canonical `skills/` directory, and Pi documentation; it is not the full
75
+ plugin checkout and is not the installer input.
76
+
77
+ ## Modes
78
+
79
+ Pi is an executor by default, which is the safe mode when Hermes is the master.
80
+ The mode can be selected before starting a session:
81
+
82
+ ```text
83
+ ALLYE_PI_MODE=executor pi
84
+ ALLYE_PI_MODE=orchestrator pi
85
+ ```
86
+
87
+ `ALLYE_ORCHESTRATOR=hermes` always forces executor mode. Pi orchestrator mode
88
+ also requires both `ALLYE_ORCHESTRATION_RUN_ID` and `ALLYE_WORK_ITEM_KEY`; an
89
+ explicit local lock is acquired before `allye_runtime` becomes active. The claim
90
+ contains run/work-item identity, PID, session identity when available, a nonce,
91
+ and a 30-minute lease. Normal `session_shutdown` aborts waits and removes only
92
+ the exact claim owned by that instance. If a process crashes, recovery is
93
+ disabled by default; after confirming the recorded local PID is gone and the
94
+ lease expired, set `ALLYE_PI_RECOVER_STALE_LOCK=1` to quarantine and replace the
95
+ lock. Active, unreadable, changed, or inconclusive locks fail closed. In a
96
+ session, `/allye-mode executor` and `/allye-mode orchestrator` change the active
97
+ mode only when the same guard succeeds. Only orchestrator mode enables the
98
+ `allye_runtime` tool.
99
+
100
+ ### Pi orchestrator
101
+
102
+ With `ALLYE_PI_MODE=orchestrator`, Pi coordinates the canonical workflow and may
103
+ use `allye_runtime` for Herdr's `detect`, `spawn`, `dispatch`, `wait`, and
104
+ Allye-backed `collect` operations. Parallel stories require separate worktrees;
105
+ the pane cwd remains the plugin-enabled repository root and absolute worktree
106
+ paths are placed in each briefing. The adapter does not create work items or change statuses automatically.
107
+ Status updates by an assigned executor remain allowed through the canonical
108
+ `execution` skill; pane/dispatch ownership is separate from status ownership.
109
+
110
+ ### Pi executor / Hermes master
111
+
112
+ In executor mode, Pi reads the handed-over story/tasks, implements only that
113
+ scope, follows the canonical `execution` skill, and may advance its assigned
114
+ tasks to `in_progress` and `review` when the work and verification are complete.
115
+ It does not create or dispatch panes, assume orchestration, or change scope.
116
+ Hermes can remain the master and dispatch Pi or another agent through Herdr; Pi
117
+ and Hermes must not orchestrate the same work item simultaneously.
118
+
119
+ ## Existing Pi startup extension
120
+
121
+ This package includes its own Allye bootstrap. If a user already has a separate
122
+ `allye-memory-startup.ts`, both can be loaded without changing global files, but
123
+ startup context may be fetched twice. To keep the existing global bootstrap as
124
+ the only startup fetcher, set `ALLYE_PI_NATIVE_BOOTSTRAP=0`; canonical skill
125
+ loading, mode handling, team-selection guidance, and the Herdr guard remain
126
+ available.
127
+
128
+ When `initialize` reports multiple teams without an active team, the adapter does
129
+ not choose one silently and skips team-scoped memory search. If initialization
130
+ fails or its payload is unreadable, the bootstrap is also fail-closed and marks
131
+ Allye as unavailable rather than pretending a team is resolved. It injects the
132
+ team list or connectivity error and instructs the agent to use `allye_team` with
133
+ `team_switch` first. In an interactive session, `/allye-team <name|prefix|id>`
134
+ is available; in headless mode the same instruction is injected for the
135
+ model/user to follow.
136
+
137
+ ## Local development
138
+
139
+ From the repository root:
140
+
141
+ ```text
142
+ npm install
143
+ npm run typecheck
144
+ npm run test:pi
145
+ ./install.sh status
146
+ jq -e '.pi.extensions and (.pi.skills == ["./skills"])' package.json
147
+ ```
148
+
149
+ The extension is at `packages/allye-pi/src/index.ts`. Test it without changing
150
+ Pi's global settings with:
151
+
152
+ ```text
153
+ pi -e ./packages/allye-pi/src/index.ts -p "Report the active Allye mode"
154
+ ```
155
+
156
+ When `allye_runtime dispatch` registers a wait, the wait runs inside the Pi
157
+ process through managed `pi.exec`. On settlement it persists a durable session
158
+ entry, shows a UI notification/message when available, and queues a follow-up
159
+ turn to the Pi orchestrator. That message is evidence only and explicitly tells
160
+ the orchestrator to run `allye_runtime collect` and inspect Allye
161
+ `work_children`, Review memories, and Implementation memories before declaring
162
+ completion. Normal completion, timeout, error, and abort are distinguished.
163
+ Manual `herdr agent wait` commands started outside this Pi session (for example
164
+ with `nohup` or Bash) do not wake Pi and do not generate this notification.
165
+
166
+ A real Herdr dispatch still requires `HERDR_ENV=1`, a compatible Herdr session,
167
+ an existing isolated worktree, explicit orchestrator mode, and an orchestration
168
+ run/work-item claim. Pi records workspace/tab/pane/agent ownership in memory for
169
+ future safe teardown; it never adopts foreign panes, stops Herdr, closes panes,
170
+ merges, pushes, or publishes. The lock is local to the Pi checkout/agent
171
+ configuration and is **not** a distributed Allye lock: Hermes and Pi must still
172
+ coordinate the run externally when operating on different machines/process
173
+ homes. A stale lock can be manually investigated using its PID, lease, and owner
174
+ token; automatic recovery is intentionally opt-in.
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "allye-pi",
3
+ "version": "1.5.1",
4
+ "description": "Pi package adapter for the canonical Allye workflow",
5
+ "type": "module",
6
+ "keywords": [
7
+ "pi-package",
8
+ "allye",
9
+ "workflow"
10
+ ],
11
+ "files": [
12
+ "packages/allye-pi/src/index.ts",
13
+ "packages/allye-pi/tsconfig.json",
14
+ "skills",
15
+ "docs/install-pi.md",
16
+ "LICENSE"
17
+ ],
18
+ "pi": {
19
+ "extensions": [
20
+ "./packages/allye-pi/src/index.ts"
21
+ ],
22
+ "skills": [
23
+ "./skills"
24
+ ]
25
+ },
26
+ "dependencies": {
27
+ "pi-mcp-adapter": "^2.23.0"
28
+ },
29
+ "peerDependencies": {
30
+ "@earendil-works/pi-coding-agent": ">=0.84.0",
31
+ "typebox": "*"
32
+ },
33
+ "devDependencies": {
34
+ "@earendil-works/pi-coding-agent": "^0.84.1",
35
+ "@types/node": "^22.0.0",
36
+ "typebox": "^1.3.3",
37
+ "typescript": "^5.9.0"
38
+ },
39
+ "scripts": {
40
+ "typecheck": "tsc --noEmit -p packages/allye-pi/tsconfig.json",
41
+ "test:pi": "node --experimental-strip-types --test packages/allye-pi/src/index.test.ts",
42
+ "test:installer": "bash install/test-pi.sh"
43
+ },
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "https://github.com/allye-app/allye-plugin",
47
+ "directory": "."
48
+ },
49
+ "license": "MIT"
50
+ }