create-metamynd-agent 0.7.0 → 0.7.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 +15 -2
- package/index.mjs +32 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,10 @@ enforcement boundary — see [Separate tool gateway](#separate-tool-gateway-defa
|
|
|
16
16
|
|
|
17
17
|
## Free local harness (no account, no network, `--harness`)
|
|
18
18
|
|
|
19
|
+
> **Without MetaMynd, you can be bypassed.** `--harness` proves your policy logic works — it does
|
|
20
|
+
> not enforce it against a caller trying to get around it. See [What this is not](#what-this-is-not)
|
|
21
|
+
> below before you rely on it for anything beyond testing rules.
|
|
22
|
+
|
|
19
23
|
```bash
|
|
20
24
|
npm create metamynd-agent@latest -- --harness # or: npx create-metamynd-agent --harness
|
|
21
25
|
```
|
|
@@ -39,6 +43,8 @@ my-agent/
|
|
|
39
43
|
|
|
40
44
|
### What this is not
|
|
41
45
|
|
|
46
|
+
**Without MetaMynd, you can be bypassed.** Everything below is why, precisely.
|
|
47
|
+
|
|
42
48
|
No anchored or cross-party-verifiable identity, no dashboard reachable when your machine is off, no
|
|
43
49
|
owner queue someone *else* can approve from, no anchored evidence, no enforced platform Standards.
|
|
44
50
|
That set of things is the hosted platform — and getting there later is a **config change, not a
|
|
@@ -81,6 +87,8 @@ agent with your own limits.
|
|
|
81
87
|
|
|
82
88
|
`--sandbox` always scaffolds the single-process shape (no `gateway/`) — it's a shared identity never
|
|
83
89
|
meant to hold real credentials, so there's nothing here worth a separate enforcement boundary for.
|
|
90
|
+
Note this is a narrower gap than `--harness`'s: `--sandbox` DOES call MetaMynd for the decision, it
|
|
91
|
+
just still has nowhere else for the tool to live, so the same in-process bypass applies regardless.
|
|
84
92
|
The generated project's own README says so. The full flow below is what scaffolds one by default.
|
|
85
93
|
|
|
86
94
|
## Use
|
|
@@ -126,6 +134,10 @@ npm start
|
|
|
126
134
|
|
|
127
135
|
### Separate tool gateway (default)
|
|
128
136
|
|
|
137
|
+
This is the other half of **without MetaMynd, you can be bypassed**: WITH it — specifically, with
|
|
138
|
+
`gateway/`, the second process this scaffolds by default — you can't be, the same way the hosted
|
|
139
|
+
platform's own MCP counterparty can't be talked around by a compromised agent.
|
|
140
|
+
|
|
129
141
|
`guard.guardTool()` in `index.mjs` still runs — it's a fast, local, client-side pre-check that gives
|
|
130
142
|
good UX (fail fast on an obviously-blocked call, no round trip) — but it is **not** what stops a
|
|
131
143
|
bypass. It still calls its handler in the SAME process regardless of where the decision came from,
|
|
@@ -142,8 +154,9 @@ AgentSafe repo (mutual handshake, x402 payment binding, capability tokens) — t
|
|
|
142
154
|
just the part that closes the bypass, not the whole protocol.
|
|
143
155
|
|
|
144
156
|
Pass `--no-gateway` to opt out and get the old single-process scaffold instead — e.g. if you're
|
|
145
|
-
already running your own separate gateway and don't need this one.
|
|
146
|
-
|
|
157
|
+
already running your own separate gateway and don't need this one. **You are back to being
|
|
158
|
+
bypassable if you do**, for the same structural reason `--harness` is; the generated project's own
|
|
159
|
+
README says so plainly.
|
|
147
160
|
|
|
148
161
|
## Non-interactive
|
|
149
162
|
|
package/index.mjs
CHANGED
|
@@ -420,6 +420,10 @@ console.log(dim(' - the blocked call never reached your tool at all.'));
|
|
|
420
420
|
console.log(dim(' - every decision was recorded as tamper-evident evidence.'));
|
|
421
421
|
console.log(dim(' - if the gate were unreachable the guard fails CLOSED: it blocks.'));
|
|
422
422
|
console.log('');
|
|
423
|
+
console.log(bold(' Without MetaMynd, you can be bypassed.') + ' bookFlight() runs in THIS process -');
|
|
424
|
+
console.log(dim(' call it directly instead of gatedBookFlight and nothing above stops you.'));
|
|
425
|
+
console.log(dim(' Re-scaffold without --sandbox/--no-gateway for the default shape, which does.'));
|
|
426
|
+
console.log('');
|
|
423
427
|
console.log(' Change the cap in the dashboard (Legal Entity -> SOPs) and run again.');
|
|
424
428
|
console.log(dim(' The outcome changes. This file does not. That is the point.'));
|
|
425
429
|
console.log('');
|
|
@@ -600,6 +604,9 @@ console.log(dim(' authority, because it cannot name an action nobody delegat
|
|
|
600
604
|
console.log(dim(' - every blocked/escalated call never reached a real tool at all.'));
|
|
601
605
|
console.log(dim(' - if the gate were unreachable the guard fails CLOSED: it blocks.'));
|
|
602
606
|
console.log('');
|
|
607
|
+
console.log(bold(' With MetaMynd, you can\\'t be bypassed.') + ' ./gateway is why - it independently');
|
|
608
|
+
console.log(dim(' re-verified step 1 before running it, and holds the tool this file never can.'));
|
|
609
|
+
console.log('');
|
|
603
610
|
console.log(' Change the cap in the dashboard (Legal Entity -> SOPs) and run again.');
|
|
604
611
|
console.log(dim(' The outcome changes. This file does not. That is the point.'));
|
|
605
612
|
console.log('');
|
|
@@ -682,7 +689,8 @@ A MetaMynd/AgentSafe-governed agent, scaffolded with \`create-metamynd-agent\`.
|
|
|
682
689
|
|
|
683
690
|
${gatewaySection}${
|
|
684
691
|
withGateway
|
|
685
|
-
?
|
|
692
|
+
? `**With MetaMynd's gateway, you can't be bypassed** — that's what this section is about.
|
|
693
|
+
This scaffold's default shape (agent + separate gateway process, port ${gatewayPort} by
|
|
686
694
|
default) is the actual enforcement boundary: \`guard.guardTool()\` in \`index.mjs\` is a
|
|
687
695
|
client-side convenience, not a boundary — it still runs its handler in-process regardless of
|
|
688
696
|
where the decision came from. What actually stops a bypass is that \`bookFlight()\` itself only
|
|
@@ -690,15 +698,16 @@ exists in \`./gateway\`, a process this one cannot reach into, which independent
|
|
|
690
698
|
every request against this agent's own policy bundle. Re-scaffold with \`--no-gateway\` for the
|
|
691
699
|
old single-process shape — it is NOT a separate enforcement boundary; see its own generated
|
|
692
700
|
README for why.`
|
|
693
|
-
:
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
anything able to call \`bookFlight()\`
|
|
698
|
-
it. If this tool ever holds a real
|
|
699
|
-
\`--no-gateway\` for the default
|
|
700
|
-
|
|
701
|
-
|
|
701
|
+
: `**Without MetaMynd, you can be bypassed** — this is that case. This scaffold has no
|
|
702
|
+
separate gateway process (either \`--sandbox\`, which never provisions real credentials, or
|
|
703
|
+
\`--no-gateway\` was passed): \`guard.guardTool()\` wraps a tool in the SAME process as the check
|
|
704
|
+
itself. That is a client-side convenience, not a boundary — it still runs your tool's handler
|
|
705
|
+
in-process regardless of where the decision came from, so anything able to call \`bookFlight()\`
|
|
706
|
+
directly gets the same result the gate would have given it. If this tool ever holds a real
|
|
707
|
+
credential, provision for real (drop \`--sandbox\`) without \`--no-gateway\` for the default
|
|
708
|
+
shape, which puts the tool behind a separate process instead. This is the same structural gap
|
|
709
|
+
\`--harness\`'s README documents, for the same reason: a cooperative in-process check has no
|
|
710
|
+
counterparty to disagree with a caller that skips it.`
|
|
702
711
|
}
|
|
703
712
|
|
|
704
713
|
## Change the rules
|
|
@@ -828,7 +837,8 @@ function gatewayGitignore() {
|
|
|
828
837
|
function gatewayReadme(slug, scope, port) {
|
|
829
838
|
return `# ${slug}-gateway
|
|
830
839
|
|
|
831
|
-
|
|
840
|
+
**With MetaMynd, you can't be bypassed.** This process is why. It is the **real enforcement
|
|
841
|
+
boundary** for \`${slug}\`'s tool(s) — not \`../index.mjs\`.
|
|
832
842
|
|
|
833
843
|
## Why this exists
|
|
834
844
|
|
|
@@ -1552,12 +1562,17 @@ console.log(dim(' authority, because it cannot name an action nobody delegat
|
|
|
1552
1562
|
console.log(dim(' - the blocked call never reached your tool at all.'));
|
|
1553
1563
|
console.log(dim(' - every decision is in ./metamynd-harness.log.jsonl - yours, locally.'));
|
|
1554
1564
|
console.log('');
|
|
1565
|
+
console.log(bold(' Without MetaMynd, you can be bypassed.') + ' bookFlight() above runs in THIS');
|
|
1566
|
+
console.log(dim(' process - call it directly instead of gatedBookFlight and nothing stops you.'));
|
|
1567
|
+
console.log(dim(' --harness proves your policy logic; it does not enforce it against that.'));
|
|
1568
|
+
console.log('');
|
|
1555
1569
|
console.log(' Edit ./metamynd-rules.json (or the dashboard) and run again - the outcome');
|
|
1556
1570
|
console.log(dim(' changes. This file does not. That is the point.'));
|
|
1557
1571
|
console.log('');
|
|
1558
1572
|
console.log(dim(' Ready for more than one machine, a queue someone else can approve from,'));
|
|
1559
|
-
console.log(dim(' anchored evidence, or KYC/KYB-backed identity
|
|
1560
|
-
console.log(dim('
|
|
1573
|
+
console.log(dim(' anchored evidence, or KYC/KYB-backed identity, AND a separate gateway process'));
|
|
1574
|
+
console.log(dim(' that closes the bypass above? That is the hosted platform - drop --harness'));
|
|
1575
|
+
console.log(dim(' and provision there; the same guardTool() call keeps working.'));
|
|
1561
1576
|
console.log('');
|
|
1562
1577
|
dashboard.close();
|
|
1563
1578
|
`;
|
|
@@ -1607,6 +1622,8 @@ open the dashboard to approve it), and a BLOCK (an action outside the mandate en
|
|
|
1607
1622
|
|
|
1608
1623
|
## What this is not
|
|
1609
1624
|
|
|
1625
|
+
**Without MetaMynd, you can be bypassed.** Everything below is why, precisely.
|
|
1626
|
+
|
|
1610
1627
|
No anchored/verifiable identity, no cross-party trust, no evidence anyone but you can audit,
|
|
1611
1628
|
no dashboard reachable when this machine is off, no owner queue someone else can approve from.
|
|
1612
1629
|
That's the hosted platform (\`npx create-metamynd-agent\`, without \`--harness\`) — same
|
|
@@ -1617,8 +1634,8 @@ cooperative library this process embeds — call the tool handler directly inste
|
|
|
1617
1634
|
one and nothing stops you, because there is no second party in the loop to disagree with you.
|
|
1618
1635
|
That's structural, not a bug: use this harness to govern your own agent's own honest behavior,
|
|
1619
1636
|
not as a defense against an agent (or a person) actively trying to get around it. The hosted
|
|
1620
|
-
platform's
|
|
1621
|
-
agent's signed authority for itself instead of trusting that the agent's own guard ran.
|
|
1637
|
+
platform's default scaffold doesn't have this gap, because a SEPARATE gateway process re-verifies
|
|
1638
|
+
the agent's signed authority for itself instead of trusting that the agent's own guard ran.
|
|
1622
1639
|
`;
|
|
1623
1640
|
}
|
|
1624
1641
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-metamynd-agent",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Scaffold a MetaMynd/AgentSafe-governed AI agent in one command — logs in, provisions the agent (identity + mandate + SOP + Standards) in a single call, writes agent.metamynd.json plus a runnable agent + separate tool-gateway process (the real enforcement boundary). --harness scaffolds a free, local, zero-network governance harness instead.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|