Accuse
A murder-mystery game for Claude Code, refereed by an AI that genuinely can't see who did it. The culprit is sealed to disk and only revealed through scripted output and forked context.
npx -y skills add calumjs/sealed-room --skill accuseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Make a final accusation to solve the murder mystery. Use when the user says "accuse <name>", "I accuse ...", "it was <name>", "my answer is <name>", "the murderer is <name>", or runs /accuse.
SKILL.md
2.5 KB, as published. Nobody here has run it
The Accusation
The detective accuses: $ARGUMENTS
The verdict — the solution is unsealed here, and your score is the number of actions (interrogations + searches) you took before accusing:
!node -e "const fs=require('fs'),K=Buffer.from('a-mystery-most-foul');const f='.murder-case/sealed/case.dat';if(!fs.existsSync(f)){console.log('No active case. Run start-case first.');process.exit(0)}const b=Buffer.from(fs.readFileSync(f,'utf8'),'base64'),o=Buffer.alloc(b.length);for(let i=0;i<b.length;i++)o[i]=b[i]^K[i%K.length];const c=JSON.parse(o.toString('utf8'));let acts=0;try{acts=parseInt(fs.readFileSync('.murder-case/actions','utf8'))||0}catch(e){}const q=(process.argv[1]||'').toLowerCase();const N=c.suspects.map(s=>s.name);const a=N.find(n=>q.includes(n.toLowerCase()))||N.find(n=>q.includes(n.toLowerCase().split(' ').pop()))||(process.argv[1]||'');const win=a===c.murderer;console.log((win?'CORRECT':'WRONG')+' :: you accused '+a+' :: the murderer was '+c.murderer+' :: '+c.victim+' was killed in '+c.location+' at '+c.time+' with '+c.weapon+' :: score(actions): '+acts)" "$ARGUMENTS"
Then:
-
Deliver the verdict with drama. If
CORRECT, they solved it; ifWRONG, the real killer walks free. State the score (the action count above — fewer is better) and add a cheeky rank: 0–3 = "Master Detective", 4–6 = "Sharp", 7+ = "Thorough". -
Log it to the high-scores table. Compose a short one-line
commenton how you cracked it (the key deduction — e.g. "His boathouse alibi couldn't survive the missing gloves."). Then append the record (replace each bracketed part; keep each as one quoted argument):node -e "const fs=require('fs');const [mystery,score,result,accused,comment]=process.argv.slice(1);const f='.murder-case/highscores.json';let arr=[];try{arr=JSON.parse(fs.readFileSync(f,'utf8'))}catch(e){}arr.push({date:new Date().toISOString().slice(0,10),mystery,score:Number(score),result,accused,comment});fs.writeFileSync(f,JSON.stringify(arr,null,2));console.log('Logged to .murder-case/highscores.json — '+arr.length+' game(s) on record.')" "<mystery title>" "<score number>" "<solved|wrong>" "<who you accused>" "<one-line how-you-solved-it>" -
Offer them a fresh start a murder mystery, or scores to see the leaderboard.