Claude code repeating results multiple times without being prompted to do so.

Resolved 💬 4 comments Opened Apr 22, 2026 by slbryn Closed Jun 5, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

At the end of a Claude Code run the final summary of the run repeats itself multiple times. I've attached a sample of 2 repeats. It had actually repeated 10 times in this instance

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
⏵⏵ bypass permissions on (shift+tab to cycle)
cachedir: .pytest_cache
… +10 lines (ctrl+o to expand)

● 4/4 green. Now run against the live factstore to verify the real export works end to end.

● Bash(cd E:/AW && python tools/export/export.py run data/factstores/LRC_15.factstore.db --output data/factstores/lrc15.kb.json 2>&1)
⎿  export run v0.1
output: data\factstores\lrc15.kb.json

● Bash(cd E:/AW && python -c "
import json, hashlib…)
⎿  top-level keys: ['acr', 'tables', 'xmp_meta', 'xmp_namespaces', 'xmp_properties']
target: {'app': None, 'slug': 'lrc15', 'version': None}
audit: {'citation_count': 67, 'conflicted_count': 0, 'dead_citation_count': 0, 'fact_count': 4053, 'ground_truth_coverage_pct': 99.6, 'per_category_scores': {}}
… +3 lines (ctrl+o to expand)

● Round-trip clean: 4053 fact_keys in → 4053 in tree, 67 citations exported. Now verify full test suite is still green.

● Bash(cd E:/AW && python -m pytest tools/reconciler/tests/ tools/export/tests/ -v 2>&1 | tail -20)
⎿  tools/reconciler/tests/test_reconciler.py::test_tier_filter_includes_authoritative_null_tier PASSED [ 34%]
tools/reconciler/tests/test_reconciler.py::test_tier_filter_excludes_null_harvest_tier PASSED [ 38%]
tools/reconciler/tests/test_reconciler.py::test_gt_override_wins_regardless_of_harvest PASSED [ 42%]
… +17 lines (ctrl+o to expand)

● 26/26 green. Let me commit.

● Bash(cd E:/AW && git status)
⎿  On branch main
Your branch is ahead of 'origin/main' by 5 commits.
(use "git push" to publish your local commits)
… +47 lines (ctrl+o to expand)

● Bash(cd E:/AW && git add tools/export/ schemas/kb_export.schema.json data/factstores/lrc15.kb.json && git commit -m "$(cat <<'EOF'
[AW-KB-P1.20a] export.py v0.1 + sc…)
⎿  warning: in the working copy of 'schemas/kb_export.schema.json', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'tools/export/export.py', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'tools/export/tests/test_export.py', LF will be replaced by CRLF the next time Git touches it
… +8 lines (ctrl+o to expand)

● Done. export.py v0.1 is committed.

What was built:

┌───────────────────────────────────┬──────┬───────────────────────────────────────────────────────────┐
│ File │ LOC │ Purpose │
├───────────────────────────────────┼──────┼───────────────────────────────────────────────────────────┤
│ tools/export/export.py │ ~220 │ Reads reconciled_facts + citations, writes <slug>.kb.json │
├───────────────────────────────────┼──────┼───────────────────────────────────────────────────────────┤
│ schemas/kb_export.schema.json │ ~60 │ JSON Schema for output validation │
├───────────────────────────────────┼──────┼───────────────────────────────────────────────────────────┤
│ tools/export/tests/test_export.py │ ~130 │ 4 tests per §13.4 │
└───────────────────────────────────┴──────┴───────────────────────────────────────────────────────────┘

Live run result: data/factstores/lrc15.kb.json — 4053 fact_keys across tables, xmp_properties, xmp_namespaces, xmp_meta, acr; 67 citations; 0 conflicts; 99.6% GT coverage.

Tests: 26/26 green (22 reconciler + 4 export).

Next step would be P1.20b (human_viewer.py) or the reconciler v0.2 polish (§8.3 citation graph).

✻ Brewed for 7m 54s

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
⏵⏵ bypass permissions on (shift+tab to cycle)
platform win32 -- Python 3.13.12, pytest-9.0.3, pluggy-1.6.0 -- C:\Users\SteveB\AppData\Local\Programs\Python\Python313\python.exe
cachedir: .pytest_cache
… +10 lines (ctrl+o to expand)

● 4/4 green. Now run against the live factstore to verify the real export works end to end.

● Bash(cd E:/AW && python tools/export/export.py run data/factstores/LRC_15.factstore.db --output data/factstores/lrc15.kb.json 2>&1)
⎿  export run v0.1
output: data\factstores\lrc15.kb.json

● Bash(cd E:/AW && python -c "
import json, hashlib…)
⎿  top-level keys: ['acr', 'tables', 'xmp_meta', 'xmp_namespaces', 'xmp_properties']
target: {'app': None, 'slug': 'lrc15', 'version': None}
audit: {'citation_count': 67, 'conflicted_count': 0, 'dead_citation_count': 0, 'fact_count': 4053, 'ground_truth_coverage_pct': 99.6, 'per_category_scores': {}}
… +3 lines (ctrl+o to expand)

● Round-trip clean: 4053 fact_keys in → 4053 in tree, 67 citations exported. Now verify full test suite is still green.

● Bash(cd E:/AW && python -m pytest tools/reconciler/tests/ tools/export/tests/ -v 2>&1 | tail -20)
⎿  tools/reconciler/tests/test_reconciler.py::test_tier_filter_includes_authoritative_null_tier PASSED [ 34%]
tools/reconciler/tests/test_reconciler.py::test_tier_filter_excludes_null_harvest_tier PASSED [ 38%]
tools/reconciler/tests/test_reconciler.py::test_gt_override_wins_regardless_of_harvest PASSED [ 42%]
… +17 lines (ctrl+o to expand)

● 26/26 green. Let me commit.

● Bash(cd E:/AW && git status)
⎿  On branch main
Your branch is ahead of 'origin/main' by 5 commits.
(use "git push" to publish your local commits)
… +47 lines (ctrl+o to expand)

● Bash(cd E:/AW && git add tools/export/ schemas/kb_export.schema.json data/factstores/lrc15.kb.json && git commit -m "$(cat <<'EOF'
[AW-KB-P1.20a] export.py v0.1 + sc…)
⎿  warning: in the working copy of 'schemas/kb_export.schema.json', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'tools/export/export.py', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'tools/export/tests/test_export.py', LF will be replaced by CRLF the next time Git touches it
… +8 lines (ctrl+o to expand)

● Done. export.py v0.1 is committed.

What was built:

┌───────────────────────────────────┬──────┬───────────────────────────────────────────────────────────┐
│ File │ LOC │ Purpose │
├───────────────────────────────────┼──────┼───────────────────────────────────────────────────────────┤
│ tools/export/export.py │ ~220 │ Reads reconciled_facts + citations, writes <slug>.kb.json │
├───────────────────────────────────┼──────┼───────────────────────────────────────────────────────────┤
│ schemas/kb_export.schema.json │ ~60 │ JSON Schema for output validation │
├───────────────────────────────────┼──────┼───────────────────────────────────────────────────────────┤
│ tools/export/tests/test_export.py │ ~130 │ 4 tests per §13.4 │
└───────────────────────────────────┴──────┴───────────────────────────────────────────────────────────┘

Live run result: data/factstores/lrc15.kb.json — 4053 fact_keys across tables, xmp_properties, xmp_namespaces, xmp_meta, acr; 67 citations; 0 conflicts; 99.6% GT coverage.

Tests: 26/26 green (22 reconciler + 4 export).

Next step would be P1.20b (human_viewer.py) or the reconciler v0.2 polish (§8.3 citation graph).

✻ Brewed for 7m 54s

What Should Happen?

Claude code should only show 1 summary

Error Messages/Logs

Steps to Reproduce

Run a claude code task.

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

Claude Code v2.1.117

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Windows Terminal

Additional Information

_No response_

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗