Code Patterns
Aedelon/claude-code-blueprint
Reference patterns for REST APIs, pytest/vitest testing, Docker multi-stage builds, GitHub Actions CI/CD, PostgreSQL, TypeScript generics, Python async, and React Server Components.
Build Docker test images and run SkyWalking Python plugin/unit/e2e tests locally, mirroring the CI pipeline
$ npx skills add apache/skywalking-python --skill plugin-test -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install apache/skywalking-python plugin-test --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/apache/skywalking-python.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/plugin-test .claude/skills/plugin-test && rm -rf skills-srcUse ~/.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/
Install the "plugin-test" agent skill from https://github.com/apache/skywalking-python/tree/master/.claude/skills/plugin-test into .claude/skills/plugin-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-test", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/apache/skywalking-python/tree/master/.claude/skills/plugin-testType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add apache/skywalking-python --skill plugin-test -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install apache/skywalking-python plugin-test --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/skywalking-python.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/plugin-test .agents/skills/plugin-test && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "plugin-test" agent skill from https://github.com/apache/skywalking-python/tree/master/.claude/skills/plugin-test into .agents/skills/plugin-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-test", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add apache/skywalking-python --skill plugin-test -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install apache/skywalking-python plugin-test --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/skywalking-python.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/plugin-test .cursor/skills/plugin-test && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "plugin-test" agent skill from https://github.com/apache/skywalking-python/tree/master/.claude/skills/plugin-test into .cursor/skills/plugin-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-test", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/apache/skywalking-python.git --path .claude/skills/plugin-test--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add apache/skywalking-python --skill plugin-test -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install apache/skywalking-python plugin-test --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/skywalking-python.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/plugin-test .gemini/skills/plugin-test && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "plugin-test" agent skill from https://github.com/apache/skywalking-python/tree/master/.claude/skills/plugin-test into .gemini/skills/plugin-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-test", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install apache/skywalking-python plugin-testInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add apache/skywalking-python --skill plugin-test -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/apache/skywalking-python.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/plugin-test .github/skills/plugin-test && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "plugin-test" agent skill from https://github.com/apache/skywalking-python/tree/master/.claude/skills/plugin-test into .github/skills/plugin-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-test", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add apache/skywalking-python --skill plugin-test -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install apache/skywalking-python plugin-test --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/skywalking-python.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/plugin-test .opencode/skills/plugin-test && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "plugin-test" agent skill from https://github.com/apache/skywalking-python/tree/master/.claude/skills/plugin-test into .opencode/skills/plugin-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plugin-test", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
plugin-testBuild Docker test images and run SkyWalking Python plugin/unit/e2e tests locally, mirroring the CI pipeline
Plugin Test is an agent skill from apache/skywalking-python. Build Docker test images and run SkyWalking Python plugin/unit/e2e tests locally, mirroring the CI pipeline
Its SKILL.md is about 2.3k 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 DevOps & Cloud, covering Containers, End-to-end testing and CI/CD. It works with Docker and Python. The repository describes itself as: The Python agent for Apache SkyWalking. The licence is Apache-2.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 822db03. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
poetrydockercurlmakeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use docker and curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Plugin Test loads about 2.3k tokens when it runs. Until then it costs about 30 tokens; SKILL.md has 673 words of instructions outside code blocks.
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.
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.
The full file from apache/skywalking-python at commit 822db03, republished under its Apache-2.0 licence (© apache). 673 words, ~2,270 tokens.
.claude/skills/plugin-test/SKILL.md (or your agent's skills folder).This skill runs the same tests that CI runs, but locally. Ask the user what they want to test, or infer from recent changes.
The user can specify:
all, unit, a plugin name (e.g., flask, redis), a category (data, http, web), or e2e3.11 (default: 3.11-slim for Docker image)If the user just says /plugin-test with no args, ask what to test.
Before running tests, verify:
# Check Docker is running
docker info > /dev/null 2>&1 || echo "ERROR: Docker is not running"
# Check Poetry is available
poetry --version || echo "ERROR: Poetry not found, run 'make poetry'"
# Check if environment is set up
poetry env info > /dev/null 2>&1 || echo "WARNING: Poetry env not set up, will run 'make env'"If prerequisites fail, help the user fix them before proceeding.
make envThis installs Poetry and all dependencies including dev and plugin groups.
The plugin test image must be built before running any plugin integration tests (not needed for unit tests).
# Default Python version
docker build --build-arg BASE_PYTHON_IMAGE=3.11-slim \
-t apache/skywalking-python-agent:latest-plugin --no-cache \
. -f tests/plugin/Dockerfile.pluginTo test with a specific Python version:
docker build --build-arg BASE_PYTHON_IMAGE=3.12-slim \
-t apache/skywalking-python-agent:latest-plugin --no-cache \
. -f tests/plugin/Dockerfile.pluginImportant: The image tag is always apache/skywalking-python-agent:latest-plugin — this is what docker-compose files reference. Rebuilding with a different Python version replaces it.
The Python version inside the Docker container (not the host) determines what Python the plugin runs under. To test multiple versions, rebuild the image for each:
# Test with Python 3.11
docker build --build-arg BASE_PYTHON_IMAGE=3.11-slim \
-t apache/skywalking-python-agent:latest-plugin --no-cache . \
-f tests/plugin/Dockerfile.plugin
poetry run pytest -v tests/plugin/web/sw_flask/
# Then test with Python 3.13
docker build --build-arg BASE_PYTHON_IMAGE=3.13-slim \
-t apache/skywalking-python-agent:latest-plugin --no-cache . \
-f tests/plugin/Dockerfile.plugin
poetry run pytest -v tests/plugin/web/sw_flask/CI does this as a matrix (builds images for each Python version in parallel, then runs all tests against each). Locally, you rebuild and re-run sequentially.
Available Python base images: 3.9-slim, 3.10-slim, 3.11-slim, 3.12-slim, 3.13-slim, 3.14-slim
Check if image already exists:
docker images apache/skywalking-python-agent:latest-plugin --format "{{.ID}} {{.CreatedAt}}"If it exists and is recent, ask the user if they want to rebuild or which Python version to use (rebuilding takes ~1-2 minutes).
poetry run pytest -v tests/unit/Map the plugin name to its test path:
tests/plugin/web/sw_<name>/tests/plugin/http/sw_<name>/tests/plugin/data/sw_<name>/poetry run pytest -v tests/plugin/web/sw_flask/
poetry run pytest -v tests/plugin/data/sw_redis/
poetry run pytest -v tests/plugin/http/sw_requests/poetry run pytest -v tests/plugin/data/ # All data plugins
poetry run pytest -v tests/plugin/http/ # All HTTP plugins
poetry run pytest -v tests/plugin/web/ # All web pluginspoetry run pytest -v tests/unit/ tests/plugin/data/ tests/plugin/http/ tests/plugin/web/E2E tests need a separate Docker image and use SkyWalking infra-e2e:
# Build E2E image
docker build --build-arg BASE_PYTHON_IMAGE=3.11-slim \
-t apache/skywalking-python-agent:latest-e2e --no-cache \
. -f tests/e2e/base/Dockerfile.e2e
# E2E tests use infra-e2e framework, not pytest directly
# They are defined in tests/e2e/case/*/e2e.yamlNote: E2E tests require the e2e CLI tool from SkyWalking infra-e2e. They are typically only run in CI. Inform the user if they ask for E2E.
Use .* wildcard to always test the latest patch of each minor version:
support_matrix = {
'falcon': {
'>=3.13': ['4.*'], # latest falcon 4.x
'>=3.10': ['3.1.*', '4.*'],
}
}'4.*' → pip installs falcon==4.* → latest 4.x (e.g., 4.2.0 today, 4.3.0 when released)'4.2.*' → pip installs falcon==4.2.* → latest 4.2.x patch'4.2' → pip installs falcon==4.2 → always 4.2.0 (misses patches)Convention: use major.* (e.g., '4.*') when the plugin supports the whole major version, or minor.* (e.g., '3.11.*') when only specific minors are tested. This keeps CI testing fresh and the Plugins.md doc meaningful.
All tests pass with green output. Report the summary.
Wait time exceeded 150 secsThis means services didn't start. Check:
lsof -i :9090)docker compose -f tests/plugin/<category>/sw_<name>/docker-compose.yml logsThe test prints a diff between expected and actual span data. Common causes:
componentId in expected.data.ymlPlugin library failed to install in Docker. Check:
IMPORTANT: Check your HTTP proxy first! If http_proxy or https_proxy environment variables are set, ALL test HTTP requests (prepare, validate) go through the proxy instead of reaching Docker containers directly. This causes 502 responses and empty segment data.
# Check for proxy
echo $http_proxy $https_proxy
# Run tests without proxy
export http_proxy="" https_proxy="" no_proxy="*" NO_PROXY="*"
poetry run pytest -v tests/plugin/web/sw_flask/If still failing after clearing proxy:
docker logs sw_<name>-consumer-1docker compose -f <path>/docker-compose.yml uplsof -i :9090 -i :9091 -i :12800| Plugin | Test Path |
|---|---|
| flask | tests/plugin/web/sw_flask/ |
| django | tests/plugin/web/sw_django/ |
| fastapi | tests/plugin/web/sw_fastapi/ |
| sanic | tests/plugin/web/sw_sanic/ |
| tornado | tests/plugin/web/sw_tornado/ |
| bottle | tests/plugin/web/sw_bottle/ |
| pyramid | tests/plugin/web/sw_pyramid/ |
| falcon | tests/plugin/web/sw_falcon/ |
| grpc | tests/plugin/web/sw_grpc/ |
| requests | tests/plugin/http/sw_requests/ |
| urllib3 | tests/plugin/http/sw_urllib3/ |
| aiohttp | tests/plugin/http/sw_aiohttp/ |
| httpx | tests/plugin/http/sw_httpx/ |
| http | tests/plugin/http/sw_http/ |
| http_wsgi | tests/plugin/http/sw_http_wsgi/ |
| websockets | tests/plugin/http/sw_websockets/ |
| redis | tests/plugin/data/sw_redis/ |
| pymongo | tests/plugin/data/sw_pymongo/ |
| pymysql | tests/plugin/data/sw_pymysql/ |
| mysqlclient | tests/plugin/data/sw_mysqlclient/ |
| psycopg | tests/plugin/data/sw_psycopg/ |
| psycopg2 | tests/plugin/data/sw_psycopg2/ |
| elasticsearch | tests/plugin/data/sw_elasticsearch/ |
| kafka | tests/plugin/data/sw_kafka/ |
| rabbitmq | tests/plugin/data/sw_rabbitmq/ |
| pulsar | tests/plugin/data/sw_pulsar/ |
| neo4j | tests/plugin/data/sw_neo4j/ |
| happybase | tests/plugin/data/sw_happybase/ |
| loguru | tests/plugin/data/sw_loguru/ |
# Check what containers are running during a test
docker ps
# Check container logs for a stuck test
docker compose -f tests/plugin/<category>/sw_<name>/docker-compose.yml logs
# Clean up orphaned containers from failed tests
docker compose -f tests/plugin/<category>/sw_<name>/docker-compose.yml down --remove-orphans
# Check what the mock collector received (while containers are running)
curl http://localhost:12800/receiveData
# Validate expected data manually
curl -X POST http://localhost:12800/dataValidate -d @tests/plugin/<category>/sw_<name>/expected.data.yml
# Check if ports are in use
lsof -i :9090 -i :9091 -i :12800 -i :19876
# Run with verbose output
poetry run pytest -v -s tests/plugin/web/sw_flask/© apache, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/plugin-test of apache/skywalking-python.
Open the folder on GitHubat commit 822db03
Plugin 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Plugin Test this skillapache/skywalking-python | 219 | — | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Code PatternsAedelon/claude-code-blueprint | 120 | — | ~1.2k | Automated safety check: Pass | Custom licence | |
| Acarshub Tool Additionssdr-enthusiasts/docker-acarshub | 117 | — | ~707 | Automated safety check: Pass | GPL-3.0 | |
| DDNS Build and Release MaintenanceNewFuture/DDNS | 4.7k | — | ~444 | Automated safety check: Pass | MIT | |
| Verifylkmeta/txtify | 135 | — | ~583 | Automated safety check: Pass | Apache-2.0 | |
| Devops InfrastructureCloudAI-X/claude-workflow-v2 | 1.4k | — | ~2.7k | Automated safety check: Notes | MIT |
Aedelon/claude-code-blueprint
Reference patterns for REST APIs, pytest/vitest testing, Docker multi-stage builds, GitHub Actions CI/CD, PostgreSQL, TypeScript generics, Python async, and React Server Components.
sdr-enthusiasts/docker-acarshub
Use ONLY when working in the docker-acarshub repository AND a task may require adding a system tool, npm package, or other dependency.
NewFuture/DDNS
Maintains the DDNS project's GitHub Actions, Docker and Nuitka builds, packaging and release preparation without touching publishing credentials.
lkmeta/txtify
Verify a Txtify change end-to-end. An agent skill from lkmeta/txtify.
CloudAI-X/claude-workflow-v2
Guides Docker, CI/CD pipelines, deployment strategies, infrastructure as code, and observability setup.
gotempsh/temps
Deploy applications to the Temps platform with automatic framework detection, Dockerfile generation, and container orchestration.
apache/skywalking-python
Scaffold a new SkyWalking Python instrumentation plugin with all required files (plugin code, tests, docker-compose, expected data, services)
Categories
Build Docker test images and run SkyWalking Python plugin/unit/e2e tests locally, mirroring the CI pipeline. Plugin Test is an agent skill from apache/skywalking-python.
Plugin Test fits situations like: tasks that involve Containers; tasks that involve End-to-end testing; tasks that involve CI/CD.
Run `npx skills add apache/skywalking-python --skill plugin-test -a claude-code`. Or copy the skill folder (.claude/skills/plugin-test in apache/skywalking-python) into .claude/skills/plugin-test in your project. Claude Code loads it when a task matches its description.
Run `npx skills add apache/skywalking-python --skill plugin-test -a codex`. Or copy the skill folder (.claude/skills/plugin-test in apache/skywalking-python) into .agents/skills/plugin-test in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add apache/skywalking-python --skill plugin-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/plugin-test, .gemini/skills/plugin-test, .github/skills/plugin-test and .opencode/skills/plugin-test in your project.
Going by SKILL.md and its folder, Plugin Test needs the command-line tools its instructions call (poetry, docker, curl and make). Our summary lists: Python 3; Docker.
SKILL.md contains no URLs. Its commands use docker and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
Plugin Test is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Plugin Test: Code Patterns (Aedelon/claude-code-blueprint, 120 stars), Acarshub Tool Additions (sdr-enthusiasts/docker-acarshub, 117 stars), DDNS Build and Release Maintenance (NewFuture/DDNS, 4.7k stars) and Verify (lkmeta/txtify, 135 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
apache (a GitHub organization) maintains it in apache/skywalking-python, which has 219 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 8, 2026.
Source: apache/skywalking-python on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.