Loading...
Loading...
Run candid-review in a loop until all issues are resolved, with configurable auto, review-each, or interactive modes and support for ignored issues
npx skill4agent add ron-myers/candid candid-loopcandid-review.candid/config.jsonloop~/.candid/config.jsonloop| Flag | Description | Default |
|---|---|---|
| Execution mode | |
| Maximum loop iterations | |
| Categories to enforce (comma-separated) | |
autoreview-eachinteractivecriticalmajorstandardssmelledge_casearchitecturalall.candid/config.jsonloopjq -r '.loop // null' .candid/config.json 2>/dev/nullloopmodemaxIterationsenforceCategoriesignoredUsing loop settings from project config~/.candid/config.jsonloopUsing loop settings from user configmode = "auto"
maxIterations = 5
enforceCategories = ["all"]
ignored = { categories: [], patterns: [], ids: [] }iteration = 0
totalFixesApplied = 0
allFixedIssues = [][Auto Mode] Running candid-loop with max [N] iterations...[Review-Each Mode] Running candid-loop with max [N] iterations...
You will review each fix one by one.[Interactive Mode] Running candid-loop with max [N] iterations...
Full control: skip, ignore, or batch process fixes.WHILE iteration < maxIterations:
iteration++
Execute Step 3.1 through Step 3.6
IF exitLoop == true:
BREAK
IF iteration >= maxIterations AND remainingIssues > 0:
Output warning: "Max iterations ([N]) reached. [M] issues remain."
List remaining issues[Iteration [N]/[MAX]]
Running candid-review.../candid-review.candid/last-review.jsoncat .candid/last-review.json 2>/dev/nullissuesidfilelinecategorytitledescriptionNo review state found. candid-review may not have completed.enforceCategories["all"]filteredIssues = issues.filter(issue =>
enforceCategories.includes(issue.category)
)criticalmajorstandardssmelledge_casearchitecturalEnforcing categories: [list]. Filtered to [N] issues.filteredIssues = filteredIssues.filter(issue =>
!ignored.categories.includes(issue.category)
)filteredIssues = filteredIssues.filter(issue =>
!ignored.patterns.some(pattern =>
new RegExp(pattern, 'i').test(issue.title)
)
)filteredIssues = filteredIssues.filter(issue =>
!ignored.ids.includes(issue.id)
)Filtered out [N] ignored issues ([M] remaining)filteredIssues.length === 0[Iteration [N]/[MAX]] No issues found!
exitLoop = true[N/MAX] Found [M] issues. Applying fixes... ✓ [icon] Fixed: [title] in [file]:[line]totalFixesApplied += appliedCount
allFixedIssues.push(...appliedIssues)[N/MAX] Found [M] issues. Reviewing each...[1/M] [icon] [title]
File: [file]:[line]
Problem: [description]Found [M] issues:[1/M] [icon] [title]
File: [file]:[line]
Problem: [description].candid/config.jsonloop.ignored.ids# Read, modify, write
jq '.loop.ignored.ids += ["issue-id-1", "issue-id-2"]' .candid/config.json > tmp.json
mv tmp.json .candid/config.jsonAdded [N] issues to ignore list in .candid/config.jsonCandid Loop Complete
Summary:
- Iterations: [N]
- Issues fixed: [M]
- Status: PASS
Your code is clean!Candid Loop Stopped
Summary:
- Iterations: [N] (max reached)
- Issues fixed: [M]
- Issues remaining: [P]
- Status: INCOMPLETE
Remaining issues:
[icon] [title] in [file]:[line]
[icon] [title] in [file]:[line]
...
Consider:
- Increasing --max-iterations
- Adding persistent ignores for false positives
- Manually reviewing complex issuesCandid Loop Cancelled
Summary:
- Iterations: [N]
- Issues fixed: [M]
- Issues skipped: [P]
- Status: CANCELLED
Skipped issues:
[icon] [title] in [file]:[line]
....candid/config.json{
"version": 1,
"tone": "harsh",
"loop": {
"mode": "auto",
"maxIterations": 5,
"enforceCategories": ["all"],
"ignored": {
"categories": [],
"patterns": [],
"ids": []
}
}
}| Field | Type | Default | Description |
|---|---|---|---|
| string | | |
| number | | Maximum review-fix cycles |
| array | | Categories to enforce |
| array | | Categories to skip entirely |
| array | | Regex patterns to match issue titles |
| array | | Specific issue IDs to skip |
{
"loop": {
"ignored": {
"categories": ["edge_case", "architectural"]
}
}
}{
"loop": {
"ignored": {
"patterns": ["Unicode", "timezone", "DST"]
}
}
}{
"loop": {
"enforceCategories": ["critical", "major"]
}
}# Run with defaults (auto mode, all categories, max 5 iterations)
/candid-loop
# Review-each mode - go through each fix one by one (Yes/No)
/candid-loop --mode review-each
# Interactive mode - full control with skip, ignore, batch options
/candid-loop --mode interactive
# Limit iterations
/candid-loop --max-iterations 3
# Only fix critical issues
/candid-loop --categories critical
# Fix critical and major issues
/candid-loop --categories critical,major
# Combine options
/candid-loop --mode review-each --max-iterations 10 --categories critical,major| Category | Icon | Description |
|---|---|---|
| 🔥 | Production killers: crashes, security holes, data loss |
| ⚠️ | Serious problems: performance, missing error handling |
| 📜 | Technical.md violations |
| 📋 | Maintainability: complexity, duplication |
| 🤔 | Unhandled scenarios: null, empty, concurrent |
| 💭 | Design concerns: coupling, SRP violations |