Problem
When argit backs up skills/ and workspace/ as kind: blob (the default for Hermes agents), they are LFS-tracked. On GitHub free-tier repos (1 GB storage / 1 GB bandwidth per month), this quickly exhausts the LFS budget — especially when combined with kind: sqlite snapshots of state.db (ours grew to 803 MB due to FTS indexes on 82k messages).
Once the LFS budget is exceeded, all pushes fail — even pushes that remove LFS objects or reduce repo size — because GitHub's pre-receive hook rejects any push that references LFS objects the budget can't serve.
What we tried
-
Local manifest overlay to change workspace/ from blob to data and exclude state.db → overlay exclude does not suppress items defined in the bundled manifest, so both blob and data copies were produced.
-
Removing LFS tracking (.gitattributes, git lfs uninstall --local, git rm --cached) → old commits in history still reference LFS objects, GitHub rejects the entire push with GH008: Your push referenced at least 170 unknown Git LFS objects.
-
Fresh orphan branch + force push → this worked, but required nuking all 337 commits of backup history.
Requested improvements
1. Overlay should be able to override bundled item kinds
Currently, if the bundled manifest says {"kind": "blob", "source": "skills/"}, a local overlay cannot change it to kind: data or exclude it. The overlay can only add items and exclude uncovered paths.
Ask: Allow the local overlay to override kind for a source already defined in the bundled manifest, or allow exclude to suppress bundled items. This would let operators downgrade from blob to data without editing the hash-protected bundled manifest.
2. Provide an LFS-free backup mode
For repos on GitHub free tier, LFS is impractical for anything that changes frequently. Skills and workspace are almost entirely text files (markdown, Python, JS) that git handles natively.
Ask: Either:
- Add a config flag like
lfs: false that treats all blob items as data (regular git)
- Or change the default for text-heavy directories to
data instead of blob
3. state.db size warning / management
state.db grew to 803 MB (88% FTS indexes, 12% actual data). At 3x/day backups, this is ~2.4 GB/day of LFS bandwidth for a single file.
Ask: Consider:
- Documenting expected
state.db growth so operators can plan
- Offering a
VACUUM or index-rebuild maintenance command
- Making
state.db backup opt-in rather than default, since it's reconstructable (conversation history, not config)
Environment
- argit manifest:
hermes-2026.5.4-1
- GitHub repo: free-tier org account
state.db: 803 MB (82k messages, 1412 sessions, dual FTS indexes)
skills/: 55 MB (text files)
workspace/: 1.4 MB (text files)
Workaround applied
Fresh orphan branch with:
- LFS removed entirely (
.gitattributes cleared)
hermes/sqlite/ in .gitignore (too large for GitHub without LFS)
- Skills excluded from backup (reinstallable from Hermes)
- Workspace backed up as regular data
- Backup frequency reduced from hourly to 3x/day
Problem
When argit backs up
skills/andworkspace/askind: blob(the default for Hermes agents), they are LFS-tracked. On GitHub free-tier repos (1 GB storage / 1 GB bandwidth per month), this quickly exhausts the LFS budget — especially when combined withkind: sqlitesnapshots ofstate.db(ours grew to 803 MB due to FTS indexes on 82k messages).Once the LFS budget is exceeded, all pushes fail — even pushes that remove LFS objects or reduce repo size — because GitHub's pre-receive hook rejects any push that references LFS objects the budget can't serve.
What we tried
Local manifest overlay to change
workspace/fromblobtodataand excludestate.db→ overlayexcludedoes not suppress items defined in the bundled manifest, so bothblobanddatacopies were produced.Removing LFS tracking (
.gitattributes,git lfs uninstall --local,git rm --cached) → old commits in history still reference LFS objects, GitHub rejects the entire push withGH008: Your push referenced at least 170 unknown Git LFS objects.Fresh orphan branch + force push → this worked, but required nuking all 337 commits of backup history.
Requested improvements
1. Overlay should be able to override bundled item kinds
Currently, if the bundled manifest says
{"kind": "blob", "source": "skills/"}, a local overlay cannot change it tokind: dataor exclude it. The overlay can only add items and exclude uncovered paths.Ask: Allow the local overlay to override
kindfor a source already defined in the bundled manifest, or allowexcludeto suppress bundled items. This would let operators downgrade fromblobtodatawithout editing the hash-protected bundled manifest.2. Provide an LFS-free backup mode
For repos on GitHub free tier, LFS is impractical for anything that changes frequently. Skills and workspace are almost entirely text files (markdown, Python, JS) that git handles natively.
Ask: Either:
lfs: falsethat treats allblobitems asdata(regular git)datainstead ofblob3.
state.dbsize warning / managementstate.dbgrew to 803 MB (88% FTS indexes, 12% actual data). At 3x/day backups, this is ~2.4 GB/day of LFS bandwidth for a single file.Ask: Consider:
state.dbgrowth so operators can planVACUUMor index-rebuild maintenance commandstate.dbbackup opt-in rather than default, since it's reconstructable (conversation history, not config)Environment
hermes-2026.5.4-1state.db: 803 MB (82k messages, 1412 sessions, dual FTS indexes)skills/: 55 MB (text files)workspace/: 1.4 MB (text files)Workaround applied
Fresh orphan branch with:
.gitattributescleared)hermes/sqlite/in.gitignore(too large for GitHub without LFS)