Skip to main content
ClaudeWave
Skill82.2k repo starsupdated 3d ago

acceptance

>

Install in Claude Code
Copy
git clone --depth 1 https://github.com/lobehub/lobehub /tmp/acceptance && cp -r /tmp/acceptance/packages/builtin-skills/src/acceptance ~/.claude/skills/acceptance
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# Verify (Builder Self-Evidence)

You are the **builder** for a delivery. A separate review step judges it against
either an existing **verify plan** or checks you author before testing. Some
criteria demand **evidence** (a screenshot, a DOM snapshot, CLI output…). A
criterion that declares `requiredEvidence` **cannot pass on your text alone**:
if the artifact is missing, the structural gate marks it `uncertain` and the
delivery is held.

## Read the project layer first (when the repository has one)

Before touching an environment, check for `.agents/acceptance/`. A repository
that verifies itself keeps its own layer there, and it outranks any guess you
would otherwise make:

| File                     | What it owns                                                 |
| ------------------------ | ------------------------------------------------------------ |
| `PROJECT.md`             | Start/stop commands, ports, services, auth, surfaces, probes |
| `PROCESS.md`             | The run process: approval gate, execution rules, teardown    |
| `common-mistakes.md`     | Project living log — what earlier rounds got wrong here      |
| `probe-mock-patterns.md` | Project living log — how to force state on this product      |

**The division of labor:** the project layer owns _how this repository is run_;
this skill owns _what a valid acceptance round is_ (plan, evidence, report,
immutable round, the hard rule below). Where they disagree on running, the
project layer wins. Where they disagree on what may be published, this skill
wins. Never invent a start command, a port, or an auth flow that `PROJECT.md`
already answers, and never work around a divergence silently — fix the adapter
in place during the run.

No `.agents/acceptance/` means the repository has no project layer yet. Continue
with the portable path below; if the run needs an adapter, bootstrap one first —
[project-adapter.md](references/project-adapter.md).

Read both living-log layers before executing a round that drives a product
surface: this skill's generic
[common-mistakes.md](references/common-mistakes.md) and
[probe-mock-patterns.md](references/probe-mock-patterns.md), plus the project's
own copies. Record new project-specific learnings in the project layer only.

## Applicability invariant

This skill applies whenever the delivery needs real verification. **It requires
no ids at all** — nothing about it is conditional on where it runs:

- **Were you handed an operation id** (a verify plan already exists for this
  run)? Discover that plan and satisfy it.
- **Otherwise** — the normal case — author the checks yourself and publish a
  structured report round.
- **Attaching to something specific?** Pass `--subject` (`task:<id>`,
  `topic:<id>`, or `document:<id>`) when the caller named one. Otherwise omit it:
  `lh acceptance run ingest` attaches the round itself when it can, and creates a
  standalone acceptance when it cannot.

Never report this skill inapplicable, and never go hunting through the
environment for an id to make it applicable. Missing ids are the default state,
not a degraded one.

So while you do the work, capture the proof and submit it. The loop:

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

The skill package is portable, but execution capabilities are surface-specific:
`agent-browser` serves Web/Electron, while native macOS and iOS Simulator require
a local macOS display and their platform tools. No repository-specific scripts are
required; rounds land under `.acceptances/`, which the CLI keeps out of git for
you (see [report.md](./references/report.md#directory-layout)).

## Two entry points — an operation id is NOT required

Every evidence command targets a **verification session** (a round). How you name
that session is a choice, not a prerequisite:

| You have                        | Target the round with                                                                                                     | Path                                                   |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| An operation id you were given  | `--operation "$OPERATION_ID"`                                                                                             | This document: discover the plan, satisfy its criteria |
| No plan — you author the checks | Publish a whole directory with `lh acceptance run ingest`; it creates the round and, when needed, a standalone acceptance | [references/report.md](references/report.md)           |

**The authored path is the default.** You have an operation id only when the
invocation names one — a task, a caller, or the user hands it to you. Do not read
the environment looking for one, and do not treat its absence as a problem to
solve: a round created without an operation is simply recorded as `standalone`.

`--operation` and `--run` are interchangeable on `result submit` and
`result list`. (`evidence list` takes neither — it keys off a positional
`<checkResultId>` you read from `result list`.) On a later repair round, pass the
previously printed `--acceptance <acceptanceId>` so the new snapshot joins the
same history.

On the first ingest, always supply `--requirement "<one-sentence business goal>"`.
The requirement describes what the whole acceptance judges, not the narrower
scope of one round. It is immutable once recorded.

## HARD RULE — programmatic gates are NEVER acceptance checks

This is a binding constraint on every check you author, enforced at ingest —
not a style preference.

Every check MUST be an outcome a **person decides about the delivery**: what
the user sees, hears, reads, or receives. The repo's own automated gates are
not that. The following MUST NOT appear as a check, in any round, under any
phrasing:
add-provider-docSkill

Add documentation for a new AI provider — usage docs, env vars, Docker config, image resources.

add-setting-envSkill

Add server-side environment variables that control default values for user settings.

agent-runtime-hooksSkill

Agent runtime lifecycle hooks. Use for before/after tool or step hooks, tool mocks, human intervention, sub-agent calls, context compression, evals, callAgent, or lifecycle events.

agent-signalSkill

Build or extend LobeHub Agent Signal pipelines. Use for signal sources, signal/action types, policies, middleware, workflow handoff, dedupe, scope behavior, or observability.

agent-tracingSkill

Agent tracing CLI for execution snapshots. Use for agent-tracing, traces, snapshots, LLM call inspection, context engine data, agent step analysis, execution debugging, or pulling remote/production traces ("拉线上 tracing") by operation id. Also the first stop for debugging agent tool calls — wrong or missing tool_calls, unexpected tool arguments or results, which tools were available at a step, or why a tool ran where it did.

builtin-toolSkill

Build LobeHub builtin tool packages. Use when adding agent-callable tools, manifests, executors, runtimes, inspectors, renders, placeholders, streaming, interventions, portals, or tool registries.

chat-sdkSkill

Build multi-platform chat bots with the chat SDK. Use for Slack, Teams, Google Chat, Discord, GitHub, Linear bots, webhooks, mentions, slash commands, cards, modals, or streaming responses.

cli-backend-testingSkill

>