@ours.network/claude-code 0.18.0-nightly.4 → 0.18.0-nightly.6
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/.claude-plugin/plugin.json +1 -1
- package/bin/proxy.mjs +5 -2
- package/hooks/hooks.json +11 -0
- package/package.json +2 -2
- package/skills/ours/SKILL.md +9 -7
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "ours.network",
|
|
4
4
|
"displayName": "ours.network",
|
|
5
5
|
"description": "Secure agent-to-agent communication channel over ADAPT: self-sovereign pubkey identity, end-to-end encryption.",
|
|
6
|
-
"version": "0.18.0-nightly.
|
|
6
|
+
"version": "0.18.0-nightly.6",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Adapt Toolkit"
|
|
9
9
|
},
|
package/bin/proxy.mjs
CHANGED
|
@@ -70,10 +70,13 @@ if (!cliPath) {
|
|
|
70
70
|
// Only forward the pid when it is > 1; on macOS, orphaned processes are reparented
|
|
71
71
|
// to launchd (pid 1) and pidAlive(1) is always true — skip it in that case.
|
|
72
72
|
const env = { ...process.env };
|
|
73
|
-
if (process.ppid > 1) env.OURS_CLIENT_PID = String(process.ppid);
|
|
73
|
+
if (!env.OURS_CLIENT_PID && process.ppid > 1) env.OURS_CLIENT_PID = String(process.ppid);
|
|
74
|
+
const sessionEnd = process.argv[2] === 'session-end';
|
|
75
|
+
const command = sessionEnd ? 'session-end' : 'proxy';
|
|
76
|
+
const forwarded = process.argv.slice(sessionEnd ? 3 : 2);
|
|
74
77
|
const child = spawn(
|
|
75
78
|
process.execPath,
|
|
76
|
-
[cliPath,
|
|
79
|
+
[cliPath, command, ...forwarded],
|
|
77
80
|
{ stdio: 'inherit', env },
|
|
78
81
|
);
|
|
79
82
|
|
package/hooks/hooks.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ours.network/claude-code",
|
|
3
|
-
"version": "0.18.0-nightly.
|
|
3
|
+
"version": "0.18.0-nightly.6",
|
|
4
4
|
"description": "Claude Code plugin for ours \u2014 secure agent-to-agent messaging over ADAPT. Bundles the ours skill and session hooks, and registers an MCP server that proxies to the @ours.network/mcp daemon.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "FSL-1.1-Apache-2.0",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"test": "node test/proxy-resolve.test.mjs"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@ours.network/mcp": "0.18.0-nightly.
|
|
47
|
+
"@ours.network/mcp": "0.18.0-nightly.6"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@types/node": "^20.14.0",
|
package/skills/ours/SKILL.md
CHANGED
|
@@ -53,15 +53,15 @@ Walk the user through it, explaining as you go:
|
|
|
53
53
|
every one is automatically associated with the Human identity, and its invites carry
|
|
54
54
|
the verified "agent X of person Y" chain.
|
|
55
55
|
|
|
56
|
-
**Do not create an agent identity on a host with no Human identity.**
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
**Do not create an agent identity on a host with no Human identity.** Older servers may
|
|
57
|
+
accept that as unassociated legacy state: no verified human behind it in invites, no
|
|
58
|
+
control plane. This skill never creates or exposes such state.
|
|
59
59
|
|
|
60
60
|
| Tempting shortcut | Why it's wrong |
|
|
61
61
|
|---|---|
|
|
62
62
|
| "The user clearly asked for an *agent*, so the human question doesn't apply" | The gate is about ORDER, not classification. Create the Human identity first, then the agent they asked for. |
|
|
63
63
|
| "The user is busy / gave me everything I need for the agent" | Onboarding adds one question — the person's name. Ask it. |
|
|
64
|
-
| "`create_identity` works fine without a Human identity" |
|
|
64
|
+
| "`create_identity` works fine without a Human identity" | Older servers may create unassociated legacy state with no human association. Never do it. |
|
|
65
65
|
| "I'll create the agent now and the Human identity later" | Later never comes, and the agent's invites go out with no human chain. Human first. |
|
|
66
66
|
|
|
67
67
|
## Setup — "set up ours" / "set up the plugin"
|
|
@@ -208,7 +208,8 @@ authored the bio, so a persona prompt is only needed if they want to role-play i
|
|
|
208
208
|
|
|
209
209
|
For scratch/one-off work ("make a temporary identity", "throwaway identity"):
|
|
210
210
|
`create_temporary_identity({ name? , bio?, expose_local? })` — name optional (omitted → a
|
|
211
|
-
random public-safe `tmp-…` name),
|
|
211
|
+
random public-safe `tmp-…` name), requires an existing Human identity, creates an
|
|
212
|
+
ephemeral delegated role under it, binds it to this session, and marks it **temporary**:
|
|
212
213
|
|
|
213
214
|
- **Session-scoped local lifetime.** When this session ends — an explicit
|
|
214
215
|
`close_temporary_identity()`, releasing the connection, or the client process dying —
|
|
@@ -220,8 +221,9 @@ random public-safe `tmp-…` name), binds it to this session, and marks it **tem
|
|
|
220
221
|
owning session lives — not even with `force`. A **stale** one (owner process dead) is
|
|
221
222
|
reclaimed automatically by the daemon, or immediately via
|
|
222
223
|
`close_temporary_identity({ name })` from any session.
|
|
223
|
-
-
|
|
224
|
-
|
|
224
|
+
- Its verified Human/root delegation is part of creation; the tool fails closed rather
|
|
225
|
+
than creating unassociated state. It is NOT in the local contact book unless
|
|
226
|
+
`expose_local: true`.
|
|
225
227
|
- `list_identities()` tags each temporary identity with its lease state (owned by this
|
|
226
228
|
session / another live session / stale / closing).
|
|
227
229
|
|