allye-pi 2.8.2 → 2.9.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.
Files changed (2) hide show
  1. package/README.md +25 -8
  2. package/package.json +3 -2
package/README.md CHANGED
@@ -57,6 +57,26 @@ Every harness uses one server named `allye`. Tenant selection happens during OAu
57
57
 
58
58
  Then open `/plugin`, find the Allye MCP server, click **Connect** and sign in. Update with `/plugin update allye` and `/reload-plugins`.
59
59
 
60
+ #### Pinned preferences at session start (Claude Code only, optional)
61
+
62
+ Pair this install with your Allye account and every new, cleared or compacted session starts with the preferences you pinned in Allye, shown to the agent as quoted data, not instructions. Pairing is a second `SessionStart` hook, separate from the offline bootstrap hook.
63
+
64
+ ```
65
+ /allye:hooks pair # connects this install to your account
66
+ /allye:hooks unpair # deletes the local credential, no network call
67
+ ```
68
+
69
+ - **What it does.** `pair` creates a random secret on your machine, asks the Allye MCP (through your existing OAuth connection) for a one-time pairing code, and exchanges the code for a hook credential. It prints `Paired <device> as <email> in <organization>`: check that the account and organization are yours. A rule that allows every Allye MCP tool also approves the pairing call without a prompt, so that check is your only gate. If they are not yours, run `unpair` and revoke the device.
70
+ - **What leaves the machine.** Only the device name, the client kind (`claude-code`), a challenge (a hash of the secret), the pairing code and, on each session start, the credential as an authorization header. Never repository, file, conversation or environment content.
71
+ - **Where the credential lives.** `${CLAUDE_PLUGIN_DATA}/hook-credential.json` (`~/.claude/plugins/data/<plugin id>/`), mode 0600 in a 0700 directory. Claude Code removes it when the plugin is uninstalled from its last place. To keep the agent from reading it, add `Read(~/.claude/plugins/data/allye*/hook-credential.json)` (adjust to your plugin data directory) to `permissions.deny` in your user-level `~/.claude/settings.json`.
72
+ - **Supported API origins.** `pair` uses `https://api.allye.app`. `ALLYE_API_URL` is accepted only as `https://api.allye.app`, `https://api.zeta.allye.app` (HML) or `http://localhost:<port>` / `http://127.0.0.1:<port>` (local development).
73
+ - **Session start.** The hook makes one short request and prints the preferences, or one hint line when the credential is rejected, unsafe or the account is inactive. It is silent when you are not paired, offline or the API is unavailable. It needs `curl` and `jq`.
74
+ - **Before uninstalling.** Run `/allye:hooks unpair`, then revoke the device in Allye → Settings → Devices; unpair only deletes local files, so the credential keeps working on the server until revoked. Pair again before the expiry date shown at pairing.
75
+
76
+ #### Live session reporting (Claude Code only, optional)
77
+
78
+ When paired, hooks send Allye the state of your sessions (started, working, waiting, idle, ended), the tool names in use, subagent ids and types with their outcome, and the spec and task keys the session is bound to. The subagent type, tool names and `allye:<action>` / spec / task keys DO leave your machine; prompts, commands, tool inputs and outputs, file paths, notification and assistant messages, transcripts, the working directory, branch names and credentials never do. Allye keeps ended runs 7 days. Control it with `/allye:hooks live off|on|status`; events, fields and local files are in [docs/live-reporting.md](docs/live-reporting.md).
79
+
60
80
  ### Codex, OpenCode
61
81
 
62
82
  Paste into the agent. The install and update guides install one pinned release: the latest GitHub release unless you name a version. They check that it exists, never download from a branch, and keep a timestamped backup of any config they rewrite (`opencode.json`, `~/.codex/AGENTS.md`, `~/.codex/skills/bridge*`) under `~/.allye/backups/<harness>/`.
@@ -98,14 +118,11 @@ Who can install, where skills go, how edited, deleted and moved copies are handl
98
118
  ```
99
119
  bootstrap/allye.md shared bootstrap text (single source)
100
120
  skills/bridge/ the Bridge skill and its references
101
- skills/bridge-*/ the crew skills (Armorer, Recon, Strategist, Architect, Dispatcher,
102
- Pilot, Navigator, Copilot, Medic, Optimizer, Shield, Watcher)
103
- agents/bridge-*.md native crew subagents (Claude Code; OpenCode registers them from here):
104
- load the matching crew skill under a per-role tool allowlist
105
- hooks/ Claude Code SessionStart hook
121
+ skills/bridge-*/ the crew skills (Armorer, Recon, Strategist, Architect, Dispatcher, Pilot, Navigator, Copilot, Medic, Optimizer, Shield, Watcher)
122
+ agents/bridge-*.md native crew subagents (Claude Code; OpenCode registers them from here): load the crew skill under a per-role tool allowlist
123
+ hooks/ Claude Code hooks (bootstrap, pinned preferences, Live reporter) and the script behind /allye:hooks
106
124
  .claude-plugin/, .mcp.json Claude Code plugin and marketplace manifests
107
- manifests/codex/AGENTS.md Codex copy of the bootstrap (synced)
108
- manifests/opencode/ sample OpenCode config
125
+ manifests/ Codex copy of the bootstrap (codex/AGENTS.md, synced) and a sample OpenCode config (opencode/)
109
126
  packages/allye-opencode/ OpenCode plugin (npm: allye-opencode)
110
127
  packages/allye-pi/ Pi/OMP extension (npm: allye-pi, root package.json)
111
128
  install.sh, install/ organization skills installer and its tests
@@ -117,7 +134,7 @@ docs/ per-harness install and update guides, organization
117
134
 
118
135
  ```bash
119
136
  npm install
120
- npm test # bootstrap, hook, crew agents, skills, installer and docs gate, Pi and OpenCode tests (offline)
137
+ npm test # bootstrap, hooks (npm run test:hooks), crew agents, skills, installer and docs gate, Pi and OpenCode tests (offline)
121
138
  npm run typecheck # Pi extension
122
139
  cd packages/allye-opencode && bun install && bun run typecheck && bun run build
123
140
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allye-pi",
3
- "version": "2.8.2",
3
+ "version": "2.9.0",
4
4
  "description": "Allye extension for Pi and OMP: the Allye bootstrap, the Bridge skill and the repository-to-project link",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -47,12 +47,13 @@
47
47
  "test:pi": "node --experimental-strip-types --test packages/allye-pi/src/index.test.ts",
48
48
  "test:opencode": "node --experimental-strip-types --test packages/allye-opencode/src/skills-paths.test.ts",
49
49
  "test:installer": "bash install/test-validation.sh && bash install/test-installer.sh && npm run test:docs-gate",
50
+ "test:hooks": "bash hooks/test-allye-hooks.sh && bash hooks/test-session-preferences.sh && bash hooks/test-live-report.sh",
50
51
  "test:bootstrap": "bash test/test-bootstrap.sh && bash hooks/test-session-start.sh",
51
52
  "test:agents": "node test/test-agents.mjs",
52
53
  "test:guides": "node test/test-install-guides.mjs",
53
54
  "test:docs-gate": "bash install/test-docs-gate.sh",
54
55
  "test:skills": "node test/test-skills-text.mjs && node test/test-ci-proof.mjs && node test/test-ci-workflows.mjs",
55
- "test": "npm run test:bootstrap && npm run test:agents && npm run test:guides && npm run test:skills && npm run test:installer && npm run test:pi && npm run test:opencode"
56
+ "test": "npm run test:bootstrap && npm run test:hooks && npm run test:agents && npm run test:guides && npm run test:skills && npm run test:installer && npm run test:pi && npm run test:opencode"
56
57
  },
57
58
  "repository": {
58
59
  "type": "git",