plan-export — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited plan-export (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill composes a detailed, phased implementation plan for a GitHub issue. The issue number can be passed as $1 or discovered from the conversation context (e.g., after a /gh-issue-publish invocation). The plan is designed for a junior developer with minimal knowledge of MCP, Blockscout, and other 3rd-party components but strong Python experience.
Before invoking this skill, the agent must already understand the scope of the changes through prior conversation. The skill assumes:
Before proceeding, resolve the GitHub issue number to use throughout the plan:
https://github.com/.../issues/<number> — extract the number from the URL. This is typically present after a preceding /gh-issue-publish invocation (which outputs the URL).#<number> or issue <number>.Once resolved, use this number as $1 for all subsequent steps.
Read .cursor/AGENTS.md to determine which rules from .cursor/rules/ apply to the discussed changes. That file contains the authoritative mapping of when each rule should be applied.
MANDATORY: Read each applicable rule file using the Read tool before composing the plan. Do not skip this step or guess rule contents.
For each rule file:
This skill is the complete and only source for the plan's format. The template below, the slice-marker rules, and the --inspect validator in step 6 define every convention you need — section order, marker syntax, the shape of the verification command blocks, all of it. Because the format is fully specified here, you never need to look at another plan to copy its conventions, and you must not: do not open or grep any other file under .ai/impl_plans/ or temp/impl_plans/. Reading a sibling plan does two kinds of harm — it spends context on a document irrelevant to this issue, and, more insidiously, it anchors you to another feature's scope, phasing, and wording, biasing the plan you're writing now. If you're unsure your markers are correct, don't compare against an example — write them per this template and let the step-6 --inspect check prove them. (The pattern examples this skill asks you to cite are source and test files for this feature, referenced by path — never other plans.)
Create a detailed Markdown document at .ai/impl_plans/issue-$1.md with the following structure.
Slice markers — required. Wrap every section in paired, namespaced HTML-comment markers so the plan can be sliced deterministically by scripts/slice_impl_plan.py (headings alone are unreliable — plans embed code blocks and exact documentation that legitimately contain #/## as content). Rules:
slug="preamble".slug="phase-<n>", where <n> is the phase's sequential number (1, 2, 3 … contiguous, matching the ## Phase <n> heading). Number only the phases you actually emit. Put title="<short phase name>" on the begin marker.slug="final-checklist".begin has a matching end with the same slug; never nest them. No real content may live outside a region (blank lines and --- rules between regions are fine). A title must not contain a double-quote.The structure, with markers in place:
<!-- impl-plan:begin slug="preamble" -->
# Implementation Plan for Issue #$1
**GitHub Issue:** https://github.com/blockscout/mcp-server/issues/$1
## Overview
[Brief summary of what needs to be implemented - 2-3 sentences]
## Applicable Guidelines
[List the rule files that were read and applied to this plan, with brief notes on key requirements from each]
---
## Definition of Done — Test Integrity (non-negotiable)
[Mandatory. In your own words — explain the *why*, don't just recite rules — state that the work is done only when its tests genuinely pass for the right reason, for unit and integration tests alike. The wording is yours, but the section must get these points across: each failure is diagnosed (regression vs. legitimately changed expectation) and its root cause fixed, never worked around (no skip/xfail, deletion, loosened assertions, or bypassed hooks); a test is updated only when intended behavior changed; a test that couldn't run, timed out, or hung is a defect to diagnose, not a pass (for integration tests, point at the timeout-protected runner from rule 200); and no phase is "done" while any test is failing, disabled to avoid a failure, or unverified.]
<!-- impl-plan:end slug="preamble" -->
---
<!-- impl-plan:begin slug="phase-1" title="[Phase Name - Functional Changes]" -->
## Phase 1: [Phase Name - Functional Changes]
### Objective
[What this phase accomplishes]
### Files to Modify/Create
- `path/to/file.py`: [Brief description of changes]
- ...
### Implementation Details
[Explain WHAT needs to be changed and WHY. Focus on project-specific context the developer needs to understand:]
- What existing patterns/helpers to reuse and where to find them
- What project conventions apply (naming, structure, error handling approach)
- How this change fits into the existing architecture
- Any non-obvious dependencies or side effects
**Do NOT include code snippets.** The developer knows Python - explain the project-specific aspects they need to understand.
### Unit Tests
- **File:** `tests/tools/category/test_feature.py`
- **Purpose:** [What functionality this test validates]
- **Scenarios to cover:**
- [List scenarios: success cases, error handling, edge cases]
- **Reference:** [Point to similar existing test file as a pattern example]
### Verification
1. Run unit tests for modified functionality:
pytest tests/tools/category/test_feature.py -v
2. Run linting and formatting checks:
ruff check path/to/modified/files/ ruff format --check path/to/modified/files/
3. Fix any linting or formatting issues before proceeding to the next phase.
<!-- impl-plan:end slug="phase-1" -->
---
<!-- impl-plan:begin slug="phase-2" title="[Phase Name - Additional Functional Changes]" -->
## Phase 2: [Phase Name - Additional Functional Changes]
[Same structure as Phase 1, including its own unit tests]
<!-- impl-plan:end slug="phase-2" -->
---
<!-- impl-plan:begin slug="phase-N-1" title="Integration Tests" -->
## Phase N-1: Integration Tests
### Objective
Verify the implementation works correctly with real network calls.
### Files to Create
- `tests/integration/category/test_feature_real.py`
### Test Scenarios
- **Purpose:** [What real-world functionality this validates]
- **Scenarios to cover:** [List scenarios with expected outcomes]
- **Reference:** [Point to similar existing integration test as a pattern example]
### Verification
1. Run integration tests for the new test file:
pytest -m integration tests/integration/category/test_feature_real.py -v
2. Run linting and formatting checks:
ruff check tests/integration/category/test_feature_real.py ruff format --check tests/integration/category/test_feature_real.py
3. Fix any linting or formatting issues before proceeding to the next phase.
<!-- impl-plan:end slug="phase-N-1" -->
---
<!-- impl-plan:begin slug="phase-N" title="Documentation Updates" -->
## Phase N: Documentation Updates (if needed)
**Only include this phase if documentation changes are required.** If no documentation updates are needed, omit this phase entirely.
### Documentation Files
For each documentation file that requires changes, provide **exact text content** to add or modify (documentation requires precise wording):
#### SPEC.md
[Exact section and content to add/modify, if applicable]
#### AGENTS.md
[Exact section and content to add/modify, if applicable]
#### API.md
[Exact section and content to add/modify, if applicable]
#### README.md
[Exact section and content to add/modify, if applicable]
#### TESTING.md
[Exact section and content to add/modify, if applicable]
#### .env.example
[Exact lines to add, if applicable]
### Verification
Review all documentation files for accuracy and completeness.
<!-- impl-plan:end slug="phase-N" -->
---
<!-- impl-plan:begin slug="final-checklist" -->
## Final Checklist
- [ ] All phases completed and verified (including per-phase linting)
- [ ] Every test passed *for the right reason* — none skipped, xfailed, deleted, loosened, or left unrun/timed-out to declare success; any failure was traced to its root cause and fixed
- [ ] All unit tests pass: `pytest tests/tools/`
- [ ] All integration tests pass: `pytest -m integration tests/integration/`
- [ ] Final linting check on entire codebase: `ruff check .`
- [ ] Final formatting check on entire codebase: `ruff format --check .`
- [ ] Documentation updated (if applicable)
- [ ] Version bumped (if applicable)
<!-- impl-plan:end slug="final-checklist" -->
MUST INCLUDE:
MUST NOT INCLUDE:
PHASE ORGANIZATION:
Phase Size Rationale: Since each phase's code goes through review, smaller phases are easier to review thoroughly. Catching issues early (e.g., in a model definition phase) prevents building faulty logic on top of flawed foundations.
Examples of Good Phase Breakdown:
DEPENDENCY ORDERING:
Save the plan to:
.ai/impl_plans/issue-$1.mdBefore handing back, prove the plan you just wrote can actually be sliced. Run the validator in inspect mode (it writes nothing):
/.dockerenv exists): python scripts/slice_impl_plan.py .ai/impl_plans/issue-$1.md --inspectuv run python scripts/slice_impl_plan.py .ai/impl_plans/issue-$1.md --inspectRead the exit code:
implement-plan.After writing the plan file:
Output format:
Created implementation plan at [.ai/impl_plans/issue-$1.md](.ai/impl_plans/issue-$1.md)
The plan includes {N} phases:
1. [Phase 1 name]
2. [Phase 2 name]
...
Applicable guidelines that were incorporated:
- [List of rule files read]
Awaiting your instructions to proceed.<!-- impl-plan:begin slug="…" --> … <!-- impl-plan:end slug="…" --> markers (see step 3) and confirm the plan passes the step-6 --inspect self-check before handing back.ai/impl_plans/ or temp/impl_plans/ file only burns context and biases this plan toward another feature (see step 3)tools/address/get_address_info.py")~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.