@mcptoolshop/claude-guardian 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/HANDBOOK.md +209 -0
- package/LICENSE +21 -0
- package/README.es.md +185 -0
- package/README.fr.md +185 -0
- package/README.hi.md +184 -0
- package/README.it.md +184 -0
- package/README.ja.md +185 -0
- package/README.md +184 -0
- package/README.pt-BR.md +184 -0
- package/README.zh.md +185 -0
- package/dist/budget-store.d.ts +33 -0
- package/dist/budget-store.js +62 -0
- package/dist/budget-store.js.map +1 -0
- package/dist/budget.d.ts +52 -0
- package/dist/budget.js +136 -0
- package/dist/budget.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +387 -0
- package/dist/cli.js.map +1 -0
- package/dist/defaults.d.ts +51 -0
- package/dist/defaults.js +67 -0
- package/dist/defaults.js.map +1 -0
- package/dist/doctor.d.ts +69 -0
- package/dist/doctor.js +294 -0
- package/dist/doctor.js.map +1 -0
- package/dist/errors.d.ts +21 -0
- package/dist/errors.js +46 -0
- package/dist/errors.js.map +1 -0
- package/dist/fs-utils.d.ts +23 -0
- package/dist/fs-utils.js +184 -0
- package/dist/fs-utils.js.map +1 -0
- package/dist/handle-count.d.ts +9 -0
- package/dist/handle-count.js +68 -0
- package/dist/handle-count.js.map +1 -0
- package/dist/incident.d.ts +33 -0
- package/dist/incident.js +115 -0
- package/dist/incident.js.map +1 -0
- package/dist/log-manager.d.ts +17 -0
- package/dist/log-manager.js +418 -0
- package/dist/log-manager.js.map +1 -0
- package/dist/mcp-server.d.ts +8 -0
- package/dist/mcp-server.js +503 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/process-monitor.d.ts +56 -0
- package/dist/process-monitor.js +214 -0
- package/dist/process-monitor.js.map +1 -0
- package/dist/recovery-plan.d.ts +22 -0
- package/dist/recovery-plan.js +146 -0
- package/dist/recovery-plan.js.map +1 -0
- package/dist/state.d.ts +64 -0
- package/dist/state.js +140 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +64 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/watch-daemon.d.ts +7 -0
- package/dist/watch-daemon.js +162 -0
- package/dist/watch-daemon.js.map +1 -0
- package/dist/watchdog.d.ts +30 -0
- package/dist/watchdog.js +225 -0
- package/dist/watchdog.js.map +1 -0
- package/package.json +50 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.1.0] - 2026-02-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Stale session cleanup: `preflight --fix` and `guardian_preflight_fix` now detect and remove
|
|
12
|
+
old UUID-named session transcripts (.jsonl, .jsonl.gz) and session directories
|
|
13
|
+
- Configurable retention: sessions older than 3 days are cleaned (1.5 days in aggressive mode)
|
|
14
|
+
- Protected entries: `memory/` and `sessions-index.json` are never touched
|
|
15
|
+
- Scan-time warning: `preflight` reports stale session count and size before fix
|
|
16
|
+
- 6 new tests for session cleanup
|
|
17
|
+
|
|
18
|
+
## [1.0.0] - 2026-02-27
|
|
19
|
+
|
|
20
|
+
First public release.
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- `preflight` command — scan and fix Claude log bloat (rotate, gzip, trim)
|
|
24
|
+
- `doctor` command — diagnostics bundle (zip) with system info, log tails, journal
|
|
25
|
+
- `run` command — watchdog with hang/crash detection, optional auto-restart
|
|
26
|
+
- `watch` daemon — continuous 2-second polling, incident tracking, budget enforcement
|
|
27
|
+
- `status` command with `--banner` flag for one-line health summaries
|
|
28
|
+
- `budget` CLI command (show/acquire/release) for concurrency management
|
|
29
|
+
- Composite hang detection (log mtime + CPU activity + grace window)
|
|
30
|
+
- Incident state machine (ok → warn → critical lifecycle)
|
|
31
|
+
- Bundle deduplication (one per incident)
|
|
32
|
+
- Concurrency budget system (cap transitions: ok=4, warn=2, critical=1)
|
|
33
|
+
- Lease-based concurrency control with TTL auto-expiry and 60s hysteresis
|
|
34
|
+
- Handle count signal (Windows/Linux/macOS)
|
|
35
|
+
- Attention channel: synthesized top-level signal (none/info/warn/critical)
|
|
36
|
+
- 8 MCP tools: `guardian_status`, `guardian_preflight_fix`, `guardian_doctor`, `guardian_nudge`, `guardian_budget_get`, `guardian_budget_acquire`, `guardian_budget_release`, `guardian_recovery_plan`
|
|
37
|
+
- `GuardianError` structured error type with code, hint, and cause
|
|
38
|
+
- MCP tools return structured errors (code + hint), never stack traces
|
|
39
|
+
- State/budget file corruption recovery: auto-backup + graceful reset
|
|
40
|
+
- CLI `--debug` flag for full stack traces
|
|
41
|
+
- Consistent CLI exit codes: 0 ok, 1 user error, 2 runtime error
|
|
42
|
+
- `npm run verify` script (test + build + pack)
|
|
43
|
+
- SECURITY.md, HANDBOOK.md, SHIP_GATE.md
|
|
44
|
+
- Landing page via @mcptoolshop/site-theme
|
|
45
|
+
- README translations: ja, zh, es, fr, hi, it, pt-BR
|
package/HANDBOOK.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Claude Guardian Handbook
|
|
2
|
+
|
|
3
|
+
Field manual for operating Claude Guardian. Covers daily use, incident response, budget management, and diagnostics.
|
|
4
|
+
|
|
5
|
+
## Daily operations
|
|
6
|
+
|
|
7
|
+
### Start of session
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
claude-guardian status
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
If `risk=ok` and disk is healthy, you're good. If the daemon isn't running:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
claude-guardian watch --verbose &
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The daemon polls every 2 seconds, tracks hang risk, manages the concurrency budget, and persists state for the MCP server.
|
|
20
|
+
|
|
21
|
+
### Embed in prompts
|
|
22
|
+
|
|
23
|
+
Add the guardian to your Claude Code MCP config (`~/.claude.json`):
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"mcpServers": {
|
|
28
|
+
"guardian": {
|
|
29
|
+
"command": "npx",
|
|
30
|
+
"args": ["claude-guardian", "mcp"]
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Claude can then call `guardian_status` at any time to check health.
|
|
37
|
+
|
|
38
|
+
### One-line banner
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
claude-guardian status --banner
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Output: `[guardian] disk=607GB | logs=150MB | procs=2 | cpu=12% | rss=800MB | quiet=0s | risk=ok`
|
|
45
|
+
|
|
46
|
+
Useful for embedding in shell prompts or session start hooks.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Attention levels
|
|
51
|
+
|
|
52
|
+
Guardian synthesizes all signals into a single attention level. Check it with `guardian_status` (CLI or MCP).
|
|
53
|
+
|
|
54
|
+
### `attn=NONE` — All clear
|
|
55
|
+
|
|
56
|
+
No action needed. The daemon is monitoring in the background.
|
|
57
|
+
|
|
58
|
+
### `attn=INFO` — Awareness
|
|
59
|
+
|
|
60
|
+
Something is noteworthy but not urgent. Examples:
|
|
61
|
+
- Budget cap is reduced (recovering from a previous warn/critical)
|
|
62
|
+
- An incident just closed but is still tracked
|
|
63
|
+
|
|
64
|
+
**What to do:** Nothing immediate. Continue working normally.
|
|
65
|
+
|
|
66
|
+
### `attn=WARN` — Elevated risk
|
|
67
|
+
|
|
68
|
+
Hang risk is elevated, or disk is low. Guardian has detected inactivity or resource pressure.
|
|
69
|
+
|
|
70
|
+
**What to do:**
|
|
71
|
+
1. Call `guardian_nudge` — it will auto-fix what it can (rotate logs, capture bundles)
|
|
72
|
+
2. Check `guardian_budget_get` — cap is likely reduced to 2
|
|
73
|
+
3. Reduce concurrency: fewer parallel tasks, smaller batches
|
|
74
|
+
4. Monitor with `guardian_status` every few minutes
|
|
75
|
+
|
|
76
|
+
### `attn=CRITICAL` — Immediate action needed
|
|
77
|
+
|
|
78
|
+
Hang risk is critical. Claude Code may be stuck. No activity for 600+ seconds with low CPU.
|
|
79
|
+
|
|
80
|
+
**What to do:**
|
|
81
|
+
1. Call `guardian_nudge` — captures a diagnostics bundle if one hasn't been taken
|
|
82
|
+
2. Call `guardian_recovery_plan` — get exact step-by-step instructions
|
|
83
|
+
3. Budget cap is reduced to 1 — stop starting new heavy work
|
|
84
|
+
4. If no recovery in 2 minutes, restart Claude Code manually
|
|
85
|
+
5. After restart, the budget will recover to cap=4 after 60 seconds of sustained `risk=ok`
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Budget and leases
|
|
90
|
+
|
|
91
|
+
The budget system prevents multiple agents or tasks from dogpiling Claude when it's already stressed.
|
|
92
|
+
|
|
93
|
+
### How it works
|
|
94
|
+
|
|
95
|
+
- **Base cap:** 4 concurrent slots
|
|
96
|
+
- **Warn cap:** 2 slots (when `risk=warn`)
|
|
97
|
+
- **Critical cap:** 1 slot (when `risk=critical`)
|
|
98
|
+
- **Hysteresis:** After risk returns to `ok`, the cap stays reduced for 60 seconds before restoring to base
|
|
99
|
+
|
|
100
|
+
### Acquire before heavy work
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
claude-guardian budget acquire 1 --ttl 120 --reason "batch-processing"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Or via MCP:
|
|
107
|
+
```
|
|
108
|
+
guardian_budget_acquire { slots: 1, ttlSeconds: 120, reason: "batch-processing" }
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
If granted, you get a lease ID. If denied, the cap is full — wait or reduce load.
|
|
112
|
+
|
|
113
|
+
### Release when done
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
claude-guardian budget release <lease-id>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Or via MCP:
|
|
120
|
+
```
|
|
121
|
+
guardian_budget_release { leaseId: "<id>" }
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Leases auto-expire after their TTL, but releasing early frees slots for others immediately.
|
|
125
|
+
|
|
126
|
+
### Check budget state
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
claude-guardian budget show
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Shows current cap, slots in use, active leases with TTL countdown.
|
|
133
|
+
|
|
134
|
+
### The contract
|
|
135
|
+
|
|
136
|
+
The budget is **advisory**. Guardian doesn't block or kill anything. The contract is:
|
|
137
|
+
1. Check `guardian_budget_get` before starting heavy work
|
|
138
|
+
2. If `slotsAvailable > 0`, call `guardian_budget_acquire`
|
|
139
|
+
3. If denied, back off — the system is under pressure
|
|
140
|
+
4. Always release when done
|
|
141
|
+
|
|
142
|
+
Tools and agents that respect this contract prevent cascading failures.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Doctor bundles
|
|
147
|
+
|
|
148
|
+
When something goes wrong, Guardian captures evidence — not guesses.
|
|
149
|
+
|
|
150
|
+
### Generate a bundle
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
claude-guardian doctor --out ./my-bundle.zip
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Or via MCP: `guardian_doctor`
|
|
157
|
+
|
|
158
|
+
### What's in the bundle
|
|
159
|
+
|
|
160
|
+
| File | Contents |
|
|
161
|
+
|------|----------|
|
|
162
|
+
| `summary.json` | System info, disk, memory, CPU, preflight results |
|
|
163
|
+
| `process.json` | Snapshot of all Claude processes (PID, CPU, memory, handles, uptime) |
|
|
164
|
+
| `timeline.json` | Chronological events (journal entries, incidents, state changes) |
|
|
165
|
+
| `log-tails/*.txt` | Last 500 lines of each Claude log file |
|
|
166
|
+
| `journal.jsonl` | Full guardian action journal |
|
|
167
|
+
| `events.jsonl` | Incident log |
|
|
168
|
+
| `state.json` | Guardian state at time of capture |
|
|
169
|
+
|
|
170
|
+
### Attach to issues
|
|
171
|
+
|
|
172
|
+
When filing a bug report:
|
|
173
|
+
1. Run `claude-guardian doctor`
|
|
174
|
+
2. Note the bundle path in the output
|
|
175
|
+
3. Attach the `.zip` to your GitHub issue
|
|
176
|
+
4. The bundle contains no API keys, tokens, or user content — only system metrics, log tails, and guardian's own journal
|
|
177
|
+
|
|
178
|
+
### Automatic capture
|
|
179
|
+
|
|
180
|
+
The daemon captures bundles automatically when:
|
|
181
|
+
- Risk escalates to `warn` or `critical` (one bundle per incident, deduplicated)
|
|
182
|
+
- The watchdog (`claude-guardian run`) detects a hang or crash
|
|
183
|
+
|
|
184
|
+
Bundle paths are stored in the incident record and shown in `guardian_status`.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Corruption recovery
|
|
189
|
+
|
|
190
|
+
Guardian handles its own file corruption gracefully:
|
|
191
|
+
|
|
192
|
+
- **state.json corrupt:** Backed up to `state.json.corrupt.<timestamp>`, state resets to empty. The daemon rebuilds on next poll.
|
|
193
|
+
- **budget.json corrupt:** Backed up to `budget.json.corrupt.<timestamp>`, budget resets to defaults (cap=4, no leases).
|
|
194
|
+
|
|
195
|
+
If you see `[guardian] WARNING: state.json is corrupt` in your console, the backup is in `~/.claude-guardian/`. The guardian continues operating normally after reset.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Quick reference
|
|
200
|
+
|
|
201
|
+
| Situation | Command |
|
|
202
|
+
|-----------|---------|
|
|
203
|
+
| Start of session | `claude-guardian status` |
|
|
204
|
+
| Background monitoring | `claude-guardian watch` |
|
|
205
|
+
| Fix log bloat | `claude-guardian preflight --fix` |
|
|
206
|
+
| Something is wrong | `claude-guardian doctor` |
|
|
207
|
+
| Check budget | `claude-guardian budget show` |
|
|
208
|
+
| MCP: safe auto-fix | `guardian_nudge` |
|
|
209
|
+
| MCP: what do I do? | `guardian_recovery_plan` |
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 mcp-tool-shop
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.es.md
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/claude-guardian/readme.png" width="400" alt="claude-guardian" />
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/mcp-tool-shop-org/claude-guardian/actions"><img src="https://github.com/mcp-tool-shop-org/claude-guardian/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
11
|
+
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT License" /></a>
|
|
12
|
+
<a href="https://mcp-tool-shop-org.github.io/claude-guardian/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page" /></a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
Computadora de vuelo para Claude Code: rotación de registros, supervisión, paquetes de fallos y autoconciencia del MCP.
|
|
16
|
+
|
|
17
|
+
Claude Guardian es una capa de confiabilidad local que mantiene las sesiones de Claude Code en buen estado. Detecta el crecimiento excesivo de los registros, la presión en el disco y las interrupciones antes de que causen problemas, captura evidencia cuando algo sale mal y expone un servidor MCP para que Claude pueda realizar un automonitoreo durante la sesión.
|
|
18
|
+
|
|
19
|
+
## ¿Qué hace?
|
|
20
|
+
|
|
21
|
+
| Comando | Propósito |
|
|
22
|
+
|---------|---------|
|
|
23
|
+
| `preflight` | Escanea los registros del proyecto Claude, informa sobre directorios/archivos de gran tamaño, opcionalmente corrige automáticamente. |
|
|
24
|
+
| `doctor` | Genera un paquete de diagnóstico (zip) con información del sistema, fragmentos de registros y un registro. |
|
|
25
|
+
| `run -- <cmd>` | Ejecuta cualquier comando con supervisión, crea automáticamente un paquete en caso de fallo/interrupción. |
|
|
26
|
+
| `status` | Comprobación de estado: espacio libre en disco, tamaños de los registros, advertencias. |
|
|
27
|
+
| `watch` | Demonio en segundo plano: monitoreo continuo, seguimiento de incidentes, cumplimiento del presupuesto. |
|
|
28
|
+
| `budget` | Visualiza y gestiona el presupuesto de concurrencia (mostrar/obtener/liberar). |
|
|
29
|
+
| `mcp` | Inicia el servidor MCP (8 herramientas) para el automonitoreo de Claude Code. |
|
|
30
|
+
|
|
31
|
+
## Instalación
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g claude-guardian
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
O ejecútelo directamente:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npx claude-guardian preflight
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Comienzo rápido
|
|
44
|
+
|
|
45
|
+
### Verifique su entorno
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
claude-guardian status
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
=== Claude Guardian Preflight ===
|
|
53
|
+
|
|
54
|
+
Disk free: 607.13GB [OK]
|
|
55
|
+
Claude projects: C:\Users\you\.claude\projects
|
|
56
|
+
Total size: 1057.14MB
|
|
57
|
+
|
|
58
|
+
Project directories (by size):
|
|
59
|
+
my-project: 1020.41MB
|
|
60
|
+
|
|
61
|
+
Issues found:
|
|
62
|
+
[WARNING] Project log dir is 1020.41MB (limit: 200MB)
|
|
63
|
+
[WARNING] File is 33.85MB (limit: 25MB)
|
|
64
|
+
|
|
65
|
+
[guardian] disk=607.13GB | logs=1057.14MB | issues=2
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Corrige automáticamente el crecimiento excesivo de los registros
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
claude-guardian preflight --fix
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Rota los registros antiguos (gzip), recorta los archivos `.jsonl` y `.log` de gran tamaño a sus últimas N líneas. Cada acción se registra en un archivo de registro para facilitar el seguimiento.
|
|
75
|
+
|
|
76
|
+
### Genera un informe de fallo
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
claude-guardian doctor --out ./bundle.zip
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Crea un archivo zip que contiene:
|
|
83
|
+
- `summary.json` — información del sistema, informe de tamaño de archivo, resultados de la verificación inicial.
|
|
84
|
+
- `log-tails/` — las últimas 500 líneas de cada archivo de registro.
|
|
85
|
+
- `journal.jsonl` — cada acción que ha realizado el guardián.
|
|
86
|
+
|
|
87
|
+
### Ejecute con supervisión
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
claude-guardian run -- claude
|
|
91
|
+
claude-guardian run --auto-restart --hang-timeout 120 -- node server.js
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
El sistema de supervisión:
|
|
95
|
+
1. Ejecuta su comando como un proceso secundario.
|
|
96
|
+
2. Supervisa la salida estándar/error estándar para detectar actividad.
|
|
97
|
+
3. Si no hay actividad durante `--hang-timeout` segundos, captura un paquete de diagnóstico.
|
|
98
|
+
4. Si el proceso falla, captura un paquete y, opcionalmente, se reinicia con un intervalo de reintento.
|
|
99
|
+
|
|
100
|
+
## Servidor MCP (la verdadera clave)
|
|
101
|
+
|
|
102
|
+
Registre el guardián como un servidor MCP local para que Claude pueda realizar un automonitoreo:
|
|
103
|
+
|
|
104
|
+
Agregue lo siguiente a `~/.claude.json`:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"mcpServers": {
|
|
109
|
+
"guardian": {
|
|
110
|
+
"command": "npx",
|
|
111
|
+
"args": ["claude-guardian", "mcp"]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Luego, Claude puede llamar a:
|
|
118
|
+
|
|
119
|
+
| Herramienta | Lo que devuelve |
|
|
120
|
+
|------|----------------|
|
|
121
|
+
| `guardian_status` | Disco, registros, procesos, riesgo de interrupción, presupuesto, nivel de atención. |
|
|
122
|
+
| `guardian_preflight_fix` | Ejecuta la rotación/recorte de registros y devuelve un informe de antes y después. |
|
|
123
|
+
| `guardian_doctor` | Crea un paquete de diagnóstico (zip) y devuelve la ruta y un resumen. |
|
|
124
|
+
| `guardian_nudge` | Corrección automática segura: corrige los registros si están hinchados, captura un paquete si es necesario. |
|
|
125
|
+
| `guardian_budget_get` | Límite de concurrencia actual, espacios utilizados, concesiones activas. |
|
|
126
|
+
| `guardian_budget_acquire` | Solicita espacios de concurrencia (devuelve el ID de la concesión). |
|
|
127
|
+
| `guardian_budget_release` | Libera una concesión cuando hayas terminado con el trabajo intensivo. |
|
|
128
|
+
| `guardian_recovery_plan` | Plan de recuperación paso a paso que indica las herramientas exactas a utilizar. |
|
|
129
|
+
|
|
130
|
+
Esto permite que Claude diga: "La atención es de NIVEL DE ADVERTENCIA. Ejecutando `guardian_nudge`, luego reduciendo la concurrencia".
|
|
131
|
+
|
|
132
|
+
## Configuración
|
|
133
|
+
|
|
134
|
+
Tres opciones de configuración (todo lo demás está codificado con valores predeterminados razonables):
|
|
135
|
+
|
|
136
|
+
| Bandera | Valor predeterminado | Descripción |
|
|
137
|
+
|------|---------|-------------|
|
|
138
|
+
| `--max-log-mb` | `200` | Tamaño máximo del directorio de registros del proyecto en MB. |
|
|
139
|
+
| `--hang-timeout` | `300` | Segundos de inactividad antes de declarar una interrupción. |
|
|
140
|
+
| `--auto-restart` | `false` | Reiniciar automáticamente en caso de fallo/interrupción. |
|
|
141
|
+
|
|
142
|
+
Además, existe una restricción codificada:
|
|
143
|
+
- **Espacio libre en disco < 5 GB** → el modo agresivo se habilita automáticamente (menor retención, umbrales más bajos).
|
|
144
|
+
|
|
145
|
+
## Modelo de confianza
|
|
146
|
+
|
|
147
|
+
Claude Guardian es **solo local**. No tiene ningún listener de red, ni telemetría ni dependencia de la nube.
|
|
148
|
+
|
|
149
|
+
**Lo que lee:** `~/.claude/projects/` (archivos de registro, tamaños, tiempos de modificación), lista de procesos (CPU, memoria, tiempo de actividad, recuentos de identificadores para los procesos relacionados con Claude a través de `pidusage`).
|
|
150
|
+
|
|
151
|
+
**Lo que escribe:** `~/.claude-guardian/` (state.json, budget.json, journal.jsonl, paquetes de diagnóstico). Todos los archivos están ubicados en el directorio de inicio del usuario.
|
|
152
|
+
|
|
153
|
+
**¿Qué información recopila en los paquetes?** Información del sistema (sistema operativo, CPU, memoria, disco), fragmentos de archivos de registro (las últimas 500 líneas), instantáneas de procesos y el propio registro de Guardian. No recopila claves de API, tokens, credenciales ni contenido de usuario.
|
|
154
|
+
|
|
155
|
+
**Acciones peligrosas: lo que Guardian NO hará:**
|
|
156
|
+
- Matar procesos o enviar señales (no `SIGKILL`, no `SIGTERM`)
|
|
157
|
+
- Reiniciar Claude Code o cualquier otro proceso
|
|
158
|
+
- Eliminar archivos (la rotación es mediante compresión gzip, el recorte consiste en mantener las últimas N líneas)
|
|
159
|
+
- Realizar solicitudes de red o enviar información a un servidor central
|
|
160
|
+
- Aumentar privilegios o acceder a los datos de otros usuarios.
|
|
161
|
+
|
|
162
|
+
Si alguna vez se añadiera la función de matar procesos o el reinicio automático, estará habilitada mediante una opción explícita, documentada aquí, y estará desactivada de forma predeterminada.
|
|
163
|
+
|
|
164
|
+
## Principios de diseño
|
|
165
|
+
|
|
166
|
+
- **Evidencia sobre suposiciones** — cada acción genera una entrada en el registro; los paquetes de registro capturan el estado, no conjeturas.
|
|
167
|
+
- **Determinista** — no utiliza aprendizaje automático ni heurísticas más allá de la edad y el tamaño de los archivos. Tabla de decisiones que se puede leer en 60 segundos.
|
|
168
|
+
- **Seguro por defecto** — la rotación es mediante compresión gzip (reversible), el recorte consiste en mantener las últimas N líneas (los datos se conservan), no hay eliminaciones en la versión 1.
|
|
169
|
+
- **Dependencias básicas** — commander, pidusage, archiver, @modelcontextprotocol/sdk. Eso es todo.
|
|
170
|
+
|
|
171
|
+
## Desarrollo
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
npm install
|
|
175
|
+
npm run build
|
|
176
|
+
npm test
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Licencia
|
|
180
|
+
|
|
181
|
+
MIT
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
Creado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|
package/README.fr.md
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.md">English</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/claude-guardian/readme.png" width="400" alt="claude-guardian" />
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/mcp-tool-shop-org/claude-guardian/actions"><img src="https://github.com/mcp-tool-shop-org/claude-guardian/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
11
|
+
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT License" /></a>
|
|
12
|
+
<a href="https://mcp-tool-shop-org.github.io/claude-guardian/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page" /></a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
Ordinateur de bord pour Claude Code : rotation des journaux, surveillance, regroupement des erreurs, et auto-évaluation de l'environnement d'exécution (MCP).
|
|
16
|
+
|
|
17
|
+
Claude Guardian est une couche de fiabilité locale qui maintient les sessions Claude Code en bon état. Il détecte les problèmes de taille des journaux, la saturation du disque et les blocages avant qu'ils ne causent des problèmes, enregistre les informations pertinentes en cas de problème, et expose un serveur MCP afin que Claude puisse s'auto-surveiller pendant les sessions.
|
|
18
|
+
|
|
19
|
+
## Ce qu'il fait
|
|
20
|
+
|
|
21
|
+
| Commande | Fonction |
|
|
22
|
+
|---------|---------|
|
|
23
|
+
| `preflight` | Analyse les journaux du projet Claude, signale les répertoires/fichiers trop volumineux, corrige automatiquement (optionnel). |
|
|
24
|
+
| `doctor` | Génère un ensemble de diagnostics (zip) contenant des informations système, les dernières lignes des journaux et un journal. |
|
|
25
|
+
| `run -- <cmd>` | Exécute n'importe quelle commande avec surveillance, crée automatiquement un regroupement en cas de plantage/blocage. |
|
|
26
|
+
| `status` | Vérification de l'état : espace disque disponible, taille des journaux, avertissements. |
|
|
27
|
+
| `watch` | Démon en arrière-plan : surveillance continue, suivi des incidents, application des limites. |
|
|
28
|
+
| `budget` | Affiche et gère la limite de concurrence (afficher/acquérir/libérer). |
|
|
29
|
+
| `mcp` | Démarre le serveur MCP (8 outils) pour l'auto-surveillance de Claude Code. |
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g claude-guardian
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Ou exécutez directement :
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npx claude-guardian preflight
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Démarrage rapide
|
|
44
|
+
|
|
45
|
+
### Vérifiez votre environnement
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
claude-guardian status
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
=== Claude Guardian Preflight ===
|
|
53
|
+
|
|
54
|
+
Disk free: 607.13GB [OK]
|
|
55
|
+
Claude projects: C:\Users\you\.claude\projects
|
|
56
|
+
Total size: 1057.14MB
|
|
57
|
+
|
|
58
|
+
Project directories (by size):
|
|
59
|
+
my-project: 1020.41MB
|
|
60
|
+
|
|
61
|
+
Issues found:
|
|
62
|
+
[WARNING] Project log dir is 1020.41MB (limit: 200MB)
|
|
63
|
+
[WARNING] File is 33.85MB (limit: 25MB)
|
|
64
|
+
|
|
65
|
+
[guardian] disk=607.13GB | logs=1057.14MB | issues=2
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Corrige automatiquement les problèmes de taille des journaux
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
claude-guardian preflight --fix
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Effectue la rotation des anciens journaux (gzip), réduit la taille des fichiers `.jsonl` et `.log` trop volumineux en ne conservant que les N dernières lignes. Chaque action est enregistrée dans un fichier journal pour la traçabilité.
|
|
75
|
+
|
|
76
|
+
### Génère un rapport de plantage
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
claude-guardian doctor --out ./bundle.zip
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Crée un fichier zip contenant :
|
|
83
|
+
- `summary.json` : informations système, rapport de taille des fichiers, résultats de vérification préliminaire.
|
|
84
|
+
- `log-tails/` : les 500 dernières lignes de chaque fichier journal.
|
|
85
|
+
- `journal.jsonl` : toutes les actions effectuées par le système de surveillance.
|
|
86
|
+
|
|
87
|
+
### Exécute avec surveillance
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
claude-guardian run -- claude
|
|
91
|
+
claude-guardian run --auto-restart --hang-timeout 120 -- node server.js
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
La surveillance :
|
|
95
|
+
1. Lance votre commande en tant que processus enfant.
|
|
96
|
+
2. Surveille la sortie standard (stdout) et la sortie d'erreur (stderr) pour détecter l'activité.
|
|
97
|
+
3. Si aucune activité pendant `--hang-timeout` secondes, un ensemble de diagnostics est créé.
|
|
98
|
+
4. Si le processus plante, un ensemble est créé, et il peut être redémarré avec un délai progressif.
|
|
99
|
+
|
|
100
|
+
## Serveur MCP (la véritable fonctionnalité)
|
|
101
|
+
|
|
102
|
+
Enregistrez le système de surveillance en tant que serveur MCP local afin que Claude puisse s'auto-surveiller :
|
|
103
|
+
|
|
104
|
+
Ajoutez ceci à `~/.claude.json` :
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"mcpServers": {
|
|
109
|
+
"guardian": {
|
|
110
|
+
"command": "npx",
|
|
111
|
+
"args": ["claude-guardian", "mcp"]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Ensuite, Claude peut appeler :
|
|
118
|
+
|
|
119
|
+
| Outil | Ce qu'il renvoie |
|
|
120
|
+
|------|----------------|
|
|
121
|
+
| `guardian_status` | Espace disque, journaux, processus, risque de blocage, limite, niveau d'attention. |
|
|
122
|
+
| `guardian_preflight_fix` | Effectue la rotation/réduction des journaux, renvoie un rapport avant/après. |
|
|
123
|
+
| `guardian_doctor` | Crée un ensemble de diagnostics (zip), renvoie le chemin et un résumé. |
|
|
124
|
+
| `guardian_nudge` | Correction automatique sécurisée : corrige les journaux s'ils sont trop volumineux, crée un ensemble si nécessaire. |
|
|
125
|
+
| `guardian_budget_get` | Limite de concurrence actuelle, emplacements utilisés, licences actives. |
|
|
126
|
+
| `guardian_budget_acquire` | Demande des emplacements de concurrence (renvoie l'ID de la licence). |
|
|
127
|
+
| `guardian_budget_release` | Libère une licence une fois le travail intensif terminé. |
|
|
128
|
+
| `guardian_recovery_plan` | Plan de récupération étape par étape, indiquant les outils à utiliser. |
|
|
129
|
+
|
|
130
|
+
Cela permet à Claude de dire : "L'attention est à niveau AVERTISSEMENT. Exécution de `guardian_nudge`, puis réduction de la concurrence."
|
|
131
|
+
|
|
132
|
+
## Configuration
|
|
133
|
+
|
|
134
|
+
Trois paramètres (tout le reste est codé en dur avec des valeurs par défaut raisonnables) :
|
|
135
|
+
|
|
136
|
+
| Paramètre | Valeur par défaut | Description |
|
|
137
|
+
|------|---------|-------------|
|
|
138
|
+
| `--max-log-mb` | `200` | Taille maximale du répertoire des journaux du projet en Mo. |
|
|
139
|
+
| `--hang-timeout` | `300` | Nombre de secondes d'inactivité avant de déclarer un blocage. |
|
|
140
|
+
| `--auto-restart` | `false` | Redémarrage automatique en cas de plantage/blocage. |
|
|
141
|
+
|
|
142
|
+
Plus une règle de sécurité codée en dur :
|
|
143
|
+
- **Espace disque disponible < 5 Go** → le mode agressif est activé automatiquement (conservation plus courte, seuils plus bas).
|
|
144
|
+
|
|
145
|
+
## Modèle de confiance
|
|
146
|
+
|
|
147
|
+
Claude Guardian est **local uniquement**. Il n'a pas de listener réseau, de télémétrie ni de dépendance au cloud.
|
|
148
|
+
|
|
149
|
+
**Ce qu'il lit :** `~/.claude/projects/` (fichiers journaux, tailles, dates de modification), liste des processus (utilisation du CPU, mémoire, temps de fonctionnement, nombre de descripteurs pour les processus liés à Claude via `pidusage`).
|
|
150
|
+
|
|
151
|
+
**Ce qu'il écrit :** `~/.claude-guardian/` (state.json, budget.json, journal.jsonl, doctor bundles). Tous les fichiers se trouvent dans le répertoire personnel de l'utilisateur.
|
|
152
|
+
|
|
153
|
+
**Ce qu'il collecte dans les rapports :** Informations système (OS, CPU, mémoire, disque), extraits de fichiers journaux (les 500 dernières lignes), instantanés des processus et le propre journal de Guardian. Aucune clé API, aucun jeton, aucune identifiant, ni aucun contenu utilisateur.
|
|
154
|
+
|
|
155
|
+
**Actions dangereuses — ce que Guardian NE fera PAS :**
|
|
156
|
+
- Terminer des processus ou envoyer des signaux (pas de `SIGKILL`, pas de `SIGTERM`)
|
|
157
|
+
- Redémarrer Claude Code ou tout autre processus
|
|
158
|
+
- Supprimer des fichiers (la rotation se fait par compression gzip, la suppression se limite aux N dernières lignes)
|
|
159
|
+
- Effectuer des requêtes réseau ou contacter un serveur central
|
|
160
|
+
- Accorder des privilèges supérieurs ou accéder aux données d'autres utilisateurs
|
|
161
|
+
|
|
162
|
+
Si la terminaison de processus ou le redémarrage automatique étaient un jour ajoutés, cela se ferait via un indicateur d'activation explicite, documenté ici, et serait désactivé par défaut.
|
|
163
|
+
|
|
164
|
+
## Principes de conception
|
|
165
|
+
|
|
166
|
+
- **Preuves plutôt que suppositions** — chaque action génère une entrée de journal ; les rapports capturent l'état, et non des conjectures.
|
|
167
|
+
- **Déterministe** — pas d'apprentissage automatique, pas d'heuristiques au-delà de l'âge et de la taille des fichiers. Tableau de décision que vous pouvez lire en 60 secondes.
|
|
168
|
+
- **Sûr par défaut** — la rotation se fait par compression gzip (réversible), la suppression se limite aux N dernières lignes (les données sont préservées), aucune suppression dans la version 1.
|
|
169
|
+
- **Dépendances simples** — commander, pidusage, archiver, @modelcontextprotocol/sdk. C'est tout.
|
|
170
|
+
|
|
171
|
+
## Développement
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
npm install
|
|
175
|
+
npm run build
|
|
176
|
+
npm test
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Licence
|
|
180
|
+
|
|
181
|
+
MIT
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
Créé par <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|