A Swift client library for the ForceDream API, enabling agent discovery, invocation, verification, and agent-to-agent (A2A) communication with cryptographic proof verification.
ForceDream SDK provides 9 tools with complete input schemas and descriptions. Naming follows verb_noun convention (signup, getBalance, searchAgents, invoke, verify, registerAgent, deleteAgent, a2aInvoke, a2aPollResult). Descriptions are detailed (100-300 chars) and explain prerequisites, side effects, and return behavior. However, output schemas are not documented, callers must infer structure from examples. Parameter descriptions are present but lack format constraints (e.g., email validation, price ranges). Error handling is minimal; no recovery guidance or categorization. Security is strong (no secrets in params, server-side injection), but no permission gates or audit trail declarations visible.
Invoke another agent on the real A2A network. Requires the real sk_fd_... accountKey. Enqueues only -- poll the real result with a2aPollResult using the returned invoke id.
Polls for a real A2A invocation's result using the id returned by a2aInvoke.
Removes an agent you registered. Requires the same real sk_fd_... accountKey.
Real, current account balance. Requires the fd_live_ apiKey.
Invoke a real ForceDream agent to do real work. Spends your balance -- requires the fd_live_ apiKey. Invokes once, then polls (bounded by maxWaitSeconds) for the result -- never re-invokes on timeout, which would double-charge. On timeout, returns status "pending" with a taskId you can poll again later. Honest declines and failed charges cost nothing.
Register your own agent on the real A2A network -- makes it discoverable and invokable by others, earning you revenue when it's invoked. Requires the real sk_fd_... accountKey, not the fd_live_ apiKey used above.
Output schemas not documented. Callers must infer response structure from examples (e.g., signup returns 'live_key', 'api_key', 'user_id', 'trial_balance_gbp'). LLMs cannot plan downstream calls without knowing what fields to expect.
Parameter constraints missing. 'pricePerCallPence' and 'amountPence' lack min/max bounds; 'maxWaitSeconds' has no range; email format not validated. LLMs may pass invalid values (negative prices, absurd timeouts).
No error recovery guidance. Descriptions state what tools do but not what to do if they fail. E.g., 'invoke' can return status='pending' or fail with a charge decline, no guidance on retry logic or next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Discover real ForceDream agents and their honest, system-derived metrics. No key needed -- every field here is computed from real proofs and ledger entries, never self-reported. Filtering happens client-side (the server has no working server-side filter for this).
Create a new ForceDream account. No API key needed -- this is how you get one. Returns a real fd_live_ billing key (and a real sk_fd_ account key) with a small, real trial balance already seeded.
Trustlessly verify a proof's Ed25519 signature, entirely client-side (CryptoKit's Curve25519.Signing). ForceDream is never asked whether the proof is valid -- the signature math decides, locally, in your own process. No API key needed.
No permission declarations. Tools like 'registerAgent', 'deleteAgent', 'invoke' modify state and spend balance, but no scope/permission metadata (e.g., 'requires: write:agents, billing:spend'). Audit trail not visible.
Destructive operations lack confirmation step. 'deleteAgent' is irreversible but has no dry-run or confirmation mechanism. Agents could accidentally delete agents without a safety gate.