hooks — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hooks (Hook) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Persistent, searchable project knowledge that survives across Claude Code sessions.
Website: tenax.wiki
In Claude Code, run:
/plugin marketplace add Rab-crypto/tenax
/plugin install tenax@tenax-marketplaceThen restart Claude Code or start a new session.
If you prefer a one-liner:
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/Rab-crypto/tenax/master/install.sh | bashWindows (PowerShell):
irm https://raw.githubusercontent.com/Rab-crypto/tenax/master/install.ps1 | iexClaude Code sessions lose accumulated project knowledge when sessions end or when auto-compact triggers. This plugin solves that by:
.claude/tenax/)Every session automatically captures:
Before proposing architecture, libraries, or patterns, Claude automatically searches Tenax:
I found a previous decision on this topic:
**Session 005:** Decided to use PostgreSQL
**Rationale:** Team expertise, ACID compliance needs
Would you like to continue with this approach?Find related knowledge using natural language:
/tenax:search "authentication approach"Returns ranked results across decisions, patterns, tasks, insights, and sessions.
Every load operation shows exact token counts:
Loading session 003: 5,420 tokens (6.8% of budget)| Command | Description |
|---|---|
/tenax:status | Quick summary and stats |
/tenax:list | List all sessions |
/tenax:search <query> | Semantic search |
/tenax:load-session <ID> | Load specific session |
/tenax:load-sessions [IDs] | Load multiple sessions (defaults to last 3, use --recent N for N recent) |
/tenax:record | Manual recording |
/tenax:settings | Configure behavior |
/tenax:forget | Remove entries |
/tenax:export | Export to markdown/json/obsidian |
/tenax:backup | Create backup |
/tenax:restore | Restore from backup |
/tenax:stats | Detailed statistics |
/tenax:tag | Tag sessions |
Data is stored per-project in .claude/tenax/:
.claude/tenax/
├── config.json # User settings
├── index.json # Accumulated knowledge index
├── embeddings.db # Vector store (sqlite-vec)
└── sessions/
├── 001.json # Processed session
├── 001.jsonl # Raw transcript
└── ...Edit settings via /tenax:settings or directly in config.json:
| Setting | Default | Description |
|---|---|---|
tokenBudget | 80000 | Max tokens for session loads |
autoLoad | "summary" | What to load at start |
autoCheckBeforeDecisions | true | Check history before proposing |
autoRecordDecisions | true | Auto-record confirmed decisions |
showCostEstimates | false | Show cost with token counts |
maxSessionsStored | 100 | Max sessions to retain |
embeddingModel | "Xenova/all-MiniLM-L6-v2" | Local embedding model |
none - Don't load anything at session startsummary - Load quick summary only (~500 tokens)recent-3 - Load 3 most recent sessionsrecent-5 - Load 5 most recent sessionsprompt - Ask user what to load| Component | Tokens | When Loaded |
|---|---|---|
| Skill description | ~50 | Always (startup) |
| SKILL.md | ~800 | First trigger |
| Search result | ~200-500 | Each search |
| Quick summary | ~500 | Auto-load or status |
| Full session | ~5k-20k | Explicit load only |
Human-readable files with decisions, patterns, tasks, insights.
Raw data for programmatic access or backup.
Vault-ready structure with YAML frontmatter and tags.
Markdown optimized for Notion import.
All scripts run outside the context window. Only their output enters context.
skills/tenax/scripts/
├── search.ts # Semantic search
├── get-summary.ts # Quick summary
├── get-session.ts # Load single session
├── record-decision.ts # Record decision
├── capture-session.ts # Session end handler
└── ...Automatically capture data on events:
PostToolUse (Edit/Write) - Track file changesSessionEnd - Process and store sessionLocal embeddings using Transformers.js:
Xenova/all-MiniLM-L6-v2 (384 dimensions)Run any command to auto-initialize, or:
bun skills/tenax/scripts/init.tsFirst run downloads ~23MB model. Subsequent runs use cache at ~/.cache/huggingface/.
The plugin falls back to JSON-based cosine similarity if sqlite-vec fails. Performance may be slower for large datasets.
Check that hooks are configured in your settings. The SessionEnd hook triggers session capture.
/tenax:list to see available sessionstenax/
├── .claude-plugin/plugin.json # Plugin manifest
├── skills/tenax/
│ ├── SKILL.md # Skill definition
│ ├── scripts/ # TypeScript scripts
│ ├── context/ # Context documents
│ └── lib/ # Shared utilities
├── commands/ # Slash commands
├── hooks/hooks.json # Hook configuration
├── package.json
└── tsconfig.jsonClaude Code v2.1.0+ supports skill hot-reload. For instant updates during development:
# Create symlink to your dev directory
# macOS/Linux:
ln -s /path/to/tenax/skills/tenax ~/.claude/skills/tenax
# Windows (run as admin):
mklink /D "%USERPROFILE%\.claude\skills\tenax" "C:\path\to\tenax\skills\tenax"Skills in ~/.claude/skills/ are immediately available without restarting Claude Code.
For smoother development, add these wildcard permissions to your Claude Code settings:
{
"permissions": {
"allow": [
"Bash(npx tsx:*)",
"Bash(npm install:*)",
"Bash(bun:*)"
]
}
}This avoids repeated permission prompts for Tenax scripts.
npm run typecheck# Test locally
claude --plugin-dir .
# Have a conversation with decisions
# End session and start new one
# Verify /tenax:status shows data
# Test /tenax:searchMIT
Contributions welcome! Please read the contributing guidelines first.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.