Persistent, searchable project knowledge that survives across Claude Code sessions.
SaferSkills independently audited tenax (Agent Skill) 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.
You MUST follow these steps. This is not optional.
npx tsx "${CLAUDE_PLUGIN_ROOT}/skills/tenax/scripts/get-summary.ts"Do this FIRST, before responding to any user request.
⛔ DO NOT skip these steps. ALWAYS check before acting.
#### Step 1: Check Conversation Context (Current Session)
Before executing ANY task, check your conversation history:
#### Step 2: Search Tenax (Previous Sessions)
npx tsx "${CLAUDE_PLUGIN_ROOT}/skills/tenax/scripts/search.ts" "<relevant-topic>"Check search results for:
This applies to:
WRONG: User says "upload frontend" → you immediately upload RIGHT: User says "upload frontend" → check context (did I just do this?) → search "frontend upload" → note recency → then act
WRONG: User says "let's use SQLite" → you implement SQLite RIGHT: User says "let's use SQLite" → search "database" → find prior PostgreSQL decision → "Session 005 decided PostgreSQL. Switch to SQLite, or keep PostgreSQL?"
If search returns no results, briefly note: "Searched for X - no prior decisions found."
DO NOT default to only [D]. Each response should include the appropriate markers:
| Use This | When You... | Example |
|---|---|---|
[D] topic: | Make a choice or select something | [D] database: Using PostgreSQL for relational data |
[P] name: | Establish a convention or pattern | [P] error-handling: Always wrap async in try-catch |
[T] | Identify work that remains | [T] Add input validation to the form |
[I] | Discover something useful | [I] The API rate limits are per-user, not per-app |
Why this matters: Without search, you may contradict prior decisions. Without ALL markers, patterns and insights are lost.
⛔ Do not send your response until you've confirmed:
If you skipped any step, go back and complete it now.
When user asks: "Should we use SQLite or PostgreSQL?"
Step 1: Search first
npx tsx "${CLAUDE_PLUGIN_ROOT}/skills/tenax/scripts/search.ts" "database"Step 2: Respond with marker INLINE
[D] database: I recommend SQLite for your embedded storage needs - zero config, single file, no server required. The main advantages are portability and simplicity for your use case.CRITICAL: The marker starts the sentence. Don't write your response then add a marker afterward. The marker labels the prose that follows it.
At conversation start, load project context:
npx tsx "${CLAUDE_PLUGIN_ROOT}/skills/tenax/scripts/get-summary.ts"Then acknowledge: "Loaded project memory: X sessions, Y decisions."
Use these markers to label decisions, patterns, tasks, and insights:
| Marker | Purpose | Example |
|---|---|---|
[D] topic: | Choices made | [D] database: Using SQLite for storage |
[P] name: | Conventions | [P] error-handling: Wrap async in try-catch |
[T] | Work remaining | [T] Add unit tests for auth module |
[I] | Discoveries | [I] API rate limits are per-user not per-app |
For detailed decisions, use multi-line blocks (ends at blank line):
[D] frontend-redesign: Implementing new design system with JetBrains Mono + Outfit typography, bento grid layout with asymmetric cards, and a timeline-style "How It Works" section. These changes improve visual hierarchy and modernize the aesthetic.For lists, keep the marker at the start:
[D] api-endpoints: Creating three new endpoints - /users for account management, /projects for CRUD operations, and /webhooks for event subscriptions.When search returns results:
grep -r "<keyword>" "${PROJECT_DIR}/.claude/tenax/sessions/"[D] markerSingle items:
npx tsx "${CLAUDE_PLUGIN_ROOT}/skills/tenax/scripts/record-decision.ts" -t "<topic>" -r "<rationale>" "<decision>"
npx tsx "${CLAUDE_PLUGIN_ROOT}/skills/tenax/scripts/record-pattern.ts" -n "<name>" -u "<usage>" "<description>"Batch recording (single permission):
npx tsx "${CLAUDE_PLUGIN_ROOT}/skills/tenax/cli.ts" batch --json '<json>'Batch JSON format:
{
"decisions": [{"topic": "api", "decision": "Use REST", "rationale": "Simpler"}],
"patterns": [{"name": "error-handler", "description": "Try-catch wrapper", "usage": "API routes"}],
"tasks": [{"title": "Add tests", "priority": "high"}],
"insights": [{"content": "Insight text"}]
}Every response that involves judgment should include a marker. This includes:
| Category | Examples |
|---|---|
| Technical | Database choice, API design, library selection |
| Architectural | Folder structure, patterns, conventions |
| Operational | Commit scope, what to include/exclude, verification results |
| Process | Git workflow decisions, CI/CD choices, deployment strategy |
| Configuration | Settings verified as correct, config file changes |
If you made a choice, verified something, or concluded anything - mark it inline.
WRONG (marker as afterthought):
The gitignore looks correct.
[D] gitignore: VerifiedRIGHT (marker labels the explanation):
[D] gitignore: Verified correct - properly excludes .claude/, backups, and test/ directories.
[D] commit-scope: This release (v2.1.0) includes install scripts and removes deprecated commands.
[P] retry-logic: Using exponential backoff with max 3 attempts for all API calls.
[I] The rate limiter resets per-user, not globally - discovered while debugging timeouts.❌ Treating operational tasks as "just execution" - commits, verifications, and process choices ARE decisions that should be marked.
Users can invoke these commands:
| Command | Purpose |
|---|---|
/tenax:status | View memory summary |
/tenax:search <query> | Search all knowledge |
/tenax:list | List all sessions |
/tenax:load-session <N> | Load specific session |
/tenax:load-sessions [IDs] | Load multiple sessions |
/tenax:record | Manually record decision/pattern/task |
/tenax:settings | Configure behavior |
/tenax:export | Export to markdown/json |
/tenax:backup | Create backup |
/tenax:stats | View statistics |
Sessions are captured automatically at:
Because PreCompact can trigger anytime, use markers throughout the session - not just at the end.
When session data is loaded, cite it:
Based on the decision from session 003, we're using SQLite.
Following the error-handling pattern from session 002...
Session 004 noted important subprocess handling considerations.This creates continuity across sessions.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.