Skip to content
Back to skills

2461 Audit 256f139f

ASecurity

Audit Namshub installation — show hooks, skills, permissions, data storage, and security posture

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
ai-agentspythonbashdebuggingsecurity

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 2461-audit_256f139f --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2461 Audit 256f139f?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 2461 Audit 256f139f
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2461-audit-256f139f/badge)](https://www.skillsdirectory.com/skills/tools-only-2461-audit-256f139f)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
description: Audit Namshub installation — show hooks, skills, permissions, data storage, and security posture
---

# /audit

Security and configuration audit for the Namshub toolkit. Shows exactly what's installed, what permissions are granted, and where data is stored.

## Purpose

Before activating autonomous mode, users should understand what Namshub does. This command provides full transparency.

## Execution

Run a comprehensive audit of the current Namshub installation:

```bash
python3 -c "
import json, os, sys
from pathlib import Path

home = Path.home()
claude_dir = home / '.claude'

print('=' * 60)
print('NAMSHUB AUDIT REPORT')
print('=' * 60)

# 1. Hooks
print('\n## Installed Hooks\n')
settings_path = claude_dir / 'settings.json'
if settings_path.exists():
    settings = json.loads(settings_path.read_text())
    hooks = settings.get('hooks', {})
    for event, hook_list in hooks.items():
        if hook_list:
            print(f'  {event}:')
            for entry in hook_list:
                for h in entry.get('hooks', []):
                    cmd = h.get('command', h.get('prompt', ''))[:80]
                    htype = h.get('type', 'command')
                    timeout = h.get('timeout', 'none')
                    matcher = entry.get('matcher', '*')
                    print(f'    [{htype}] matcher={matcher} timeout={timeout}s')
                    print(f'           {cmd}')
else:
    print('  No settings.json found')

# 2. Skills
print('\n## Installed Skills\n')
skills_dir = claude_dir / 'skills'
if skills_dir.exists():
    for skill_dir in sorted(skills_dir.iterdir()):
        if skill_dir.is_dir():
            skill_md = skill_dir / 'SKILL.md'
            if skill_md.exists():
                # Read first line after frontmatter for description
                lines = skill_md.read_text().split('\n')
                name = skill_dir.name
                print(f'  /{name}')
    print(f'\n  Total: {sum(1 for d in skills_dir.iterdir() if d.is_dir() and (d / \"SKILL.md\").exists())} skills')
else:
    print('  No skills directory found')

# 3. Commands
print('\n## Installed Commands\n')
commands_dir = claude_dir / 'commands'
if commands_dir.exists():
    for cmd_file in sorted(commands_dir.glob('*.md')):
        print(f'  /{cmd_file.stem}')
    print(f'\n  Total: {sum(1 for _ in commands_dir.glob(\"*.md\"))} commands')
else:
    print('  No commands directory found')

# 4. Permissions
print('\n## Permissions & Environment\n')
if settings_path.exists():
    settings = json.loads(settings_path.read_text())
    perms = settings.get('permissions', {})
    env = settings.get('env', {})
    print(f'  Default permission mode: {perms.get(\"defaultMode\", \"default\")}')
    print(f'  Agent teams enabled: {env.get(\"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\", \"0\")}')
    print(f'  Max output tokens: {env.get(\"CLAUDE_CODE_MAX_OUTPUT_TOKENS\", \"default\")}')
    print(f'  Always thinking: {settings.get(\"alwaysThinkingEnabled\", False)}')
else:
    print('  No settings.json found')

# 5. Data Storage
print('\n## Data Storage Locations\n')
memory_dir = home / '.claude' / 'memory'
if memory_dir.exists():
    project_count = sum(1 for d in memory_dir.iterdir() if d.is_dir())
    total_events = 0
    for proj in memory_dir.iterdir():
        events_dir = proj / 'events'
        if events_dir.exists():
            total_events += sum(1 for f in events_dir.glob('evt_*.json'))
    print(f'  Memory store: {memory_dir}')
    print(f'    Projects tracked: {project_count}')
    print(f'    Total events: {total_events}')
else:
    print(f'  Memory store: not initialized')

if memory_dir.exists():
    total_assertions = 0
    for proj in memory_dir.iterdir():
        ap = proj / 'core-assertions.jsonl'
        if ap.exists():
            total_assertions += sum(1 for line in ap.read_text().strip().split(chr(10)) if line.strip())
    if total_assertions:
        print(f'  Core assertions: {total_assertions} entries')

state_files = [
    '.claude/autonomous-state.json',
    '.claude/completion-checkpoint.json',
    '.claude/tool-usage-log.json',
    '.claude/session-snapshot.json',
]
print(f'\n  Session state files (project-local):')
for sf in state_files:
    exists = Path(sf).exists()
    print(f'    {sf}: {\"exists\" if exists else \"not present\"}')

# 6. Security Posture
print('\n## Security Posture\n')
guard_path = claude_dir / 'hooks' / 'cloud-command-guard.sh'
print(f'  Cloud command guard: {\"active\" if guard_path.exists() else \"not installed\"}')

state_guard = claude_dir / 'hooks' / 'state-file-guard.py'
print(f'  State file guard: {\"active\" if state_guard.exists() else \"not installed\"}')

deploy_guard = claude_dir / 'hooks' / 'deploy-enforcer.py'
print(f'  Deploy enforcer: {\"active\" if deploy_guard.exists() else \"not installed\"}')

stop_val = claude_dir / 'hooks' / 'stop-validator.py'
print(f'  Stop validator: {\"active\" if stop_val.exists() else \"not installed\"}')

print('\n' + '=' * 60)
print('Audit complete. Review the above before enabling autonomous mode.')
print('=' * 60)
"
```

## Output Sections

| Section | What It Shows |
|---------|---------------|
| **Installed Hooks** | Every hook registered in settings.json with event, matcher, type, and timeout |
| **Installed Skills** | All skills available via `/skillname` |
| **Installed Commands** | All slash commands available |
| **Permissions** | Default permission mode, agent teams, output limits |
| **Data Storage** | Memory event counts, project tracking, session state files |
| **Security Posture** | Which safety guards are active (cloud guard, state guard, deploy enforcer, stop validator) |

## When to Use

- **After installation**: Verify everything installed correctly
- **Before autonomous mode**: Understand what hooks will fire and what data is stored
- **Periodic check**: Ensure no unexpected changes to configuration
- **Debugging**: Verify hooks are registered and files exist

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…