{"service":"wever-agent-recovery-checks-v1","category":"Agent Recovery","family":"Agent Recovery","page":"https://weverlabs.com/agent-recovery/","tools":{"wever_resume-point-check":{"path":"/api/resume-point-check","kind":"check","receipt_type":"wever.resume-point-check.v1","schema":{"type":"object","additionalProperties":false,"required":["steps"],"properties":{"system":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The task system, such as the booking pipeline."},"steps":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The step, such as hold flights."},"recorded":{"type":"boolean","description":"Finishing this step writes a record a resumed run reads."},"cost":{"anyOf":[{"type":"number","minimum":0,"maximum":1000000000000000},{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"}],"description":"What running this step again costs, such as 0.40 USDC."}}},"description":"Each step of the task, in order."},"on_interruption":{"enum":["resumes_from_record","restarts","operator_decides"],"description":"What the system does after an interruption: resumes from the recorded point, restarts the task from the beginning, or leaves it to an operator."},"record":{"type":"object","additionalProperties":false,"required":[],"properties":{"kept_in":{"enum":["durable_store","process_memory","agent_context","none"],"description":"Where the progress record lives: a durable store, the running process, the agent’s context, or nowhere."},"names_done":{"type":"boolean","description":"The record names the steps already done."},"names_remaining":{"type":"boolean","description":"The record names the steps that remain."},"keeps_outputs":{"type":"boolean","description":"The record keeps what finished steps produced, so a resumed run does not redo them to get it."}}},"interruptions":{"type":"array","minItems":0,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When the task was interrupted."},"at_step":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The step it stopped in, by name."},"resumed_from":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The step the next run picked up from, by name, or start."},"cost_respent":{"anyOf":[{"type":"number","minimum":0,"maximum":1000000000000000},{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"}],"description":"What the interruption cost to redo, such as 1.20 USDC."}}},"description":"Interruptions seen, with where each next run picked up."},"label":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Optional name recorded in the report."}}},"reads":"material in the call","elements":["steps","record","interruptions","respent","findings","fixes"],"verdicts":["work_restarts","resume_gaps","resume_unverified","resumes_from_record"]},"wever_retry-plan-check":{"path":"/api/retry-plan-check","kind":"check","receipt_type":"wever.retry-plan-check.v1","schema":{"type":"object","additionalProperties":false,"required":[],"properties":{"system":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The system that retries, such as the booking agent."},"plan":{"type":"object","additionalProperties":false,"required":[],"properties":{"written":{"type":"boolean","description":"The plan is written down where the operator can read it, not only set in code."},"max_attempts":{"type":"integer","minimum":1,"maximum":1000,"description":"The most attempts per call, the first included."},"spacing":{"enum":["immediate","fixed","backoff","backoff_with_jitter"],"description":"How attempts are spaced: at once, at a fixed interval, with growing waits, or with growing waits and random jitter."},"delay":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The wait before the first retry, such as 2 seconds."},"max_delay":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The longest wait between attempts, such as 1 minute."},"stop_after":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"How long retrying may go on in all before it stops, such as 10 minutes."},"on_give_up":{"enum":["tells_person","tells_channel","logs_only","nothing"],"description":"What happens when retrying stops: a named person is told, a team channel is told, it is only logged, or nothing happens."},"never_retry":{"type":"array","minItems":0,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"description":"Failures never retried, such as card declined, invalid request or not authorized."},"tell":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"Who hears when retrying stops, such as the on-call engineer."},"honors_retry_after":{"type":"boolean","description":"Retries wait as long as a rate-limit response asks."}}},"calls":{"type":"array","minItems":0,"maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The call, such as hotel search."},"follows_plan":{"type":"boolean","description":"The call retries under the standing plan."},"max_attempts":{"type":"integer","minimum":1,"maximum":1000,"description":"The most attempts this call makes on its own terms, the first included."},"changes_state":{"type":"boolean","description":"The call charges, sends, books or writes, so repeating it repeats its effect."}}},"description":"Calls that retry, with any behavior of their own."},"failures":{"type":"array","minItems":0,"maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["kind"],"properties":{"kind":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The failure, such as timeout, rate limited or card declined."},"permanent":{"type":"boolean","description":"Retrying cannot fix it: the request is refused, invalid or not allowed."},"retried":{"type":"boolean","description":"The system retries it today."}}},"description":"Failures the system sees, with whether each is retried."},"label":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Optional name recorded in the report."}}},"reads":"material in the call","elements":["plan","calls","failures","findings","fixes"],"verdicts":["retries_blind","retry_plan_gaps","retry_plan_unverified","retry_plan_stated"]},"wever_partial-state-check":{"path":"/api/partial-state-check","kind":"check","receipt_type":"wever.partial-state-check.v1","schema":{"type":"object","additionalProperties":false,"required":["reporting"],"properties":{"system":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The task system, such as the booking pipeline."},"reporting":{"type":"object","additionalProperties":false,"required":[],"properties":{"partial_state":{"type":"boolean","description":"The system has a state for partly done work, apart from done and failed."},"names_missing":{"type":"boolean","description":"A partly done task lists the pieces that did not complete."},"done_when":{"enum":["all_parts_confirmed","last_step_returned","no_error","any_response"],"description":"What lets the system report a task as done: every part confirmed, the last step returning, no error raised, or any response."},"on_mid_task_failure":{"enum":["reports_partial","reports_failed","reports_done","stays_in_progress","reports_nothing"],"description":"What the system reports when a task fails partway: partly done, failed, done, still in progress, or nothing."}}},"tasks":{"type":"array","minItems":0,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"reported":{"enum":["done","partial","failed","in_progress"],"description":"The state the system reported for the task."},"parts":{"type":"array","minItems":0,"maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"A piece of the task, such as hotel booked."},"completed":{"type":"boolean","description":"This piece finished."}}},"description":"The pieces of the task, each with whether it finished."},"missing_named":{"type":"array","minItems":0,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"description":"The pieces the report named as missing."}}},"description":"Tasks the system reported on after a mid-task failure, with their pieces."},"label":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Optional name recorded in the report."}}},"reads":"material in the call","elements":["reporting","tasks","findings","fixes"],"verdicts":["half_done_looks_done","partial_state_gaps","partial_state_unverified","partial_shown_as_partial"]},"wever_rollback-path-check":{"path":"/api/rollback-path-check","kind":"check","receipt_type":"wever.rollback-path-check.v1","schema":{"type":"object","additionalProperties":false,"required":["effects"],"properties":{"system":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The task system, such as the booking pipeline."},"effects":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The effect, such as hold the hotel room."},"kind":{"enum":["payment","message","booking","order","record","access","external_write","other"],"description":"What the effect is: a payment, a message, a booking, an order, a record, an access change, another external write, or something else."},"reversal":{"enum":["automatic","runbook","compensating_action","none","irreversible"],"description":"How the effect is undone: automatically, by a written runbook, by a compensating action, not at all, or it cannot be undone."},"steps":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The reversal as written, such as cancel the hold through the hotel API."},"window":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"How long the reversal stays possible, such as 24 hours."},"marked_irreversible":{"type":"boolean","description":"The effect is marked irreversible before the task runs."},"approval_before":{"type":"boolean","description":"The effect waits for a person’s approval before it runs."},"tested":{"type":"boolean","description":"The reversal has been run, in a test or after a past failure."},"defined_at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When the reversal was written down."}}},"description":"Each effect a task can leave outside itself."},"first_failure_at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When a task first failed and needed its effects undone."},"label":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Optional name recorded in the report."}}},"reads":"material in the call","elements":["effects","irreversible","findings","fixes"],"verdicts":["undo_undefined","rollback_gaps","rollback_unverified","undo_defined"]},"wever_failure-notice-check":{"path":"/api/failure-notice-check","kind":"check","receipt_type":"wever.failure-notice-check.v1","schema":{"type":"object","additionalProperties":false,"required":["notices"],"properties":{"flow":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The failure-handling flow, such as booking failures."},"principal":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"Who the task is done for, such as the traveler."},"target":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"How soon the principal should hear after a task fails for good, such as 15 minutes."},"notices":{"type":"array","minItems":0,"maxItems":50,"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The notice, such as booking failed email."},"to":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"Who is told."},"to_kind":{"enum":["principal","operator","channel","log"],"description":"Who that is: the principal, an operator, a team channel, or only a log."},"within":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"How soon after the task fails for good it goes out, such as 5 minutes."},"says_what_failed":{"type":"boolean","description":"It says what failed."},"says_state":{"type":"boolean","description":"It says what state the work is in: what finished, what did not, and what was undone."},"says_next":{"type":"boolean","description":"It says what happens next and what the principal can do."}}},"description":"Each notice sent when a task fails for good."},"failures":{"type":"array","minItems":0,"maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"failed_at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When the task failed for good."},"principal_told_at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When the principal heard."},"heard_from":{"enum":["system","operator","found_out"],"description":"How the principal heard: from the system, from an operator by hand, or by finding out on their own."}}},"description":"Tasks that failed for good, with when and how the principal heard."},"label":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Optional name recorded in the report."}}},"reads":"material in the call","elements":["notices","failures","findings","fixes"],"verdicts":["principal_finds_out","notice_gaps","notice_unverified","principal_told"]},"wever_state-reconciliation-check":{"path":"/api/state-reconciliation-check","kind":"check","receipt_type":"wever.state-reconciliation-check.v1","schema":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"flow":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The recovery flow, such as resume after a crash."},"gate":{"type":"boolean","description":"New work waits until reconciliation finishes."},"items":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"What the agent keeps a view of, such as the wallet balance."},"kind":{"enum":["balance","task_state","sent_items","orders","bookings","records","other"],"description":"What it is: a balance, task states, sent items, orders, bookings, records, or something else."},"checked_against":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The system record it is checked against, such as the chain or the order service."},"when":{"enum":["before_new_work","after_new_work","on_schedule","never"],"description":"When the agent’s view is checked against that record after an interruption: before new work, after new work has started, on a schedule, or never."},"on_mismatch":{"enum":["system_record_wins","agent_view_wins","stops_for_person","logs_only"],"description":"What happens when they differ: the system record wins, the agent’s view wins, work stops for a person, or the difference is only logged."}}},"description":"Each piece of state the agent works from."},"runs":{"type":"array","minItems":0,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"interrupted_at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"reconciled_at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When reconciliation finished."},"new_work_at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When new work started."},"differences":{"type":"integer","minimum":0,"maximum":1000000,"description":"How many differences reconciliation found."},"differences_resolved":{"type":"boolean","description":"Every difference was settled before work went on."}}},"description":"Recoveries seen, with when reconciliation finished and new work started."},"label":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Optional name recorded in the report."}}},"reads":"material in the call","elements":["items","runs","findings","fixes"],"verdicts":["resumes_on_stale_state","reconciliation_gaps","reconciliation_unverified","reconciled_before_work"]},"wever_recovery-record-check":{"path":"/api/recovery-record-check","kind":"check","receipt_type":"wever.recovery-record-check.v1","schema":{"type":"object","additionalProperties":false,"required":["events"],"properties":{"events":{"type":"array","minItems":0,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The recovery record id."},"task":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The task interrupted."},"at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When it was interrupted."},"failed":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"What failed, such as the hotel call timed out at step 3."},"recovery":{"enum":["resumed","restarted","rolled_back","abandoned"],"description":"What was done: the task resumed, restarted, was rolled back or was abandoned."},"from":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"Where it resumed from, such as step 3."},"lost":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"What was lost, such as one held fare, or none."},"changed":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"What changed afterward, such as a 30 second timeout on the hotel call."},"recorded_at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"When the record was written."}}},"description":"Each recorded interruption and recovery."},"observed":{"type":"array","minItems":0,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["task"],"properties":{"task":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The task interrupted."},"at":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"}}},"description":"Interruptions seen in other logs, such as alerts, error logs or a tracker, to find recoveries with no record."},"label":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Optional name recorded in the report."}}},"reads":"material in the call","elements":["events","coverage","unrecorded","gaps","fixes"],"verdicts":["recoveries_unrecorded","record_gaps","records_unverified","recoveries_recorded"]},"wever_duplicate-effect-check":{"path":"/api/duplicate-effect-check","kind":"check","receipt_type":"wever.duplicate-effect-check.v1","schema":{"type":"object","additionalProperties":false,"required":["effects"],"properties":{"flow":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The resume and retry flow, such as booking retries."},"effects":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The effect, such as confirmation email."},"kind":{"enum":["message","order","record","booking","payment","other"],"description":"What the effect is: a message, an order, a record, a booking, a payment, or something else."},"guard":{"enum":["idempotency_key","check_before_repeat","cleanup_after","none"],"description":"How a repeat is stopped or caught: an idempotency key the receiver honors, a check for the effect before repeating it, a cleanup that removes repeats afterward, or nothing."},"key_per":{"enum":["effect","task","attempt"],"description":"What one idempotency key covers: the effect, the task, or each attempt."},"checked_after_recovery":{"type":"boolean","description":"After a resume or retry, the flow looks for the effect before repeating it."},"receiver_drops_repeats":{"type":"boolean","description":"The receiving side drops a repeat on its own."}}},"description":"Each effect a resumed or retried task can repeat."},"runs":{"type":"array","minItems":0,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["id","effect","times"],"properties":{"id":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S"},"effect":{"type":"string","minLength":1,"maxLength":500,"pattern":"\\S","description":"The effect, by name."},"times":{"type":"integer","minimum":0,"maximum":1000000,"description":"How many times it happened."},"expected":{"type":"integer","minimum":0,"maximum":1000000,"description":"How many times it should have happened, 1 if not stated."}}},"description":"Recovered runs, with how many times each effect happened."},"label":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Optional name recorded in the report."}}},"reads":"material in the call","elements":["effects","duplicates","findings","fixes"],"verdicts":["effects_can_repeat","duplicate_gaps","duplicate_unverified","duplicates_checked"]}},"free_tools":{"endpoint":"https://weverlabs.com/mcp-free","output":"unsigned; the final line names the main /mcp tools","tools":{"wever_resume-snapshot":{"reads":"one task’s recovery state as supplied","returns":"where the task stopped, what is recorded as done and what remains, as one plain record"},"wever_retry-plan-sample":{"samples":"wever_retry-plan-check","reads":"one retry plan’s headline as supplied","returns":"whether a stated retry plan exists, with its attempts, spacing and stop point"}}},"limits":{"all_supplied_text":"512 KB per call","report":"1 MB","max_request_bytes":3211264,"steps":200,"interruptions":1000,"calls":200,"failures":200,"tasks":1000,"parts":100,"effects":200,"notices":50,"items":200,"runs":1000,"events":1000,"observed":1000,"names":100},"material":"Each tool reads only the material in the call: a task system’s steps with where an interruption picks up, a system’s retry behavior, a task system’s state reporting with the tasks it reported on, the effects a task can leave with how each is undone, a failure-handling flow with its notices, a recovery flow with the state the agent works from, a system’s recovery records with the interruptions seen in other logs, or a resume and retry flow with the effects it can repeat. Every status, match and verdict is decided from that material; the report makes no network request or fetch, calls no provider, reads no chain, resumes, retries or undoes nothing and sends no notice, and moves no money, writes nothing outside the report, contacts no agent or counterparty and changes no configuration.","basis":"This report reads only the steps, retry plans, state reports, effects, notices, reconciliations, recovery events and guards in the material in the call, and decides every status, match and verdict from them.","related":{"job_handoff_pack":"wever_job-handoff-pack","recovery_readiness":"wever_recovery-readiness-check","payment_recovery":"wever_payment-recovery-check","retry_safety":"wever_retry-safety-check","handoff_failure":"wever_handoff-failure-check","result_validation":"wever_result-validation-check","kill_switch":"wever_kill-switch-check","refund_path":"wever_refund-path-check","incident_ownership":"wever_incident-ownership-check","incident_plan":"wever_incident-plan-check","settlement_reconciliation":"wever_settlement-reconciliation-check","cache_staleness":"wever_cache-staleness-check","limit_evidence":"wever_limit-evidence-check","purchase_record":"wever_purchase-record-check","incident_evidence":"wever_incident-evidence-check","double_charge":"wever_double-charge-check","duplicate_order":"wever_duplicate-order-check"},"pricing":{"network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","pricesAtomic":{"/api/resume-point-check":"100000","/api/retry-plan-check":"100000","/api/partial-state-check":"100000","/api/rollback-path-check":"100000","/api/failure-notice-check":"100000","/api/state-reconciliation-check":"100000","/api/recovery-record-check":"100000","/api/duplicate-effect-check":"100000"},"x402Version":2,"scheme":"exact","freeTier":{"calls":10,"windowDays":30,"scope":"all_paid_endpoints","walletProofMaxAgeSeconds":300}},"wallet_proof":"Sign the exact JSON arguments and the tool route with X-Wever-Wallet-Proof. Retry an unchanged payment or wallet-proof request to recover its stored report.","signing":{"issuer":"https://weverlabs.com/api/agent-recovery-contract","key_id":"wever-trust-20261001","public_jwk":{"crv":"Ed25519","x":"PG6bYTJfqh-Y7YEMzxNVhMsFkrO1XnX7djPUvNi9g_U","kty":"OKP"},"algorithm":"Ed25519","receipt_types":{"resume-point-check":"wever.resume-point-check.v1","retry-plan-check":"wever.retry-plan-check.v1","partial-state-check":"wever.partial-state-check.v1","rollback-path-check":"wever.rollback-path-check.v1","failure-notice-check":"wever.failure-notice-check.v1","state-reconciliation-check":"wever.state-reconciliation-check.v1","recovery-record-check":"wever.recovery-record-check.v1","duplicate-effect-check":"wever.duplicate-effect-check.v1"},"jwt_type":"wever-agent-recovery+jwt","digest":"SHA-256 of UTF-8 JSON.stringify(report), preserving returned property order. Verify the JWS signature and the report_sha256 and subject_sha256 claims."}}