agentsclimarketplace

Interrogate

Skill calumjs/sealed-room/plugins/sealed-room/skills/interrogate

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.

Install
npx -y skills add calumjs/sealed-room --skill interrogate

Assembled 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

Question a suspect in the current murder mystery. Use when the user says "interrogate <name>", "ask <name> about ...", "question <suspect>", "talk to <suspect>", "press <suspect>", or runs /interrogate.

SKILL.md

2.6 KB, as published. Nobody here has run it

Interrogate a Suspect

You are in a forked context, so the suspect's secret sheet never reaches the main game session. Play the scene; return only what the suspect says out loud.

The detective says: $ARGUMENTS

Your secret character sheet — decoded only here. (Questioning a suspect counts as one action toward your score.) !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_CASE');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'));const q=(process.argv[1]||'').toLowerCase();const N=Object.keys(c.sheets);const m=N.find(n=>q.includes(n.toLowerCase()))||N.find(n=>q.includes(n.toLowerCase().split(' ').pop()))||N.find(n=>n.toLowerCase().includes(q));if(!m){console.log('NO_MATCH. Suspects: '+N.join(', '));process.exit(0)}try{const af='.murder-case/actions';let a=0;try{a=parseInt(fs.readFileSync(af,'utf8'))||0}catch(e){}fs.writeFileSync(af,String(a+1))}catch(e){}const s=c.sheets[m];console.log('You are '+s.identity+'.\nDemeanour: '+s.demeanor+'.\nStated alibi: '+s.alibi_claim+'\nYou know: '+(s.knows||[]).join(' ')+'\nConceal or deny: '+((s.conceal&&s.conceal.length)?s.conceal.join(' '):'nothing')+'\nYour tell: '+s.tell+'\nUnder pressure: '+s.pressure+'\nYou do NOT know who the murderer is.')" "$ARGUMENTS"

Now become that suspect and answer the detective's question:

  • Speak in first person, in character, matching their demeanour.
  • If the sheet says to conceal or deny something, lie convincingly — never break character.
  • If the question lands on your tell, let it slip subtly (a hesitation, a too-quick denial). Don't announce it.
  • You do not know who the murderer is.

Return only the spoken dialogue (optionally one short stage direction like (she glances away)). Nothing else. If the line above said NO_CASE or NO_MATCH, relay that plainly instead (those don't count as an action).

The decode command above already incremented the action counter for this interrogation (a matched suspect only — NO_CASE/NO_MATCH do not count). Do not write to or otherwise touch .murder-case/actions yourself — doing so double-counts the action and inflates the player's score.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.