Best for
- Activation Triggers
- When NOT to Use
- /create:manual-testing-playbook.
MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory/.opencode/skills/sk-doc/sk-create-manual-testing-playbook/SKILL.md
Author manual testing playbook packages with deterministic scenarios, evidence collection, and multi-agent execution planning.
Decision brief
create-manual-testing-playbook is the manual-validation package workflow for the sk-doc family. It authors manual-testing-playbook/ packages for skills and systems that need reproducible operator-facing scenarios, evidence capture, release-readiness review, and realistic orchest…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory --skill ".opencode/skills/sk-doc/sk-create-manual-testing-playbook"Inspect the Agent Skill "sk-create-manual-testing-playbook" from https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory/blob/3d386ee21366523774d89c0aff3ebbbc8fa7ff10/.opencode/skills/sk-doc/sk-create-manual-testing-playbook/SKILL.md at commit 3d386ee21366523774d89c0aff3ebbbc8fa7ff10. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Confirm the target skill or system, package owner, feature set, and whether a feature catalog already exists. 2. Decide whether a manual testing playbook is appropriate using the decision rule in this skill. 3. Define category directories using a descriptive kebab-case slug s…
Use this workflow when the request involves:
Use this workflow when the request involves:
Use another sk-doc packet when:
This packet owns manual testing playbook packages only. It consumes shared sk-doc standards from ../shared, but the advisor identity lives at the sk-doc hub root. Do not add a packet-local graph-metadata.json.
Permission review
The documentation asks the agent to run terminal commands or scripts.
node .opencode/skills/system-deep-loop/deep-improvement/scripts/skill-benchmark/run-skill-benchmark.cjs \The documentation asks the agent to run terminal commands or scripts.
node .opencode/skills/system-deep-loop/deep-improvement/scripts/skill-benchmark/run-manual-playbook-scenario.cjs \The documentation asks the agent to create, modify, or delete local files.
Create one per-feature file for each feature ID from `assets/manual-testing-playbook-snippet-template.md`.Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 94/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 34 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
create-manual-testing-playbook is the manual-validation package workflow for the sk-doc family. It authors manual-testing-playbook/ packages for skills and systems that need reproducible operator-facing scenarios, evidence capture, release-readiness review, and realistic orchestration or multi-agent execution planning.
Core principle: keep shared rules in the root playbook, keep execution truth in per-feature files, and make every scenario deterministic enough that another operator can reproduce the verdict.
Use this workflow when the request involves:
/create:manual-testing-playbook.manual-testing-playbook/manual-testing-playbook.md.Keyword triggers: manual testing playbook, /create:manual-testing-playbook, testing playbook, playbook system, deterministic scenario, evidence collection, operator validation, multi-agent execution, release readiness.
Strong signals that a playbook is warranted:
Use another sk-doc packet when:
create-feature-catalog.create-readme, create-skill, create-agent, create-command, create-benchmark, create-flowchart, or create-changelog.create-quality-control.Decision rule:
Need reusable manual validation with captured evidence?
YES -> Create a playbook package
NO -> Keep test steps in spec/checklist docs
This packet owns manual testing playbook packages only. It consumes shared sk-doc standards from ../shared, but the advisor identity lives at the sk-doc hub root. Do not add a packet-local graph-metadata.json.
For this flat-reference packet, the canonical resilient router discovers resources at call time, guards and loads only what exists, scores the two authoring scopes, and returns a disambiguation checklist rather than silently loading nothing:
from pathlib import Path
SKILL_ROOT = Path(__file__).resolve().parent
RESOURCE_BASES = (SKILL_ROOT / "references", SKILL_ROOT / "assets")
DEFAULT_RESOURCE = "references/README.md"
# Two authoring scopes; keywords come from this packet's activation triggers.
INTENT_MODEL = {
"root_playbook": {"weight": 4, "keywords": ["manual testing playbook", "/create:manual-testing-playbook", "testing playbook", "release readiness"]},
"per_feature_scenario": {"weight": 4, "keywords": ["deterministic scenario", "evidence collection", "operator validation", "multi-agent execution"]},
}
UNKNOWN_FALLBACK_CHECKLIST = [
"Confirm the target skill or system and the feature set under test",
"Confirm root playbook index scope vs per-feature scenario file scope",
"Confirm the evidence and pass/fail validation expectations",
]
def discover_markdown_resources() -> set[str]:
docs = []
for base in RESOURCE_BASES:
if base.exists():
docs.extend(path for path in base.rglob("*.md") if path.is_file())
return {doc.relative_to(SKILL_ROOT).as_posix() for doc in docs}
def _guard_in_skill(relative_path: str) -> str:
resolved = (SKILL_ROOT / relative_path).resolve()
resolved.relative_to(SKILL_ROOT)
if resolved.suffix.lower() != ".md":
raise ValueError(f"Only markdown resources are routable: {relative_path}")
return resolved.relative_to(SKILL_ROOT).as_posix()
def load_if_available(relative_path, inventory, loaded, seen) -> None:
guarded = _guard_in_skill(relative_path)
if guarded in inventory and guarded not in seen:
load(guarded)
loaded.append(guarded)
seen.add(guarded)
def score_intents(request) -> dict:
text = request.text.lower()
scores = {intent: 0 for intent in INTENT_MODEL}
for intent, cfg in INTENT_MODEL.items():
for kw in cfg["keywords"]:
if kw in text:
scores[intent] += cfg["weight"]
return scores
def route_manual_testing_playbook_request(request):
inventory = discover_markdown_resources()
loaded, seen = [], set()
scores = score_intents(request)
if max(scores.values() or [0]) < 4: # Tier 1: unclear scope
load_if_available(DEFAULT_RESOURCE, inventory, loaded, seen)
return {
"load_level": "UNKNOWN_FALLBACK",
"needs_disambiguation": True,
"disambiguation_checklist": UNKNOWN_FALLBACK_CHECKLIST,
"resources": loaded,
}
scope = max(scores, key=scores.get) # Tier 2: happy path
# Flat resource topology: no references/<key>/ subdirectories. The scope selects the
# authoring target documented above, not a keyed subtree; load the flat refs that exist.
for path in sorted(inventory):
load_if_available(path, inventory, loaded, seen)
return {"scope": scope, "resources": loaded}
Author this layout:
manual-testing-playbook/
|-- manual-testing-playbook.md
|-- category-name/
| |-- feature-name.md
| `-- another-feature-name.md
`-- another-category/
`-- feature-name.md
Package invariants:
manual-testing-playbook.md.category-name (no numeric prefix).feature-name.md; no numeric file prefix.manual-testing-playbook.md), not the folder name.stage: frontmatter field (routing default, or holdout/negative), not by a filename token.Contract boundary:
scripts/validate-playbook-package.cjs.sk-create-skill/scripts/validate-playbook-topology.cjs.playbook-corpus-manifest.json is an explicit whole-tree override map consumed only
by the operator validator. A listed routing-gold tree is excluded from operator
checks; for every other file, a non-empty expected_workflow_mode plus at least one
expected_leaf_resources pair in frontmatter classifies that file as routing gold.
Files without that signature are operator-scenario files. The topology gate and the
Lane-C loader do not read this manifest and keep their existing boundary.Do not create:
snippets/ subtree for canonical per-feature files.review_protocol.md.subagent_utilization_ledger.md.manual-testing-playbook/manual-testing-playbook.md is the package directory and review surface. It owns:
Root summaries should be concise but useful:
Root-to-feature rule: the root document explains package-level policy; per-feature files carry scenario-specific execution truth.
Each per-feature file is the canonical scenario contract for one feature ID.
Required per-feature section order:
## 1. OVERVIEW## 2. SCENARIO CONTRACT## 3. TEST EXECUTION## 4. REFERENCES or ## 4. SOURCE FILES## 5. SOURCE METADATAEach per-feature file must include:
title, description, and a 4-part version.A playbook is a corpus. Running it produces evidence, and that evidence has a home: the same
benchmark/ tree that holds every other measurement of the skill. Without this rule a run leaves
nothing behind, and the next person has no way to know the playbook was ever executed.
<skill>/
|-- manual-testing-playbook/ # the corpus, an input, never rewritten by a run
`-- benchmark/
`-- reports/
|-- README.md # the run index, one row per folder
`-- 2026-07-29--manual-testing-playbook--goal-hook/
|-- README.md
|-- skill-benchmark-report.json
|-- skill-benchmark-report.md
|-- results.csv
|-- failed-runs.md
|-- findings-and-recommendations.md
`-- source.md
Run folders are named <YYYY-MM-DD>--<subject>--<variant>, dated by execution. When a run is
feature-scoped — a hand-derived validation of one feature or scenario group rather than a full-corpus
harness sweep — name the <variant> for the feature (e.g. goal-hook) and record the model/executor
inside the report, so the folder stays legible across models. A full-corpus harness run auto-names the
<variant> from the executor identity instead (see below). create-benchmark owns the grammar in full;
see its storage sections for the field vocabulary and the one carve-out.
The Lane C harness reads a skill's playbook as its default corpus and writes the whole folder, including the index row:
node .opencode/skills/system-deep-loop/deep-improvement/scripts/skill-benchmark/run-skill-benchmark.cjs \
--skill <skill-id>
Given no --outputs-dir, it derives the path above from the skill root, the execution date and the
executor identity in the environment. Pass --outputs-dir only to send a run somewhere else on
purpose; a run outside a reports/ directory is deliberately left out of the index.
A manual scenario is incomplete until its PASS, FAIL, or SKIP outcome and reason are persisted by the canonical wrapper into the skill's benchmark/reports/<dated-run-label>/ folder. The renderer owns skill-benchmark-report.md and any results.md or report.md output; never hand-author those files.
node .opencode/skills/system-deep-loop/deep-improvement/scripts/skill-benchmark/run-manual-playbook-scenario.cjs \
--skill <root-or-id> \
--scenario <ID> \
--variant <feature-slug> \
--verdict PASS|FAIL|SKIP \
--reason "<text>" \
--stage <slug> \
[--evidence <comma-paths>]
Lane C scoring remains owned by scoring-contract.md; this completion rule does not restate it.
Every PASS uses --outcome-json, sets executionContext.requireDurableEvidence to true, and selects one controlled evidence class: unit, adapter-driven, registered-path, or native-host-delivered. Evidence paths must resolve beneath executionContext.evidenceRoot through non-symlink regular files; reports record repo-relative paths, byte counts, and SHA-256 values. A PASS also records the exact command, runtime plus observed version, sanitized payload fixture or an explicit not-applicable reason, observed executor or reason, and observed model or reason. Corrected runs list prior immutable report folders in executionContext.supersedes; the wrapper updates the external supersession manifest. Requested --executor and --model labels remain requested labels unless the outcome marks them observed.
manual-testing-playbook/, and gold that needs to change
gets a corpus revision rather than a rewritten scenario.skill-benchmark-report.md is renderer-owned and regenerated from the JSON. Never hand-edit it.source.md.Follow this sequence:
category-name.{PREFIX}-{NNN} pattern.manual-testing-playbook/ directory.manual-testing-playbook/manual-testing-playbook.md from assets/manual-testing-playbook-template.md.assets/manual-testing-playbook-snippet-template.md.Authoring sequence matters:
Each scenario must be reproducible by another operator. Include exact prompts, exact command sequences, observable expected signals, captured evidence, and binary pass/fail criteria.
Execution status is limited to:
PASSFAILSKIP with a specific sandbox blockerDo not classify scenarios outside the PASS / FAIL / SKIP enum. A SKIP must name a specific sandbox or runtime blocker.
Prompts should be:
Weak prompt:
Test search
Acceptable prompt:
Use memory_context in auto mode for the flaky index scan retry issue, capture the returned bounded context, and return a concise pass/fail verdict with the main reason.
The canonical Prompt: field defaults to natural-human voice. Match how a real user would phrase the request to an AI in conversation.
Use the RCAF wrapper only when the actor is an AI orchestrator:
As a {ROLE}, {ACTION} against {TARGET}. Verify {EXPECTED_OUTCOME}. Return {OUTPUT_FORMAT}.
Use natural-human voice when:
Use RCAF when:
When in doubt, prefer natural-human voice. The Real user request: field is always natural-human and serves as the voice reference baseline.
These fields must agree:
SCENARIO CONTRACT.Exact Prompt column in the execution table.Do not ship unsynchronized prompt fields.
Run shared validation on the root playbook before delivery from the repo root (replace <SKILL_PATH> with the target skill directory, e.g. .opencode/skills/system-spec-kit):
# New-content naming guard. The staging root must contain only the newly authored
# canonical manual-testing-playbook package, never an ancestor with shipped legacy roots.
python3 .opencode/skills/sk-doc/shared/scripts/check_no_hyphenated_catalog_content.py <new-content-staging-root>
python3 .opencode/skills/sk-doc/shared/scripts/validate_document.py <SKILL_PATH>/manual-testing-playbook/manual-testing-playbook.md --type reference
python3 .opencode/skills/sk-doc/shared/scripts/extract_structure.py <SKILL_PATH>/manual-testing-playbook/manual-testing-playbook.md
The staging scope is mandatory until shipped underscore roots are migrated. Do not run this guard against .opencode/skills or another ancestor containing legacy feature_catalog/ or manual_testing_playbook/ trees.
Also check:
Run the operator-contract validator from the repository root:
node .opencode/skills/sk-doc/sk-create-manual-testing-playbook/scripts/validate-playbook-package.cjs \
--package .opencode/skills/<skill-id>/manual-testing-playbook
The command validates the operator-scenario contract, not the routing-gold contract. It walks every non-excluded
scenario tree and checks, per feature: five-section ordering; title, description, and four-part version
frontmatter; Feature ID; operator/orchestrator prompt; exact command sequence; expected signals; evidence;
pass/fail criteria; failure triage; root-playbook link; allowed verdicts; filename/category shape; unique IDs;
root-index bijection; local links; evergreen truth; and placeholder exclusion. Conditional checks cover a realistic
user request when user intent is explicitly being clarified, an exact prompt when a scenario table is present,
and a feature-catalog link when catalog applicability is declared.
The validator derives scenario and category counts at run time. A root's hand-typed census is reported as a warning, including a mismatch, so documentation repair remains separate from enforcement. Existing measured packages are listed in the validator's staged warning set for the first fleet run; clean packages and new playbooks fail closed. Promotion removes a package from that warning set only after a clean run.
The validator also checks the root playbook for the wrapper completion marker and the complete PASS / FAIL / SKIP
vocabulary as advisory warnings. Missing either item never creates a new fail-closed violation for an existing package.
Exit codes are direct: 0 means conforming or staged warning, 1 means a fail-closed contract violation, and 2
means a usage or boundary error. Strict mode is on by default; --no-strict is local triage only and must not be
used by CI.
The existing validate-playbook-topology.cjs remains the routing-gold consumer and is intentionally unchanged.
The Lane-C loader also remains unchanged. Both consumers continue reading their current playbook paths without
consulting the additive corpus manifest.
manual-testing-playbook.md as the root file name.snippets/ subtree for canonical per-feature files.review_protocol.md or subagent_utilization_ledger.md files.graph-metadata.json.stage: field owns benchmark tier.A create-manual-testing-playbook run is done when:
manual-testing-playbook.md plus kebab-case category folders of per-feature files, with no snippets/ subtree and no separate review_protocol.md or subagent_utilization_ledger.md.graph-metadata.json was added.PASS/FAIL/SKIP verdicts.validate_document.py, per-feature files are manually spot-checked, and any remaining manual scope is documented honestly.The core executable workflow lives in this SKILL.md. Use these only for overflow detail, exhaustive examples, or template text:
references/README.md - reference map routing to the overflow detail below.references/prompt-voice.md - natural-human vs RCAF decision table and voice guidelines.references/common-pitfalls.md - recurring package defects and correct fixes.references/examples.md - shipped reference playbooks and scaffold templates.assets/manual-testing-playbook-template.md - root playbook scaffold.assets/manual-testing-playbook-snippet-template.md - per-feature file scaffold.../shared/references/core-standards.md - shared markdown structure rules.../shared/references/validation.md - shared validation and DQI workflow.../shared/references/frontmatter-versioning.md - 4-part version expectations.../shared/references/evergreen-packet-id-rule.md - evergreen current-state wording.The source assets keep the filenames manual-testing-playbook-template.md and manual-testing-playbook-snippet-template.md until their separate source-file migration. Those filenames are authoring inputs, not emitted package names.
Frequently asked questions
create-manual-testing-playbook is the manual-validation package workflow for the sk-doc family. It authors manual-testing-playbook/ packages for skills and systems that need reproducible operator-facing scenarios, evidence capture, release-readiness review, and realistic orchest…
The source record exposes this install command: npx skills add https://github.com/MichelKerkmeester/opencode--skilled-agent-loops-with-spec-kit-memory --skill ".opencode/skills/sk-doc/sk-create-manual-testing-playbook". Inspect the command and pinned source before running it.
Static rules flagged exec-script, write-files in the source; the page lists the matching lines and excerpts.
Alternatives
vasilyu1983/AI-Agents-public
Guides iOS testing with XCTest, XCUITest, Swift Testing, simctl, and xcresult. Use when choosing destinations, controlling flakes, or parsing test artifacts for native apps.
steipete/agent-scripts
REQUIRED before ANY `op` command or whenever a task needs an API key, token, password, credential, or secret (OPENAI_API_KEY, ANTHROPIC_API_KEY, deploy tokens, live-test keys). Prompt-free 1Password service-account reads; wrong invocations spam macOS dialogs.
microsoft/Sico
Execute Android UI workflows on a sandbox device, review results, and produce a structured execution report.
mission69b/t2000
Publishing, upgrading, and deploying Sui Move packages. Use this skill when the user needs to publish a package, upgrade a published package, deploy to multiple networks, serialize transactions for multisig signing, run a local Sui network (localnet), prepare for Mainnet launch, monitor production deployments, or debug dry run failures. Also use when the user asks about sui client publish, sui client upgrade, UpgradeCap, upgrade policies, Published.toml, --serialize-output, localnet, mainnet lau