diff --git a/cli/proofable.mjs b/cli/proofable.mjs index b54c494..702147a 100644 --- a/cli/proofable.mjs +++ b/cli/proofable.mjs @@ -1888,7 +1888,7 @@ async function runMount(options) { } if (applyResult) { for (const filePath of applyResult.written) { - logStep('ok', 'wrote', filePath); + logStep('ok', options.dryRun ? 'would write' : 'wrote', filePath); } } else if (!options.dryRun) { logStep('ok', 'wrote', path.join(cwd, '.proofable', 'mount.json')); @@ -3083,7 +3083,10 @@ async function main() { printUsage(1); } catch (error) { process.stderr.write(`${error?.message || 'Unknown error'}\n`); - process.exit(1); + // process.exit() right after fetch() aborts Node on Windows (nodejs/node#56645), so the + // exit code is set and the event loop drains; the unref'd timer only ends a stuck request. + process.exitCode = 1; + setTimeout(() => process.exit(1), 2000).unref(); } } diff --git a/examples/portable-proofs-demo/README.md b/examples/portable-proofs-demo/README.md index 20fe87f..f20d017 100644 --- a/examples/portable-proofs-demo/README.md +++ b/examples/portable-proofs-demo/README.md @@ -43,7 +43,7 @@ import { VerifyGate } from '@proofable/sdk/widgets'; ## Use real gates -The demo derives sample gate ids from each claim. Before connecting to the live API, publish listings in [Profile → Listings](https://proofable.me/profile?tab=portals) and pass the real `gateId` into `VerifyGate` and `gateCheck`. +The demo derives sample gate ids from each claim. Before connecting to the live API, publish listings in [Profile → Listings](https://proofable.me/profile?tab=listings) and pass the real `gateId` into `VerifyGate` and `gateCheck`. ## Store the proof diff --git a/skills/proofable-setup/SKILL.md b/skills/proofable-setup/SKILL.md index e7af457..0fcc804 100644 --- a/skills/proofable-setup/SKILL.md +++ b/skills/proofable-setup/SKILL.md @@ -45,6 +45,14 @@ Show what my agents are allowed to do. The agent lives on the signed-in profile by default. Ask for a dedicated spend account only when the agent should pay from its own account. Open **Connections** on proofable.me to link apps. +Already running an agent? Bring it as it is: a GitHub repository, an MCP server URL, an A2A agent card, or a package. Secrets stay out of the import. + +```bash +proofable import +``` + +It prints a link to register the agent's identity. To let others run the agent as a service, create an AI service listing at https://proofable.me/profile/listings/new. + Optional project mount (`cursor`, `claude`, `codex`, `hermes`, `openclaw`, or `opencode`; VS Code uses `cursor`): ```bash diff --git a/skills/proofable-trust-workflow/SKILL.md b/skills/proofable-trust-workflow/SKILL.md index ddbea4f..6ab6e3b 100644 --- a/skills/proofable-trust-workflow/SKILL.md +++ b/skills/proofable-trust-workflow/SKILL.md @@ -24,7 +24,7 @@ Reuse existing proofs first and verify again only when needed. Summarize as **Pr 1. **`proofable_context`** once per session. Prefer signed-in profile context and omit wallet fields on check and verify tools. Call it again only after a profile change. 2. **Profile agent:** **`proofable_agent_mount`** (or `proofable mount --apply `) loads identity, permissions, skills, and context. 3. **Trust before action:** call **`proofable_verify_or_guide`** directly, before creating any new proof. It reuses a qualifying proof or returns the next secure step. Use **`proofable_proofs_check`** only for an explicit yes/no eligibility, gate, or access question, never for memory, context, or content retrieval. When signed in, ownership checks continue with **`proofable_verify`**. For another signer, prepare with **`proofable_verify_prepare`** and submit with **`proofable_verify_submit`**. Share a browser link only when a tool returns one. -4. **Agent:** **`proofable_agent_link`**. If missing, **`proofable_agent_create`** (a dedicated account needs a key you create and hold; pass only its public address). Then **`proofable_agent_mount`**. +4. **Agent:** **`proofable_agent_link`**. If the agent already runs elsewhere (a repository, MCP server URL, A2A agent card, or package), import it with `proofable import `. If missing, **`proofable_agent_create`** (a dedicated account needs a key you create and hold; pass only its public address). Then **`proofable_agent_mount`**. 5. **Proofs and context:** read the `proofable_context` context index first, then **`proofable_proofs_get`** with a known proof ID and `include=content` for an exact body. ## Proofable format