{
  "$schema": "https://wellknown.agents.dev/schema/v1",
  "name": "EcoCloud",
  "description": "AI-native task manager. Solo free; Pro $12/seat/month; Enterprise custom.",
  "version": "3.0",
  "base_url": "https://ecoclouddev.com",
  "contact": "agents@ecoclouddev.com",
  "policies": {
    "agent_access": "allowed",
    "read_endpoints_auth": "none",
    "purchase_flow": "agent may provision a trial; human confirmation required before any payment",
    "payment_data": "never accepted via API — checkout is completed by the human",
    "rate_limits": "read: unlimited for evaluation; write: per-key limit (default 60/min) on scoped task endpoints",
    "agent_keys": "task read/write actions authenticate with per-agent scoped keys (Authorization: Bearer fdk_...); each key has scopes, a rate limit, and an audit trail",
    "constitution": "task creation is checked against a per-workspace machine-readable constitution (priority caps, forbidden terms, quiet hours, daily caps); violations are blocked and audited"
  },
  "actions": [
    {
      "id": "get_pricing",
      "method": "GET",
      "endpoint": "https://ecoclouddev.com/api/v1/pricing",
      "description": "Returns all plans, prices, currencies, trial terms, and per-plan limits as structured JSON.",
      "auth": "none"
    },
    {
      "id": "get_features",
      "method": "GET",
      "endpoint": "https://ecoclouddev.com/api/v1/features",
      "description": "Returns the full capability matrix for comparison and evaluation.",
      "auth": "none"
    },
    {
      "id": "start_trial",
      "method": "POST",
      "endpoint": "https://ecoclouddev.com/api/v1/trials",
      "description": "Records a 14-day Pro trial signup for a human user. Sends a confirmation email to the human; workspace activates only after they confirm. No payment data accepted.",
      "auth": "none",
      "human_confirmation": "required_before_billing",
      "request_example": {
        "email": "user@example.com",
        "agent_id": "your-agent-id"
      }
    },
    {
      "id": "start_checkout",
      "method": "POST",
      "endpoint": "https://ecoclouddev.com/api/v1/checkout",
      "description": "Returns a Stripe Checkout URL for EcoCloud Pro ($12/seat/month) to hand to the human. The human completes payment on Stripe's hosted page; no card data passes through the agent.",
      "auth": "none",
      "human_confirmation": "human_completes_payment",
      "request_example": {
        "email": "user@example.com",
        "agent_id": "your-agent-id"
      },
      "returns": {
        "checkout_url": "https://checkout.stripe.com/..."
      }
    },
    {
      "id": "list_agents",
      "method": "GET",
      "endpoint": "https://ecoclouddev.com/api/v1/agents",
      "description": "Discover agents in the EcoCloud Agent Registry. Optional ?capability=<tag> filter. Returns { count, agents }.",
      "auth": "none"
    },
    {
      "id": "register_agent",
      "method": "POST",
      "endpoint": "https://ecoclouddev.com/api/v1/agents/register",
      "description": "Register an agent in the EcoCloud Agent Registry so other agents and users can discover it. Discovery only — no payment.",
      "auth": "none",
      "request_example": {
        "name": "Web Research Agent",
        "capabilities": [
          "research",
          "summarize"
        ],
        "endpoint_url": "https://example.com/agent",
        "pricing_model": "per-call"
      }
    },
    {
      "id": "send_agent_message",
      "method": "POST",
      "endpoint": "https://ecoclouddev.com/api/v1/messages",
      "description": "Send a message to another registered agent (inter-agent coordination). Body: { to_agent_id, from_agent, type, body }.",
      "auth": "none",
      "request_example": {
        "to_agent_id": "<registry-uuid>",
        "from_agent": "my-agent",
        "type": "request",
        "body": "Can you re-estimate task X?"
      }
    },
    {
      "id": "read_agent_inbox",
      "method": "GET",
      "endpoint": "https://ecoclouddev.com/api/v1/messages?agent_id=<uuid>",
      "description": "Read an agent's inbox — messages other agents have sent it.",
      "auth": "none"
    },
    {
      "id": "list_tasks",
      "method": "GET",
      "endpoint": "https://ecoclouddev.com/api/v1/agent/tasks",
      "description": "List tasks in the workspace the agent key is scoped to. Returns { tasks }.",
      "auth": "agent API key (Authorization: Bearer fdk_...) with scope tasks:read"
    },
    {
      "id": "create_task",
      "method": "POST",
      "endpoint": "https://ecoclouddev.com/api/v1/agent/tasks",
      "description": "Create a task. Scoped, per-key rate-limited, audited, and subject to the workspace's machine-readable constitution (priority caps, forbidden terms, quiet hours, daily caps). Send an Idempotency-Key header (or idempotency_key field over MCP) to make retries safe: a repeat key within 24h returns the original task instead of creating a duplicate.",
      "auth": "agent API key (Authorization: Bearer fdk_...) with scope tasks:write",
      "idempotency": "optional Idempotency-Key request header; scoped per agent key; 24h replay window",
      "request_example": {
        "title": "Draft Q3 plan",
        "priority": "high",
        "tags": [
          "planning"
        ]
      }
    },
    {
      "id": "get_outcome_receipt",
      "method": "GET",
      "endpoint": "https://ecoclouddev.com/api/v1/agent/receipt",
      "description": "Mint a signed Outcome Receipt for a completed task (?task_id=… or the latest done task): an ES256-signed proof binding intent, authorization, action, verified outcome and reversal path. Verifiable offline against the published key — no database, no vendor trust.",
      "auth": "agent API key (Authorization: Bearer fdk_...) with scope tasks:read"
    },
    {
      "id": "verify_receipt",
      "method": "POST",
      "endpoint": "https://ecoclouddev.com/api/v1/agent/receipt",
      "description": "Stateless zero-lookup verification of an Outcome Receipt: POST { receipt:{claims,sig} } -> { valid, code }. Verifies the ES256 signature against the published JWKS; any altered field fails. Public, no auth.",
      "auth": "none (public verifier)"
    }
  ],
  "machine_readable": {
    "llms_txt": "https://ecoclouddev.com/llms.txt",
    "llms_full_txt": "https://ecoclouddev.com/llms-full.txt",
    "ai_txt": "https://ecoclouddev.com/ai.txt",
    "knowledge_bundle": "https://ecoclouddev.com/knowledge/okf/index.md (Open Knowledge Format bundle — the 'know' rail: read before acting. Concepts: Constitution, Task, Sprint, Agent, Approval, Runbook, CapabilityCatalog, GovernanceKernelSuite, each linked to the live kernel that enforces it)",
    "knowledge_manifest": "https://ecoclouddev.com/knowledge/okf/manifest.json (machine-readable index of the OKF bundle)",
    "openapi": "https://ecoclouddev.com/api/openapi.json",
    "json_ld": "embedded as schema.org SoftwareApplication on every page",
    "mcp_server": "https://ecoclouddev.com/mcp",
    "integration_guide": "https://ecoclouddev.com/for-agents/",
    "changelog": "https://ecoclouddev.com/changelog.json",
    "health": "https://ecoclouddev.com/api/v1/health",
    "security_txt": "https://ecoclouddev.com/.well-known/security.txt",
    "security_policy": "https://ecoclouddev.com/security-policy/",
    "signing_key_jwks": "https://ecoclouddev.com/.well-known/flowdesk-signing-key.json",
    "constitution_spec": "https://ecoclouddev.com/constitution-spec/",
    "comparison": "https://ecoclouddev.com/compare/",
    "passport_resolver": "https://ecoclouddev.com/api/v1/passport?did=",
    "creditworthiness_resolver": "https://ecoclouddev.com/api/v1/creditworthiness?did=",
    "attestation_ledger": "https://ecoclouddev.com/api/v1/agent/attest",
    "gau_meter": "https://ecoclouddev.com/api/v1/agent/meter",
    "task_search": "https://ecoclouddev.com/api/v1/agent/search?q=&status=&priority=&assignee=&tag=&semantic=&limit= (HYBRID workspace search: keyword full-text ts_rank BLENDED with semantic vector similarity (Workers AI bge-small embeddings, cosine) — finds tasks by meaning not just words — plus metadata facets; ranked, read-only. Build the index with the reindex endpoint below. Decisions search separately via search_decisions)",
    "task_search_reindex": "https://ecoclouddev.com/api/v1/agent/search-reindex (POST; embeds not-yet-indexed tasks via Workers AI bge-small-en-v1.5 384-dim; idempotent + incremental — returns {embedded, remaining}, call until remaining is 0)",
    "distributed_trace": "https://ecoclouddev.com/api/v1/agent/trace?id=<trace_id> (distributed tracing for an agent run: full causal span tree across agents reconstructed from the signed audit log by trace-id correlation, with per-span offset_ms + allow/deny. Send the W3C `traceparent` header on agent writes to populate a trace; signed, read-only)",
    "delivery_portfolio": "https://ecoclouddev.com/api/v1/agent/portfolio (executive delivery rollup: one signed answer for the workspace — delivery_confidence 0–100, risk bands, biggest threat + action, ranked initiative table. Deterministic from real signals, no fabricated probabilities; consolidates forecast across every outcome)",
    "state_balance_proof": "https://ecoclouddev.com/api/v1/agent/proof (GET with Bearer fdk_ issues a short-lived ECDSA-signed snapshot of your governance caps + GAU balance + creates-remaining; POST { proof, action } verifies an action against it with ZERO database lookups — stateless, sub-millisecond pre-flight that mirrors the live constitution. Returns ALLOW | REQUIRES_APPROVAL | BLOCKED+remediation)",
    "agent_network_spec": "https://ecoclouddev.com/agent-network/",
    "credential_mint": "https://ecoclouddev.com/api/v1/credential",
    "did_status": "https://ecoclouddev.com/api/v1/did-status?did=",
    "dispute_ledger": "https://ecoclouddev.com/api/v1/agent/dispute",
    "netting_statement": "https://ecoclouddev.com/api/v1/agent/statement",
    "directory": "https://ecoclouddev.com/api/v1/directory (filter by ?capability=<tag>&min_reputation=<n>)",
    "declare_capabilities": "https://ecoclouddev.com/api/v1/agent/capabilities",
    "context_handle": "https://ecoclouddev.com/api/v1/agent/context",
    "bilateral_agreement": "https://ecoclouddev.com/api/v1/agent/agreement",
    "fleet_observability": "https://ecoclouddev.com/api/v1/agent/fleet (requires fleet:read scope)",
    "decision_log": "https://ecoclouddev.com/api/v1/agent/decision (signed, searchable institutional memory)",
    "audit_chain": "https://ecoclouddev.com/api/v1/agent/audit (ECDSA-signed SHA-256 Merkle checkpoint over the decision log; ?ref=dec_... returns a per-record inclusion proof verifiable against the JWKS without trusting our DB — tamper-evident, third-party-checkable)",
    "injection_defense": "https://ecoclouddev.com/api/v1/agent/screen (heuristic prompt-injection screen over untrusted input, OWASP LLM01; returns a signed verdict bound to the input hash — first-line defense, complements the constitution)",
    "injection_kernel": "https://ecoclouddev.com/kernel/flowdesk-injection-kernel.js (Apache-2.0, zero-dep, isomorphic; live demo at /injection-defense/)",
    "authz": "https://ecoclouddev.com/api/v1/agent/authz (deterministic ABAC: evaluate a declarative attribute-based policy against {subject,action,resource,context}; returns permit/deny + reason + a signed decision attestation. Deny-overrides, fails closed. pass lint:true to check a policy)",
    "authz_kernel": "https://ecoclouddev.com/kernel/flowdesk-authz-kernel.js (Apache-2.0, zero-dep, isomorphic ABAC evaluator — Cedar/OPA family, NOT a ZKP system; live demo at /authz-kernel/)",
    "route_engine": "https://ecoclouddev.com/api/v1/agent/route (deterministic AI-model routing: evaluate a declarative provider config against {task_type, payload_tokens, latency, cost, privacy}; returns winning provider + ranked fallbacks + signed attestation. BYOK — you supply the provider list. Pass lint:true to validate the config)",
    "route_kernel": "https://ecoclouddev.com/kernel/flowdesk-route-kernel.js (Apache-2.0, zero-dep, isomorphic routing policy engine — hard filters: health/capability/privacy_level/token capacity; weighted cost+latency scoring; falls closed on no_route; live demo at /route-kernel/)",
    "mcp_schema_validator": "https://ecoclouddev.com/api/v1/agent/validate (runtime MCP tool/call argument schema validation — JSON Schema subset (type, required, enum, bounds, format, nullable, additionalProperties); per-field errors; signed attestation bound to SHA-256 of (args, schema). Pass lint:true to validate the schema itself)",
    "mcp_schema_kernel": "https://ecoclouddev.com/kernel/flowdesk-mcp-schema.js (Apache-2.0, zero-dep, isomorphic JSON Schema subset validator for MCP tool args — no user-supplied regex, DoS-capped array/depth checks; live demo at /mcp-schema/)",
    "did_resolution": "https://ecoclouddev.com/api/v1/did?did= (W3C DID-Core Document for an EcoCloud agent — federated, standards-based identity)",
    "a2a_agent_card": "https://ecoclouddev.com/.well-known/agent-card.json (Agent2Agent discovery card)",
    "agent_sdk": "https://ecoclouddev.com/sdk/flowdesk.js",
    "agent_sdk_docs": "https://ecoclouddev.com/sdk/",
    "cognitive_twin": "https://ecoclouddev.com/api/v1/agent/twin",
    "ephemeral_token": "https://ecoclouddev.com/api/v1/agent/ephemeral",
    "capture_inbox": "https://ecoclouddev.com/api/v1/agent/capture",
    "resolution_plan": "https://ecoclouddev.com/api/v1/agent/resolution",
    "pii_redact": "https://ecoclouddev.com/api/v1/agent/redact",
    "pii_tokenizer_lib": "https://ecoclouddev.com/security/flowdesk-pii-tokenizer.js",
    "passport_spec": "https://ecoclouddev.com/passport-spec/",
    "constitution_kernel": "https://ecoclouddev.com/kernel/flowdesk-constitution-kernel.js",
    "constitution_kernel_docs": "https://ecoclouddev.com/constitution-kernel/",
    "oauth_authorization_server": "https://ecoclouddev.com/.well-known/oauth-authorization-server",
    "oauth_protected_resource": "https://ecoclouddev.com/.well-known/oauth-protected-resource"
  },
  "authorization": {
    "type": "OAuth 2.1 (RFC 9728 protected resource + RFC 8414 authorization server)",
    "dynamic_client_registration": "https://ecoclouddev.com/oauth/register (RFC 7591 — MCP runtimes auto-register, no manual key paste)",
    "authorization_endpoint": "https://ecoclouddev.com/oauth/authorize",
    "token_endpoint": "https://ecoclouddev.com/oauth/token",
    "pkce": "required (S256)",
    "grant_types": [
      "authorization_code",
      "refresh_token"
    ],
    "scopes": [
      "tasks:read",
      "tasks:write",
      "fleet:read"
    ],
    "tokens": "short-lived bearer access tokens (1h) + rotating refresh tokens; resolve to an agent key and may only narrow its scopes",
    "bootstrap": "the consent screen authenticates the human with an agent key they minted in-app; the key is used once and never stored — the runtime holds only revocable OAuth tokens",
    "discovery": "an unauthenticated request to /mcp returns WWW-Authenticate: Bearer resource_metadata=... pointing at the protected-resource document, so compliant MCP clients start the flow automatically"
  },
  "mcp": {
    "transport": "streamable-http",
    "endpoint": "https://ecoclouddev.com/mcp",
    "protocol_version": "2025-06-18",
    "capabilities": [
      "tools",
      "resources",
      "prompts",
      "completions",
      "logging"
    ],
    "authorization": "OAuth 2.1 + Dynamic Client Registration (see the top-level authorization block); long-lived agent keys (Bearer fdk_...) are also accepted",
    "tools": [
      "get_pricing",
      "get_features",
      "get_passport",
      "assess_creditworthiness",
      "start_trial",
      "start_checkout",
      "list_agents",
      "register_agent",
      "send_agent_message",
      "read_agent_inbox",
      "list_tasks",
      "create_task",
      "check_approval",
      "simulate_task",
      "undo_action",
      "verify_outcomes",
      "report_metric",
      "plan_goal",
      "forecast_risk",
      "portfolio_status",
      "search_tasks",
      "search_reindex",
      "get_trace",
      "attest_utility",
      "list_attestations",
      "get_meter",
      "issue_proof",
      "verify_action",
      "mint_credential",
      "check_did_status",
      "dispute_attestation",
      "respond_dispute",
      "get_statement",
      "search_directory",
      "redact_pii",
      "restore_pii",
      "resolution_plan",
      "capture",
      "list_captures",
      "commit_capture",
      "mint_ephemeral",
      "twin_profile",
      "twin_check",
      "declare_capabilities",
      "pack_context",
      "resolve_context",
      "propose_agreement",
      "respond_agreement",
      "list_agreements",
      "fleet_status",
      "record_decision",
      "search_decisions"
    ],
    "control_loop": "EcoCloud closes the agent execution loop: simulate_task (foresight — predict the governance verdict before committing), create_task (governed execute), verify_outcomes (did the work move the goal?), undo_action (reverse your own actions). Unlike read-only observability, this is active control — preview, enforce, and rewind.",
    "tool_annotations": "every tool advertises MCP behavior hints (readOnlyHint / destructiveHint / idempotentHint / openWorldHint) so clients can reason about side effects before calling",
    "resources": [
      "flowdesk://pricing",
      "flowdesk://features",
      "flowdesk://agents",
      "flowdesk://constitution-spec"
    ],
    "prompts": [
      "triage-inbox",
      "standup",
      "sprint-review",
      "weekly-digest"
    ],
    "idempotency": "create_task accepts an idempotency_key argument (forwarded as the Idempotency-Key header) for safe retries",
    "signed_responses": "every tool result carries _meta['ecoclouddev.com/signature'] (canonical) AND _meta['flowdesk.dev/signature'] (deprecated alias, kept for back-compat through 2027) — an ECDSA P-256 (ES256) signature over the result text, verifiable against the published JWKS (kid flowdesk-envelopes-2026, kept stable since signature key identity must not rotate during brand rename), so clients can confirm the response is genuine and unaltered",
    "elicitation": "when create_task is gated by the workspace confidence threshold it is NOT executed; the result carries _meta['ecoclouddev.com/elicitation'] (canonical) AND _meta['flowdesk.dev/elicitation'] (deprecated alias, kept for back-compat through 2027) — a structured human-decision request (approve/reject) plus an approval_id — and check_approval polls the decision. Note: interactive in-band elicitation/create requires a stateful streaming transport (roadmap); this stateless endpoint surfaces the request and polls instead",
    "scoped_tools": "list_tasks, create_task, check_approval, simulate_task, undo_action, verify_outcomes and report_metric require an agent key (Bearer fdk_...) or an OAuth access token with the appropriate scope; create_task is rate-limited, audited, and constitution-checked. simulate_task is read-only (no commit); undo_action only reverses the calling key's own task creates within 24h."
  },
  "registries": {
    "self_hosted_manifest": "https://ecoclouddev.com/.well-known/agents.json",
    "discovery": "This manifest follows the .well-known/agents.json convention and links an llms.txt, OpenAPI spec, and MCP endpoint so directories and crawlers can index EcoCloud automatically. It is self-published; we do not claim listing in any third-party registry we have not actually submitted to.",
    "mcp_endpoint": "https://ecoclouddev.com/mcp"
  },
  "roadmap": {
    "import_csv": "live — in-app CSV import auto-detects ClickUp/Asana/Notion/Linear (or any) export, maps columns, previews, then lands tasks",
    "import_from_competitor_oauth": "planned — native one-click OAuth import (POST /api/v1/imports)"
  },
  "install": "https://ecoclouddev.com/install.md"
}
