{
  "data": {
    "a": {
      "slug": "hatchet",
      "name": "Hatchet",
      "vendor": "Hatchet Technologies, Inc.",
      "vendorUrl": "https://hatchet.run",
      "kind": "platform",
      "category": "human-in-the-loop",
      "summary": "Hatchet is an open-source (MIT) platform for durable tasks, queues and workflows, sold as Hatchet Cloud or self-hosted. A durable task can pause until an event arrives, which is its building block for human approval steps.",
      "url": "https://www.anchorterminal.com/tools/hatchet",
      "markdownUrl": "https://www.anchorterminal.com/tools/hatchet.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/hatchet.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/hatchet.json",
      "repo": "https://github.com/hatchet-dev/hatchet",
      "license": "MIT",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://cloud.hatchet.run",
      "packages": [
        {
          "registry": "pypi",
          "name": "hatchet-sdk"
        },
        {
          "registry": "npm",
          "name": "@hatchet-dev/typescript-sdk"
        },
        {
          "registry": "go",
          "name": "github.com/hatchet-dev/hatchet"
        }
      ],
      "auth": "api-key",
      "authNotes": "Self-serve. A person signs up at cloud.hatchet.run and creates an API token in Settings, scoped to one tenant with a configurable expiry. SDK clients, workers and the REST API send it as a Bearer token. The MCP server reads tokens from CLI profiles the user granted. Embedded mode runs a local engine with no token.",
      "pricing": "freemium",
      "pricingNotes": "Hatchet Cloud is pay as you go from $0, and the plan without a card includes 1 million runs and 1 million events a month, capped at 2,000 of each a day, so an agent's owner can start without a contract. Beyond that, $30 per million runs and $5 per million events. Enterprise is priced by sales. Self-hosting is free under MIT (https://hatchet.run/pricing).",
      "priceSummary": "$0.03 / 1k calls",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs index, the OpenAPI file or the pricing page (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": 7,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://docs.hatchet.run/v1/durable-event-waits",
      "llmsTxt": "https://docs.hatchet.run/llms.txt",
      "openapi": "https://github.com/hatchet-dev/hatchet/blob/main/api-contracts/openapi/openapi.yaml",
      "capabilities": [
        "hitl.approve",
        "hitl.ask",
        "agent.durable",
        "automation.workflows",
        "automation.code"
      ],
      "tags": [
        "hosted",
        "self-hosted",
        "open-source",
        "freemium",
        "free-tier",
        "mcp",
        "openapi",
        "llms-txt",
        "python",
        "typescript",
        "go",
        "durable",
        "webhooks",
        "idempotency",
        "hipaa"
      ],
      "lastRelease": "2026-10-08",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 68.3,
        "grade": "B",
        "agentReady": false,
        "rank": 225,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 82,
          "maintenance": 90,
          "payments": 40,
          "reliability": 66,
          "schema": 85,
          "security": 62,
          "transparency": 71
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": -2,
        "negativeNotes": [
          "Published 4 September 2026, -2. GHSA-992g-9cr3-vm5x (CVE-2026-88978), Moderate, CVSS 3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N. The `DurableTask` worker status path looked up durable event log entries by a caller-supplied task UUID with no tenant filter, so a holder of any tenant's token who knew another tenant's task UUID could read its entries. The advisory names Hatchet Cloud as affected and calls exploitation very unlikely because the IDs are random UUIDs. Fixed in 0.106.1. It is the event log this listing is graded on, so 2 points for a fixed path. https://github.com/hatchet-dev/hatchet/security/advisories/GHSA-992g-9cr3-vm5x (read through https://api.osv.dev/v1/vulns/GHSA-992g-9cr3-vm5x)",
          "Not deducted. GHSA-hf2m-86fv-rjw5, fixed in v0.110.5 on 5 October 2026, enforced payload visibility restrictions on endpoints that had returned payload data. The OSV mirror answered 404 for it, so its severity was not read. https://github.com/hatchet-dev/hatchet/blob/main/CHANGELOG.md"
        ],
        "verdict": "A durable task waits for a keyed event without holding a worker slot, and resumes from its event log after a restart, in Python, TypeScript, Go or Ruby. Hatchet supplies only the pause and resume. It has no approver inbox, notification channel or record of who answered, and its MCP server cannot push the event.",
        "bestFor": "It suits a team already running background jobs or agent loops on Hatchet that wants an approval pause inside the same durable task, in Python, TypeScript, Go or Ruby.",
        "strengths": [
          "A durable task waiting on an event is evicted from its worker slot and resumes from the durable event log after a restart or crash",
          "Events can be filtered with a CEL expression, and a scope with a lookback window catches an answer pushed before the wait began",
          "MIT licence, self-hostable, with SDKs for Python (1.41.1), TypeScript (1.36.0), Go and Ruby (0.9.0)",
          "Pay-as-you-go cloud plan starts at $0 without a card, with 1 million runs and 1 million events a month included, per the pricing page",
          "Platform release v0.110.19 on 8 October 2026, with dated changelogs for the platform and each SDK"
        ],
        "weaknesses": [
          "No approver inbox, Slack or email channel, routing or reminder. The owner builds the request and the way the answer is pushed",
          "An event wait has no timeout of its own. A deadline needs a sleep condition in the same or group",
          "API tokens are scoped to a tenant with an expiry, with no narrower scopes, and the role and payload restrictions do not apply to them",
          "Audit logs are for Business plans and above, kept 30 days, and the documented actions do not include event pushes",
          "The seven MCP tools trigger, inspect and replay runs. None pushes an event, and none sets a read-only or destructive annotation",
          "The standard terms the cloud agreement incorporates forbid security or vulnerability tests of the product. This matters before any probe is run"
        ],
        "agentNotes": [
          "Put the approval wait in a durable task, and keep API calls, database reads and random values in child tasks, because the code between checkpoints is replayed",
          "Add a sleep condition in the same or group as the event condition to set a deadline, and treat the sleep firing first as a timeout",
          "Give the event a scope and the wait a lookback window when the answer can arrive before the wait starts. Both must be set together",
          "Filter with a CEL expression such as `input.user_id == '1234'` so one approval key cannot resume another request's task",
          "Push the answer with the SDK's event push or `POST /api/v1/tenants/{tenant}/events`. The MCP server has no tool for it",
          "Grant the MCP server one profile with `hatchet mcp auth --grant \u003cprofile\u003e`. It refuses profiles that were not granted"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 68.3
          }
        ],
        "editorialScores": {
          "ergonomics": 82,
          "maintenance": 90,
          "payments": 40,
          "reliability": 66,
          "schema": 85,
          "security": 62,
          "transparency": 69
        },
        "provenanceScore": 72
      },
      "connect": {
        "install": "pip install hatchet-sdk",
        "claudeCode": "hatchet mcp install --target claude-code",
        "config": {
          "mcpServers": {
            "hatchet": {
              "args": [
                "mcp",
                "serve"
              ],
              "command": "hatchet"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/hitl.approve",
        "tool": "https://letme.dev/hatchet"
      },
      "area": "agent-runtime",
      "unitPrices": [
        {
          "item": "Task runs after the first 1 million a month",
          "unit": "1k-calls",
          "usd": 0.03,
          "note": "$30 per million runs. A failed run is billed, retries are not"
        },
        {
          "item": "Events after the first 1 million a month",
          "unit": "1k-calls",
          "usd": 0.005,
          "note": "$5 per million events"
        },
        {
          "item": "Extra user beyond 50 (card on file)",
          "unit": "seat-month",
          "usd": 10
        }
      ],
      "provenance": {
        "legalEntity": "Hatchet Technologies, Inc.",
        "domain": "hatchet.run",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://hatchet.run/policies/terms",
        "privacy": "https://hatchet.run/policies/privacy",
        "statusPage": "https://status.hatchet.run",
        "changelog": "https://docs.hatchet.run/reference/changelog",
        "securityTxt": "none",
        "checked": "2026-10-09",
        "notes": [
          "The terms page is a Common Paper Cloud Service Agreement cover page for Hatchet Technologies, Inc., last updated 17 July 2025, governed by Delaware law, incorporating Standard Terms Version 2.1 at commonpaper.com.",
          "The privacy policy was last updated 18 August 2026, covers workflow data and API usage data, and names an EU representative in Ireland.",
          "hatchet.run/.well-known/security.txt answered 404. SECURITY.md in the repository takes reports through private GitHub advisories or security@hatchet.run and says there is no bug bounty.",
          "The dashboard and API are at cloud.hatchet.run. The webhook docs show incoming webhook URLs on cloud.onhatchet.run, a second domain.",
          "status.hatchet.run runs on Better Stack with three components. Its robots.txt answered 200 with an empty body.",
          "The repository's licence file is MIT, copyright 2023 to present Hatchet Technologies Inc.",
          "The domain's registration date was not looked up."
        ],
        "score": 72
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/hatchet.json",
      "live": {
        "slug": "hatchet",
        "probe": {
          "target": "https://cloud.hatchet.run",
          "method": "get",
          "lastAt": "2026-10-10T03:53:29.434213268Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 656,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 681,
          "p95ms24h": 1623,
          "samples24h": 125,
          "samples30d": 125,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 85
            },
            {
              "date": "2026-10-10",
              "probes": 40,
              "ok": 40
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.hatchet.run",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-10T00:50:40.047363861Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "hatchet-dev/hatchet",
            "version": "v0.110.5",
            "released": "2026-10-06",
            "seenAt": "2026-10-09T16:57:30.943852136Z"
          },
          {
            "registry": "npm",
            "name": "@hatchet-dev/typescript-sdk",
            "version": "1.36.0",
            "seenAt": "2026-10-09T16:57:29.775672491Z"
          },
          {
            "registry": "pypi",
            "name": "hatchet-sdk",
            "version": "1.41.1",
            "released": "2026-09-24",
            "seenAt": "2026-10-09T16:57:29.581369924Z"
          }
        ],
        "githubStars": 8088,
        "npmWeekly": 300149,
        "pypiWeekly": 392095,
        "pages": [
          {
            "url": "https://docs.hatchet.run/reference/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:37:27.789775482Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f6e9eec278c6"
          },
          {
            "url": "https://hatchet.run/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-09T18:40:07.756761277Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "3096d0aaa49f"
          },
          {
            "url": "https://hatchet.run/policies/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:40:03.629481363Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "1926d0170834"
          },
          {
            "url": "https://hatchet.run/policies/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:40:05.775842594Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "22e8ffadb15d"
          }
        ],
        "updatedAt": "2026-10-10T03:53:29.434213268Z"
      }
    },
    "answer": "Restate scores 73.3 (BB) on agent readiness against Hatchet's 68.3 (B), and leads in 2 of 7 scored categories. Hatchet leads on transparency \u0026 trust.",
    "b": {
      "slug": "restate",
      "name": "Restate",
      "vendor": "Restate GmbH",
      "vendorUrl": "https://restate.dev",
      "kind": "platform",
      "category": "human-in-the-loop",
      "summary": "Durable execution runtime from Restate GmbH in Berlin, run as Restate Cloud, in the customer's own cloud account or self-hosted. Handlers pause on durable promises (awakeables and signals) and resume when a person answers over HTTP.",
      "url": "https://www.anchorterminal.com/tools/restate",
      "markdownUrl": "https://www.anchorterminal.com/tools/restate.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/restate.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/restate.json",
      "repo": "https://github.com/restatedev/restate",
      "license": "BSL 1.1 converting to Apache-2.0 four years after release (server), MIT (SDKs)",
      "transports": [
        "http"
      ],
      "packages": [
        {
          "registry": "npm",
          "name": "@restatedev/restate-sdk"
        },
        {
          "registry": "pypi",
          "name": "restate-sdk"
        },
        {
          "registry": "npm",
          "name": "@restatedev/restate-sdk-clients"
        }
      ],
      "auth": "api-key",
      "authNotes": "Restate Cloud takes an API key (`key_...`) as a Bearer token on each environment's ingress at `https://\u003cenv_id\u003e.env.\u003cregion\u003e.restate.cloud:8080` and its Admin API on port 9070. Keys are created self-serve in the Developers tab of the Cloud UI with a role (the docs show Full and Admin). Access is self-serve after a browser signup, with no review. A self-hosted server has no authentication on its ingress or admin ports, and the docs expect a reverse proxy in front (https://docs.restate.dev/cloud/getting-started, https://docs.restate.dev/server/security).",
      "pricing": "freemium",
      "pricingNotes": "Free $0 with 100,000 durable actions a month, 1 GB of storage and 1-day history, no card, so an agent's owner can start without a contract. Starter $75 a month with 5 million actions, Business $300 with 20 million, Premium $1,000 with 50 million, Enterprise on request. Extra actions cost $25 per million on Starter and Business and $15 on Premium. One action is an invocation, a completion, a step, a sleep, a call or an awakeable, counted per started 64 KiB. Self-hosting is free under BSL 1.1 (https://restate.dev/pricing).",
      "priceSummary": "$75 / mo",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs or on the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 4530,
        "npmWeekly": 329023,
        "pypiWeekly": 76080,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://docs.restate.dev/ai/patterns/human-in-the-loop",
      "llmsTxt": "https://docs.restate.dev/llms.txt",
      "openapi": "https://docs.restate.dev/schemas/openapi-admin.json",
      "capabilities": [
        "hitl.approve",
        "hitl.ask",
        "agent.durable",
        "automation.workflows",
        "automation.code"
      ],
      "tags": [
        "hosted",
        "self-hosted",
        "source-available",
        "freemium",
        "free-tier",
        "no-card",
        "llms-txt",
        "openapi",
        "typescript",
        "python",
        "java",
        "go",
        "rust",
        "status-page"
      ],
      "lastRelease": "2026-10-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 73.3,
        "grade": "BB",
        "agentReady": true,
        "rank": 90,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 3,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 81,
          "maintenance": 92,
          "payments": 40,
          "reliability": 91,
          "schema": 85,
          "security": 61,
          "transparency": 50
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "An awakeable pauses a handler at no compute cost and resumes it from one HTTP request, with a durable timeout, on a free plan of 100,000 actions a month. Restate sends nothing to the approver, so the Slack message, email or inbox is the builder's code, and the published terms and privacy statement predate the paid plans.",
        "bestFor": "A team that already writes agent steps as durable handlers and wants a long, cheap wait for a human answer in TypeScript, Python, Java, Go or Rust, with the option to self-host.",
        "strengths": [
          "One HTTP request resolves or rejects an awakeable, and the waiting handler resumes after restarts or redeployment",
          "`orTimeout` puts a durable timer on the wait, so the remaining time survives a crash",
          "Free plan of 100,000 actions a month with no card, and $25 per extra million actions on Starter and Business",
          "Cloud Environments shows 100 per cent on the status page for the 90 days to 8 October 2026",
          "MIT SDKs for TypeScript, Python, Java and Kotlin, Go and Rust, with llms.txt and Markdown copies of every docs page"
        ],
        "weaknesses": [
          "No reviewer inbox, Slack app or email. The approval request and the reply endpoint are the builder's code",
          "Signals can't be resolved over HTTP yet, only from another handler (open issue of 5 October 2026)",
          "Self-hosted ingress and admin ports have no authentication, so the awakeable ID alone resolves a wait there",
          "The terms say Restate Cloud is free of charge and the privacy statement of 23 February 2022 covers only the website",
          "Server under BSL 1.1, which isn't an OSI licence, with no security.txt or SECURITY.md found"
        ],
        "agentNotes": [
          "Create the awakeable, send its ID inside `ctx.run`, then await the promise, so a retry doesn't send a second approval request",
          "Resolve with `POST /restate/awakeables/\u003cid\u003e/resolve` and a JSON body, or `/reject` with a text reason, which throws a terminal error in the handler",
          "On Restate Cloud send `Authorization: Bearer key_...` to `https://\u003cenv_id\u003e.env.\u003cregion\u003e.restate.cloud:8080`. On a self-hosted server put an authenticating proxy in front of port 8080",
          "Wrap the wait in `orTimeout` and decide what a timeout means. Without it the handler waits with no limit",
          "Retry ingress errors only on 408, 425, 429 or 5xx, and only when `x-restate-error-source` isn't `invocation`"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 73.3
          }
        ],
        "editorialScores": {
          "ergonomics": 81,
          "maintenance": 92,
          "payments": 40,
          "reliability": 91,
          "schema": 85,
          "security": 61,
          "transparency": 46
        },
        "provenanceScore": 54
      },
      "connect": {
        "install": "npm install --global @restatedev/restate-server@latest @restatedev/restate@latest",
        "http": "curl localhost:8080/restate/awakeables/sign_1M28aqY6ZfuwBmRnmyP/resolve --json 'true'",
        "claudeCode": "claude mcp add --transport http restate-docs https://docs.restate.dev/mcp"
      },
      "letme": {
        "capability": "https://letme.dev/hitl.approve",
        "tool": "https://letme.dev/restate"
      },
      "area": "agent-runtime",
      "unitPrices": [
        {
          "item": "Starter plan",
          "unit": "month",
          "usd": 75,
          "note": "5 million actions, 50 actions a second, 5 GB, 3-day history"
        },
        {
          "item": "Business plan",
          "unit": "month",
          "usd": 300,
          "note": "20 million actions, 200 actions a second, 20 GB, 7-day history"
        },
        {
          "item": "Premium plan",
          "unit": "month",
          "usd": 1000,
          "note": "50 million actions, 500 actions a second, 50 GB, 30-day history"
        },
        {
          "item": "Extra durable actions on Starter and Business",
          "unit": "1k-calls",
          "usd": 0.025,
          "note": "$25 per million actions, $15 per million on Premium"
        },
        {
          "item": "Extra virtual object storage",
          "unit": "gb-month",
          "usd": 0.5
        }
      ],
      "provenance": {
        "legalEntity": "Restate GmbH",
        "domain": "restate.dev",
        "domainRegistered": "2022-02-11",
        "endpointOnVendorDomain": false,
        "terms": "https://restate.dev/terms-and-conditions",
        "privacy": "",
        "statusPage": "https://status.restate.dev",
        "changelog": "https://docs.restate.dev/changelog/server",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The imprint names Restate GmbH, Knaackstr. 92, 10435 Berlin, Amtsgericht Charlottenburg HRB 240580 B. The server licence names Restate Software, Inc. and Restate GmbH as licensors.",
          "The general terms and conditions cover Restate Cloud by name, under German law with Berlin as the place of jurisdiction, and say its use is free of charge, which the pricing page no longer matches.",
          "No privacy field. The privacy statement at https://restate.dev/privacy is dated 23 February 2022 and covers the website, the newsletter and early code access, not customer data in Restate Cloud, and no other privacy policy was found.",
          "Restate Cloud environments answer at \u003cenv_id\u003e.env.\u003cregion\u003e.restate.cloud, a different domain from restate.dev.",
          "https://restate.dev/.well-known/security.txt returned 404 on 2026-10-08. The trust centre at trust.restate.dev is hosted by Vanta and didn't load in our reader.",
          "RDAP gives 2022-02-11 as the registration date of restate.dev."
        ],
        "score": 54
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/restate.json",
      "live": {
        "slug": "restate",
        "vendorStatus": {
          "page": "https://status.restate.dev",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-10T03:58:45.351448435Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "restatedev/restate",
            "version": "v1.7.13",
            "released": "2026-10-01",
            "seenAt": "2026-10-09T17:17:08.39806863Z"
          },
          {
            "registry": "npm",
            "name": "@restatedev/restate-sdk",
            "version": "1.17.2",
            "seenAt": "2026-10-09T17:17:06.192190278Z"
          },
          {
            "registry": "npm",
            "name": "@restatedev/restate-sdk-clients",
            "version": "1.17.2",
            "seenAt": "2026-10-09T17:17:07.230365568Z"
          },
          {
            "registry": "pypi",
            "name": "restate-sdk",
            "version": "1.0.5",
            "released": "2026-09-02",
            "seenAt": "2026-10-09T17:17:07.031485626Z"
          }
        ],
        "githubStars": 4533,
        "npmWeekly": 270283,
        "pypiWeekly": 82534,
        "securityTxt": {
          "url": "https://restate.dev/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-09T15:39:16.921720972Z"
        },
        "llmsTxt": {
          "url": "https://docs.restate.dev/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-09T14:02:41.996194914Z"
        },
        "pages": [
          {
            "url": "https://docs.restate.dev/changelog/server",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:38:08.127364782Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "1213cece2209"
          },
          {
            "url": "https://restate.dev/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-09T18:44:33.491759528Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6eb8d04dcfe6"
          },
          {
            "url": "https://restate.dev/terms-and-conditions",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:44:35.663707537Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "32e2a89f3bf3"
          }
        ],
        "updatedAt": "2026-10-10T03:58:45.351448435Z"
      }
    },
    "facts": [
      {
        "a": "Model platform",
        "b": "Model platform",
        "name": "Kind"
      },
      {
        "a": "Hatchet Technologies, Inc.",
        "b": "Restate GmbH",
        "name": "Vendor"
      },
      {
        "a": "https://cloud.hatchet.run",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, stdio",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT",
        "b": "BSL 1.1 converting to Apache-2.0 four years after release (server), MIT (SDKs)",
        "name": "Licence"
      },
      {
        "a": "7",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-08",
        "b": "2026-10-01",
        "name": "Last release"
      },
      {
        "a": "2025-07-17",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2026-08-18",
        "b": "no document linked",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "none",
        "b": "4.5k stars, 329k npm/wk, 76k PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Restate scores 73.3 (BB) on agent readiness against Hatchet's 68.3 (B), and leads in 2 of 7 scored categories. Hatchet leads on transparency \u0026 trust.",
        "question": "Which is better for AI agents, Hatchet or Restate?"
      },
      {
        "answer": "Hatchet is open source (MIT). No open-source release is listed for Restate.",
        "question": "Are Hatchet and Restate open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Transparency \u0026 trust, 71 against 50"
        ],
        "also": [
          "A hosted endpoint, with nothing to install",
          "Runs on your own machine",
          "Open source"
        ],
        "goodFor": "It suits a team already running background jobs or agent loops on Hatchet that wants an approval pause inside the same durable task, in Python, TypeScript, Go or Ruby.",
        "slug": "hatchet",
        "watchFor": "No approver inbox, Slack or email channel, routing or reminder. The owner builds the request and the way the answer is pushed"
      },
      {
        "aheadOn": [
          "Reliability, 91 against 66"
        ],
        "also": [
          "Agent-ready, a grade of BB or better",
          "Free to start without a card"
        ],
        "goodFor": "A team that already writes agent steps as durable handlers and wants a long, cheap wait for a human answer in TypeScript, Python, Java, Go or Rust, with the option to self-host.",
        "slug": "restate",
        "watchFor": "No reviewer inbox, Slack app or email. The approval request and the reply endpoint are the builder's code"
      }
    ],
    "job": {
      "capability": "hitl.approve",
      "name": "Human approval"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/gotohuman-vs-hatchet.json",
        "title": "gotoHuman vs Hatchet",
        "url": "https://www.anchorterminal.com/compare/gotohuman-vs-hatchet"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gotohuman-vs-restate.json",
        "title": "gotoHuman vs Restate",
        "url": "https://www.anchorterminal.com/compare/gotohuman-vs-restate"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hatchet-vs-inngest.json",
        "title": "Hatchet vs Inngest",
        "url": "https://www.anchorterminal.com/compare/hatchet-vs-inngest"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hatchet-vs-orkes-conductor.json",
        "title": "Hatchet vs Orkes Conductor Human tasks",
        "url": "https://www.anchorterminal.com/compare/hatchet-vs-orkes-conductor"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hatchet-vs-permit-mcp-gateway.json",
        "title": "Hatchet vs Permit MCP Gateway",
        "url": "https://www.anchorterminal.com/compare/hatchet-vs-permit-mcp-gateway"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hatchet-vs-pushary.json",
        "title": "Hatchet vs Pushary",
        "url": "https://www.anchorterminal.com/compare/hatchet-vs-pushary"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hatchet-vs-temporal.json",
        "title": "Hatchet vs Temporal",
        "url": "https://www.anchorterminal.com/compare/hatchet-vs-temporal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hatchet-vs-trigger-dev.json",
        "title": "Hatchet vs Trigger.dev",
        "url": "https://www.anchorterminal.com/compare/hatchet-vs-trigger-dev"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hatchet-vs-withhuman.json",
        "title": "Hatchet vs withHuman",
        "url": "https://www.anchorterminal.com/compare/hatchet-vs-withhuman"
      },
      {
        "json": "https://www.anchorterminal.com/compare/inngest-vs-restate.json",
        "title": "Inngest vs Restate",
        "url": "https://www.anchorterminal.com/compare/inngest-vs-restate"
      },
      {
        "json": "https://www.anchorterminal.com/compare/orkes-conductor-vs-restate.json",
        "title": "Orkes Conductor Human tasks vs Restate",
        "url": "https://www.anchorterminal.com/compare/orkes-conductor-vs-restate"
      },
      {
        "json": "https://www.anchorterminal.com/compare/permit-mcp-gateway-vs-restate.json",
        "title": "Permit MCP Gateway vs Restate",
        "url": "https://www.anchorterminal.com/compare/permit-mcp-gateway-vs-restate"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pushary-vs-restate.json",
        "title": "Pushary vs Restate",
        "url": "https://www.anchorterminal.com/compare/pushary-vs-restate"
      },
      {
        "json": "https://www.anchorterminal.com/compare/restate-vs-temporal.json",
        "title": "Restate vs Temporal",
        "url": "https://www.anchorterminal.com/compare/restate-vs-temporal"
      },
      {
        "json": "https://www.anchorterminal.com/compare/restate-vs-trigger-dev.json",
        "title": "Restate vs Trigger.dev",
        "url": "https://www.anchorterminal.com/compare/restate-vs-trigger-dev"
      },
      {
        "json": "https://www.anchorterminal.com/compare/restate-vs-withhuman.json",
        "title": "Restate vs withHuman",
        "url": "https://www.anchorterminal.com/compare/restate-vs-withhuman"
      }
    ],
    "scores": [
      {
        "by": 25,
        "edge": "restate",
        "hatchet": 66,
        "key": "reliability",
        "name": "Reliability",
        "restate": 91,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 0,
        "edge": "",
        "hatchet": 85,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "restate": 85,
        "weight": 13
      },
      {
        "by": 1,
        "edge": "hatchet",
        "hatchet": 82,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "restate": 81,
        "weight": 13
      },
      {
        "by": 1,
        "edge": "hatchet",
        "hatchet": 62,
        "key": "security",
        "name": "Security \u0026 auth",
        "restate": 61,
        "weight": 14
      },
      {
        "by": 0,
        "edge": "",
        "hatchet": 40,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "restate": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "edge": "restate",
        "hatchet": 90,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "restate": 92,
        "weight": 7
      },
      {
        "by": 21,
        "edge": "hatchet",
        "hatchet": 71,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "restate": 50,
        "weight": 7
      }
    ],
    "summary": "Restate scores 73.3 (BB) on agent readiness against Hatchet's 68.3 (B), and leads in 2 of 7 scored categories. Hatchet leads on transparency \u0026 trust. Both do human approval.",
    "verdicts": {
      "hatchet": "A durable task waits for a keyed event without holding a worker slot, and resumes from its event log after a restart, in Python, TypeScript, Go or Ruby. Hatchet supplies only the pause and resume. It has no approver inbox, notification channel or record of who answered, and its MCP server cannot push the event.",
      "restate": "An awakeable pauses a handler at no compute cost and resumes it from one HTTP request, with a durable timeout, on a free plan of 100,000 actions a month. Restate sends nothing to the approver, so the Slack message, email or inbox is the builder's code, and the published terms and privacy statement predate the paid plans."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/hatchet-vs-restate",
    "json": "https://www.anchorterminal.com/compare/hatchet-vs-restate.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/hatchet-vs-restate.md",
    "slim": "https://www.anchorterminal.com/compare/hatchet-vs-restate.min.md"
  },
  "markdown": "Restate scores 73.3 (BB) on agent readiness against Hatchet's 68.3 (B), and leads in 2 of 7 scored categories. Hatchet leads on transparency \u0026 trust. Both do human approval.\n\n- Hatchet: grade B, 68.3/100, rank #225 of 950. Markdown https://www.anchorterminal.com/tools/hatchet.md · JSON https://www.anchorterminal.com/api/v1/tools/hatchet.json\n- Restate: grade BB, 73.3/100, rank #90 of 950. Markdown https://www.anchorterminal.com/tools/restate.md · JSON https://www.anchorterminal.com/api/v1/tools/restate.json\n- Best human approval and handoff for AI agents: https://www.anchorterminal.com/best/human-in-the-loop/index.md\n- All 45 human approval comparisons: https://www.anchorterminal.com/compare/human-in-the-loop/index.md\n\n## Which one, for what\n\n### Hatchet (B)\n\nGood for: It suits a team already running background jobs or agent loops on Hatchet that wants an approval pause inside the same durable task, in Python, TypeScript, Go or Ruby.\n\nAhead on:\n- Transparency \u0026 trust, 71 against 50\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n- Runs on your own machine\n- Open source\n\nWatch for: No approver inbox, Slack or email channel, routing or reminder. The owner builds the request and the way the answer is pushed\n\n### Restate (BB)\n\nGood for: A team that already writes agent steps as durable handlers and wants a long, cheap wait for a human answer in TypeScript, Python, Java, Go or Rust, with the option to self-host.\n\nAhead on:\n- Reliability, 91 against 66\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n- Free to start without a card\n\nWatch for: No reviewer inbox, Slack app or email. The approval request and the reply endpoint are the builder's code\n\n\n## Score by category\n\n| Category | Weight | Hatchet | Restate | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 66 | 91 | Restate +25 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 85 | 85 | even |\n| Agent ergonomics | 13% (16.2 this run) | 82 | 81 | Hatchet +1 |\n| Security \u0026 auth | 14% (17.5 this run) | 62 | 61 | Hatchet +1 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 40 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 90 | 92 | Restate +2 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 71 | 50 | Hatchet +21 |\n| Negative events | ≤15 | -2 | 0 | |\n| **Total** | | **68.3 · B** | **73.3 · BB** | |\n\n## Facts side by side\n\n| Fact | Hatchet | Restate |\n| --- | --- | --- |\n| Kind | Model platform | Model platform |\n| Vendor | Hatchet Technologies, Inc. | Restate GmbH |\n| Hosted endpoint | `https://cloud.hatchet.run` | no (local only) |\n| Transports | HTTP, stdio | HTTP |\n| Auth | API key | API key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | MIT | BSL 1.1 converting to Apache-2.0 four years after release (server), MIT (SDKs) |\n| Tools exposed | 7 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-10-08 | 2026-10-01 |\n| Terms last updated | 2025-07-17 | couldn't be read |\n| Privacy policy last updated | 2026-08-18 | no document linked |\n| Customer content may train models | not found in the text | couldn't be read |\n| Terms restrict automated access | not found in the text | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | not found in the text | couldn't be read |\n| Popularity | none | 4.5k stars, 329k npm/wk, 76k PyPI/wk |\n\n## Verdicts\n\n**Hatchet.** A durable task waits for a keyed event without holding a worker slot, and resumes from its event log after a restart, in Python, TypeScript, Go or Ruby. Hatchet supplies only the pause and resume. It has no approver inbox, notification channel or record of who answered, and its MCP server cannot push the event.\n\n**Restate.** An awakeable pauses a handler at no compute cost and resumes it from one HTTP request, with a durable timeout, on a free plan of 100,000 actions a month. Restate sends nothing to the approver, so the Slack message, email or inbox is the builder's code, and the published terms and privacy statement predate the paid plans.\n\n## Before you call either\n\n### Hatchet\n\n1. Put the approval wait in a durable task, and keep API calls, database reads and random values in child tasks, because the code between checkpoints is replayed\n2. Add a sleep condition in the same or group as the event condition to set a deadline, and treat the sleep firing first as a timeout\n3. Give the event a scope and the wait a lookback window when the answer can arrive before the wait starts. Both must be set together\n4. Filter with a CEL expression such as `input.user_id == '1234'` so one approval key cannot resume another request's task\n5. Push the answer with the SDK's event push or `POST /api/v1/tenants/{tenant}/events`. The MCP server has no tool for it\n6. Grant the MCP server one profile with `hatchet mcp auth --grant \u003cprofile\u003e`. It refuses profiles that were not granted\n\n### Restate\n\n1. Create the awakeable, send its ID inside `ctx.run`, then await the promise, so a retry doesn't send a second approval request\n2. Resolve with `POST /restate/awakeables/\u003cid\u003e/resolve` and a JSON body, or `/reject` with a text reason, which throws a terminal error in the handler\n3. On Restate Cloud send `Authorization: Bearer key_...` to `https://\u003cenv_id\u003e.env.\u003cregion\u003e.restate.cloud:8080`. On a self-hosted server put an authenticating proxy in front of port 8080\n4. Wrap the wait in `orTimeout` and decide what a timeout means. Without it the handler waits with no limit\n5. Retry ingress errors only on 408, 425, 429 or 5xx, and only when `x-restate-error-source` isn't `invocation`\n\n## Questions\n\n### Which is better for AI agents, Hatchet or Restate?\n\nRestate scores 73.3 (BB) on agent readiness against Hatchet's 68.3 (B), and leads in 2 of 7 scored categories. Hatchet leads on transparency \u0026 trust.\n\n### Are Hatchet and Restate open source?\n\nHatchet is open source (MIT). No open-source release is listed for Restate.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/hatchet-vs-restate.json, and with the fewest tokens: https://www.anchorterminal.com/compare/hatchet-vs-restate.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"hatchet\", \"b\": \"restate\"}`. From a terminal: `anchor compare hatchet restate`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/hatchet.json and https://www.anchorterminal.com/api/v1/tools/restate.json\n\n## Other comparisons with Hatchet or Restate\n\n- [gotoHuman vs Hatchet](https://www.anchorterminal.com/compare/gotohuman-vs-hatchet.md)\n- [gotoHuman vs Restate](https://www.anchorterminal.com/compare/gotohuman-vs-restate.md)\n- [Hatchet vs Inngest](https://www.anchorterminal.com/compare/hatchet-vs-inngest.md)\n- [Hatchet vs Orkes Conductor Human tasks](https://www.anchorterminal.com/compare/hatchet-vs-orkes-conductor.md)\n- [Hatchet vs Permit MCP Gateway](https://www.anchorterminal.com/compare/hatchet-vs-permit-mcp-gateway.md)\n- [Hatchet vs Pushary](https://www.anchorterminal.com/compare/hatchet-vs-pushary.md)\n- [Hatchet vs Temporal](https://www.anchorterminal.com/compare/hatchet-vs-temporal.md)\n- [Hatchet vs Trigger.dev](https://www.anchorterminal.com/compare/hatchet-vs-trigger-dev.md)\n- [Hatchet vs withHuman](https://www.anchorterminal.com/compare/hatchet-vs-withhuman.md)\n- [Inngest vs Restate](https://www.anchorterminal.com/compare/inngest-vs-restate.md)\n- [Orkes Conductor Human tasks vs Restate](https://www.anchorterminal.com/compare/orkes-conductor-vs-restate.md)\n- [Permit MCP Gateway vs Restate](https://www.anchorterminal.com/compare/permit-mcp-gateway-vs-restate.md)\n- [Pushary vs Restate](https://www.anchorterminal.com/compare/pushary-vs-restate.md)\n- [Restate vs Temporal](https://www.anchorterminal.com/compare/restate-vs-temporal.md)\n- [Restate vs Trigger.dev](https://www.anchorterminal.com/compare/restate-vs-trigger-dev.md)\n- [Restate vs withHuman](https://www.anchorterminal.com/compare/restate-vs-withhuman.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Hatchet vs Restate",
        "url": ""
      }
    ],
    "description": "Restate scores 73.3 (BB) to Hatchet's 68.3 (B) for human approval. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Hatchet B 68.3",
      "Restate BB 73.3",
      "scores"
    ],
    "h1": "Hatchet vs Restate",
    "image": "https://www.anchorterminal.com/assets/og/compare-hatchet-vs-restate.png",
    "path": "/compare/hatchet-vs-restate",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Hatchet vs Restate for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/hatchet-vs-restate"
  },
  "tokens": {
    "markdown": 2250,
    "slim": 680
  },
  "version": 1
}
