Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add Mduffy37/claudeworks --skill profile-statusgit clone --depth 1 https://github.com/Mduffy37/claudeworksWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/mduffy37/claudeworks/profile-status)<a href="https://agentmods.dev/skills/mduffy37/claudeworks/profile-status"><img src="https://agentmods.dev/badge/skills/mduffy37/claudeworks/profile-status/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/mduffy37/claudeworks/profile-status"><img src="https://agentmods.dev/badge/skills/mduffy37/claudeworks/profile-status.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00033 | $0.01486 |
| Opus 5.5 | $0.00013 | $0.00594 |
| Sonnet 5.5 | $0.00007 | $0.00297 |
| Haiku 4.5 | $0.00003 | $0.00149 |
Grade A, and why
profile-status scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 115 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Run the following command to read the current profile's status:
!`node -e " const fs=require('fs'),path=require('path'),os=require('os'); const cd=process.env.CLAUDE_CONFIG_DIR; if(!cd){console.log('Not running under a ClaudeWorks profile (CLAUDE_CONFIG_DIR is not set).');process.exit(0)} const pn=path.basename(path.dirname(cd)); const pfPath=path.join(os.homedir(),'.claudeworks','profiles.json'); if(!fs.existsSync(pfPath)){console.log('profiles.json not found at '+pfPath);process.exit(0)} const store=JSON.parse(fs.readFileSync(pfPath,'utf-8')); const pf=store.profiles&&store.profiles[pn]; if(!pf){console.log('Profile not found in store: '+pn);process.exit(0)}
function section(title){console.log('');console.log(title);} function yesNo(v){return v?'Yes':'No';} const hasText=v=>typeof v==='string'&&v.trim().length>0;
console.log(''); console.log('Profile: '+pn); console.log('Description: '+(hasText(pf.description)?pf.description:'(none)')); console.log('Default profile: '+yesNo(pf.isDefault)); if(pf.favourite)console.log('Favourite: Yes');
section('Session'); const ctx=pf.model==='opus'?pf.opusContext:pf.model==='sonnet'?pf.sonnetContext:undefined; console.log(' Model: '+(pf.model||'(inherits global default)')+(ctx?' ['+ctx+' context]':'')); console.log(' Effort: '+(pf.effortLevel||'(inherits global default)')); console.log(' Voice: '+(pf.voiceEnabled===true?'Enabled':pf.voiceEnabled===false?'Disabled':'(inherits global default)')); console.log(' Auth: '+(pf.useDefaultAuth===false?'Separate keychain slot':'Default (shared OAuth)'));
const dirs=pf.directories||(pf.directory?[pf.directory]:[]); if(dirs.length){section('Directories ('+dirs.length+')');for(const d of dirs)console.log(' '+d)} if(pf.projects&&pf.projects.length){section('Imported projects ('+pf.projects.length+')');for(const p of pf.projects)console.log(' '+p)}
const aliases=pf.aliases||[]; if(aliases.length||pf.disableDefaultAlias){ section('Aliases ('+aliases.length+')'); for(const a of aliases){ const dirNote=a.directory?' [cwd '+a.directory+']':''; let action; if(a.launchAction==='workflow')action=' -> /workflow'; else if(a.launchAction==='prompt'&&hasText(a.launchPrompt))action=' -> prompt: '+JSON.stringify(a.launchPrompt); else if(pf.isDefault&&a.name==='claude')action=' (intercepts bare claude launch)'; else action=' -> default launch'; console.log(' '+a.name+action+dirNote); } if(pf.disableDefaultAlias)console.log(' (default claude interception disabled)'); }
if(hasText(pf.launchPrompt)){section('Launch prompt (fires on launch without alias)');console.log(' '+pf.launchPrompt);}
const cmds=[]; if(hasText(pf.workflow))cmds.push('/workflow'); for(const w of pf.workflows||[]){if(w&&hasText(w.name)&&hasText(w.body))cmds.push('/workflow-'+w.name+(w.directory?' [cwd '+w.directory+']':''))} if(hasText(pf.tools))cmds.push('/tools'); if(hasText(pf.intro))cmds.push('/intro'); if(cmds.length){section('Profile-scoped slash commands ('+cmds.length+')');for(const c of cmds)console.log(' '+c)}
section('Plugins ('+pf.plugins.length+')'); if(pf.plugins.length===0)console.log(' (none)'); for(const p of pf.plugins){ const excluded=(pf.excludedItems||{})[p]||[]; console.log(' '+p+(excluded.length?' ('+excluded.length+' item'+(excluded.length===1?'':'s')+' excluded)':'')); }
if(hasText(pf.customClaudeMd))console.log('\nCustom instructions: custom CLAUDE.md present ('+pf.customClaudeMd.length+' chars, appended to global)');
if(pf.env&&Object.keys(pf.env).length){ section('Environment ('+Object.keys(pf.env).length+')'); for(const[k,v]of Object.entries(pf.env))console.log(' '+k+'='+v); }
const mcpDis=pf.disabledMcpServers||{}; const mcpScopes=Object.keys(mcpDis); if(mcpScopes.length){ const total=mcpScopes.reduce((a,k)=>a+(mcpDis[k]||[]).length,0); section('Disabled MCP servers ('+total+' across '+mcpScopes.length+' scope'+(mcpScopes.length===1?'':'s')+')'); for(const k of mcpScopes){ const label=k==='user'?'(user-scoped)':k; console.log(' '+label+': '+(mcpDis[k]||[]).join(', ')); } }
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 115 lines · 33 tokens per session scan A 40d1952eca39
profile-status is a skill published in the GitHub repository Mduffy37/claudeworks (14 stars, last pushed 5mo ago), licensed MIT. It adds 33 tokens to every session and 1,486 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
profile-status compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| profile-statusMduffy37/claudeworks | Skill | 14 | 5mo ago | MIT | A | 33 | Claude Code, Codex |
| microservices-architecturetravisjneuman/.claude | Skill | 107 | yesterday | MIT | A | 30 | Claude Code, Codex |
| accessibility-a11ytravisjneuman/.claude | Skill | 107 | yesterday | MIT | A | 26 | Claude Code, Codex |
| ai-ml-developmenttravisjneuman/.claude | Skill | 107 | yesterday | MIT | A | 43 | Claude Code, Codex |
| android-developmenttravisjneuman/.claude | Skill | 107 | yesterday | MIT | A | 33 | Claude Code, Codex |
| audio-productiontravisjneuman/.claude | Skill | 107 | yesterday | MIT | A | 33 | Claude Code, Codex |
| authentication-patternstravisjneuman/.claude | Skill | 107 | yesterday | MIT | A | 28 | Claude Code, Codex |