Agent skill

Smoke Test

by OriginProtocol in OriginProtocol/origin-dollar

Generate Foundry smoke tests that validate deployment health using DeployManager/Resolver against real on-chain state with pending governance applied.

MITAuto-check passedTesting & QA

Install Smoke Test

skills CLI
$ npx skills add OriginProtocol/origin-dollar --skill smoke-test -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install OriginProtocol/origin-dollar smoke-test --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/OriginProtocol/origin-dollar.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.codex/skills/smoke-test .claude/skills/smoke-test && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
smoke-test
GitHub stars
153
Token cost
~1.6k tokens
SKILL.md length
537 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

Generate Foundry smoke tests that validate deployment health using DeployManager/Resolver against real on-chain state with pending governance applied.

  • Works in 7 steps: How smoke tests differ → Directory layout → Inheritance chain → …
  • The user asks for smoke tests
  • SKILL.md covers 0. How smoke tests differ, 1. Directory layout, 2. Inheritance chain and 3. Shared setup contract, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Smoke Test is an agent skill from OriginProtocol/origin-dollar. Generate Foundry smoke tests that validate deployment health using DeployManager/Resolver against real on-chain state with pending governance applied. Use when the user asks for smoke tests, deployment verification tests, or post-deploy health checks.

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering QA and bug reports and GraphQL. The repository describes itself as: OUSD and OETH are stablecoins that passively accrue yield while you are holding it. The licence is MIT.

When your agent uses it

  • The user asks for smoke tests
  • Deployment verification tests
  • Post-deploy health checks

Example prompts

  • “/smoke-test”

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. How smoke tests differ
  2. Directory layout
  3. Inheritance chain
  4. Shared setup contract
  5. Concrete test naming
  6. What belongs in smoke tests
  7. Key patterns

What it can do on your machine

Read from SKILL.md and the folder at commit 1be34f7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are solidity).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Smoke Test loads about 1.6k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 537 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~66
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from OriginProtocol/origin-dollar at commit 1be34f7, republished under its MIT licence (© OriginProtocol). 537 words, ~1,604 tokens.

Download SKILL.mdSave it as .claude/skills/smoke-test/SKILL.md (or your agent's skills folder).
name
smoke-test
description
Generate Foundry smoke tests that validate deployment health using DeployManager/Resolver against real on-chain state with pending governance applied. Use when the user asks for smoke tests, deployment verification tests, or post-deploy health checks.

Smoke Test

Generate Foundry smoke tests that verify deployment health by bootstrapping the actual deployed state (including pending governance) via the DeployManager/Resolver pipeline.

0. How smoke tests differ

AspectUnit TestsFork TestsSmoke Tests
StateFresh deploys with mocksFresh deploys on forkActual deployed state via Resolver
PurposeFull coverage, fuzzIntegration pathsVerify deployment health
ContractsDeployed in setUpMix fresh + forkedAll resolved from DeployManager
ActorsmakeAddr("Governor")makeAddr("Governor")ousd.governor() (live)
TokensMockERC20.mint()deal()deal()
FuzzYesNoNo

Smoke tests answer "Is this deployment safe to execute?" — not "Does this code work?"

1. Directory layout

text
contracts/tests/smoke/<category>/<Product>/
├── shared/
│   └── Shared.t.sol
└── concrete/
    ├── ViewFunctions.t.sol
    ├── Mint.t.sol
    ├── Redeem.t.sol
    └── Transfer.t.sol

Rules:

  • smoke tests are concrete only; no fuzz/ directory
  • one file per feature area, not per function
  • feature groupings depend on the contract being tested (e.g. for OTokens: ViewFunctions, Mint, Redeem, Transfer, Rebasing, YieldDelegation)

2. Inheritance chain

text
forge-std/Test
  └─ Base
       └─ BaseFork
            └─ BaseSmoke
                 └─ Smoke_<Product>_Shared_Test
                      └─ Smoke_Concrete_<Product>_<Feature>_Test

Base owns shared actors, constants, IERC20 external token refs, and fork IDs. All typed contract/proxy state variables are declared in each Shared.t.sol using interface types.

BaseSmoke provides:

  • resolver — deterministic address: Resolver(address(uint160(uint256(keccak256("Resolver")))))
  • _igniteDeployManager() — runs the full deployment pipeline: parse JSON, etch Resolver, replay scripts, simulate governance
Interface-only testing

Same rules as unit and fork tests — use interfaces, not concrete contracts:

  • Declare state variables with interface types: IVault internal ousdVault;
  • Resolve and cast to interfaces: ousd = IOToken(resolver.resolve("OUSD_PROXY"));
  • Reference events from interfaces: emit IVault.YieldDistribution(...);
  • Available interfaces: IVault, IOToken, IWOToken, IProxy, plus strategy interfaces in contracts/interfaces/strategies/
Product-specific vault types
ProductTokenVaultChain
OUSDOUSDOUSDVaultMainnet
OETHOETHOETHVaultMainnet
OSonicOSonicOSVaultSonic
OETHBaseOETHBaseOETHBaseVaultBase

Never use OETHVault for Sonic tests.

3. Shared setup contract

shared/Shared.t.sol should keep setup in this order:

solidity
function setUp() public virtual override {
    super.setUp();
    _createAndSelectFork<Chain>();
    _igniteDeployManager();
    _fetchContracts();
    _resolveActors();
    _labelContracts();
}

Critical rules:

  • no fresh deploys — everything comes from the Resolver or fork state
  • resolve contracts by name and cast to interfaces: ousd = IOToken(resolver.resolve("OUSD_PROXY"))
  • resolve actors from live contracts: governor = ousd.governor()
  • sanity-check the Resolver: require(address(resolver).code.length > 0, "Resolver not initialized")
Show full SKILL.md (231 more words)Show less

4. Concrete test naming

File and contract naming:

text
concrete/Mint.t.sol
Smoke_Concrete_<Product>_Mint_Test

Function naming patterns:

  • test_<function>()
  • test_<function>_<behavior>()
  • test_<function>_RevertWhen_<condition>()
  • test_<function>_emits<EventName>()

Casing rules:

  • function, behavior, and condition stay camelCase
  • RevertWhen is the only PascalCase token in the test name

5. What belongs in smoke tests

Smoke-test these:

  • core operations (mint, redeem, transfer) against deployed contracts
  • supply invariants (rebasingSupply + nonRebasingSupply ≈ totalSupply)
  • rebase correctness and yield distribution
  • yield delegation with real state
  • view function sanity (totalSupply > 0, governor is non-zero)
  • withdrawal queue end-to-end (request → ensure liquidity → claim)

Do not smoke-test:

  • access control (unit tests)
  • input validation (unit tests)
  • edge cases and fuzz properties (unit tests)
  • strategy internals (fork tests)

6. Key patterns

deal() for real tokens

Use deal(), not mock minting. Tokens on fork are real.

Additive deal for yield

Add to the existing balance; do not overwrite:

solidity
deal(address(usdc), address(vault), usdc.balanceOf(address(vault)) + yieldAmount);
Vault liquidity management

On mainnet fork, most tokens sit in strategies. Ensure vault liquidity before claiming withdrawals:

solidity
function _ensureVaultLiquidity(uint256 extra) internal {
    (uint256 queued, uint256 claimable,,) = vault.withdrawalQueueMetadata();
    uint256 shortfall = queued > claimable ? queued - claimable : 0;
    uint256 needed = shortfall + extra;
    if (needed > token.balanceOf(address(vault))) {
        deal(address(token), address(vault), needed);
    }
    vault.addWithdrawalQueueLiquidity();
}
Tolerant assertions

Live state has rounding. Use approximate comparisons:

solidity
assertApproxEqRel(calculatedSupply, ousd.totalSupply(), 1e14); // 0.01%
assertApproxEqAbs(balanceAfter - balanceBefore, expected, 1e18);
Rebase during mint

The vault may trigger rebase during mint. Use assertGe for total supply changes:

solidity
assertGe(totalSupplyAfter - totalSupplyBefore, mintedAmount - 1e18);

Output expectations

When implementing smoke tests:

  • keep tests focused on deployment health verification
  • use tolerant assertions throughout — live state has accumulated rounding
  • use interface-only imports; no concrete contract imports
  • cast resolved addresses to interfaces, not concrete types
  • mirror the existing OUSD smoke test structure before introducing new patterns
  • prefer a few strong invariant checks over broad but shallow coverage

© OriginProtocol, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .codex/skills/smoke-test of OriginProtocol/origin-dollar.

Open the folder on GitHubat commit 1be34f7

Compare with similar skills

Smoke Test next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Smoke Test compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Smoke Test this skillOriginProtocol/origin-dollar153—~1.6kAutomated safety check: PassMIT
Test Writingshopsys/shopsys350—~436Automated safety check: PassCustom licence
Reproduce Chat Statesdifferent-ai/openwork24k—~673Automated safety check: PassCustom licence
Dynamo Jira TicketDynamoDS/Dynamo2k—~1.1kAutomated safety check: PassApache-2.0
Minimal Run And Auditlllllllama/RigorPilot-Skills4972 repos~691Automated safety check: PassMIT
Moav E2EMotherofallVPNs/MoaV448—~1.9kAutomated safety check: NotesMIT

Similar skills

  • Test Writing

    shopsys/shopsys

    This skill MUST be used when the user asks to write tests, add tests, create test cases, run/execute/re-run/debug tests, test a specific class or method, or when working on any Test.php file in this…

    350 GitHub stars~436 tokensUpdated today
    Testing & QAAuto-check passed
  • Reproduce Chat States

    different-ai/openwork

    Fires known chat states in the running OpenWork desktop app, such as provider errors, retries and tool steps, so you can check how each renders.

    24k GitHub stars~673 tokensUpdated today
    Testing & QAAuto-check passed
  • Dynamo Jira Ticket

    DynamoDS/Dynamo

    Create structured Jira tickets for Dynamo from bug reports, failing tests, or feature requests.

    2k GitHub stars~1.1k tokensUpdated today
    Testing & QAAuto-check passed
  • Minimal Run And Audit

    lllllllama/RigorPilot-Skills

    Rigor Run skill for README-first deep learning repo reproduction.

    497 GitHub starsUsed in 2 repos~691 tokens
    Testing & QAAuto-check passed
  • Moav E2E

    MotherofallVPNs/MoaV

    Run and debug MoaV's end-to-end tests — real protocol connectivity (client-test.sh) and the moav CLI smoke test — against a LIVE server, via the self-hosted e2e workflow or a local test VPS.

    448 GitHub stars~1.9k tokensUpdated yesterday
    Testing & QAAuto-check: notes
  • Anchor Repro

    lynxlangya/techne

    Reproduce a behavioral bug before fixing it, record the failing probe, and verify the fix with the same probe.

    105 GitHub starsUsed in 1 repo~1.2k tokens
    Testing & QAAuto-check passed

More from OriginProtocol/origin-dollar

  • Fork Test

    OriginProtocol/origin-dollar

    Generate Foundry fork tests for contracts that need real on-chain integration coverage.

    153 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Organize Test

    OriginProtocol/origin-dollar

    Reorganize Foundry test files (.t.sol) for readability and consistency without changing semantics.

    153 GitHub stars~3.7k tokensUpdated yesterday
    Auto-check passed
  • Commit

    OriginProtocol/origin-dollar

    Handle git commits with auto-staging, targeted pre-commit formatting, and Conventional Commit messages.

    153 GitHub stars~850 tokensUpdated yesterday
    Auto-check: warnings
  • Talos Action Development

    OriginProtocol/origin-dollar

    Develop, modify, review, and maintain standalone Talos actions in contracts/tasks/actions, including chain guardrails, contract bindings, transaction safety, schedules, action catalogues, and Talos…

    153 GitHub stars~896 tokensUpdated yesterday
    Auto-check passed
  • Unit Test

    OriginProtocol/origin-dollar

    Generate Foundry unit tests for a contract using this repository's conventions, structure, and naming.

    153 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Verify Deployment PR

    OriginProtocol/origin-dollar

    Verifies a POST-EXECUTION mainnet (or other network) smart-contract deployment PR for this repo: confirms every deployed contract is listed in the PR description, that the on-chain verified source…

    153 GitHub stars~2.6k tokensUpdated yesterday
    Auto-check: notes

Categories

Questions about Smoke Test

What does Smoke Test do?

Generate Foundry smoke tests that validate deployment health using DeployManager/Resolver against real on-chain state with pending governance applied. Smoke Test is an agent skill from OriginProtocol/origin-dollar. Generate Foundry smoke tests that validate deployment health using DeployManager/Resolver against real on-chain state with pending governance applied.

When should I use Smoke Test?

Smoke Test fits situations like: the user asks for smoke tests; deployment verification tests; post-deploy health checks.

How do I install Smoke Test in Claude Code?

Run `npx skills add OriginProtocol/origin-dollar --skill smoke-test -a claude-code`. Or copy the skill folder (.codex/skills/smoke-test in OriginProtocol/origin-dollar) into .claude/skills/smoke-test in your project. Claude Code loads it when a task matches its description.

How do I install Smoke Test in Codex?

Run `npx skills add OriginProtocol/origin-dollar --skill smoke-test -a codex`. Or copy the skill folder (.codex/skills/smoke-test in OriginProtocol/origin-dollar) into .agents/skills/smoke-test in your project. Codex loads it when a task matches its description.

Can I use Smoke Test in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add OriginProtocol/origin-dollar --skill smoke-test -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/smoke-test, .gemini/skills/smoke-test, .github/skills/smoke-test and .opencode/skills/smoke-test in your project.

What does Smoke Test need to run?

SKILL.md names no scripts, command-line tools or credentials: Smoke Test is instructions for the agent only.

Does Smoke Test access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Smoke Test safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Smoke Test use?

Smoke Test is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Smoke Test use?

About 1.6k tokens (SKILL.md is roughly 6.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Smoke Test?

Skills that share tags, products or a category with Smoke Test: Test Writing (shopsys/shopsys, 350 stars), Reproduce Chat States (different-ai/openwork, 24k stars), Dynamo Jira Ticket (DynamoDS/Dynamo, 2k stars) and Minimal Run And Audit (lllllllama/RigorPilot-Skills, 497 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Smoke Test?

OriginProtocol (a GitHub organization) maintains it in OriginProtocol/origin-dollar, which has 153 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.

Source: OriginProtocol/origin-dollar on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.