Agent skill

Write Integration Test

by imbue-ai in imbue-ai/sculptor

Instructions for writing new Sculptor frontend integration tests.

MITAuto-check passedTesting & QA

Install Write Integration Test

skills CLI
$ npx skills add imbue-ai/sculptor --skill write-integration-test -a claude-code

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

GitHub CLI
$ gh skill install imbue-ai/sculptor write-integration-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/imbue-ai/sculptor.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/write-integration-test .claude/skills/write-integration-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
write-integration-test
GitHub stars
236
Token cost
~2.1k tokens
SKILL.md length
581 words
Files
1
Skills in repo
29
Repo updated
First seen
Licence
MIT

At a glance

Instructions for writing new Sculptor frontend integration tests.

  • Works in 3 steps: Write the test file → Run the test → Commit the test
  • Writing new integration tests
  • SKILL.md covers First Decision: Default…, CRITICAL: Use…, Step-by-Step: Writing a New Test and JSON Formatting Convention, plus 1 more section
  • Calls just and git

What it does

Write Integration Test is an agent skill from imbue-ai/sculptor. Instructions for writing new Sculptor frontend integration tests. Covers how to use FakeClaude for deterministic agent behavior, test file setup, and the available FakeClaude commands. Use when writing new integration tests or adding tests to existing files.

Its SKILL.md is about 2.1k 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 Integration testing. It works with Bash. The repository describes itself as: Build product with grounded, parallel coding agents. The licence is MIT.

When your agent uses it

  • Writing new integration tests
  • Adding tests to existing files

Example prompts

  • “Use the write-integration-test skill to instruction for writing new Sculptor frontend integration tests”
  • “/write-integration-test”

Requirements

  • Python 3

Workflow steps

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

  1. Write the test file
  2. Run the test
  3. Commit the test

What it can do on your machine

Read from SKILL.md and the folder at commit f847102. 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

    Shell commands in SKILL.md call:

    • just
    • git

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

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    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

Write Integration Test loads about 2.1k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 581 words of instructions outside code blocks.

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

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 imbue-ai/sculptor at commit f847102, republished under its MIT licence (© imbue-ai). 581 words, ~2,126 tokens.

Download SKILL.mdSave it as .claude/skills/write-integration-test/SKILL.md (or your agent's skills folder).
name
write-integration-test
description
Instructions for writing new Sculptor frontend integration tests. Covers how to use FakeClaude for deterministic agent behavior, test file setup, and the available FakeClaude commands. Use when writing new integration tests or adding tests to existing files.

Writing New Integration Tests

This skill explains how to write a new frontend integration test for Sculptor.

First Decision: Default Response vs FakeClaude Commands

Before writing your test, decide whether you need to control the agent's behavior.

Default response (prefer this when possible)

When the prompt has no fake_claude: prefix, FakeClaude returns a default response ("[FakeClaude] Task completed.") without making any LLM calls.

Use the default response when: the test doesn't depend on specific agent behavior — e.g., testing UI elements, task list rendering, settings pages, modals, branch switching, navigation, or any feature where it doesn't matter what the agent says, only that a task exists.

Advantages:

  • Simplest possible test — no command strings to construct
  • Fast — instant responses, no real LLM calls

How: Call start_task_and_wait_for_ready() with a plain prompt (no fake_claude: prefix) — or with no prompt at all when the test only needs the workspace UI shell.

FakeClaude commands (for controlled agent behavior)

If your test needs the agent to perform specific actions — e.g., writing files, running bash commands, calling tools, or asking user questions — use FakeClaude commands. These give you deterministic, repeatable agent behavior without any LLM calls.

Use FakeClaude commands when: the test asserts on specific agent output, tool usage, file changes, or any behavior that requires controlling what the agent does.

How: Prefix the prompt (or a follow-up send_chat_message) with fake_claude:<command> followed by a JSON argument in backticks.

Available FakeClaude commands
CommandDescriptionExample
textEmit a text responsefake_claude:text \{"text": "Hello"}``
write_fileWrite a file to diskfake_claude:write_file \{"file_path": "hello.py", "content": "..."}``
edit_fileEdit a file (old_string → new_string)fake_claude:edit_file \{"file_path": "f.py", "old_string": "...", "new_string": "..."}``
bashRun a shell commandfake_claude:bash \{"command": "echo hello"}``
todo_writeUpdate the todo/plan listfake_claude:todo_write \{"todos": [...]}``
ask_user_questionAsk the user a question (Q&A panel)fake_claude:ask_user_question \{"questions": [...]}``
multi_stepExecute multiple commands sequentiallyfake_claude:multi_step \{"steps": [...]}``
parallel_toolsExecute multiple tools in parallelfake_claude:parallel_tools \{"tools": [...]}``
warningSurface a warning messagefake_claude:warning \{"message": "..."}``
Show full SKILL.md (268 more words)Show less

CRITICAL: Use /run-integration-test to Run Tests

You MUST use the /run-integration-test skill to run integration tests. Do not run pytest or just test-integration directly — the skill handles background execution and timeout monitoring, which is required because integration tests can hang indefinitely on failure. Running in foreground will block you with no way to recover.

The just test-integration commands shown below are for human developers only. As an agent, always use /run-integration-test instead.

Step-by-Step: Writing a New Test

Step 1: Write the test file

Create your test file in sculptor/tests/integration/frontend/. Follow the patterns in the existing README at sculptor/tests/integration/frontend/README.md.

Key conventions:

  • Use sculptor_instance_: SculptorInstance fixture for tests using the shared instance
  • Use sculptor_instance_factory_: SculptorInstanceFactory for tests that need multiple Sculptor instances (e.g., restart tests)
  • Use @user_story("...") decorator
  • Use Playwright expect() for all assertions (auto-retrying)
  • Access elements through the POM hierarchy, never raw get_by_test_id() in test code
  • Use only() from sculptor.foundation.itertools when expecting exactly one element
  • Read docs/development/review/integration_tests.md to avoid common anti-patterns (flaky sleeps, snapshot races, missing waits)
Minimal example (default response — no commands needed):
python
"""Integration tests for my new feature."""

from playwright.sync_api import expect

from sculptor.testing.playwright_utils import start_task_and_wait_for_ready
from sculptor.testing.sculptor_instance import SculptorInstance
from sculptor.testing.user_stories import user_story


@user_story("to verify my new feature works")
def test_my_feature(sculptor_instance_: SculptorInstance) -> None:
    """Test that my feature works correctly."""
    # No fake_claude: prefix — FakeClaude returns the default response.
    # The helper creates the workspace, sends the prompt as the first chat
    # message, and (by default) waits for the agent to finish.
    task_page = start_task_and_wait_for_ready(
        sculptor_page=sculptor_instance_.page,
        prompt="Do something",
    )
    chat_panel = task_page.get_chat_panel()
    expect(chat_panel.get_messages().last).to_contain_text("Task completed")

    # ... your assertions on UI elements here ...
Minimal example (FakeClaude command — controlled behavior):
python
"""Integration tests that require controlled agent behavior."""

from playwright.sync_api import expect

from sculptor.testing.elements.chat_panel import wait_for_completed_message_count
from sculptor.testing.playwright_utils import start_task_and_wait_for_ready
from sculptor.testing.sculptor_instance import SculptorInstance
from sculptor.testing.user_stories import user_story


@user_story("to verify agent creates files correctly")
def test_agent_creates_file(sculptor_instance_: SculptorInstance) -> None:
    """Test that the agent creates a file and it appears in changes."""
    task_page = start_task_and_wait_for_ready(
        sculptor_page=sculptor_instance_.page,
        prompt="""\
fake_claude:write_file `{
  "file_path": "hello.py",
  "content": "def hello_world():\\n    print('hello world')\\n"
}`""",
    )

    chat_panel = task_page.get_chat_panel()
    wait_for_completed_message_count(chat_panel=chat_panel, expected_message_count=2)

    # ... your assertions on file changes here ...
Multi-step example (sequential commands):
python
    task_page = start_task_and_wait_for_ready(
        sculptor_page=sculptor_instance_.page,
        prompt="""\
fake_claude:multi_step `{
  "steps": [
    {
      "command": "write_file",
      "args": {
        "file_path": "hello.py",
        "content": "def hello():\\n    print('hello')\\n"
      }
    },
    {
      "command": "bash",
      "args": {"command": "git add hello.py && git commit -m 'Add hello'"}
    }
  ]
}`""",
    )
Step 2: Run the test

Use /run-integration-test to run your test:

/run-integration-test sculptor/tests/integration/frontend/test_my_feature.py

FakeClaude tests require no special setup — no API keys, no snapshot generation. They run deterministically every time.

Step 3: Commit the test
bash
git add sculptor/tests/integration/frontend/test_my_feature.py

JSON Formatting Convention

When FakeClaude commands have complex JSON arguments (nested objects, arrays), use multiline strings for readability:

python
    task_page = start_task_and_wait_for_ready(
        sculptor_page=sculptor_instance_.page,
        prompt="""\
fake_claude:ask_user_question `{
  "questions": [
    {
      "question": "What language do you prefer?",
      "header": "Language",
      "options": [
        {"label": "Python", "description": "A versatile language"},
        {"label": "Rust", "description": "For systems programming"}
      ],
      "multiSelect": false
    }
  ]
}`""",
    )

For simple single-field JSON, inline is fine:

python
    task_page = start_task_and_wait_for_ready(
        sculptor_page=sculptor_instance_.page,
        prompt='fake_claude:text `{"text": "Hello from FakeClaude"}`',
    )

Troubleshooting

If a test fails, use the /debug-integration-test skill. It covers common failure modes (Playwright timeouts, element state issues), how to read test logs, and investigation strategies.

© imbue-ai, 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 .claude/skills/write-integration-test of imbue-ai/sculptor.

Open the folder on GitHubat commit f847102

Compare with similar skills

Write Integration 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.

Write Integration Test compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Write Integration Test this skillimbue-ai/sculptor236—~2.1kAutomated safety check: PassMIT
Sake Testingkattouf/Sake116—~743Automated safety check: PassMIT
Telnyx Twilio Migrationteam-telnyx/ai220—~11kAutomated safety check: NotesMIT
OpenHarness End-to-End EvalsHKUDS/OpenHarness16k1 repos~2.1kAutomated safety check: NotesMIT
E2E Testinglangflow-ai/langflow156k—~3.3kAutomated safety check: PassMIT
E2Ecallstack/react-native-pager-view3.4k1 repos~2.1kAutomated safety check: PassMIT

Similar skills

  • Sake Testing

    kattouf/Sake

    A skill your agent uses when writing or running tests for the Sake project — unit tests, macro expansion tests, integration tests, test helpers, and CI test commands.

    116 GitHub stars~743 tokensUpdated 6 mo ago
    Testing & QAAuto-check passed
  • Migrate from Twilio to Telnyx. An agent skill from team-telnyx/ai.

    220 GitHub stars~11k tokensUpdated 2 days ago
    DevelopmentAuto-check: notes
  • Validates OpenHarness features by running real multi-turn agent loops with live LLM calls against an unfamiliar codebase, checking actual tool execution.

    16k GitHub starsUsed in 1 repo~2.1k tokens
    Testing & QAAuto-check: notes
  • E2E Testing

    langflow-ai/langflow

    Write and review Playwright E2E tests for Langflow. An agent skill from langflow-ai/langflow.

    156k GitHub stars~3.3k tokensUpdated today
    Testing & QAAuto-check passed
  • E2E

    callstack/react-native-pager-view

    Agentic end-to-end tests with e2e, the e2e runner. An agent skill from callstack/react-native-pager-view.

    3.4k GitHub starsUsed in 1 repo~2.1k tokens
    Testing & QAAuto-check passed
  • Test Writing Workflow

    iOfficeAI/AionUi

    Sets the test-writing workflow for the repository: risk-first scenario lists, behavior-focused Vitest tests, a full run before each commit and a coverage target.

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

More from imbue-ai/sculptor

All 29 skills in this repo
  • Auto QA Iphone

    imbue-ai/sculptor

    QA the Sculptor mobile web UI on a real iOS Simulator, driven headlessly from a Mac.

    236 GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Measure React Renders

    imbue-ai/sculptor

    Compare React component render counts between origin/main and the current branch during a user-defined UI scenario (e.g.

    236 GitHub stars~603 tokensUpdated today
    Auto-check passed
  • Post PR To Slack

    imbue-ai/sculptor

    Post a one-line PR announcement to a Slack channel, and mark it :merged: when the PR merges.

    236 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Batch Claude Runner

    imbue-ai/sculptor

    Run Claude programmatically against collections of files in the codebase.

    236 GitHub stars~308 tokensUpdated today
    Auto-check passed
  • Build Sculptor Extension

    imbue-ai/sculptor

    Build or modify a Sculptor extension — a runtime ESM module loaded into the Sculptor UI.

    236 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Code Review Checklist

    imbue-ai/sculptor

    Review a set of code changes against Sculptor's review categories and produce a markdown findings table.

    236 GitHub stars~3.6k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Write Integration Test

What does Write Integration Test do?

Instructions for writing new Sculptor frontend integration tests. Write Integration Test is an agent skill from imbue-ai/sculptor. Instructions for writing new Sculptor frontend integration tests.

When should I use Write Integration Test?

Write Integration Test fits situations like: writing new integration tests; adding tests to existing files.

How do I install Write Integration Test in Claude Code?

Run `npx skills add imbue-ai/sculptor --skill write-integration-test -a claude-code`. Or copy the skill folder (.claude/skills/write-integration-test in imbue-ai/sculptor) into .claude/skills/write-integration-test in your project. Claude Code loads it when a task matches its description.

How do I install Write Integration Test in Codex?

Run `npx skills add imbue-ai/sculptor --skill write-integration-test -a codex`. Or copy the skill folder (.claude/skills/write-integration-test in imbue-ai/sculptor) into .agents/skills/write-integration-test in your project. Codex loads it when a task matches its description.

Can I use Write Integration 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 imbue-ai/sculptor --skill write-integration-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/write-integration-test, .gemini/skills/write-integration-test, .github/skills/write-integration-test and .opencode/skills/write-integration-test in your project.

What does Write Integration Test need to run?

Going by SKILL.md and its folder, Write Integration Test needs the command-line tools its instructions call (just and git). Our summary lists: Python 3.

Does Write Integration Test access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Write Integration 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 Write Integration Test use?

Write Integration 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 Write Integration Test use?

About 2.1k tokens (SKILL.md is roughly 8.5k 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 Write Integration Test?

Skills that share tags, products or a category with Write Integration Test: Sake Testing (kattouf/Sake, 116 stars), Telnyx Twilio Migration (team-telnyx/ai, 220 stars), OpenHarness End-to-End Evals (HKUDS/OpenHarness, 16k stars) and E2E Testing (langflow-ai/langflow, 156k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Write Integration Test?

imbue-ai (a GitHub organization) maintains it in imbue-ai/sculptor, which has 236 GitHub stars. The repository holds 29 skills in this directory. The repository was last updated on October 7, 2026.

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