本文へ移動
cccskills
無料GitHub で公開日本語紹介

acceptance

実際の製品を操作して、利用者が確認できる動作証拠を集め、検証計画に沿った受け入れレポートとして公開するスキルです。

原文原文の説明を見る

End-to-end verification and self-evidence for a delivery in any repository, with or without a preconfigured verify plan. Discover an existing plan when one was handed to this run; otherwise author checks and publish a standalone acceptance. Pick the proving surface (CLI / web / desktop / iOS Simulator), drive the real product, capture visually confirmed evidence, and publish a round with the lh CLI. Triggers on 'verify the task', 'collect evidence', 'prove it works', 'upload evidence', 'verify plan', 'requiredEvidence', 'local test', 'manual test', 'test report', 'test with cli', 'test in electron', 'test desktop', or any local end-to-end verification task. Needs no ambient ids, and never depends on running inside a LobeHub conversation.

lobehub/lobehubスター 83,504(GitHub 83,504 + cccskills 0)

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • 変更後の製品動作を実地で検証したいとき
  • 画面キャプチャなどの証拠を集めたいとき
  • 検証計画とレポートを作成したいとき
  • 既存の受け入れレポートを公開したいとき

日本語での紹介

できること

変更後の製品を実際に操作し、利用者が受け入れ可否を判断できる証拠を集めて、受け入れレポートを公開します。渡された検証計画があれば内容を確認し、なければ確認項目を作成します。CLI、Web、デスクトップ、iOS Simulatorなどから適切な操作面を選び、画面やログなどの証拠を記録します。既存のレポートや証拠が変更内容をカバーしていれば再利用し、不足する確認だけを実施する方針も含まれています。

こんなときに便利

機能変更が実際の利用者の目線で動くか確かめたいとき、手動検証の証拠を集めたいとき、検証計画と結果を共有できる形にまとめたいときに向いています。すでに実行済みの検証レポートを公開したい場合にも使えます。

使い方の例

  • 「この変更を実際に操作して、動作を検証して」
  • 「検証計画に沿ってスクリーンショットと結果をまとめて」
  • 「手元にある受け入れレポートを公開して」

注意点

公開にはlh CLIが使われます。選んだ操作面に応じて必要なUI操作用ドライバーを導入します。資料は途中までのため、後半にある詳細条件は反映していません。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

資料チェック

SKILL.md の記述から、注意が要る操作と導入の前提を AI が確認しました。点数は実際に動かした結果(実行検証)だけで付けています。

安全面送信・削除・コマンド実行などの扱いが明示されているか
B一部不足実製品を操作して公開しますが、提供部分では公開前の確認条件が限定的です。
導入のしやすさ必要なツールや API キーが少ないか、書かれているか
B一部不足`lh` CLIと操作面別のUIドライバーが必要ですが、導入手順は示されていません。

点数には入れていません。 2026年10月26日 時点で AI(OpenAI Codex)が判定しました。目安なので、入れる前に原文も確認してください。

評価が違うと思ったら、見直しを依頼する

どの項目が、なぜ違うと思うかを書いてください。ログインは不要です。内容を SKILL.md と照らし合わせて評価を作り直し、この欄に反映します。

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

含まれるファイル(32)

  • SKILL.md40.6 KB
  • agents/openai.yaml261 B
  • LICENSE11.1 KB
  • references/acceptance-checker.md8.5 KB
  • references/agent-browser.md10.2 KB
  • references/auth-web.md3.6 KB
  • references/axe.md3.9 KB
  • references/common-mistakes.md9.5 KB
  • references/computer-use.md4.7 KB
  • references/evidence.md6.0 KB
  • references/interaction-cost.md4.4 KB
  • references/plan-format.md9.6 KB
  • references/probe-mock-patterns.md23.7 KB
  • references/project-adapter.md8.3 KB
  • references/recording-cdp.md3.4 KB
  • references/recording-ios-simulator.md3.0 KB
  • references/recording-native-macos.md1.8 KB
  • references/report.md23.1 KB
  • references/resource-guard.md6.3 KB
  • references/screenshot-helpers.md4.1 KB
  • references/sim-use.md4.8 KB
  • references/video-chapters.md6.1 KB
  • scripts/cdp-capture.cjs4.6 KB
  • scripts/cdp-screenshot.sh2.3 KB
  • scripts/check-screen-recording.sh4.0 KB
  • scripts/image-brightness.sh2.0 KB
  • scripts/resource-guard.sh19.8 KB
  • surfaces/cli.md2.2 KB
  • surfaces/electron.md4.1 KB
  • surfaces/ios-simulator.md9.8 KB
  • surfaces/native.md2.4 KB
  • surfaces/web.md5.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Acceptance (Builder Self-Evidence)

You are the builder for a delivery. A separate review step judges it against a plan — checks you author, or a verify plan handed to this run. A check that declares requiredEvidence cannot pass on your text alone: a missing artifact marks it uncertain and holds the delivery.

author (or discover) the plan  →  pick the surface  →  capture evidence  →  publish the round  →  self-check coverage

Decide whether to execute before starting a round

Creating or updating a PR, marking it ready, or being asked to upload a report must not by itself start another verification run. First inspect the requested scope and the task's existing reports, evidence, and published acceptance links (from the conversation, PR, or local .acceptances/ directory).

Delivery stateAction
Documentation/instruction-only change, or pure refactor/tooling change with no product behavior changeSkip product acceptance and briefly state why. Keep any applicable quality checks.
Gitlink-only syncDo not launch a fresh acceptance. Link the upstream change and its existing acceptance when available; disclose missing upstream evidence without claiming it passed. Cloud changes accompanying the sync are assessed separately.
Completed acceptance already published and still covers the deliveryReuse its URL and coverage. Do not create a round or rerun cases just for the PR.
Completed acceptance report and evidence exist locally and still cover the deliveryInspect coverage and artifacts, then upload that report using report.md. Preserve the original execution provenance; no product rerun, new plan, or repeated completed checker review is needed merely for upload.
The delivery was already exercised on the real product earlier in this session (observations and raw artifacts exist, no report yet)Do not rerun, re-plan, or open a checker stage. Write plan[] and cases[] from the observations already made, attach the original artifacts (logs, command output, captures) with their original provenance, disclose any required medium that was never captured instead of recapturing it, and ingest.
Product behavior lacks valid evidence, or relevant behavior changed after verificationExecute only the missing or affected outcomes, retain unaffected evidence with its original provenance, and publish according to the round rules below.

Evidence is reusable when its criteria cover the requested behavior, its artifacts are available and support the observations, and subsequent code, dependency, configuration, or environment changes do not invalidate those observations. Compare the relevant changes; a different commit SHA, rebase, PR event, or report publication status alone is not a reason to rerun. Failed/blocked checks and missing required evidence are not passes: repair or supplement those specific gaps. An explicit user request for fresh verification still takes precedence.

The execution, environment setup, plan/checker, and capture sections below apply when executing acceptance. For reuse or upload only, inspect the existing report and evidence and complete the necessary publication/coverage steps; do not boot services or replay completed cases. Uploading does not change when or against which implementation the evidence was captured.

Independent acceptance review (first round only)

The primary checks the environment, writes the plan, executes cases, inspects evidence, repairs failures, and publishes. Use one acceptance-checker agent at two points in the first acceptance round: give at most two feedback responses on the plan and cases before execution, then perform exactly one quick report/evidence check against the agreed criteria before publishing. A second plan check is optional, only to check the primary's revisions; there is no third plan-feedback response. Count the two stages separately. After either stage's limit, the primary owns remaining corrections and verification. The acceptance-checker is the plan gate — never ask the user to approve a plan; ask the user only for a user-owned prerequisite or a product decision that changes the plan. In both stages, the primary supplies an explicit file list and the relevant diff text or prepared diff artifact paths. The acceptance-checker limits code reading to these materials; it must not run git diff or discover its own scope. This does not restrict inspection of the plan, report, or evidence. During evidence review, use it only to identify the updates and the agreed cases whose evidence needs checking; the core task is checking the report against the plan and artifacts. Do not reopen requirements, expand into code review, or investigate implementation details. Return contradictions to the primary for explanation or repair. Follow-up rounds have no acceptance-checker: the primary re-runs, inspects, and publishes itself. Do not delegate execution or require per-case approval.

Read acceptance-checker.md for the input/output contract, review boundaries, and follow-up rules. Acceptance review supplements the primary's own checks and any configured verifier; it does not replace either. If delegation or required media inspection is unavailable, disclose the missing review and unverified claims rather than claiming independent acceptance.

Read the project layer first

Before touching an environment, check for .agents/acceptance/:

FileWhat it owns
PROJECT.mdStart/stop commands, ports, services, auth, surfaces, probes
PROCESS.mdThe run process: plan gate, execution rules, teardown
common-mistakes.mdProject living log — what earlier rounds got wrong here
probe-mock-patterns.mdProject living log — how to force state on this product

The project layer owns how this repository is run; this skill owns what a valid round is (plan, evidence, report, immutable round, the hard rule). On running, the project layer wins; on what may be published, this skill wins. Never invent a start command, port, or auth flow PROJECT.md answers; fix a divergence in the adapter during the run instead of working around it. No .agents/acceptance/ → bootstrap one first: project-adapter.md.

Living logs — inject each by its own shape

Both layers (this skill's generic copies and the project's own) are loaded once the target is known, silently:

  • common-mistakes.md — read its Checklist in full, now and again before marking any case pass. Pull an entry by id only when a checklist line applies to a case.
  • probe-mock-patterns.md — read the heading index, then pull only the entries this round needs. Pick by meaning, not keyword; rg over the body is the fallback.
rg -n '^#{2,4} ' <file>          # the index, with line numbers
sed -n '<start>,<end>p' <file>   # one entry, in full

Record new project-specific learnings in the project layer only.

Two paths — no id is required

Every evidence command targets a round. The authored path is the default; you have an operation id only when the invocation names one. Never hunt the environment for one, and never report this skill inapplicable — a round without an operation is simply recorded as standalone.

You havePath
No plan — you author the checksWrite result.json + assets/, publish with lh acceptance run ingest — report.md
An operation id you were givenRead the frozen plan, write the same round directory keyed by its check item ids, publish with ingest --operation — plan-format.md

The paths differ only in where the checks come from and which round the ingest lands in. Capture is identical: the surface guides, recordings with chapters, before/after pairs, screenshots you looked at, proposal.md. A handed-down plan never licenses a lighter capture.

Pass --subject (task:<id> / topic:<id> / document:<id>) only when the caller named one; otherwise ingest attaches the round itself when it can and creates a standalone acceptance when it cannot. On the first ingest, always supply --requirement "<one-sentence business goal>" — the durable goal of the whole acceptance, not this round's scope; it is immutable once recorded.

Prerequisites: run lh acceptance preflight --json before writing any plan or report text — an auth error means stop and surface it — and install only the UI driver the selected surface needs; probe before adding dependencies, and never substitute a private agent plugin. Its language.locale is the report language: write every human-readable field (title, plan, case names, observations, evidence descriptions, conclusion, report.md, proposal.md) in it, even when the prompt that invoked you is in another language — a delegating agent's prompt does not show which language the user reads. The publish commands reject text in the wrong script, so run lh acceptance run ingest <dir> --dry-run as soon as the plan is in result.json, before executing it. When language.status is unset, use the language the user converses in. On a CLI without preflight, check auth with lh acceptance run list --json.

Optional user-journey flows

Before authoring checks, identify the independently reviewable user tasks in the requirement. Use those tasks as business groups, not the PR title or test surface. For example, reassignment, scheduled continuation, and failure recovery can be separate groups when the delivery covers all three; do not impose these groups on unrelated work. Each check should have an outcome the user can accept or reject independently. Keep shared entry/accessibility checks separate and avoid repeating their expectations across business checks.

When acceptance depends on a sequence of user states, publish its graph during planning, before implementation or verification begins. Keep the checklist paths above for independent checks; a graph is optional and does not replace evidence or human review.

For flow-based plans, each flow's title is its checks' default checklist category. Publish independent user journeys as separate flows in the same acceptance/run; use subflows for actual composed journeys. An umbrella flow containing checks for several independent tasks collapses them into one checklist group. Edges must describe real user transitions, not artificial links added to make unrelated checks reachable. Start at the user entry and follow the journey through outcomes and recovery; UUIDs identify nodes and must not encode business order. Read back the published plan and inspect its groups and reading order before execution.

For an existing acceptance that only needs different checklist groups, use lh acceptance regroup <acceptanceId> --file groups.json. Read the acceptance bundle first; write { expectedVersion, groups: [{ title, checkItemIds }] }, using the exact union checks[].id values and acceptance.metadata.checkGrouping.version (0 when absent). The groups replace the current presentation grouping; an empty list restores plan categories. Unassigned checks keep their plan category. This preserves check IDs, numbering, evidence and review history without creating a round. It does not change flow transitions or verification conditions. Do not move execution nodes or start a new round just to reorganize the checklist; those operations have different execution semantics.

  1. Use the named acceptance, or create one before publishing the flow. If none was named, first run lh acceptance create --help and confirm it shows Usage: lh acceptance create [options] and --requirement. Parent-command help or a zero exit code alone does not prove support. If unavailable, upgrade @lobehub/cli to a release that supports this command and check again; updating the skill alone does not upgrade the CLI. If still unavailable, report flow-first creation as blocked. Do not invent a subject ID, upload an empty report, or substitute lh acceptance run create (which creates a round).

    lh acceptance create --title "Checkout recovery" \
      --requirement "Customers can recover from a declined payment and complete checkout" --json
    

    --requirement is a required, nonblank durable business goal; --title is optional. Omit --subject for a fresh standalone subject, even when an ambient topic exists. Pass --subject task:<id>, topic:<id>, document:<id>, or standalone:<id> only for an explicitly supplied subject. Reusing a subject preserves its recorded requirement, title, and state; it does not reopen it. Creation does not create a verification round, report, results, or passing verdict.

    The JSON contains acceptanceId, acceptanceUrl, requirement, status, and subject: { subjectType, subjectId }. Use acceptanceId in all flow commands below, not subject.subjectId or a verification run ID. Share acceptanceUrl verbatim; it already uses the CLI's configured server.

    Write a JSON file with definition: { title, entryNodeId, nodes, edges }. Give nodes and edges stable UUIDs. Each node has id and exactly one of criterionId (existing check asset), check: { id, title, definition } (a check asset with steps, fixtures, preconditions and expected outcome), or subFlowId (another flow in this acceptance). Edges have id, sourceNodeId, targetNodeId, trigger, required, and optional condition. Every node must be reachable from the entry. Publish child flows before referencing them.

  2. lh acceptance flow publish <acceptanceId> --file flow.json saves the definition and returns flowId. To edit it, include that flowId and the current expectedHash in the file. lh acceptance flow view <acceptanceId> reads definitions, snapshots and results. Publishing does not execute checks. Revise a graph in place rather than publishing a second one; a superseded graph left behind still renders as its own journey with its own unexecuted checks. lh acceptance flow delete <acceptanceId> --flow <flowId> removes one that never should have existed, and only while it has no verified history: it is refused once a settled round has run it, or while another flow invokes it as a subflow.

  3. lh acceptance flow plan <acceptanceId> --flow <flowId> creates a draft round with the graph and its plan. While the round is only planned it follows the live graph: publishing an edit refreshes its snapshot and plan in place, and running flow plan again refreshes the same draft instead of opening another round. Add --run <verifyRunId> to attach another flow to the same draft. Read lh acceptance run get <verifyRunId> --json for the actual plan IDs: each branch and subflow invocation has its own checkItemId; never substitute the reusable asset ID.

  4. Share the acceptance link so the user can inspect the proposed nodes, branches and expected outcomes before implementation. Read and address any actionable feedback. Preparing a plan neither executes checks nor approves delivery; there is no separate flow-confirmation action. Continue within the user's authorized scope, or pause if the user explicitly asked to review before work. For requested changes, publish the revised definition with its flowId and expectedHash; the draft round follows automatically. Never open another round or another flow just to revise a plan that has not executed.

  5. Implement the work and exercise the real product, then use lh acceptance flow record <acceptanceId> --file result.json, containing verifyRunId, checkItemId, verdict (passed, failed, uncertain, or blocked) and observation. Record only what was observed. Use the returned result ID to attach required artifacts through lh acceptance run evidence (inspect its --help), following the same evidence rules as checklist checks.

  6. After all required checks are recorded and passed, run lh acceptance flow complete <acceptanceId> --run <verifyRunId>. Completion settles verification; it does not accept the delivery on the user's behalf. Read back the round and verify evidence coverage before handing it over.

To rerun the exact old graph, prepare a plan with --from-run <sourceVerifyRunId> and omit --run for a fresh round. This preserves the old definition and starts without results. Each replay starts as an unexecuted draft. A round is frozen by its first recorded result; only then does it keep its number. An lh acceptance run ingest that reaches an acceptance whose latest round is still a draft folds into that draft rather than opening a new round. Accepted or closed acceptances must be explicitly reopened before starting. Edges describe business transitions; they do not automatically schedule execution. Continue to read lh acceptance feedback <acceptanceId> --actionable before repairs and publish new rounds into the same acceptance.

HARD RULE — programmatic gates are NEVER acceptance checks

Every check MUST be an outcome a person decides about the delivery: what the user sees, hears, reads, or receives. These MUST NOT appear as a check, under any phrasing: unit / integration / regression / snapshot tests, coverage, type-check / tsc, lint / eslint, format, "compiles", "build passes", "CI is green". Run them, then report them as one line of narrative.

Enforced at ingest: every matching item (matched on title, category, AND method — "run bun run test" under a product-sounding title still matches) is dropped with a warning and summary recounted; a round of only such checks fails to publish. The line is the subject of the check, not who judged it: a CLI behavior asserted by a command is a fine check (verifier: "program"); "the suite is green" is not. Before writing any plan, ask of each draft check: would the user click accept/reject on this?

Rounds are immutable — repair means a NEW round

A published round is a permanent record. Never re-submit into a round after changing the code — publish the re-verification as the next round and let the acceptance page show the progression.

Before a repair round, read the aggregate with lh acceptance view <acceptanceId | type:id> --json. Omit checks whose latest userReview.action is accept; address non-stale rejects under their exact stable ids; when a check semantically replaces another, declare supersedes: ['old-id'] and repeat the full lineage in every later round that reuses the successor id. Pass --acceptance <acceptanceId> so the round joins the same history.

Rules you will be tempted to skip

Not judgment calls — the moves an agent under pressure makes and must not. Each excuse below was made in a real round.

ExcuseReality
"Injection is hard; happy-path plus unit tests covers it"The error state was the goal. Walk the probe ladder (probe-mock-patterns.md A) before calling it blocked.
"The branch name says what to verify" / "Loading the living logs first…"The task lives in the user's words. Recover it, or confirm a labeled guess with one structured question — silently; never narrate setup.
"The black frame is probably display sleep / a permission"Measure first: pixel brightness, the permission bit, an A/B with one variable toggled. Publish "confirmed by X" or "suspected", never a guess.
"Let me ask how they want it run" / "I'll click Sign in and you authorize" / "too small to screenshot"Environment mechanics are yours: full isolated run, auth by direct injection (never an interactive login — it hijacks the user's browser), a screenshot for every user-facing change. Ask only about the product decision.
"One more config edit and the env will boot" / "I'll mock it" / "I'll drive the rest myself"Timebox. Inventory running instances, probe for the real capability before mocking (a mock that records nothing is not in the path), re-delegate a dead subagent's remaining steps. Search the project layer (.agents/acceptance/, including references/) for the exact error before asking; if it has no fix, revert experiments and ask for the missing prerequisite.
"The fix is in and tests pass — verified"Reproduce the failure's precondition first, then verify with it held. A run that cannot fail proves nothing; "reproduces sometimes" means an unnamed precondition. When the mocked seam is the suspect, drop the mock.

Pick the surface by the user-visible outcome

Match the requirement to the cheapest surface that can prove the complete outcome, not merely the layer containing the code change. A backend fix for missing cards, stale lists, navigation, or another visible behavior still requires the consuming UI, its actual data response, and inspected screenshots. Database assertions and passing tests support that evidence; they do not replace it.

What your task changedSurfaceGuide
Backend / CLI / library / data logic with no UI outcomeCLI — stdout as text, zero UI flakinesssurfaces/cli.md
Web app frontend / styles / interactionsWeb (agent-browser → running web app)surfaces/web.md
New/changed API plus the UI consuming itWeb, full-stack (agent-browser + network capture)surfaces/web.md
Desktop-only behavior (native windows, IPC, packaged shell)Electron (agent-browser --cdp)surfaces/electron.md
Native macOS app / OS chrome agent-browser can't reachNative (osascript + screencapture, local macOS)surfaces/native.md
Native iOS behavior, gestures, device-size layoutiOS Simulator (sim-use/AXe + simctl)surfaces/ios-simulator.md
  • Use CLI alone only when the required outcome has no UI surface. If a visible outcome cannot be exercised, report that acceptance as incomplete instead of narrowing it to data checks. Use Electron only when the criterion depends on desktop-only code; iOS is driven by a Simulator HID/AX CLI, never host mouse — mark the case blocked if the CLI cannot express the gesture.
  • Structured data uses native visualizations (cases[].datasets + cases[].visualizations; raw CSV/JSON stays as evidence), not a PNG — report.md. A deliverable the user hears needs audio — evidence.md.
  • A change to UI users already see needs before/after evidence. When the delivery changes existing copy, labels, toasts, layout, or style, each such case requires a comparison pair of the same view on the pre-change and post-change code — report.md. An after-only shot of a toast reading 重命名遇到了问题,请重试 does not show it replaced Rename failed. Prove the before half really runs the old code (probe-mock-patterns.md A6); text that does not render visibly, such as an aria-label, also needs the DOM reading. UI with no prior state is exempt.
  • Auth is a gate scoped to the surface: authenticate that surface first or every capture lands on the sign-in page. Web: auth-web.md.
  • A UI round may price its interaction cost by recording KLM operator counts into interaction-trace.jsonl; optional, never hand-written — interaction-cost.md.

Every file submission MUST include a non-empty, reviewer-facing description (--desc for CLI submissions; description for tools and ingest entries). Identify what the file contains and what it demonstrates for this criterion. A filename, path, artifact id, or generic label such as "evidence" is not a sufficient description. This also applies when a text file is stored inline.

Shared rules for every artifact — media types, provenance, file vs inline, safety — are in evidence.md.

Keep checklist explanations brief

Write each check's observation and inline explanation in the report language, usually 1–3 short sentences: what was done, what happened, and any limitation needed to judge that outcome. Do not paste the execution report into the check. Omit repeated titles, verdict labels, SHA/port/ID headers, environment boilerplate, and round-history explanations. Put shared setup and revision details once in the round report; keep commands, traces, raw output, and detailed reasoning in separate evidence attachments. Briefly disclose a limitation in the check when it changes the verdict; concision must not hide missing verification.

Example: “转派后,新 Agent 收到原对话上下文并创建了独立话题。刷新后消息仍保留。” For a failure, name the unmet outcome directly, without recounting the debugging process. Keep required evidence complete; shorten its presentation, not the work.

Final handoff (mandatory)

Cloud browser links use https://lobehub.com. For all acceptance, round, cleanup, and upgrade URLs in this skill (including instructions below that say "verbatim"), normalize LobeHub Cloud origins to https://lobehub.com, preserving the path, query, and fragment. Cloud hosts are lobehub.com and its subdomains. Keep self-hosted and development origins unchanged. This changes display links, not the CLI's configured API server. Keep the Skill installation resource at https://app.lobehub.com/acceptance/skill.md.

Close every browser session this run opened (agent-browser --session <name> close, web teardown) before handing off; a session left open keeps a full browser running indefinitely. Stop this run's resource guard (resource-guard.sh stop --state-dir <run state dir>) as well, and state in the round report whether it reached yellow or red and what that stopped; a run that hit red must say which checks it left blocked instead of passing.

Before declaring the task done, prove coverage: for each check with requiredEvidence, every declared type is present at least once. Report it explicitly; a missing type holds the delivery at uncertain no matter how good the work is.

Storage limits require a user-facing recovery handoff. For report ingest, atomic evidence upload, or result submission with a file, recognize recovery.reason: "storage_quota", failedEvidence[].reason: "storage_quota", or a storage_block: error. Do not stop at "upload failed" or "noted in the PR":

  • In the final response, state that storage limits blocked publication, distinguish locally observed results from uploaded evidence, and report the actual coverage. Include the saved acceptance/round links when available; do not invent them for an atomic submission that failed before saving a result.
  • Give both recovery options, in the user's language, using available recovery.cleanupUrl and recovery.upgradeUrl verbatim and following recovery.message, applying the Cloud browser-link rule above. Never delete user data automatically. Deletion is permanent.
    • Personal scope: clean up unneeded acceptances or upgrade the personal plan. Acceptance cleanup requires selecting "permanently delete all rounds, reports, and evidence files"; deleting only a record or evidence association does not free storage.
    • Workspace scope (recovery.scope: "workspace"): clean up that workspace's files or upgrade that workspace's plan. The cleanup link opens its resource library, not an acceptance list; do not invent an acceptance-purge checkbox there. Ask its owner/admin for cleanup or billing access. Personal cleanup or a personal upgrade does not resolve a workspace limit.
    • If the CLI reports unresolved workspace scope and omits recovery URLs, report that limitation and its scope-check instructions. Do not invent links or substitute personal pages.
  • For an older CLI without recovery metadata, resolve server and scope using lh doctor --offline --json and lh workspace current --json. Personal scope uses /acceptance and /settings/plans. For workspace scope, resolve its slug with lh workspace view --json, verify the returned ID matches the active workspace, and use /:workspaceSlug/resource and /:workspaceSlug/settings/plans; there is no /:workspaceSlug/acceptance route. If lookup fails, give scope-specific guidance without guessed links. Strip URL username/password when constructing display links. For LobeHub Cloud, personal cleanup uses https://lobehub.com/acceptance; personal plan upgrades use https://lobehub.com/settings/plans. Workspace resource and plan paths use https://lobehub.com. Keep self-hosted users on their configured server.
  • Preserve local reports, artifacts, and the returned retry instructions. Stop blind retries until the user has addressed storage. For a partially ingested report, retry only failed artifacts using failedEvidence[].retryArgs or retryCommand, not the whole ingest. For an atomic upload/submission that saved nothing, retry that command. Supplementing evidence does not change recorded verdicts; read back coverage and do not claim the delivery is complete while required evidence is missing.

Record the deployed preview. When the delivery is deployed somewhere a reviewer can open (a pull-request preview, a staging URL, a dev server on this machine), run lh acceptance preview <acceptanceId> <url> after the round is published. The URL must be https, or http on localhost/127.0.0.1. The acceptance page then offers "Review on preview", where reviewers comment on the live page; lh acceptance feedback lists those comments with the page URL and the file:line they were pinned to. Skip this when nothing is deployed — never invent a URL.

The final response for a completed handoff MUST include the published acceptance URL together with the coverage result — never only a check-result id or a prose claim. Obtain the links from the path you actually executed:

  • Authored round: copy acceptanceUrl returned by lh acceptance run ingest --json verbatim.
  • Operation-plan round: copy acceptanceUrl returned by lh acceptance run ingest --operation <id> --json. When the plan needed no ingest, or the CLI predates plan-round ingest, follow the read-only plan handoff lookup instead. Do not ingest without --operation, create another acceptance, or resubmit evidence merely to obtain a link.

Never guess a host, acceptance ID, or round index. The documented plan lookup is the only reconstruction needed for CLIs whose submission output contains only an internal run URL. If the run has no acceptance association or the lookup fails, report the handoff as blocked and preserve the submitted evidence; do not declare delivery complete or fabricate a link. Put no images, local paths, local file links, or internal run-page paths in the chat reply.

Write the link as a plain-text line, never inside a fenced or inline code block — the chat client only linkifies plain text, and a code block makes it unclickable. Hand off only the acceptance URL: the acceptance page opens on its latest round, so a separate per-round link adds nothing for the reader. Replace the placeholder below with the URL from the selected path:

Acceptance: <acceptanceUrl, verbatim> Coverage: 2/2 criteria, all required evidence uploaded

Portability rules

  • Engine-level capture over OS capture. agent-browser screenshot / dom / eval run headless; screencapture / osascript are macOS-only. iOS: xcrun simctl io over host-window capture. Rounds land under .acceptances/; allocate them with new_round (report.md), which seeds the .acceptances/.gitignore that keeps them out of git.
  • Save as you go. Write each artifact into the round's assets/ and its case into result.json the moment it is captured, so a crash near the end loses nothing; then publish the round once.
  • Don't invent evidence. Capture only the types a check declares.
  • Chapter every recording. Log a mark for each step and each claim you verify on a frame, and disclose every anomaly you noticed as a flag; the reviewer seeks to them instead of watching the whole clip — video-chapters.md.

Reference map

For both acceptance-checker handoffs and review output, read acceptance-checker.md.

NeedReference
Bounding a run's memory useresource-guard.md
The project layer, bootstrapping an adapterproject-adapter.md
Mistakes checklist (read every round)common-mistakes.md
Forcing state, error injection, runtime probesprobe-mock-patterns.md
Authored rounds, result.json, ingestreport.md
Plan-driven rounds: plan, ingest, coverageplan-format.md
Evidence media, provenance, submission, safetyevidence.md
Interaction cost overlayinteraction-cost.md
Web/Electron Chromium CLI commandsagent-browser.md
iOS Simulator driver CLI commandssim-use.md (preferred), axe.md (fallback)
Bundled CDP screenshot and macOS capture preflightscreenshot-helpers.md
Authenticated Web sessionauth-web.md
Native macOS / OS-owned stepcomputer-use.md
Video chapters: steps, checks, flags on a clipvideo-chapters.md
Temporal evidence: Web/Electron, iOS, nativerecording-cdp.md, recording-ios-simulator.md, recording-native-macos.md

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

add-model-provider

無料概要あり

LobeHubにAIモデルプロバイダーを追加し、実行時連携からモデル表示、設定、ブランド表記、文書化、動作確認まで進めるスキルです。

  • 新しいAIモデルプロバイダーを追加したいとき
  • プロバイダーの設定手順や説明文を更新したいとき
  • 既存プロバイダーへのモデル追加要件を見極めたいとき
lobehub/lobehub8.4万2026年10月26日 更新

add-setting-env

無料概要あり

ユーザー設定の初期値をサーバー側の環境変数で切り替えるため、型定義や設定の組み立て、ユーザーストアへの反映、環境変数の例と説明書きを追加する手順です。

  • 設定の初期値を環境変数で変えたいとき
  • 設定項目をサーバー設定に追加したいとき
  • 環境変数の例と説明を更新したいとき
lobehub/lobehub8.4万2026年10月26日 更新

agent-runtime-hooks

無料概要あり

エージェント実行中の各段階をフックで監視し、ツール呼び出しの模擬・制御や人の承認、圧縮、サブエージェント処理に介入する仕組みを扱います。

  • エージェントの実行状況を記録したいとき
  • ツール結果をテスト用に模擬したいとき
  • Webhookでツール実行を許可・拒否したいとき
lobehub/lobehub8.4万2026年10月26日 更新

agent-signal

無料概要あり

イベントを起点にエージェントのバックグラウンド処理を組み立て、ソース・シグナル・アクション・ポリシーの役割分担や非同期連携を実装するためのスキルです。

  • イベント起点の処理を追加したいとき
  • バックグラウンド処理を非同期化したいとき
  • 重複実行を防ぐ仕組みを整えたいとき
lobehub/lobehub8.4万2026年10月26日 更新

agent-testing-bot

無料概要あり

DiscordやSlackなどの実際のチャットアプリでボットにメッセージを送り、応答を画面で確認する受け入れテストを行うスキルです。

  • 実際のDiscordでボット応答を確かめたいとき
  • SlackやTelegramの会話経路をテストしたいとき
  • macOSアプリ上の操作結果を画面で記録したいとき
lobehub/lobehub8.4万2026年10月26日 更新

agent-tracing

無料概要あり

エージェントの実行記録を操作IDから調べ、失敗したツール呼び出し、入出力、LLMに渡した文脈を確認して原因を追えるようにします。

  • 失敗したツール呼び出しを調べたいとき
  • LLMに渡された文脈を確認したいとき
  • 操作ごとのツールと結果を追いたいとき
lobehub/lobehub8.4万2026年10月26日 更新

lobehub のスキルをすべて見る

このスキルの問題を報告する