All twins

Service twin · API + UI

Check

Test payroll agents and integrations that onboard workers, run payroll, and coordinate payments and filings.

API + UIdocs-transcribedREST · MCP · CLI
Terminal
$ uv tool install blobfish-cli
$ blobfish twin login
$ blobfish twin-runs create --twins check --ttl 60 --wait

What’s inside

A deterministic, seeded, resettable replica: every operation below executes real state transitions against the twin’s own SQLite state — reads are hash-invariant, writes produce inspectable diffs, and reset restores the seed baseline.

Operations31
Reads14
Writes17
Entities7
Lifecycles3

Seeded entities

EntityTableFieldsAbout
companycompanies7Employer of record that runs payroll through Check.
workplaceworkplaces8Physical work location used for tax jurisdiction assignment.
employeeemployees9W-2 employee with an onboarding lifecycle that must complete before payroll.
contractorcontractors81099 contractor paid outside the W-2 payroll flow.
payrollpayrolls9Pay run for a company: drafted, approved into pending, processed on payday, then paid.
payroll_itempayroll_items8One employee's earnings line inside a payroll run.
tax_filingtax_filings8Tax filing/payment obligation Check prepares and files with a jurisdiction.

Guarded lifecycles

These state machines are enforced, not decorative: an action whose fromstate doesn’t match is rejected the way the production service rejects it.

employee.onboard_status

blocking → needs_attention → completed
  • complete_onboarding: blocking|needs_attention completed

payroll.status

draft → pending → processing → paid → failed
  • approve: draft pending
  • reopen: pending draft

tax_filing.status

draft → submitted → accepted → rejected
  • file: draft submitted

Three surfaces, one state

Mount Check in a twin environment and the same seeded state serves vendor-shaped REST operations, an MCP endpoint for tool calling, and a generated bf-twin CLI — with copy-on-write sessions per rollout and a one-call reset to the seed baseline. Prefer raw HTTP? The same create works with curl:

API
$ curl -sS -X POST https://blobfish.ai/api/v1/twin/environments \
    -H "X-API-Key: $BLOBFISH_API_KEY" -H "Content-Type: application/json" \
    -d '{"services":["check"],"ttl_minutes":60}'

Known limitations