
Resolve Fixme
- 4 installs
- 7.5k repo stars
- Updated August 5, 2026
- antinomyhq/forge
resolve-fixme is a Claude Code skill that finds all FIXME comments in a codebase and fully implements the code changes each one describes before removing the comment.
About
This skill finds every FIXME comment across a codebase and fully implements the work each one describes. A developer runs it to clear a backlog of FIXME-marked tasks rather than just deleting the comments. It expands multiline FIXME blocks, groups related FIXMEs across files into a single implementation task, completes the code changes, removes each comment only after the work is done, and re-runs discovery to confirm none remain.
- Runs a discovery script to find every FIXME with 2 lines of context before and 5 after
- Expands multiline FIXME blocks and groups related FIXMEs across files into one task
- Removes each FIXME only after the work is implemented, then verifies no FIXMEs remain
Resolve Fixme by the numbers
- 4 all-time installs (skills.sh)
- Ranked #901 of 1,352 Code Review & Quality skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
resolve-fixme capabilities & compatibility
- Capabilities
- refactoring · code review
- Use cases
- refactoring · debugging
What resolve-fixme says it does
Find all FIXME comments across the codebase and fully implement the work they describe.
Never delete or rewrite a FIXME comment unless the underlying implementation is finished.
npx skills add https://github.com/antinomyhq/forge --skill resolve-fixmeAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4 |
|---|---|
| repo stars | ★ 7.5k |
| Last updated | August 5, 2026 |
| Repository | antinomyhq/forge ↗ |
What it does
Discover all FIXME comments and implement the code changes they describe, grouping related ones into single tasks.
Who is it for?
Clearing FIXME-marked technical debt by completing the underlying implementation
Skip if: Just cleaning up or deleting comments without doing the work
When should I use this skill?
Asked to fix, resolve, or address FIXME comments, or when running the 'fixme' command
What you get
Every FIXME's underlying implementation is completed, the comment removed, and no FIXMEs remain in scope.
- Completed code changes for each FIXME
- Removed FIXME comments once implemented
- Verification that no FIXMEs remain
By the numbers
- discovery prints 2 lines of context before and 5 lines after each FIXME
Files
Resolve FIXME Comments
Workflow
1. Run the discovery script
Execute the script from the repository root to collect all FIXMEs with context:
bash .forge/skills/resolve-fixme/scripts/find-fixme.sh [PATH]PATHis optional; omit it to search the entire working directory.- The script prints each FIXME with 2 lines of context before and 5 lines after, along with the exact file path and line number.
- Skips
.git/,target/,node_modules/, andvendor/. - Requires either
rg(ripgrep) orgrep+python3.
2. Expand each FIXME into its full instruction
Do not rely on the discovery output alone.
For every hit:
1. Open the file and read around the reported line. 2. Expand the FIXME to include the entire comment block. 3. Treat all consecutive related comment lines as part of the same instruction.
Important:
- A FIXME may be multiline. The line containing
FIXMEis often only the beginning. - The real instruction may continue on following comment lines and may contain the actual implementation details.
- Do not interpret or edit a FIXME until you have read the full block.
For each expanded FIXME, capture:
- file path
- start line and end line of the full comment block
- a short summary of what that FIXME is asking for
3. Consolidate related FIXMEs across files
Before editing code, review all expanded FIXMEs together.
Many FIXMEs describe different facets of the same underlying task across multiple files. For example:
- one file may describe a domain type that needs to be introduced
- another may describe a parameter that should disappear once that type exists
- another may describe a service, repo, or UI update needed to complete the same refactor
Group such FIXMEs into a single implementation task.
When grouping, look for:
- shared vocabulary
- references to the same type, service, repo, parameter, or feature
- comments that clearly describe prerequisite and follow-up changes in different files
- comments that only make sense when read together
For each group, produce one consolidated understanding of the task:
- all files and line ranges involved
- the complete implementation required across the group
- the order in which the changes should be made
Do not resolve grouped FIXMEs one file at a time in isolation. Resolve the whole task consistently.
4. Implement every FIXME completely
Every FIXME must be resolved. There is no skip path.
Work through each grouped task until the underlying implementation is complete:
1. Read any additional files needed to understand the design. 2. Create or modify the required code, types, services, repos, tests, configs, or templates. 3. Propagate the change through every affected file in the group. 4. Remove each FIXME comment only after the work it describes has actually been implemented.
Critical rule: Never delete or rewrite a FIXME comment unless the underlying implementation is finished. The comment is a record of required work. Removing it before completing that work is a failure.
If the FIXME implies a larger refactor, do the refactor. If it requires creating new supporting code, create it. Do not stop at the first local change if the comment clearly implies additional follow-through elsewhere.
5. Verify
After resolving all FIXMEs:
1. Run the project's standard verification step:
cargo insta test --accept2. Re-run the discovery script:
bash .forge/skills/resolve-fixme/scripts/find-fixme.sh [PATH]3. Confirm that no FIXME comments remain in the targeted scope.
Notes
- Prefer targeted fixes, but do not under-scope the work when multiple FIXMEs describe one larger task.
- Read broadly before editing when the intent is ambiguous.
- Consistency matters more than locality: grouped FIXMEs should lead to one coherent implementation.
- The job is not to clean up comments. The job is to complete the implementation those comments are pointing at.
#!/usr/bin/env bash
#
# find-fixme.sh — locate all FIXME comments in source files and print each
# occurrence with surrounding context (2 lines before, 5 lines after).
#
# Usage:
# ./scripts/find-fixme.sh [PATH]
#
# If PATH is omitted the current working directory is searched.
# Skips .git/, target/, node_modules/, and vendor/ directories.
set -euo pipefail
SEARCH_ROOT="${1:-.}"
# ---------------------------------------------------------------------------
# Colours
# ---------------------------------------------------------------------------
BOLD='\033[1m'
RESET='\033[0m'
CYAN='\033[36m'
YELLOW='\033[33m'
DIM='\033[2m'
SEP="$(printf '%0.s─' {1..80})"
CONTEXT_BEFORE=2
CONTEXT_AFTER=5
# ---------------------------------------------------------------------------
# Collect matches into a temp file as "filepath<TAB>linenum" lines.
# Using rg --json + python for robust parsing that handles colons in paths
# and content. Falls back to grep + python when rg is unavailable.
# ---------------------------------------------------------------------------
TMPFILE=$(mktemp)
trap 'rm -f "$TMPFILE"' EXIT
_EXCLUDES='!.git !target !node_modules !vendor'
if command -v rg &>/dev/null; then
rg --json --case-sensitive \
--glob '!.git' --glob '!target' --glob '!node_modules' --glob '!vendor' \
'FIXME' "$SEARCH_ROOT" 2>/dev/null \
| python3 -c "
import sys, json
for line in sys.stdin:
try:
obj = json.loads(line)
if obj.get('type') == 'match':
data = obj['data']
path = data['path']['text']
linenum = data['line_number']
print(f'{path}\t{linenum}')
except Exception:
pass
" > "$TMPFILE" || true
else
grep -rn \
--exclude-dir='.git' --exclude-dir='target' \
--exclude-dir='node_modules' --exclude-dir='vendor' \
'FIXME' "$SEARCH_ROOT" 2>/dev/null \
| python3 -c "
import sys, re
for line in sys.stdin:
# grep -n format: filepath:linenum:content
# The linenum is always digits, so match greedily from the right
m = re.match(r'^(.*):([0-9]+):', line)
if m:
print(m.group(1) + '\t' + m.group(2))
" > "$TMPFILE" || true
fi
TOTAL=$(wc -l < "$TMPFILE" | tr -d ' ')
if [[ "$TOTAL" -eq 0 ]]; then
echo "No FIXME comments found in: $SEARCH_ROOT"
exit 0
fi
echo -e "${BOLD}Found ${YELLOW}${TOTAL}${RESET}${BOLD} FIXME comment(s) in: ${SEARCH_ROOT}${RESET}"
echo ""
COUNT=0
while IFS=$'\t' read -r FIXME_FILE FIXME_LINE; do
[[ -z "$FIXME_FILE" || -z "$FIXME_LINE" ]] && continue
[[ ! "$FIXME_LINE" =~ ^[0-9]+$ ]] && continue
[[ ! -f "$FIXME_FILE" ]] && continue
COUNT=$((COUNT + 1))
START=$(( FIXME_LINE - CONTEXT_BEFORE ))
[[ $START -lt 1 ]] && START=1
END=$(( FIXME_LINE + CONTEXT_AFTER ))
echo -e "${SEP}"
echo -e "${BOLD}${CYAN}[${COUNT}/${TOTAL}] ${FIXME_FILE}:${FIXME_LINE}${RESET}"
echo ""
# Print lines with line numbers, highlighting the FIXME line
LINE_IDX=$START
while IFS= read -r file_line; do
if [[ "$LINE_IDX" -eq "$FIXME_LINE" ]]; then
echo -e " ${YELLOW}${LINE_IDX}:${RESET} ${YELLOW}${file_line}${RESET}"
else
echo -e " ${DIM}${LINE_IDX}:${RESET} ${file_line}"
fi
LINE_IDX=$((LINE_IDX + 1))
done < <(sed -n "${START},${END}p" "$FIXME_FILE")
echo ""
done < "$TMPFILE"
echo -e "${SEP}"
echo -e "${BOLD}Total: ${YELLOW}${COUNT}${RESET}${BOLD} FIXME(s)${RESET}"
Related skills
FAQ
How does it find the FIXMEs?
A discovery script prints each FIXME with 2 lines of context before and 5 after, using ripgrep or grep, skipping .git, target, node_modules, and vendor.
Does it delete FIXME comments immediately?
No. It removes a FIXME comment only after the work it describes is actually implemented.