Repository navigation
Description
Description
Build an agent skill (SKILL.md + supporting reference files) that walks developers through integrating StuntDouble into an existing LangGraph agent. The skill should take a developer from zero to a fully wired, testable mocking setup in a single guided session.
Motivation
The existing adoption skill is internal and org-specific. A public-facing skill lowers the barrier to entry for open-source adopters who want to add tool mocking but aren't sure where to start or how the pieces fit together.
Outcome Requirements
The skill must:
Discover the agent's existing tools, graph structure, and ToolNode usage automatically.
Scaffold a mocking directory containing:
A MockToolsRegistry setup module
Mock factory functions with signatures that match the real tools
An init.py that wires the registry
Wire create_mockable_tool_wrapper into the agent's ToolNode via awrap_tool_call, with a feature flag to disable in production.
Generate sample mock scenarios in JSON covering:
Static output cases
Input-matched cases using operators ($contains, $regex, $gt, etc.)
Dynamic placeholders ({{now}}, {{uuid}}, {{input.field}})
Generate sample mock factory functions showing:
Simple return-output pattern
Conditional logic with scenario_metadata
Set up CallRecorder with example assertions for captured tool invocations.
Produce a working test suite — a pytest file that exercises the mocked agent graph and passes out of the box.
Include a manual smoke-test command (e.g. curl) demonstrating scenario metadata injection.
Status and remaining work — 2026-10-29
The implementation is in open PR #71; the public skill has not landed on main. Keep this issue open until that PR is updated, reviewed, and merged.
Refresh the skill against current main before merging:
- Remove the outdated claim that wrapper signature validation rejects data-driven/MockBuilder
**kwargsmocks: bug:validate_signatures=Truerejects**kwargsmocks (data-driven and MockBuilder), making runtime validation unusable with them #69 is fixed. - Remove the claim that a present
Noneinput/config value returns the unresolved placeholder: bug:{{input.x}}/{{config.x}}return the literal placeholder when the value isNone#57 is fixed. - Document nested input/config paths and list indices supported by merged feat: nested paths in {{input.a.b}} / {{config.a.b}} placeholders #76 instead of describing field references as single identifiers only.
- Retain the actual limitation that
default(...)takes a literal rather than recursively resolving another placeholder. - Re-run the runnable reference suite against current main and review the troubleshooting guidance for the updated behavior.
The original outcome requirements remain in force. Once the refreshed PR #71 lands, close this issue via its existing closing link.
Issue clarification assisted by Codex.
Activity
[-]Adoption: Create adoption skill to help first time usage[/-][+]task: Create adoption skill to help first time usage[/+]