8.8 KiB
8.8 KiB
Spezifikation: Auto-Archivierung nach 14 Tagen Inaktivität
Datum: 2026-07-24
Task: t_a401f387
Status: Analyse abgeschlossen → Spezifikation erstellt
Herkunft: Aus der Ideen-Queue (Idle-Radar, Traum-Notiz vom 18.07.2026)
1. Kontext
1.1 Ziel
Reduziere den Clutter im Skill-Index und unterstütze den Curator bei der Pflege.
1.2 Aktueller Zustand
| Komponente | Status |
|---|---|
| Aktive Skills | 11 |
| Archivierte Skills | 15 Kategorien |
| Usage-Tracking | Vorhanden (.usage.json), aber leer |
.curator_state |
paused: true |
| 14-Tage-Regel | Nicht implementiert |
1.3 Messlatte
- Stale-Skills: Skills mit
state: "stale"in.usage.json(bisher kein Eintrag) - Inaktivität: Letzte Nutzung (
last_used_at) liegt >14 Tage zurück - Archivierung: Verschieben in
.archive/<Kategorie>/und Setzen vonarchived_at
2. Architektur
2.1 Komponenten
┌─────────────────────────────────────────────────────────────────────────┐
│ Curator-Auto-Archivierung │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────────┐ │
│ │ Idle-Radar │ → │ Archivierungs- │ → │ Curator-Indexer│ │
│ │ (Trigger) │ │ Watchdog │ │ (Datenpflege) │ │
│ └─────────────────┘ └─────────────────┘ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
2.2 Datenfluss
- Idle-Radar erkennt Inaktivität (nächtlicher Scan)
- Archivierungs-Watchdog prüft 14-Tage-Regel
- Curator-Indexer aktualisiert
.usage.jsonmitarchived_at - Skill-Verzeichnis wird nach
.archive/<Kategorie>/verschoben
3. Dateistruktur
3.1 Aktiv-Verzeichnis (~/.hermes/skills/)
- Normale Skill-Ordner (
betrieb-playbook/,wartung/, ...) .usage.json(Nutzungsdaten).curator_state(Curator-Status)
3.2 Archiv-Verzeichnis (~/.hermes/skills/.archive/)
.archive/
├── apple/ # Kategorie: Apple-Tools
├── creative/ # Kategorie: Kreatives
├── data-science/ # Kategorie: Datenanalyse
├── github/ # Kategorie: GitHub
├── media/ # Kategorie: Medien
├── mlops/ # Kategorie: MLOps
├── research/ # Kategorie: Recherche
├── software-development/ # Kategorie: Dev-Tools
└── ... # Weitere Kategorien
3.3 Skill-Datei nach Archivierung
~/.hermes/skills/.archive/software-development/gitea-workflow/
├── SKILL.md
└── ... (weitere Dateien)
4. Konfiguration
4.1 .curator_state
{
"last_report_path": "/home/hitonabi/.hermes/logs/curator/20260720-182035",
"last_run_at": "2026-07-20T18:20:35.806573+00:00",
"last_run_duration_seconds": 882.931897,
"last_run_summary": "auto: no changes; llm: Context length exceeded: max compression attempts (3) reached.",
"last_run_summary_shown_at": "2026-07-20T18:20:35.806573+00:00",
"paused": false, // ← aktiviert für Auto-Archivierung
"run_count": 11,
"archivierung": {
"enabled": true, // ← neuer Schlüssel
"threshold_days": 14, // ← neuer Schlüssel
"last_archive_run_at": "2026-07-24T03:00:00.000000+00:00"
}
}
4.2 .usage.json – Archivierter Skill
{
"gitea-workflow": {
"archived_at": "2026-07-24T03:00:00.000000+00:00", // ← neuer Schlüssel
"created_at": "2026-06-30T20:00:58.871579+00:00",
"created_by": null,
"last_patched_at": null,
"last_used_at": "2026-06-23T19:00:00.000000+00:00",
"last_viewed_at": null,
"patch_count": 0,
"pinned": false,
"state": "archived", // ← geändert von "active"
"use_count": 0,
"view_count": 0
}
}
5. Trigger-Mechanismus
5.1 Zeitlicher Trigger
- Cron-Job:
0 3 * * *(täglich um 3:00 Uhr) - Skript:
~/.hermes/scripts/curator-archive-watchdog.sh
5.2 Prüflogik
def is_stale(skill_usage: dict) -> bool:
"""Prüft, ob ein Skill älter als 14 Tage ist."""
last_used = skill_usage.get("last_used_at")
if not last_used:
return False
last_used_dt = datetime.fromisoformat(last_used.replace("Z", "+00:00"))
now = datetime.now(last_used_dt.tzinfo)
days_inactive = (now - last_used_dt).days
return days_inactive >= 14
5.3 Ausschlusskriterien
- Pinned:
pinned: true→ nie archivieren - Verwendung im Live-Repo: Skills aus
~/mission-control-v2/deploy/skills/nicht archivieren - System-Skills:
betrieb-playbook,wartung,orchestratornicht archivieren (Konfigurierbar in.curator_state)
6. Archivierungs-Workload
6.1 Schritte
- Scan: Alle Skills in
~/.hermes/skills/durchlaufen - Prüfung:
is_stale()für jeden Skill aufrufen - Ausschluss: Pinned/System-Skills überspringen
- Verschieben: Skill-Verzeichnis nach
.archive/<Kategorie>/ - Index aktualisieren:
.usage.jsonmitarchived_atundstate: "archived"schreiben - Protokoll: Log-Eintrag in
~/.hermes/logs/curator/
6.2 Beispiel-Archivierung
# Vorher
~/.hermes/skills/skill-automatisch-verknuepfen/SKILL.md
# Nachher
~/.hermes/skills/.archive/software-development/skill-automatisch-verknuepfen/SKILL.md
7. Datenformat
7.1 .usage.json – Aktiv
{
"name": {
"archived_at": null,
"created_at": "2026-07-03T07:50:53.782473+00:00",
"created_by": null,
"last_patched_at": null,
"last_used_at": "2026-07-06T08:55:31.369025+00:00",
"last_viewed_at": "2026-07-06T08:55:31.367242+00:00",
"patch_count": 0,
"pinned": false,
"state": "active",
"use_count": 2,
"view_count": 2
}
}
7.2 .usage.json – Archiviert
{
"name": {
"archived_at": "2026-07-24T03:00:00.000000+00:00",
"created_at": "2026-07-03T07:50:53.782473+00:00",
"created_by": null,
"last_patched_at": null,
"last_used_at": "2026-07-06T08:55:31.369025+00:00",
"last_viewed_at": "2026-07-06T08:55:31.367242+00:00",
"patch_count": 0,
"pinned": false,
"state": "archived",
"use_count": 2,
"view_count": 2
}
}
8. Config-Interface
8.1 .curator_state – Erweiterung
{
"archivierung": {
"enabled": true,
"threshold_days": 14,
"excluded_skills": ["betrieb-playbook", "wartung", "orchestrator"],
"last_archive_run_at": "2026-07-24T03:00:00.000000+00:00"
}
}
8.2 .usage.json – Erweiterung
{
"name": {
"archived_at": "2026-07-24T03:00:00.000000+00:00"
}
}
9. Akzeptanzkriterien
| Kriterium | Status |
|---|---|
| Klare Architektur | ✅ (siehe Abschnitt 2) |
| Definierte Dateistruktur | ✅ (.archive/<Kategorie>/) |
| Config-Interface | ✅ (.curator_state + .usage.json) |
| Keine Code-Änderungen | ✅ (nur Spezifikation) |
10. Nächste Schritte
10.1 Implementierung
- Skript erstellen:
~/.hermes/scripts/curator-archive-watchdog.sh - Cron-Job anlegen:
0 3 * * * curator-archive-watchdog.sh .curator_stateerweitern:archivierung-Block hinzufügen.usage.jsonerweitern:archived_at-Feld einfügen
10.2 Test
- Manuell einen Skill archivieren (Handbetrieb)
- Prüfen, ob
archived_atgesetzt wird - Prüfen, ob
.archive/<Kategorie>/angelegt wird - Prüfen, ob
state: "archived"in.usage.jsonsteht
11. Anhang
11.1 Begriffe
| Begriff | Bedeutung |
|---|---|
| Stale | Skill mit last_used_at > 14 Tage |
| Archivierung | Verschieben in .archive/<Kategorie>/ |
| Curator | Der automatische Wartungsdienst |
| Idle-Radar | Das System, das Inaktivität erkennt |
11.2 Quellen
~/.hermes/skills/.curator_state~/.hermes/skills/.usage.json~/.hermes/skills/.archive/~/wissens-vault/eigenbau-landkarte.md
Ende der Spezifikation