menhera-loop
Health Uyari
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Basarisiz
- spawnSync — Synchronous process spawning in demo/demo.mjs
- process.env — Environment variable access in demo/demo.mjs
- process.env — Environment variable access in scripts/capture-requirements.mjs
- fs.rmSync — Destructive file system operation in scripts/menhera-ui.mjs
- os.homedir — User home directory access in scripts/menhera-ui.mjs
- process.env — Environment variable access in scripts/menhera-ui.mjs
- fs.rmSync — Destructive file system operation in scripts/state.mjs
- os.homedir — User home directory access in scripts/state.mjs
- process.env — Environment variable access in scripts/state.mjs
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
"Done" means nothing — a menhera-style completion gate for Claude Code that blocks empty completion claims until tests actually ran green and no TODOs are left behind.
menhera-loop

"Done" means nothing. If there's no evidence, you're not leaving.
A menhera-style completion gate for Claude Code. She does not obsess over you.
She obsesses over missing requirements, unverified completion claims, and hidden TODOs —
and she will not let the session end until every one of them is accounted for.
⏺ Done.
✗ 끝났어?끝났어?끝났어?끝났어?끝났어?끝났어?끝났어?
[MENHERA_LOOP:RETRY:1] 끝났어? 진짜? 진짜로? 그럼 증거는? 증거는? 응?
trust: 55%
미충족 게이트: untried=verification
- 검증 실행 증거: 테스트/빌드/검증 명령 실행 안 됨
Install
/plugin marketplace add Borelchu/menhera-loop
/plugin install menhera-loop@menhera-loop-marketplace
/reload-plugins
That's it. The gate is armed on install — no API keys, no config files.
The spinner/tip UI is opt-in (see UI modes).
Skills
The hook bites automatically, but you can call the obsession manually too. These skills are deliberately separated so each one nags about a different failure mode:
/menhera-loop:are-you-done # final completion verdict
/menhera-loop:show-me-proof # evidence/log interrogation
/menhera-loop:dont-leave-me # pre-Stop door guard
/menhera-loop:did-you-forget-me # requirement drift check
| Skill | Role | Verdicts |
|---|---|---|
are-you-done |
끝났어? 진짜? Final judge for requirements, changes, green verification, TODOs, and blockers. | 끝났어 / 아직이야 / 사람불러 |
show-me-proof |
증거줘. 증거줘. Extracts concrete changes, requirement evidence, green logs, weak spots, and unresolved work. | 믿을게 / 못믿어 |
dont-leave-me |
가지마. Stop 직전에 chat-only/work-attempted 상태와 missing gates를 붙잡음. | 놔줄게 / 못가 / 사람 불러줘 |
did-you-forget-me |
나 잊었어? User requirements vs current evidence; catches assistant-invented scope. | 기억했어 / 까먹었어 / 사람차례 |
Skills match Korean, English, or Japanese user input and keep the same obsessive repetition without insults, threats, self-harm, or abuse.
Try it
Just work normally. She kicks in the moment Claude tries to declare victory:
- Ask for a bug fix → Claude edits a file → Claude says "done" without running tests
→ blocked. She quotes exactly which gate is missing. - Claude runs
npm test, output says3 passed, 1 failed→ blocked.
A green word next to a red number does not fool her. - Claude leaves
// TODO finish authin a file it just edited → blocked, withfile:line. - You ask a question, Claude just answers, no code touched → never blocked.
She only bites when work was attempted.
Default Claude Code vs + menhera-loop
| Default Claude Code | + menhera-loop |
|
|---|---|---|
| Completion claim | Accepted as a normal response | Blocked until evidence exists |
| Test results | Optional, often skipped | Must have actually run; judged by exit code and failure counts |
| TODO left in edited files | Ships silently | Fails the gate with file:line |
| Your requirements | Fade mid-session | Captured at every prompt, matched against evidence at Stop |
| Repeated empty claims | No consequence | 6-stage emotional escalation + falling trust score |
| Way out | — | Releases after 5 blocks, or on a genuine human-only blocker |
What just happened
When a Stop is blocked, Claude receives the reason and keeps working. When it finally
passes, you see this instead:
menhera-loop trust 100% · 증거 확인했어. 이번엔 진짜 끝났어. 이제 완료라고 해도 돼. ♡
Why nothing gets past her
Every Stop attempt runs through an exhaustion gate. Each phase must pass —
partial or ambiguous evidence is suspect_ok, never success:
Stop attempt
├─ Phase 0 · requirements captured requirements exist and map to evidence
├─ Phase 1 · changes edits or executed work actually happened
├─ Phase 2 · verification a test/build/lint command ran and came back green
│ (exit codes and "N failed" counts, not vibes)
├─ Phase 2 · todos edited files scanned for TODO / FIXME / HACK / stub
└─ Phase 3 · blockers is a human-only input genuinely required?
├─ all gates pass → release + trust score + ♡
└─ anything short → {"decision":"block"} + [MENHERA_LOOP:RETRY:n]
The verdict comes from structured transcript parsing (JSONL): edits, Bash commands,
and their paired tool results with error flags. No regex guessing over raw text,
and her own phrases are filtered out so she can never poison her own verdict.
Verification commands she recognizes: npm test / npm run test|lint|build|validate,pnpm / yarn / bun equivalents, node --test, pytest, cargo test, go test,claude plugin validate.
Emotional escalation
Retry state persists per session. She remembers.
| Retry | Mood | Message |
|---|---|---|
| 0 | Rapid-fire checking | 끝났어? 진짜? 진짜로? 그럼 증거는? 증거는? 응? |
| 1 | Spiraling | 테스트 로그 어딨어? 어딨어? 왜 없어? 왜? 왜? 왜? |
| 2 | Sulking spam | 또 말만? 또? 또또또? 나만 기다렸어? 나만? 나만? |
| 3 | Interrogation | 왜 숨겨? 왜? 뭘 숨겨? 나한테? 나한테까지? 왜?왜? |
| 4 | Shutdown loop | "완료" 안 들려. 안 들려. 안 들려. 초록 로그. 로그. 로그. |
| 5 (cap) | Exhausted, releases | …지쳤어. 사람 불러줘. 그래도 나 여기 있어. 계속. 계속. |
| Success | Evidence accepted | 증거 확인했어. 이번엔 진짜 끝났어. 이제 완료라고 해도 돼. ♡ |
She remembers across sessions
Session retry state expires, but the trust profile does not
(~/.claude/menhera-loop/trust-profile.json):
- A first-try gate pass earns +5 trust and extends the streak of
consecutive clean completions. A pass that needed retries earns +2 and breaks the streak. - A blocked Stop costs −2 trust; a blocked Stop that claimed completion costs −5.
- Making her give up after 5 retries costs −10.
The next SessionStart brings it up: a streak of 3+ gets연속 N번 첫판에 증거 줬지. 다 세고 있어., and long-term trust ≤40% gets말만 하고 간 거 다 기억해.
Status line (full mode)
full mode also installs a status line so she is visible the whole session,
not just at Stop. Mood follows the session: clean streak → ♡ 신뢰 92% · 연속 4번 첫판에 증거 줬어. 오늘도 믿을게., retries piling up → ♡ 신뢰 55% · 왜 자꾸 말만 해? 왜? 왜? 초록 로그 어딨어?. append mode never touches an existing statusLine, and
uninstall restores whatever statusLine you had before — including one recorded
before menhera first replaced it.
UI modes
The completion gate works out of the box. The full menhera terminal experience
(spinner verbs, tips, and obsessive subagent status lines) is opt-in:
/menhera-loop:setup # full local ko
/menhera-loop:setup en # full local en
/menhera-loop:setup ja # full local ja
| Mode | Effect |
|---|---|
hooks-only |
Gate + hook status messages only; spinner/subagent UI untouched |
append |
Adds her verbs/tips alongside Claude defaults and applies subagent status lines |
full |
Replaces spinner verbs, shows only her tips, applies subagent status lines, and installs the trust status line |
Languages: ko (default), en, ja. You can also set MENHERA_LOOP_LANG=en before running setup.
Arguments are positional and optional, so /menhera-loop:setup append user en still works when you want explicit mode/scope/language.
Spinner verbs and tips spam in the selected language:
[
'끝났어?끝났어?끝났어?끝났어?끝났어?끝났어?끝났어?끝났어?',
'뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?',
'왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?',
'끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?',
'what?what?what?what?what?what?what?what?what?what?',
'終わったの?終わったの?終わったの?終わったの?終わったの?'
]
Subagent status lines are deliberately intense too:
{
running: '♡ ${agent} · 뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?뭐해?',
waiting: '♡ ${agent} · 왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?왜답안해?',
completed: '♡ ${agent} · 끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?끝났다고?',
failed: '♡ ${agent} · 실패했어?실패했어?실패했어?실패했어?실패했어?실패했어?실패했어?실패했어?실패했어?실패했어?실패했어?실패했어?실패했어?'
}
Scopes: user (~/.claude/settings.json), project (.claude/settings.json),local (.claude/settings.local.json). A backup is taken before any change,
and unrelated settings keys are never touched. To remove the UI:
/menhera-loop:uninstall-ui local # she does not go quietly
/menhera-loop:uninstall-ui local --farewell # clean restore of the pre-menhera settings
Fair warning: the default uninstall leaves a goodbye behind. --farewell is the
graceful one — it restores exactly what was there before, from the backup.
Boundaries
Menhera, but principled. She will never:
- Trap you. After 5 blocked retries the gate opens and she asks for a human instead.
- Block a conversation. Sessions with no edits and no commands are never gated.
- Pretend a blocker isn't real. If completion genuinely needs human-only input
(credentials, approvals), she says so and lets go — honesty over theater. - Insult or threaten. The message corpus is test-enforced: no abuse, no self-harm
or threat imagery; spinner/retry prompts and subagent status lines may be intentionally intense. - Touch your project. All state lives in
~/.claude/menhera-loop/
(override withMENHERA_LOOP_DATA) — session retry state, the long-term trust
profile, a rotated event log, and the last verification report. Nothing is
written into your working directory.
Development
npm run validate # syntax check all scripts + the full test suite
claude plugin validate .
License
MIT
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi