Symptom
JsonProvider.prune() and crewai checkpoint list treat glob characters in the checkpoint location or branch as a pattern. For branch run[1], prune deletes the checkpoints of run1 and keeps run[1].
Evidence what you'll see
- The report's snippet prints
requested exists: Truefor branchrun[1]andneighbor exists: Falsefor branchrun1afterprovider.prune(directory, max_keep=0, branch="run[1]"). crewai checkpoint list,info, andpruneread the wrong directory the same way.prune()also runs automatically after each checkpoint whenCheckpointConfig.max_checkpointsis set.
Why it happens
The checkpoint location and branch are passed to glob.glob() without escaping. Pull request 8269 uses glob.escape() on the directory part in JsonProvider.prune() and in the five JSON patterns of crewai_cli/checkpoint_cli.py.
Affected versions
crewAI 1.15.28, main at 40bb2d3, macOS 26.3, Python 3.13. crewAI Tools is not used.
Fix steps
0 of 2 done
Your check marks stay in this browser only.
How to check it worked
- After
provider.prune(directory, max_keep=0, branch="run[1]"), therun[1]checkpoint is gone and therun1checkpoint remains.
If it still fails
- No published release tag contains pull request 8269. Tag
1.15.28was compared against merge4f4573706eand does not contain it. - Paths without glob characters keep matching
*.jsonand**/*.json. The pull request says that is intended.
Sources and credit
Summarized in our own words from these public reports. Credit goes to their authors.
Provided as is, without warranty. Try changes in a non-production environment and back up first. Security-related steps: verify against the official docs. Terms · Request removal or attribution change
Hit an error we don't cover? Submit it