agentleFS
maxwell2732maxwell2732/claudecode-research-harness-workflow/skills/harness-accept/SKILL.md

harness-accept

Skill42 starsChanged 6 days agoMITView on GitHub

Generate an Acceptance Demo HTML for non-engineer vibecoders right before ship/wait/reject decision. Reads back the acceptance_criteria that were stored as personal-preference.v1 by harness-plan-brief (joined by user_request_hash), then renders a single-file HTML showing each criterion as verified or unverified along with a ship/wait/reject recommendation. Use when the user asks for an acceptance review, wants to decide whether to ship a delivered task, or says: acceptance demo, accept demo, acceptance decision, acceptance review, ship/wait/reject decision, acceptance inspection. Do NOT load for: implementation, code review, release work.

1 other project uses a version of this, 1 of them edited.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 2 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If no argument is provided, accept interactively.

    line 36
  2. Distinctive:

    When the skill is invoked, Claude operates in the following steps.

    line 90
  3. Very specific:

    Use current as the default if PROJECT_NAME is empty (outside git).

    line 99
  4. Very specific:

    When the --cross-project-group <name> flag is absent (default behavior):

    line 103
  5. Very specific:

    Call mcp__harness__harness_mem_search with the following parameters:

    line 105
  6. Very specific:

    Only when the --cross-project-group <name> flag is present, retrieve similar plan-brief-approval / acceptance-decision history from other …

    line 121
  7. Very specific:

    If MEMBERS_JSON is [], fall back to default single project search.

    line 130
  8. Very specific:

    If MEMBERS_JSON is non-empty, issue one MCP search per member project:

    line 132
  9. Very specific:

    When adopting a cross-project record, chosen_option / acceptance_criteria from other past projects may be mixed in, so always use the …

    line 147
  10. Very specific:

    If evidence is an empty string, a warning is shown in the HTML (DoD c).

    line 168
  11. Very specific:

    Call scripts/render-html.sh (Phase 65.1.1) with templates/html/accept.html.template:

    line 180

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

harness-accept

A skill for non-engineer clients and producers that presents the acceptance decision (ship / wait / reject) for a completed implementation task as a single HTML page. Used at cognitive load peak (3): the acceptance decision stage.

Operates as the counterpart structure to Phase 65.1.x (harness-plan-brief), reading back the acceptance_criteria approved in the Plan Brief for evaluation.

Quick Reference

  • "Create an Acceptance Demo" → this skill
  • "I want to make an acceptance decision" → this skill
  • "ship/wait/reject decision" → this skill

Responsibility Boundaries

ScopeThis skill's responsibility
SearchCurrent project only (always specify project: <current>, strict_project: true)
Cross-projectNot performed (opt-in via --cross-project-group <name> flag from Phase 65.3 onward)
Plan Brief integrationRead personal-preference.v1 (Phase 65.1.4) using user_request_hash as join key
WriteNot performed (memory write after acceptance approval is the responsibility of accept-record-decision.sh)
Recommendation calculationThreshold judgment at 0.8 / 0.5 based on verified / total criteria ratio. Logic calculated just before scripts/render-html.sh

Input

Pass the user's request as the [task-description] argument (use the same text as during Plan Brief). If no argument is provided, accept interactively.

Output

OutputPathFormat
Acceptance Demo HTML.claude/state/views/accept-<timestamp>.htmlSelf-contained HTML (no server, no JS framework)
Acceptance context JSON.claude/state/views/accept-<timestamp>.context.jsonacceptance-context.v1 schema

Schema: acceptance-context.v1

{
  "schema": "acceptance-context.v1",
  "user_request": "string",
  "user_request_hash": "sha256 hex (join key with personal-preference.v1 on the Plan Brief side)",
  "demo_artifacts": [
    { "kind": "video|screenshot|text", "path": "string" }
  ],
  "verified_criteria": [
    { "name": "string", "passed": true, "evidence": "string" }
  ],
  "tdd_verified": "yes|no|not-required|skip:<reason>",
  "unverified_caveats": ["string"],
  "past_issue_patterns": [
    { "pattern_id": "P5", "title": "string", "verified_in_current_task": true }
  ],
  "recommendation": "ship|wait|reject",
  "recommendation_evidence": ["string"],
  "project": "string",
  "generated_at": "ISO8601"
}

Full schema: see schemas/acceptance-context.v1.schema.json.

Recommendation Calculation Logic

verified_count    = count of verified_criteria where passed=true
total_criteria    = count of verified_criteria
ratio             = verified_count / total_criteria  (0 when total=0)

  ratio >= 0.8 → "ship"
  ratio >= 0.5 → "wait"
  ratio <  0.5 → "reject"
  total = 0    → "reject" (0 criteria means unable to judge; default to safe side reject)

Record the evaluation basis with literal numbers in recommendation_evidence. Example: "verified 4 / total 5 (80%) → above ship threshold"

Execution Flow

When the skill is invoked, Claude operates in the following steps.

Step 1: Resolve project name and user_request_hash

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)")"
USER_REQUEST_HASH="$(printf '%s' "$USER_REQUEST" | sha256sum | awk '{print $1}')"

Use current as the default if PROJECT_NAME is empty (outside git).

Step 2: Search harness-mem project-only and retrieve Plan Brief record (default)

When the --cross-project-group <name> flag is absent (default behavior):

Call mcp__harness__harness_mem_search with the following parameters:

project: <PROJECT_NAME>
strict_project: true
tags: ["personal-preference", "plan-brief-approval"]
limit: 10

Important: The project parameter is required. Specify strict_project: true and never perform cross-project searches.

Filter the retrieved records by data.user_request_hash == <USER_REQUEST_HASH> and select the most recent one. This record holds the approval content from Plan Brief time (chosen_option / acceptance_criteria, etc.).

Step 2 (alt): cross-project search (Phase 65.3.5 opt-in)

Only when the --cross-project-group <name> flag is present, retrieve similar plan-brief-approval / acceptance-decision history from other projects within the cross-project group (D43 Option α):

MEMBERS_JSON="$(bash scripts/load-cross-project-groups.sh --group "<name>" 2>/dev/null)" || {
  echo "ERROR: cross-project group not found: <name>" >&2
  exit 1
}

If MEMBERS_JSON is [], fall back to default single project search.

If MEMBERS_JSON is non-empty, issue one MCP search per member project:

for each project in MEMBERS_JSON:
  mcp__harness__harness_mem_search(
    project: <member>,
    strict_project: true,
    tags: ["personal-preference", "plan-brief-approval"],
    limit: 10
  )

Merge results on the client side, filter by data.user_request_hash == <USER_REQUEST_HASH>. Hash matches are generally from the same user request so duplicates across projects are rare, but dedupe by id to be safe.

When adopting a cross-project record, chosen_option / acceptance_criteria from other past projects may be mixed in, so always use the --with-redaction flag when generating HTML output:

bash scripts/render-html.sh --template accept ... --with-redaction

For details, see "Phase 65.3 Implementation Decisions (D43)" in .claude/rules/cross-repo-handoff.md.

Step 3: Retrieve past issue patterns (delegated to Phase 65.2.2)

bash scripts/accept-past-issues.sh --project "$PROJECT_NAME" --task "$USER_REQUEST" > "$PAST_ISSUES_JSON"

This script semantically searches patterns.md (P1-P33) and past acceptance-context.v1 records, returning up to 3 past-issue.v1 entries, each with verified_in_current_task: bool.

Step 4: Build verified_criteria

For each item in the acceptance_criteria from Plan Brief time, evaluate the current task's state. The user (or Claude) presents "verified evidence" and fills in the evidence string.

If evidence is an empty string, a warning is shown in the HTML (DoD c).

For tasks where TDD is required, the Acceptance Demo must include a TDD verified: yes|no line. For cases where TDD is not required or is skipped, display TDD verified: not-required or TDD verified: skip:<reason>. yes can only be set when Red evidence in .claude/state/tdd-red-log/<task-id>.jsonl or literal failing test output can be confirmed.

Step 5: Calculate recommendation

Determine ship / wait / reject according to the "Recommendation Calculation Logic" above.

Step 6: Generate HTML

Call scripts/render-html.sh (Phase 65.1.1) with templates/html/accept.html.template:

bash scripts/render-html.sh \
  --template accept \
  --data "$CONTEXT_JSON" \
  --out "$HTML_OUT"

Step 7: Auto-open in browser

Reuse scripts/plan-brief-open.sh (the general-purpose OS dispatcher introduced in Phase 65.1.2):

bash scripts/plan-brief-open.sh "$HTML_OUT"

Note: The script name contains "plan-brief", but it is actually a kind-neutral OS browser open dispatcher. It was named this because it was introduced first in Phase 65.1.2. It is also reused for other purposes such as Layer 3 (final HTML pre-scan). When the BROWSER=true env is set (CI environment), opening is skipped and only the path is output via printf.

Step 8: Wait for user decision

Confirm whether to accept the ship / wait / reject recommendation or override it. Memory write after the decision is the responsibility of a separate skill (accept-record-decision.sh, Phase 65.2.3).

Failure Behavior

FailureBehavior
mcp__harness__harness_mem_search unreachableShow warning and continue with verified_criteria as empty array (recommendation = reject)
Plan Brief record not foundShow warning and continue with verified_criteria as empty array
git rev-parse --show-toplevel failsContinue with PROJECT_NAME=current
accept-past-issues.sh failsContinue with past_issue_patterns: [] (best-effort)
render-html.sh failsOutput error to stderr and exit 1

Related

  • harness-plan-brief (Phase 65.1.2) — Counterpart skill for the planning stage. This skill reads back personal-preference.v1 from Plan Brief time, joining via user_request_hash
  • scripts/accept-past-issues.sh (Phase 65.2.2) — Past issue pattern retrieval (read side)
  • scripts/accept-record-decision.sh (Phase 65.2.3) — Approval memory write (acceptance-decision.v1)
  • scripts/render-html.sh (Phase 65.1.1) — HTML template engine
  • scripts/plan-brief-open.sh (Phase 65.1.2) — General-purpose OS browser dispatcher
  • harness-progress skill (Phase 65.4.1) — Progress management skill (middle of the 3 surfaces)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.