allye-pi 1.7.1 → 1.8.0

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 CHANGED
@@ -36,30 +36,28 @@ Your AI agent has **68+ tools** but no idea when to use them. Allye adds the met
36
36
  | **Skills** | Dynamic discovery | Agents find and follow your team's standards automatically — no manual config |
37
37
  | **Standards** | Guided creation | No team standards? Agent suggests creating them with your chosen scope |
38
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 |
39
+ | **Context** | On-demand profile | Agents load user context, team info, and preferences through the authenticated `allye` MCP tools |
40
40
  | **Language** | Multi-language | Agent responds in your language — configs are English, conversations are yours |
41
41
 
42
42
  ---
43
43
 
44
44
  ## Installation
45
45
 
46
- ### Unified installer (all agents)
46
+ ### Repository installer boundary
47
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):
48
+ The repository includes config-shape adapters and distribution verification, but
49
+ shared runtime writes are currently fail-closed unless an API-backed ownership
50
+ operation authorizes them. Physical uninstall is also blocked. Use the native
51
+ platform procedures below; `./install.sh status` is safe for local inspection.
49
52
 
50
53
  ```bash
51
54
  git clone https://github.com/allye-app/allye-plugin.git
52
55
  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
56
+ ./install.sh status
58
57
  ```
59
58
 
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.
59
+ A blocked `./install.sh install ...` or `./install.sh uninstall ...` result means
60
+ no shared configuration was changed. It is not installation or cleanup success.
63
61
 
64
62
  ### Claude Code
65
63
 
@@ -73,7 +71,7 @@ Prefer the paste-into-agent or marketplace routes below? They still work — the
73
71
  **Step 2 — Authenticate:**
74
72
  1. Run `/plugin` to open the plugin panel
75
73
  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
74
+ 3. Your browser opens for OAuth login — sign in with your Allye account, select a tenant, and approve
77
75
  4. Done! The MCP server connects automatically
78
76
 
79
77
  > Authentication is handled via OAuth 2.1 — your browser opens once, and tokens are cached automatically.
@@ -85,19 +83,12 @@ After installing, you get:
85
83
  - **17 composable skills** — discovery, planning, execution, review, delivery, memory, verification, and delegation playbooks loaded as needed; no universal phase chain is required
86
84
  - **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
85
 
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.
86
+ #### Tenant selection
99
87
 
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.
88
+ Every project uses the same `allye` server URL:
89
+ `https://mcp.allye.app/mcp`. Choose the tenant during OAuth consent. Separate
90
+ authorizations create independent grants without encoding a tenant or account in
91
+ the URL.
101
92
 
102
93
  **To update:** `/plugin update allye` then `/reload-plugins`
103
94
 
@@ -147,7 +138,7 @@ Install allye-plugin following: https://raw.githubusercontent.com/allye-app/ally
147
138
  ```
148
139
 
149
140
  After installing:
150
- - **MCP server** configured in `~/.codex/config.toml`
141
+ - **`allye` MCP server** at `https://mcp.allye.app/mcp`, authenticated by Codex's native OAuth flow
151
142
  - **`AGENTS.md`** installed with workflow instructions
152
143
 
153
144
  **To update:** Paste this into your agent:
@@ -175,54 +166,25 @@ Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye
175
166
  ### Pi
176
167
 
177
168
  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:
169
+ `skills/*/SKILL.md` as the only canonical skill source. Install through Pi's
170
+ package manager:
188
171
 
189
172
  ```bash
190
173
  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
174
  ```
194
175
 
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.
176
+ Configure one `allye` server at `https://mcp.allye.app/mcp` in the effective
177
+ pi-mcp-adapter source, then run `/mcp-auth allye` and `/mcp reconnect allye`.
178
+ The package and repository installer do not edit Pi's MCP configuration. See
179
+ [`docs/install-pi.md`](docs/install-pi.md) for source selection, authentication,
180
+ and the installer boundary.
199
181
 
200
182
  ### Hermes Agent
201
183
 
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`
184
+ Follow [`docs/install-hermes.md`](docs/install-hermes.md) for its native package
185
+ and OAuth procedure. The repository installer preserves its fail-closed
186
+ ownership boundary and must not be described as a general-purpose config writer
187
+ or cleanup command.
226
188
 
227
189
  ---
228
190
 
@@ -245,13 +207,10 @@ Paste this into your agent's chat:
245
207
  | Cursor | `Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-cursor.md` |
246
208
  | Codex | `Update allye-plugin following: https://raw.githubusercontent.com/allye-app/allye-plugin/main/docs/update-codex.md` |
247
209
  | 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` |
210
+ | Hermes Agent | see [`docs/update-hermes.md`](docs/update-hermes.md) for the native update procedure |
249
211
 
250
- ### Manual
251
-
252
- ```bash
253
- cd allye-plugin && git pull && ./install.sh
254
- ```
212
+ The repository's `install.sh` remains an inspection and API-authorized
213
+ distribution boundary; it does not replace these native updates.
255
214
 
256
215
  ---
257
216
 
@@ -269,7 +228,7 @@ Every phase, on every platform:
269
228
  - Responds in **your language** (detected from your messages, falling back to your profile only before you've said anything)
270
229
  - Calls `initialize` to load your profile and team context
271
230
  - **Discovers team skills** before starting — coding standards, templates, checklists
272
- - If no standards found → **suggests creating them** with your chosen scope (personal/team/organization). Marketplace is a legacy read-only browsing/source surface, never a write destination.
231
+ - If no standards found → **suggests creating them** with your chosen scope (personal/team/organization). The internal library is the only Skills source.
273
232
  - Searches memories for past decisions and session state
274
233
  - Saves session state before ending
275
234
 
@@ -310,7 +269,7 @@ Once an epic's whole status cascade completes, the Orchestrator offers — never
310
269
 
311
270
  ## Skills
312
271
 
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).
272
+ Skills are the internal knowledge base that powers the agents. Workflow skills ship with the installed package and are available through the internal Skills library.
314
273
 
315
274
  | Skill | What it teaches |
316
275
  |-------|----------------|
@@ -1,7 +1,11 @@
1
1
  # Install Allye for Pi
2
2
 
3
- The Pi adapter is a thin native Pi package. It does not copy workflow skills or
4
- replace Pi's MCP configuration:
3
+ The Pi adapter is a thin native Pi package. Installation/configuration is not
4
+ API authorization, release approval, publication, or distribution success. Official
5
+ distribution consumes only the API-authorized immutable release identity
6
+ (`skill_id`, `release_id`, `version`, canonical SHA-256 hash, and supplied origin); a revoked or
7
+ otherwise ineligible release remains blocked until the API returns matching physical
8
+ runtime evidence. It does not copy workflow skills or replace Pi's MCP configuration:
5
9
 
6
10
  - `skills/*/SKILL.md` in this repository remains the canonical skill source;
7
11
  - the adapter exposes that directory through Pi's `resources_discover` event;
@@ -9,70 +13,74 @@ replace Pi's MCP configuration:
9
13
  MCP server via `pi-mcp-adapter`;
10
14
  - Herdr is exposed as an optional capability when the Pi session provides `HERDR_ENV=1`.
11
15
 
12
- ## Official package sources
16
+ ## Package sources and installer boundary
13
17
 
14
- ### npm (default production install)
18
+ Install the production package through Pi's native package manager:
15
19
 
16
20
  ```text
17
- ./install.sh install pi
18
- # equivalent to:
19
21
  pi install npm:allye-pi
20
-
21
- ./install.sh uninstall pi
22
- # equivalent to:
23
- pi remove npm:allye-pi
24
22
  ```
25
23
 
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.
24
+ Use Git only when the repository source is intentional, preferably at a tag:
30
25
 
31
- ### Git
26
+ ```text
27
+ pi install git:github.com/allye-app/allye-plugin
28
+ ```
32
29
 
33
- Use Git when you want Pi to install the repository package directly, preferably
34
- at a tag for reproducibility:
30
+ For development against a local checkout:
35
31
 
36
32
  ```text
37
- pi install git:github.com/allye-app/allye-plugin
38
- pi remove git:github.com/allye-app/allye-plugin
33
+ pi install /absolute/path/to/allye-plugin
39
34
  ```
40
35
 
41
- This is separate from `./install.sh install pi`, which intentionally remains an
42
- npm install.
36
+ Pi owns package persistence and runtime dependencies. Removing the package with
37
+ `pi remove <the-exact-source>` is a separate, intentional operation; it does not
38
+ remove MCP configuration or OAuth credentials.
39
+
40
+ The repository's `./install.sh install pi` path is fail-closed for shared
41
+ runtime configuration unless an API-backed ownership operation authorizes it,
42
+ and `./install.sh uninstall pi` does not perform physical removal. Use
43
+ `./install.sh status` for inspection; do not describe a blocked installer result
44
+ as installation or cleanup success.
45
+
46
+ ## Configure the canonical MCP server
47
+
48
+ The package never edits Pi's MCP files. Use the effective source displayed by
49
+ `/mcp`: project `.mcp.json` or `.pi/mcp.json`,
50
+ `~/.config/mcp/mcp.json`, `~/.agents/mcp.json`,
51
+ `~/.agents/mcp/mcp.json`, `~/.pi/agent/mcp.json`, or
52
+ `$PI_CODING_AGENT_DIR/mcp.json` when that override is set.
53
+
54
+ Define exactly one server named `allye`:
55
+
56
+ ```json
57
+ {
58
+ "allye": {
59
+ "type": "http",
60
+ "url": "https://mcp.allye.app/mcp"
61
+ }
62
+ }
63
+ ```
43
64
 
44
- ### Local checkout (development only)
65
+ The effective pi-mcp-adapter source may wrap entries under `mcpServers`; preserve
66
+ its existing shape and every unrelated server. Do not add authorization headers
67
+ or fixed OAuth client metadata.
45
68
 
46
- A checkout path is supported, but only through an explicit opt-in so a normal
47
- production install cannot accidentally load uncommitted code:
69
+ Authenticate and connect through the adapter:
48
70
 
49
71
  ```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
72
+ /mcp-auth allye
73
+ /mcp reconnect allye
53
74
  ```
54
75
 
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.
76
+ Use `/reload` after changing the effective config. `/mcp logout allye` clears
77
+ only Allye's native credential when an intentional reconnection is needed; it
78
+ does not edit or remove the server entry.
71
79
 
72
80
  Both npm and Git packages use the root Pi manifest and let Pi install
73
81
  `pi-mcp-adapter` as a runtime dependency. The npm tarball contains the adapter
74
82
  source, canonical `skills/` directory, and Pi documentation; it is not the full
75
- plugin checkout and is not the installer input.
83
+ plugin checkout and is not an installer input.
76
84
 
77
85
  ## Adaptive toolkit
78
86
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allye-pi",
3
- "version": "1.7.1",
3
+ "version": "1.8.0",
4
4
  "description": "Pi package adapter for the canonical Allye workflow",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -39,7 +39,8 @@
39
39
  "scripts": {
40
40
  "typecheck": "tsc --noEmit -p packages/allye-pi/tsconfig.json",
41
41
  "test:pi": "node --experimental-strip-types --test packages/allye-pi/src/index.test.ts",
42
- "test:installer": "bash install/test-pi.sh"
42
+ "test:adapters": "node --experimental-strip-types --test packages/allye-pi/src/runtime-adapters.test.ts",
43
+ "test:installer": "bash install/test-validation.sh && bash install/test-pi.sh && bash install/test-installer.sh && bash install/test-multi-runtime-distribution.sh && bash install/test-pi-distribution-http.sh && bash install/test-claude-distribution.sh"
43
44
  },
44
45
  "repository": {
45
46
  "type": "git",
@@ -1,103 +1,103 @@
1
1
  ---
2
2
  name: setup
3
3
  description: First-time setup for the Allye plugin. Uses OAuth for ALL platforms — no PAT.
4
- version: "1.2"
4
+ version: "1.3"
5
5
  category: bootstrap
6
6
  ---
7
7
 
8
8
  # Allye Setup
9
9
 
10
10
  <EXTREMELY_IMPORTANT>
11
- ## Allye ALWAYS uses OAuth. Never ask for a PAT.
11
+ ## Allye MCP always uses native OAuth
12
12
 
13
- The setup flow depends on whether the platform supports native MCP OAuth:
14
-
15
- - **Claude Code / Claude Desktop** → OAuth is automatic via `.mcp.json`. No setup needed.
16
- - **All other platforms** (OpenCode, Cursor, Codex, Gemini, etc.) → Run the OAuth browser login script.
17
-
18
- **NEVER ask the user for a PAT. NEVER mention PAT as an option.**
13
+ Configure one remote server named `allye` at `https://mcp.allye.app/mcp`. Let the
14
+ host runtime perform discovery, dynamic client registration, authorization-code
15
+ exchange, token storage, and refresh. Static bearer headers, PATs, fixed client
16
+ IDs, tenant-specific URLs, and external login helpers are not part of setup.
19
17
  </EXTREMELY_IMPORTANT>
20
18
 
21
- ## Step 1: Detect Platform
22
-
23
- Check which platform/agent is running. You can infer this from:
24
- - The environment (Claude Code has `CLAUDE_CODE` env, Claude Desktop has specific hooks)
25
- - The available tools and context
26
- - Or simply ask: "Which platform are you using?"
27
-
28
- ## Step 2A: Claude Code / Claude Desktop (Native OAuth)
29
-
30
- If the user is on Claude Code or Claude Desktop:
19
+ ## Step 1: Detect the platform
31
20
 
32
- > **Allye is already configured!** The plugin's `.mcp.json` handles OAuth automatically.
33
- >
34
- > The first time you use a Allye tool, your browser will open for login.
35
- > Just start using Allye — try asking me to search memories or list work items.
21
+ Infer the current platform from the runtime when possible. Otherwise ask which
22
+ supported agent the user wants to configure.
36
23
 
37
- **Stop here. No further setup needed.**
24
+ ## Step 2: Configure and authenticate one Allye entry
38
25
 
39
- ## Step 2B: Other Platforms (OAuth via Browser Login Script)
26
+ Preserve every unrelated server and credential. If an older Allye entry exists
27
+ under another name, identify its effective config source, remove only that
28
+ entry through the host's native management command, and keep only `allye`.
40
29
 
41
- For OpenCode, Cursor, Codex, Gemini, or any platform without native MCP OAuth:
30
+ ### Claude Code / Claude Desktop
42
31
 
43
- Tell the user:
32
+ The plugin's `.mcp.json` already declares `allye`. Open the MCP or plugin panel,
33
+ select **Allye**, and choose **Connect**. The browser completes consent.
44
34
 
45
- > I'll run the Allye OAuth login to connect your account via browser.
35
+ For an intentional reconnect, use **Clear authentication** for Allye, then
36
+ **Authenticate/Connect**. Do not sign out of the host account.
46
37
 
47
- ### Run the OAuth login script:
38
+ ### Codex
48
39
 
49
40
  ```bash
50
- bash "${CLAUDE_PLUGIN_ROOT:-$(pwd)}/scripts/oauth-login.sh"
41
+ codex mcp get allye >/dev/null 2>&1 \
42
+ || codex mcp add allye --url https://mcp.allye.app/mcp
43
+ codex mcp login allye
51
44
  ```
52
45
 
53
- If `CLAUDE_PLUGIN_ROOT` is not set, find the script:
46
+ If a legacy Allye entry has a different name, use `codex mcp logout <old-name>`
47
+ and `codex mcp remove <old-name>` for that entry only before adding `allye`.
54
48
 
55
- ```bash
56
- SCRIPT=$(find ~/.claude/plugins -name "oauth-login.sh" -path "*/allye*" 2>/dev/null | head -1) || SCRIPT=$(find . -name "oauth-login.sh" 2>/dev/null | head -1); echo "$SCRIPT"
49
+ ### OpenCode
50
+
51
+ Its effective `opencode.json` must contain:
52
+
53
+ ```json
54
+ {
55
+ "mcp": {
56
+ "allye": {
57
+ "type": "remote",
58
+ "url": "https://mcp.allye.app/mcp",
59
+ "enabled": true
60
+ }
61
+ }
62
+ }
57
63
  ```
58
64
 
59
- Then run it:
65
+ Preserve the rest of the file, then authenticate and confirm:
60
66
 
61
67
  ```bash
62
- bash "$SCRIPT"
68
+ opencode mcp auth allye
69
+ opencode mcp list
63
70
  ```
64
71
 
65
- The script will:
66
- 1. Open the browser for Allye OAuth login
67
- 2. Start a local callback server on port 9316
68
- 3. After the user logs in and selects a team, capture the authorization code
69
- 4. Exchange the code for tokens
70
- 5. Output `ALLYE_ACCESS_TOKEN=...` and `ALLYE_REFRESH_TOKEN=...`
72
+ ### Pi with pi-mcp-adapter
71
73
 
72
- ### Configure the platform with the obtained token:
74
+ Use the effective MCP source shown by `/mcp` and define an `allye` remote server
75
+ at the canonical URL. The Allye repository installer does not write Pi's MCP
76
+ configuration.
73
77
 
74
- **For OpenCode:**
75
- The `opencode.json` manifest uses `${ALLYE_ACCESS_TOKEN}`. Set the env var:
78
+ Authenticate and connect in Pi:
76
79
 
77
- ```bash
78
- export ALLYE_ACCESS_TOKEN="<the token from the script>"
80
+ ```text
81
+ /mcp-auth allye
82
+ /mcp reconnect allye
79
83
  ```
80
84
 
81
- Or update `opencode.json` directly with the token.
85
+ Use `/reload` after changing the effective config source. `/mcp logout allye`
86
+ clears only Allye's native credential when the user explicitly requests a
87
+ reconnection.
82
88
 
83
- **For Cursor:**
84
- Add MCP server in Cursor settings (Settings → MCP Servers):
85
- - Name: `allye-mcp`
86
- - URL: `https://mcp.allye.app/mcp`
87
- - Headers: `Authorization: Bearer <token>`
89
+ ### Other native MCP clients
88
90
 
89
- **For other platforms:**
90
- Configure the MCP connection with:
91
- - URL: `https://mcp.allye.app/mcp`
92
- - Authorization header: `Bearer <token>`
91
+ Add a remote HTTP MCP server named `allye` at the canonical URL and use the
92
+ client's native OAuth action. Preserve unrelated configuration and credentials.
93
93
 
94
- ### Confirm setup:
94
+ ## Step 3: Confirm MCP access
95
95
 
96
- > **Allye connected via OAuth!**
97
- >
98
- > Start a new session to activate the Allye tools.
96
+ Start or reload the host session, confirm the `allye` server is connected, and
97
+ invoke a read-only Allye tool. Tenant selection happens during consent; the URL
98
+ never contains a tenant slug.
99
99
 
100
- ## Step 3: Delivery configuration
100
+ ## Step 4: Delivery configuration
101
101
 
102
102
  Ask once, here, rather than at every dispatch. Five parallel stories would otherwise mean
103
103
  ten identical questions whose answer never varies.
@@ -210,16 +210,17 @@ Platform capability also constrains the map. OpenCode has six agent personas; Cu
210
210
  and Gemini CLI have one agent and no picker — routing a specific persona to them silently
211
211
  does nothing.
212
212
 
213
- ## Token Refresh
213
+ ## Authentication lifecycle
214
214
 
215
- OAuth tokens expire. When a token expires:
216
- - **Claude Code/Desktop**: Automatic refresh via OAuth flow
217
- - **Other platforms**: Run the login script again: `bash scripts/oauth-login.sh`
215
+ The host runtime rotates access and refresh tokens automatically. A normal
216
+ restart, an HTTP 403 authorization result, or an HTTP 503 dependency failure
217
+ does not require clearing credentials or opening the browser.
218
218
 
219
- ## Error Handling
219
+ An explicit grant revocation or the 90-day grant limit requires a new consent.
220
+ When the user intentionally reconnects, clear only the `allye` entry:
220
221
 
221
- - `python3` not found → Required for the OAuth callback server. Install Python 3.
222
- - `openssl` not found → Required for PKCE. Install OpenSSL.
223
- - Browser doesn't open → Copy the URL from the terminal and open manually.
224
- - Port 9316 in use → Run with a different port: `bash scripts/oauth-login.sh 9317`
225
- - `jq` not found → `brew install jq` / `sudo apt install jq`
222
+ - **Claude Code/Desktop:** Allye → **Clear authentication** → **Authenticate/Connect**
223
+ - **Codex:** `codex mcp logout allye`, then `codex mcp login allye`
224
+ - **OpenCode:** `opencode mcp logout allye`, then `opencode mcp auth allye`
225
+ - **Pi:** `/mcp logout allye`, then `/mcp-auth allye` and `/mcp reconnect allye`
226
+ - **Other clients:** use the host's clear/reconnect action scoped to `allye`
@@ -192,18 +192,17 @@ Manage and export workflow skills.
192
192
  | `skill_get` | Get skill by ID | `skill_id`* or `id`* |
193
193
  | `skill_update` | Update a skill | `skill_id`* or `id`*, `skill_name`, `skill_content`, `skill_description`, `skill_category`, `skill_is_active` |
194
194
  | `skill_delete` | Delete a skill | `skill_id`* or `id`* |
195
- | `skill_marketplace` | Browse marketplace skills | `query`, `limit`, `offset` |
196
195
  | `skill_fork` | Fork a readable source skill into an independent internal draft | `skill_id`* or `id`*, `skill_scope`*, `skill_slug` (explicit namespace key; required to retry a collision), `skill_name`, `skill_category` (scope only `personal`/`team`/`organization` — no `marketplace`) |
197
196
  | `skill_export` | Export a skill in agent format | `skill_id`* or `id`*, `skill_export_format`* |
198
197
  | `skill_import_github` | Import skill from GitHub | `repo_url`* |
199
198
  | `skill_install` | Install a skill | `skill_id`* or `id`* |
200
199
  | `skill_export_merged` | Export multiple skills merged | `skill_ids`*, `skill_export_format`* |
201
200
 
202
- **`skill_create` requires all three of `skill_content`, `skill_scope`, and `skill_category`** — easy to miss since only `skill_name` reads as obviously required. Write scopes are only `personal`, `team`, and `organization`; `marketplace` is legacy read-only browsing/source material and must never be sent as a create, import, update, fork target, publication, or rating destination.
201
+ **`skill_create` requires all three of `skill_content`, `skill_scope`, and `skill_category`** — easy to miss since only `skill_name` reads as obviously required. Write scopes are only `personal`, `team`, and `organization`. A retired public-scope request returns API error `MARKETPLACE_RETIRED` (HTTP 410): `Marketplace público foi aposentado; use a biblioteca interna de Skills.`
203
202
 
204
203
  For shared writes, the API is authoritative: the authenticated actor must be the container owner/admin, have tenant-scoped `skills:manage`, or hold an active maintainer grant. Membership gives read access, not write access. Team writes require the selected active team (`team_id`/request context); personal and organization writes do not. Use `skill_resolve` for canonical `team > organization > personal` resolution and honor its `candidates`, `selected`, `owner`, `rule`, `reason`, and `conflict` fields.
205
204
 
206
- Forks are independent drafts with `forked_from_id`, a new author, no copied grants, and preserved source provenance when available. If a fork returns `409 Conflict`, choose a different explicit `skill_slug` and retry; never silently suffix or overwrite a namespace. Marketplace can be browsed and used as readable source material for an internal fork, but it is never an internal write scope.
205
+ Forks are independent drafts with `forked_from_id`, a new author, no copied grants, and preserved source provenance when available. If a fork returns `409 Conflict`, choose a different explicit `skill_slug` and retry; never silently suffix or overwrite a namespace. The internal library is the only Skills source.
207
206
 
208
207
  **Export formats:** `cursor`, `claude`, `copilot`, `windsurf`, `opencode`, `codex`, `gemini`
209
208
  **Skill scopes (create/import/fork):** `personal`, `team`, `organization` (never `marketplace`)