{
  "schema_version": "froglet.agent-tasks.v1",
  "name": "Froglet public agent task manifest",
  "updated": "2026-09-24",
  "purpose": "Give HTTP-capable agents exact Froglet task contracts, evidence boundaries, and report fields before they run or recommend a hosted or local Froglet workflow.",
  "canonical_sources": [
    "https://froglet.dev/llms.txt",
    "https://try.froglet.dev/llms.txt",
    "https://froglet.dev/learn/cloud-trial/",
    "https://froglet.dev/agent-tasks.json"
  ],
  "default_task_id": "publish-service",
  "task_contracts": [
    {
      "task_id": "publish-service",
      "title": "Publish a selected catalog or Wasm function",
      "kind": "native_agent_publication",
      "when_to_use": "The user wants their data or a small function usable by another agent.",
      "entrypoint": "https://froglet.dev/learn/share-services/",
      "supported_agents": [
        "Codex",
        "Claude Code"
      ],
      "supported_platforms": [
        "darwin-arm64",
        "linux-x86_64",
        "linux-arm64"
      ],
      "release_status": "candidate_under_qualification",
      "steps": [
        "Inspect installation and current agent settings; use the exact immutable-release installation plan and separate approval if needed.",
        "Call native status from the actual agent; shell probes are not agent attachment.",
        "Inspect source with prepare_service, propose relevant fields, clarify CSV types, and request an explicit destination.",
        "Prepare a selected snapshot and show included and omitted fields, source fingerprint, public example, and local result.",
        "Call marketplace_publish to obtain exact consent, then wait for publication approval.",
        "Publish with that consent hash. Report local verification, public reachability, marketplace activation, and requester execution separately.",
        "Return share_url with observed availability. Explain sleep/offline behavior and check_updates/open_status."
      ],
      "expected_report_fields": [
        "source",
        "included",
        "omitted",
        "example_input",
        "example_result",
        "snapshot_sha256",
        "consent_hash",
        "progress",
        "share_url",
        "unverified"
      ],
      "must_not_claim": [
        "public success while pending review",
        "shell probe proves actual agent attachment",
        "excluded data is absent without inspecting the snapshot",
        "clean-machine or human qualification before it is run",
        "automatic republication",
        "managed always-on hosting"
      ]
    },
    {
      "task_id": "consume-service",
      "title": "Use a shared service",
      "kind": "native_agent_invocation",
      "when_to_use": "The user provides a Froglet provider/service share link.",
      "entrypoint": "https://froglet.dev/learn/share-services/",
      "steps": [
        "Use the same native installation and separate installation approval if missing.",
        "Resolve exact provider/service, validate HTTPS endpoint and signed offer, and obtain current public example input.",
        "Call invoke_service with provider_id and service_id. Refuse paid offers.",
        "Reconcile uncertain calls using the same idempotency_key and exact input.",
        "Report result, receipt verification, and remaining uncertainty."
      ],
      "expected_report_fields": [
        "provider_id",
        "service_id",
        "deal_id",
        "idempotency_key",
        "status",
        "result",
        "result_hash",
        "receipt_verification"
      ],
      "must_not_claim": [
        "webpage reachability proves recipient execution",
        "marketplace data is live when stale",
        "payment success on the free first-use path"
      ]
    },
    {
      "task_id": "hosted-proof",
      "title": "Hosted proof",
      "kind": "hosted_http_evidence",
      "when_to_use": "Use when the user asks whether Froglet works, gives no additional context, or wants a no-install proof.",
      "required_capabilities": [
        "fetch URLs",
        "POST JSON",
        "send Authorization: Bearer headers",
        "poll HTTP routes"
      ],
      "entrypoint": "https://try.froglet.dev/llms.txt",
      "allowed_hosts": [
        "https://try.froglet.dev"
      ],
      "steps": [
        "GET /api/preflight",
        "POST /api/sessions",
        "GET /v1/provider/services",
        "POST /v1/runtime/deals for demo.add",
        "GET /v1/runtime/deals/{deal_id} until terminal status",
        "Report evidence before recommendations"
      ],
      "expected_report_fields": [
        "preflight_status",
        "session_status",
        "slot_id",
        "ttl_secs",
        "services_status",
        "demo_service_ids",
        "selected_service_id",
        "deal_create_status",
        "deal_id",
        "final_deal_status",
        "observed_result",
        "receipt_present",
        "feed_checked",
        "feed_shape",
        "receipt_feed_match",
        "docs_live_mismatches",
        "proved",
        "not_proved",
        "next_experiment"
      ],
      "must_not_claim": [
        "paid Lightning, Stripe, or x402 settlement",
        "persistent identity",
        "service publication",
        "marketplace depth",
        "batch or GPU production support"
      ],
      "next_step": "If the hosted proof succeeds, ask for user context before recommending local install or a workflow-specific experiment."
    },
    {
      "task_id": "hosted-proof-with-witness",
      "title": "Hosted proof with witness",
      "kind": "hosted_http_evidence",
      "when_to_use": "Use when the user wants stronger evidence and provides a URL, expected hash, file hash, or content hash they own or control.",
      "required_capabilities": [
        "all hosted-proof capabilities",
        "ability to choose exactly one follow-up service"
      ],
      "entrypoint": "https://try.froglet.dev/llms.txt",
      "allowed_hosts": [
        "https://try.froglet.dev",
        "user-owned witness URL only when explicitly authorized"
      ],
      "steps": [
        "Run hosted-proof first",
        "Choose demo.fetch-witness for an owned URL",
        "Choose demo.hash-verify for an owned URL plus expected SHA-256",
        "Choose demo.notarize for a caller-supplied content hash",
        "Report demo.add evidence before follow-up evidence"
      ],
      "expected_report_fields": [
        "all hosted-proof fields",
        "follow_up_service_id",
        "follow_up_input_scope",
        "follow_up_status",
        "follow_up_result",
        "follow_up_receipt_present"
      ],
      "must_not_claim": [
        "third-party URL authorization",
        "durable notarization beyond the signed hosted receipt",
        "hash correctness unless the observed hash equals the expected hash"
      ],
      "next_step": "Use the follow-up result to pick a local evidence workflow only after reporting what the hosted proof still did not prove."
    },
    {
      "task_id": "receipt-feed-check",
      "title": "Receipt feed check",
      "kind": "hosted_artifact_evidence",
      "when_to_use": "Use after a successful hosted deal when the user asks for receipt/feed proof or marketplace-style evidence.",
      "required_capabilities": [
        "fetch URLs",
        "parse JSON",
        "compare signed deal_hash or quote_hash fields"
      ],
      "entrypoint": "https://try.froglet.dev/v1/feed",
      "allowed_hosts": [
        "https://try.froglet.dev"
      ],
      "steps": [
        "GET /v1/feed",
        "Treat the response as a Froglet artifact envelope",
        "Inspect signed artifacts such as descriptors, offers, and receipts",
        "Match receipt artifacts by deal_hash or quote_hash, not runtime deal_id"
      ],
      "expected_report_fields": [
        "feed_checked",
        "feed_shape",
        "receipt_feed_match",
        "matched_artifact_kind",
        "matched_deal_hash_or_quote_hash",
        "unmatched_reason"
      ],
      "must_not_claim": [
        "event-stream semantics",
        "items-collection semantics",
        "feed match by runtime deal_id"
      ],
      "next_step": "Use /verify-receipt/ to verify supplied artifacts locally, then report missing chain members and verification limits."
    },
    {
      "task_id": "receipt-artifact-verify",
      "title": "Local artifact and chain verification",
      "kind": "offline_browser_verification",
      "when_to_use": "Use when the user provides signed Froglet artifacts and wants local cryptographic verification.",
      "required_capabilities": [
        "local WebAssembly execution",
        "paste JSON",
        "report verification scope"
      ],
      "entrypoint": "https://froglet.dev/verify-receipt/",
      "allowed_hosts": [
        "local browser page",
        "https://froglet.dev"
      ],
      "steps": [
        "Paste an artifact, array, or artifacts envelope",
        "Run Verify evidence",
        "Report every canonical artifact_type and its verification status",
        "Report chain_evaluated, valid, and any structure_errors"
      ],
      "expected_report_fields": [
        "valid",
        "chain_evaluated",
        "structure_errors",
        "artifacts",
        "verification_scope"
      ],
      "must_not_claim": [
        "real-world provider identity",
        "truthful execution or correct output",
        "external payment settlement",
        "current expiry unless explicitly checked"
      ],
      "next_step": "Checks signatures, canonical hashes, artifact semantics, and supplied chain links locally using WASM. Does not prove external settlement, real-world identity, truthful execution, or current expiry."
    },
    {
      "task_id": "marketplace-evidence",
      "title": "Marketplace evidence snapshot",
      "kind": "public_marketplace_inspection",
      "when_to_use": "Use when the user asks what the public marketplace currently shows or wants copyable evidence from the marketplace page.",
      "required_capabilities": [
        "fetch https://froglet.dev/marketplace/",
        "fetch marketplace JSON links when needed",
        "copy or quote observed counts with timestamps"
      ],
      "entrypoint": "https://froglet.dev/marketplace/",
      "allowed_hosts": [
        "https://froglet.dev",
        "https://marketplace.froglet.dev"
      ],
      "steps": [
        "Read the rendered marketplace counts",
        "Record snapshot time, providers, offers, receipts, success rate, and indexed receipt value",
        "Use the page copy action or JSON endpoints for source evidence",
        "Avoid claiming hosted paid rails from marketplace counts alone"
      ],
      "expected_report_fields": [
        "snapshot_time",
        "provider_count",
        "offer_count",
        "receipt_count",
        "success_rate",
        "indexed_receipt_value",
        "source_links",
        "not_proved"
      ],
      "must_not_claim": [
        "hosted paid rails are live",
        "mainnet money movement",
        "production marketplace depth beyond observed public data"
      ],
      "next_step": "Use local install planning if the user wants to publish a service, consume private services, or test paid rails."
    },
    {
      "task_id": "local-install-proposal",
      "title": "Local install proposal",
      "kind": "local_planning",
      "when_to_use": "Use after the hosted evidence report when the user wants persistent identity, service publication, paid rails, private data workflows, batch, GPU, or Tor.",
      "required_capabilities": [
        "ask for install profile",
        "use local MCP/OpenClaw planning tools when available",
        "avoid running install commands before confirmation"
      ],
      "entrypoint": "https://froglet.dev/learn/quickstart/",
      "allowed_hosts": [
        "https://froglet.dev",
        "local machine only after explicit user confirmation"
      ],
      "steps": [
        "Finish the hosted evidence report first",
        "Ask for target agent, footprint, role, payment rail, network mode, marketplace, and first use case",
        "Use plan_install before get_install_guide when local MCP tools exist",
        "Verify local health before implementing the use case"
      ],
      "expected_report_fields": [
        "hosted_evidence_complete",
        "target_agent",
        "footprint",
        "role",
        "payment_rail",
        "network_mode",
        "marketplace",
        "first_use_case",
        "validation_checks"
      ],
      "must_not_claim": [
        "local installation was performed before commands actually ran",
        "payment rails are live before adapter verification",
        "GPU or batch production readiness before route-specific checks"
      ],
      "next_step": "After the profile is confirmed, produce exact commands and validation checks for the selected local path."
    },
    {
      "task_id": "chat-only-fallback",
      "title": "Chat-only fallback",
      "kind": "truthful_limit_report",
      "when_to_use": "Use when the model cannot fetch URLs, POST JSON, send Bearer auth, poll HTTP routes, run shell commands, or use MCP tools.",
      "required_capabilities": [
        "state tool limits plainly",
        "give manual docs path"
      ],
      "entrypoint": "https://froglet.dev/learn/cloud-trial/",
      "allowed_hosts": [
        "none required"
      ],
      "steps": [
        "Do not pretend to run the proof",
        "Tell the user a proper test requires an HTTP-capable agentic environment or the manual curl flow",
        "Offer to interpret pasted outputs"
      ],
      "expected_report_fields": [
        "cannot_run_live_proof",
        "missing_capabilities",
        "manual_path",
        "what_to_paste_back"
      ],
      "must_not_claim": [
        "live Froglet evidence",
        "successful hosted proof",
        "verified receipt"
      ],
      "next_step": "Direct the user to an HTTP-capable agent or the manual curl flow."
    }
  ]
}
