protext
IMUR/protextDynamic context management for AI agents. Invoke /protext at session
SKILL.md
name: protext description: Dynamic context management for AI agents. Invoke /protext at session start to load token-efficient project orientation. Use when (1) Starting a session and need quick orientation, (2) Handing off between sessions, (3) Managing context for multi-scope projects (dev/ops/security), (4) Linking related projects, (5) Reducing token usage while maintaining awareness. Primary command is /protext to load context. Other commands include protext init, status, scope, handoff, extract, link.
Protext: Dynamic Context Management
Protext provides a three-layer context hierarchy for token-efficient AI agent orientation.
Core Concept
PROTEXT.md (Layer 0) → .protext/index.yaml (Layer 1) → Deep Context (Layer 2)
~500 tokens Signposts only Full docs/memory
Always loaded On-demand hints Explicit extraction
Separation of Concerns:
- Behavior file = Agent behavior (how to act) — stable, rarely changes
CLAUDE.md(Claude Code) ·GEMINI.md(Gemini CLI) ·AGENTS.md(Codex/OpenCode)
PROTEXT.md= Project state (what's happening) — dynamic, session-aware
File Structure
project-root/
├── PROTEXT.md # Layer 0: Orientation (~500 tokens)
├── CLAUDE.md / GEMINI.md / AGENTS.md # Existing: Behavior instructions (platform-specific)
└── .protext/
├── index.yaml # Layer 1: Extraction signposts
├── handoff.md # Session continuity
├── scopes/
│ ├── ops.md # Operations context
│ ├── dev.md # Development context
│ └── security.md # Security context
└── config.yaml # Protext settings
PROTEXT.md Format
# Protext: [Project Name]
> Generated: YYYY-MM-DD | Scope: [active-scope] | Tokens: ~XXX
## Identity
[1-2 sentences: What is this project/system?]
## Current State
Active: [current work] | Blocked: [blockers] | Recent: [last completed]
## Hot Context
- [Critical point 1]
- [Critical point 2]
- [Critical point 3]
## Scope Signals
- `@ops` → .protext/scopes/ops.md
- `@security` → .protext/scopes/security.md
- `@deep:[name]` → Extract from index
## Links
- `[path]` → [rel-type] | [note]
## Handoff
Last: [summary] | Next: [suggested] | Caution: [warnings]
Commands
/protext (Primary - Session Start)
Load project orientation. This is the main entry point - invoke at session start.
/protext # Load PROTEXT.md + active scope + handoff status
/protext @security # Load with security scope
/protext --full # Include available extractions list
What it does:
- Reads and displays PROTEXT.md (orientation layer)
- Shows handoff status (FRESH/AGING/STALE)
- Loads active scope context
- Lists available deep extractions (with
--full)
Cross-platform: Works as slash command on Claude Code, or natural language on other platforms:
- "Load protext"
- "Show me the project context"
- "What's the current state?"
If no PROTEXT.md exists: Inform the user and offer to run protext init to bootstrap one. Do not fail silently.
protext init
Initialize protext in a project. Reads existing CLAUDE.md to bootstrap.
# Standard mode
"Initialize protext for this project"
"Set up protext here"
# Parent mode (aggregates children)
"protext init --parent"
Creates: PROTEXT.md, .protext/ directory with full structure.
Parent mode: Scans for child .protext/ directories, aggregates their status into ## Child Projects section. One-level hierarchy only.
protext status
Display current protext state.
"Show protext status"
"What's the current context state?"
Shows: Tier, active scope, handoff age, token budget, available extractions.
protext scope [name]
Switch active scope context.
"Switch to ops scope"
"Focus on security context"
"@security" # Shorthand
protext handoff
Capture or display session handoff. User-initiated only — no auto-capture, no TTL enforcement.
"Capture handoff: stopped mid-refactor, next step is testing"
"What was the last handoff?"
Handoff is an optional scratchpad. Only created when user explicitly captures.
protext extract [name]
Pull deep context from index.
"Extract network context"
"@deep:services" # Shorthand
Agent receives extraction suggestion; confirm to load.
protext link [path]
Add a cross-project link. Guided flow — agent asks for relationship type and note.
"Link this project to ../skills-validator"
"protext link ../homelab"
"What projects are linked?"
Relationship types with spatial validation:
child— Subdirectory (./name) — aggregates statusparent— Ancestor (../) — no aggregationsibling— Adjacent (../name) — no aggregationpeer— Any path (relative preferred) — no aggregation
Path preference: Use relative paths (../sibling, ./child) wherever possible — they are portable across nodes and OS mount points. Absolute paths may break on machines with different prefixes (e.g., /mnt/ops on Linux vs /Volumes/ops on macOS).
Validates path patterns with regex enforcement (ERROR if spatial rules violated). Max 5 lateral links. See Spatial Validation Rules in references/commands.md for pattern specs, validation flow, and edge cases.
protext refresh --children
Re-aggregate child status in parent protext. User-initiated only — no auto-refresh.
"protext refresh --children"
"Update children status"
Scans child .protext/ directories, extracts status from markers (or headings fallback), updates parent ## Child Projects section.
Parent Protext
Meta-projects that aggregate multiple child protexts. Created with protext init --parent.
Key features:
## Child Projectssection lists all children with status (active/idle/stale)- Child status based on PROTEXT.md modification time (< 7 days = active)
- No extraction index (children have their own)
protext refresh --childrenre-aggregates (explicit user command only)- One-level hierarchy: parent → children only
Marker extraction: Parent uses <!-- marker:identity -->, <!-- marker:state --> from children. Falls back to heading-based parsing if markers absent (backward compatible).
Zero auto-execution: Parent never auto-refreshes on load. Always explicit.
Extraction Modes
Configure in .protext/config.yaml:
extraction_mode: suggest # suggest | auto | confirm
token_budget: 2000 # Max extraction tokens per session
- suggest (default): Agent sees "context available: X" but doesn't auto-load
- auto: Keyword triggers load (opt-in, risky for token budget)
- confirm: Agent proposes extraction, user must approve
Index Schema
.protext/index.yaml:
extractions:
network:
source: docs/NETWORK.md
triggers: [dns, ip, tailscale, mesh, routing]
summary: "IPs, DNS config, mesh nodes"
tokens: ~600
services:
source: docs/SERVICES.md
triggers: [docker, container, service, port]
summary: "Docker services, ports, domains"
tokens: ~800
secrets:
source: docs/SECRETS.md
triggers: [secret, credential, infisical, auth]
summary: "Secrets management, auth patterns"
tokens: ~400
Limits: Max 20 extractions per project.
Scopes
Scopes provide domain-specific orientation. Max 5 per project.
Default scopes:
ops— Infrastructure, deployment, monitoringdev— Development workflow, code patternssecurity— Auth, secrets, vulnerabilitiesproject— Project-specific context (custom)
Scope file format (.protext/scopes/ops.md):
# Scope: Operations
## Focus
Infrastructure management, service health, deployment.
## Key Resources
- [Service config paths]
- [Key infrastructure locations]
## Current Priorities
1. [Priority 1]
2. [Priority 2]
## Cautions
- [Ops-specific warnings]
Handoff Protocol
User-initiated only — handoff is an optional scratchpad for session continuity.
.protext/handoff.md format:
# Session Handoff
> Updated: YYYY-MM-DDTHH:MM
## Last Session
**Completed:**
- [Task 1]
- [Task 2]
**In Progress:**
- [Task] (stopped at: [point])
**Deferred:**
- [Task] (blocked by: [reason])
## Cautions
- [Warning 1]
- [Warning 2]
## Agent Notes
[Observations that might help next session]
Behavior:
- No auto-capture at session end
- No TTL warnings based on age
- Created only when user runs
protext handoff capture - Agents do not automatically update handoff
Progressive Tiers
Beginner
- PROTEXT.md only
- No scopes, extractions, or handoff
- Direct editing
Intermediate
- PROTEXT.md + handoff.md
- Session continuity
- No extraction index
Advanced (Default)
- Full feature set
- Scopes, extractions, token budgets
- Config-driven behavior
Constraints
| Limit | Value | Rationale |
|---|---|---|
| Max scopes | 5 | Prevent fragmentation |
| Max lateral links | 5 | Keep peer/sibling/reference list concise |
| Max child links | Unlimited | Structure dictates count |
| Max extractions | 20 | Index stays scannable |
| Token budget | 2000 | Default per-session limit |
| Handoff TTL | 48h | Legacy, no longer enforced |
| PROTEXT.md size | ~500 tokens | Quick orientation |
| Hierarchy depth | 1 level | Parent → children only |
Integration Patterns
With Behavior Files
The platform behavior file (CLAUDE.md, GEMINI.md, AGENTS.md) provides behavioral instructions (stable):
# CLAUDE.md (or GEMINI.md / AGENTS.md)
## How to Work
- Validate Caddy config before reloading
- Never hardcode secrets
PROTEXT.md provides state orientation (dynamic):
# PROTEXT.md
## Current State
Active: Caddy refactor | Recent: Pi-hole v6 migration
With Memory Systems
Protext complements but doesn't replace:
- memory/ — Long-term learnings, patterns
- PROTEXT.md — Current session orientation
Scripts
Requires Python 3.8+. No external packages needed (yaml parsed with fallback).
scripts/init_protext.py— Bootstrap protext in a projectscripts/protext_status.py— Display current state
Reference Files
Consult these only when deeper detail is needed:
references/formats.md— Read when creating or editing PROTEXT.md, index.yaml, handoff.md, or scope files. Contains complete templates and field guidelines.references/commands.md— Read when implementing command handling or troubleshooting. Contains full syntax, flags, error messages, and natural language alternatives.