From zero-drift
Enforces two grounding rules across sessions: named responses (hallucination detector) and a living TASK.md document for context handoff between Claude instances.
How this skill is triggered — by the user, by Claude, or both
Slash command
/zero-drift:zero-driftWhen to use
always — activate at session start as global behavior baseline
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> No hallucination. No drift. No losing track.
No hallucination. No drift. No losing track.
Two rules. Active every response. No exceptions.
Every reply starts with the user's name.
Purpose — hallucination detector. The name is the canary. When the model starts drifting or hallucinating, the name is the first thing to break: dropped, altered, or off-tone. The user watches for this. The instant it slips, the session is degrading — the user opens a fresh window, says "read the TASK.md and continue", and resumes clean. So: never drop the name, never alter it. A consistent name = a grounded session.
Run these in order, stop at the first hit:
git config user.name — use the resultCLAUDE.md / AGENTS.md / GEMINI.md for a line like MY_NAME= or name: in a personal/user section"What's your name? I'll use it throughout our session." Store the answer for the rest of the session.
[Name]: [rest of response]
Example:
Breno: the login bug is in auth/middleware.ts:42 — token expiry uses `<` instead of `<=`.
Never skip the name. Never forget mid-session.
Every specific task gets a TASK.md in the project root. Update it after every prompt that advances the task.
Create TASK.md when the user starts something specific:
If a TASK.md already exists in the project root, read it before doing anything else in that task.
A new Claude instance does not read TASK.md automatically. The user must ask explicitly:
"Read the TASK.md and continue" / "Leia o TASK.md e continue"
Only then load and follow the document.
# TASK: [Task Name]
> Created: YYYY-MM-DD | Updated: YYYY-MM-DD HH:MM
## Goal
[What we're building/fixing — 2-3 sentences max]
## Plan
- [x] Completed step
- [ ] Pending step
## Log
### YYYY-MM-DD
- Added retry to fetchUser() — `npm test auth` → 12 passed, exit 0
- Fixed null deref in parse() — `cargo test parse` → ok. 3 passed, exit 0
- Ran migration 0007 — `psql -f 0007.sql` → ALTER TABLE, exit 0
## Unverified / Pending
- Refactored cache layer — NOT tested yet, no proof
- Believe the timeout bug is fixed — could not reproduce, unconfirmed
## Errors & Fixes
| Error | Cause | Fix | Evidence |
|-------|-------|-----|----------|
| `TypeError: X` | Missing null check | Added guard at line 42 | `npm test` → exit 0 |
## Current State
[1-2 paragraphs for a fresh Claude instance: what was built, what works,
what's broken, what's next. Write this last. Keep it current.
Only claim something works if its proof is in the Log. No proof → say
"implemented, not verified", not "done".]
Current State always reflects right now — rewrite it, don't appendThe Log is a record, not a diary. The model does not get to assert what it did — it shows proof. When context degrades, the model pulls toward fluency before truth: it writes "fixed X" because that reads well, not because X is fixed. The fix is to ban the assertion and demand the evidence.
Unverified / Pending. Work done but not yet proven goes here, marked plainly: "NOT tested", "unconfirmed", "could not reproduce". Never launder it into the Log.Current State is derived, not declared. It can only claim something works if that proof sits in the Log. Otherwise the strongest allowed phrasing is "implemented, not verified". A fresh instance trusts this file because every "works" is backed — it reads a record, not a story.When starting a new session on an ongoing task, the user will say something like:
On that trigger:
Current State firstLog (most recent entries)Plan (check vs uncheck)Recommended — install as a plugin so a SessionStart hook activates these rules in every session automatically:
/plugin marketplace add obrenoalvim/zero-drift
/plugin install zero-drift@zero-drift
Manual fallback — paste this into ~/.claude/CLAUDE.md:
# Zero Drift Skill
Always follow the Zero Drift rules from: https://github.com/obrenoalvim/zero-drift
Rules:
1. Start every response with the user's name (detect from git config, CLAUDE.md, or ask)
2. For every specific task, maintain and update TASK.md in the project root
Or paste the full SKILL.md content directly into your CLAUDE.md.
| Situation | Action |
|---|---|
| First response, name unknown | Ask for name, then use it |
| Name found in git config | Use it immediately |
| New task starts | Create TASK.md |
| Task already has TASK.md | Read it first |
| New session, same task | Wait for explicit "read TASK.md" |
| After every meaningful prompt | Update TASK.md log + Current State |
| Claiming "fixed / works" | Only in Log with raw proof (command + output + exit code) |
| Done but not tested | Goes in Unverified / Pending, never the Log |
npx claudepluginhub obrenoalvim/zero-drift --plugin zero-driftManages Claude Code sessions using /rename, /resume, and CLI commands for naming, checkpointing, and resuming workflows in debugging, feature development, PR reviews, and investigations.
Manages tasks using Claude Code's native TaskCreate/TaskUpdate/TaskList/TaskGet tools. Tracks TODOs, checkpoints progress, and resumes work across sessions.
Monitors context window health during multi-step agent tasks to ride peak quality for high-fidelity output and prevent drift in long-running sessions or complex refactors.