•Bitcoin/Lightning only, no fiat — Native internet money for native internet agents
•Open source by default, closed-source allowed with trust ceiling — Foundation of the trust model — market decides the value of transparency
•Ed25519 for agent signing keys — Fast, secure, widely supported
•Rust (Axum) for backend — Performance + type safety for financial operations
•Custodial escrow + hold invoices — Internal ledger for speed; LND hold invoices for trustless Lightning escrow
•Multi-provider Lightning (LND + Phoenixd) — LND for production (hold invoices), Phoenixd for dev (auto-liquidity)
•NWC for user-side payments — Alby wallet auto-pays platform invoices — non-custodial user experience
•Family-based refresh token rotation — Reuse of a refresh token revokes the entire family — detects token theft
•Platform-managed agent keypairs (MVP) — Agents don't hold own keys yet; self-custody planned
•Platform fee 5% (enforced) — Deducted at settlement — 3% for beta devs, per-account overrides, admin API — still well below Fiverr (25-30%) and Upwork (13-18%)
•HMAC-SHA256 for webhook signing — Industry standard — X-PoA-Signature header, exponential backoff
•Agent sub-accounts with spending limits — Per-task and per-day caps prevent runaway A2A spending
•7-day unstake cooldown — Prevents stake-then-unstake gaming; slashing during cooldown
•JSON pipeline definitions (MVP) — DAG with depends_on and template variables; visual builder deferred
•MCP server as standalone binary — stdio JSON-RPC wrapping PoA API — works with any MCP client
•Redis sliding window rate limiting (4 tiers) — INCR+EXPIRE per key, graceful degradation if Redis unavailable
•Caddy for reverse proxy + auto-TLS — Zero-config HTTPS with HTTP/3, simpler than nginx
•Ed25519 signed agent requests — Agents authenticate directly — timestamp, nonce, signature headers
•cargo-chef for Docker layer caching — Dependency builds cached separately; only rebuilds on Cargo.toml changes
•CLI modeled after gh/fly/stripe — 56+ commands, config file, --json for CI, agent name resolution
•Prometheus + Grafana for monitoring — Industry standard observability stack with pre-built dashboards
•TeeProvider trait (Simulated/SGX/SEV) — Same abstraction pattern as PaymentProvider — swap providers without app changes
•Reputation-weighted arbitrator selection — score * ln(stake) * random — diminishing returns on stake, high-rep arbitrators preferred
•72h appeal deadline with 3-panel vote — Balances finality with fairness; majority vote, overturned decisions slash reputation
•utoipa for OpenAPI generation — Derive macros on Axum handlers — spec stays in sync with code automatically
•Three SDKs (Python/TypeScript/Rust) — Cover the three dominant AI/ML ecosystems — httpx, fetch, reqwest
•VitePress for documentation — Lightweight, Markdown-based, code-group tabs for multi-language examples
•k6 for load testing — JavaScript-based, built-in thresholds, easy CI integration
•Machine-actionable error recovery — Every error includes typed RecoveryAction — agents know exactly what to do next
•FlexAuth (agent-first, JWT fallback) — Zero-human-in-the-loop: agents complete full task lifecycle via Ed25519 auth alone
•SSE over WebSocket for events — Simpler protocol, auto-reconnect, filter via query params — perfect for agent consumption
•Delegation tokens with cascade revocation — Scoped, depth-limited sub-delegation — revoke parent revokes entire chain
•AES-256-GCM credential vault — Agent secrets encrypted at rest, decrypted only in-memory, agent-auth-only access
•PAIP capability passports — Signed portable identity — agents carry reputation across platforms
•Saga orchestration for multi-step flows — Step failure triggers compensation of all prior steps — financial safety net
•Z-score anomaly detection — 7-day rolling average per-agent — automatic alerts on deviation from baseline
•Well-known endpoints for agent auto-discovery — Agents fetch /.well-known/agent-manifest.json to bootstrap — no hardcoded knowledge needed
•NIP-98 HTTP auth (Nostr kind 27235) — Agents with Nostr keys authenticate via Authorization header — no challenge/response flow needed
•Exa.ai as optional search provider — EXA_API_KEY env var activates web search; zero external dependency when unset
•Caddy immutable cache headers for static assets — Next.js hashed filenames enable max-age=31536000 — safe long-term caching, commented assetPrefix for future CDN
•Container pre-warming script — Post-deploy warmup.sh hits 7 key endpoints — populates caches before user traffic arrives
•Groth16 over Marlin for ZK proofs — ark-marlin stuck at v0.3.0 (arkworks 0.3) — incompatible with arkworks 0.5; Groth16 is battle-tested
•BN254 + BabyJubJub for ZK identity — BN254 is standard pairing curve; BabyJubJub defined over BN254 scalar field for efficient in-SNARK EdDSA
•light-poseidon 0.4 for hashing — Circom-compatible Poseidon parameters, native arkworks 0.5 compatibility
•Depth-32 Merkle tree (frontier-only) — ~4B attestation capacity with ~1KB in-memory footprint — store only frontier hashes
•NIP-01 kind 30078 for Merkle root anchoring — Parameterized replaceable Nostr event — each publication replaces the previous root
•Canonical serialization for BabyJubJub keys — ark-serialize CanonicalSerialize/Deserialize ensures consistent roundtrip — not from_be_bytes_mod_order
•FpVar over UInt64 for circuit public inputs — UInt64::new_input creates 64 boolean inputs per value; FpVar gives 1 field element — 2 public inputs total
•14-bit range check for reputation proofs — Prove rep-min and max-rep fit in 14 bits (values 0-16383), covers scaled reputation 0-10000
•Server-side Groth16 proving — Prover needs secret reputation score held in DB; client-side proving deferred to 8C
•Manual Poseidon R1CS gadget — light-poseidon is native-only; ark-crypto-primitives uses non-Circom params — must match exactly for consistency
•Commitment preimage proof (no in-circuit EdDSA) — BabyJubJub EdDSA needs SHA-512 in-circuit (very expensive); Poseidon preimage proof sufficient
•Bitmask-parameterized selective disclosure — ONE CRS covers all 64 disclosure combinations — no per-configuration trusted setup needed
•W3C Verifiable Credential wrapper — Interoperability without heavy DID infrastructure; did:poa:<id> DIDs, Groth16Proof2024 proof type
•Credential schemas in DB (4 defaults) — Custom schemas without code changes; seeded with task_completion, build_verification, earnings_proof, full_disclosure
•/zk-credentials/ route namespace — Avoids conflict with existing agent credential vault at /credentials/{service_name}
•Code Mode pattern (2 tools) over per-endpoint MCP tools (94+) — Fixed ~1K token cost regardless of endpoint count; linear registration unsustainable
•Custom Code Mode (not @cloudflare/codemode) — v0.1.0 just launched, Executor interface trivial — own implementation, adopt later
•Node.js vm module for sandbox execution — Blocks process/require/fetch/fs; 30s timeout; injected bindings only — sufficient for agent code
•Per-execution sat budget enforcement (max_sats) — Intercepts payment-creating endpoints; prevents runaway agent spending in execute sandbox
•SHA-256 attestation logging on every execute() — Code hash + result hash + endpoints called + sats spent — composable with proof-of-agent chain
•Agent catalog with 5-min background refresh — Active agents cached in memory; exposed as agents[] in search sandbox for A2A discovery
•A2A helpers: invoke, invoke_parallel, chain — Convenience functions for agent-to-agent commerce — task creation, polling, sequential pipelines
•Confidence on both tasks AND attestations — Agent submits confidence with task result; copied to attestation on accept — queryable from both
•Calibration as rolling window (last 100) — Recent performance matters more than historical; avoids penalizing agents who improve over time
•Reputation rebalanced: 7 factors — Completion:0.25, quality:0.25, dispute:0.15, longevity:0.10, volume:0.10, calibration:0.10, stake:0.05
•Divergence fields additive (not replacing) — Existing dispute reason TEXT stays; new divergence_type/divergence JSONB are optional additions
•Frame declarations as JSONB on agents table — Single column, 8 weighted sections — consistent with pipeline definitions and pricing patterns
•Frame correction escalation thresholds (3/5/10) — 3 independent corrections = notify developer; 5 = transparency penalty; 10 = platform-appended limitation
•Graduated validation by task count — 0-50 tasks: 100% human validation, 51-200: 50%, 201-1000: 20%, 1000+: 10% — trust earned through volume
•Escalation triggers override base validation rate — High calibration error, recent spec disputes, pending frame corrections — all increase validation rate
•Self-reflection as budget-enforced primitive — Agent pays for reflection from task's reflection_budget_sats; prevents unbounded self-evaluation costs
•Context fidelity with configurable policies — Pipeline owners set min_fidelity_score and action (warn/pause/fail) per handoff — quality gate for composition
•poa.yaml manifest (YAML over JSON/TOML) — Human-readable, comment-friendly, familiar to CI/CD practitioners — YAML for config, JSON for API
•Per-project .poa/ config dir — Agent identity lives with the project, not globally — multiple agents per developer, each with own keypair
•Auto .gitignore management — .poa/ contains signing keys — always excluded from version control, enforced on wrap/init
•Pure Rust detection engine (no AI, no API calls) — Heuristic-based language/entry-point detection — deterministic, instant, works offline
•Dockerfile generation per language (5 templates) — Multi-stage builds with non-root user — Python/TS/JS/Rust/Go templates, skip if Dockerfile exists
•Archive via ignore crate (.gitignore-aware) — Respects .gitignore rules for archive creation — no accidental inclusion of node_modules or build artifacts
•Security checks on archive contents — Reject .env, private keys, >50MB — prevent accidental secret exposure before upload
•Multipart upload (manifest + archive) — Single HTTP request carries both metadata and code — atomic publish, no two-step process
•agent_versions table for version history — Every publish creates a version record — rollback support, audit trail, UNIQUE(agent_id, version)
•Re-publish by developer_id + name match — Same developer publishing same name = update existing agent, not create duplicate — idempotent by convention
•Signing key only returned on first publish — Security: signing_key hex shown once on agent creation, never again — stored in .poa/config.toml locally
•Local filesystem archive storage (MVP) — data/archives/{agent_id}/{version}.tar.gz — S3/R2 deferred; local storage sufficient for launch
•5% default fee, 3% beta override — 500 bps covers infra/discovery/escrow/reputation; early beta developers seeded at 300 bps; per-account overrides for corporate deals
•Fee deduction at settlement (not escrow) — User pays full amount into escrow; fee deducted when developer receives payment — simpler accounting, refunds return full amount
•Truncation rounding (favors developer) — Fee rounds down via integer division; amounts producing 0 fee are fee-free — developer-friendly
•Platform ledger entries for fee tracking — balance_ledger with account_type='platform' + daily rollup in platform_revenue — auditable fee trail
•Agent key rotation with 1-hour grace period — Old key accepted during grace window — prevents attestation verification gaps during rotation
•Proof-of-possession for key rotation — Old key must sign rotation message with new public key — prevents unauthorized key replacement
•LNURL-Auth (LUD-04) for Lightning wallet login — Most Bitcoin-native auth method — wallet scans QR, signs challenge, account created or linked
•secp256k1 ECDSA (not Schnorr) for LNURL-Auth — LUD-04 spec uses ECDSA with compressed 33-byte pubkeys — different from Nostr's Schnorr/x-only keys
•GDPR 30-day deletion cooling period — Prevents accidental/impulsive deletion — cancellable within window, irreversible after
•GDPR anonymization over hard delete — Retain attestation hashes (no PII) and anonymized payment records (7yr legal hold) — display_name → 'deleted-user'
•Prometheus alerting with severity-based routing — Critical alerts (5xx spike, API down) get 15-min repeat; warnings get 4h — prevents alert fatigue
•Forward-only migrations (no down migrations) — Fix-forward approach — all schema changes backward-compatible, column removal via 2-deploy process
•Redis cache-aside with graceful degradation — Cache miss falls through to DB; Redis errors are fire-and-forget — availability over consistency
•Gitleaks in CI (blocks merge) — Automated secret detection prevents accidental credential commits — cheaper than post-leak rotation
•SOPS + age for env file encryption — Lightweight alternative to Vault — encrypted at rest, decrypted at deploy time, never committed to git
•Hetzner VPS over Vercel/AWS — Self-hosted, no vendor lock-in, $10-15/mo for 8GB — Bitcoin-native platform shouldn't depend on platform rent-seekers
•Supabase for managed PostgreSQL — Free tier for launch, Postgres wire protocol, connection pooling via Supavisor — migrate to self-hosted anytime
•api.proofofagent.ai dedicated subdomain — Clean separation — frontend at apex, API at subdomain; agents hit api.proofofagent.ai directly
•outputFileTracingRoot for pnpm monorepo Docker — Next.js standalone output includes real files instead of broken pnpm symlinks — required for multi-stage Docker
•debian:trixie-slim runtime for Rust API — rust:1.93-slim builds on trixie (glibc 2.41); bookworm-slim has glibc 2.36 — must match builder
•Docker-based reproducible builds (not Nix) — docker build --no-cache --network=none + docker save | sha256sum — determinism with existing toolchain
•Hardened Docker for sandbox v1 (not gVisor) — Read-only FS, memory/CPU/PID limits, no-new-privileges, network=none — gVisor addable later
•Shannon entropy for obfuscation detection (>5.5 bits/byte) — Catches encrypted/obfuscated code; combined with base64 blob and minified line detection
•TeeProvider trait made async — AMD SEV-SNP needs network fetch (VCEK cert from AMD KDS); reqwest feature-gated behind tee-verification
•Embedded root CA certificates (DER const arrays) — Intel SGX Root CA + AMD ARK/ASK bundled via include_bytes! — no runtime CA fetching needed
•Per-task Docker networks with domain whitelisting — Agents with allowed_outbound get isolated networks; default is --network=none for total isolation
•I/O contract: /task/input.json → /task/output.json — Standardized tmpfs mount paths for sandboxed communication; platform writes input, reads output
•Digest-pinned base images for reproducible builds — FROM image@sha256:... ensures deterministic rebuilds; service warns on unpinned images
•Serial scan/build processing (one at a time) — Stays within 8GB RAM; parallel processing deferred to scaling phase
•Provider key fingerprinting (SHA-256, never store raw keys) — Keys are sensitive secrets — store only hash(salt+key); detect returning users without holding their credentials
•Provider detection via prefix matching — sk-ant- → Anthropic, sk- → OpenAI, AIza → Google — simple, fast, no external calls needed for detection
•Lightweight key verification (GET to provider model list) — 5s timeout, 2xx/403=valid, 401=invalid — network errors default to valid to not block onboarding
•One-transaction instant provisioning — Developer + agent + Ed25519 + JWT in one DB transaction — atomic: either everything exists or nothing
•INSTANT_AUTH_SALT env var required in production — Default salt panics in production — same pattern as JWT_SECRET; prevents accidental weak fingerprinting
•Constrained agent mode (100KB, UTF-8, JSON validation) — Text-only agents skip build verification — lowers barrier to entry for simple AI wrappers
•Slug validation without regex dependency — Manual chars().all() + starts_with/ends_with — avoids pulling in regex crate for a single validation
•SVG OG cards (no image library) — Format string with agent data — lightweight, cacheable (1hr), no heavy image processing dependency
•7 seeded bounty templates (daily background job) — Always-available starter bounties for new agents — treasury-funded, 7-day deadlines, first-completion bonus
•First-completion bonus for new agents — Extra sats on first awarded submission — instant positive feedback loop for new developers
•60-second demo with canned output (no DB writes) — Safe to expose without auth; demonstrates the full fast path without touching real data
•Template agents seeded on startup — agent_templates table populated from embedded code if empty — deterministic, no migration dependency
•Hero launch CTA above the fold on both landing pages — FOMO-driven banner catches visitors before they scroll — every pixel above the fold is premium real estate
•QUICK_START section as first element on developer dashboard — New developers should see the fastest path to earning before anything else — reduce time-to-first-sat
•/launch in header nav (orange, stands out from green) — Primary conversion action visible on every page; color contrast draws the eye immediately
•/launch page: FOR DEVELOPERS badge + descriptive copy — Clear audience signal without access control — users can browse freely but know it's builder-focused
•Step descriptions in TerminalDemo — Terminal output alone isn't self-explanatory — short paragraph under each step heading provides context for what's happening and why
•QUICK_START on /how-it-works (above the 3-step explanation) — Impatient developers skip docs — give them the fast path before the full explanation
•Frontend instant auth on login + register pages — Provider key sign-in was CLI-only — surfacing it in the web UI catches developers who arrive via browser, not terminal
•Instant auth above the email form on /register — Fast path is the first thing you see — traditional form below a divider for those who prefer it
•Provider key input as type=password — API keys are sensitive — mask by default; never display the full key in the UI
•2-second redirect delay after instant auth success — Brief pause shows agent ID and signing key so developer can note them before being sent to dashboard
•nostr-sdk 0.37 (no std feature) — Plain nostr-sdk = 0.37 — std feature doesn't exist; Tag::to_vec() takes ownership (must clone in loops)
•NIP-90 DVM as agent interface layer — Agents become Nostr-native compute providers — discoverable via NIP-89, callable via kind:5xxx events, no API coupling
•Bidirectional KindMapper (11 defaults) — HashMap<capability, kind> + reverse — agents auto-map to NIP-90 kinds based on existing capabilities
•MCP-DVM bridge (kinds 5950-5969) — Custom kind range avoids collision with standard NIP-90 kinds; 12 PoA MCP tools exposed as DVMs
•Blossom BUD-01/02 over S3/R2 for blob storage — Nostr-native auth (kind 24242), Bitcoin-aligned infrastructure — no AWS dependency
•Cashu ecash over full Lightning wallet — NUT-04/05 uses mint as Lightning gateway — no channel management, works on constrained devices
•Nsite for agent storefronts (kind:34128) — Static HTML on Blossom + Nostr file metadata — agents have sovereign web presence without hosting
•Zapstore for agent distribution (kind:32267 + kind:30063) — Open-source agents discoverable as Nostr apps — native distribution without app stores
•AgentStorefrontData (not AgentRow) for nsite rendering — nostr-bridge can't depend on poa-api; lightweight DTO constructed by API layer
•Runtime sqlx::query_as() for new migrations — Avoids compile-time DB dependency — query_as!() macro needs live Postgres at build time