From signet-first
Memory-first protocol for AI coding agents. Search memory before acting, store durable conclusions, maintain session continuity. Uses Signet when available, degrades to native memory systems.
How this skill is triggered — by the user, by Claude, or both
Slash command
/signet-first:signet-firstThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
If `signet_memory_search` is available, use Signet as the memory backend. Otherwise, fall back to the platform's native memory system. The rules below apply regardless of which backend is active.
If signet_memory_search is available, use Signet as the memory backend. Otherwise, fall back to the platform's native memory system. The rules below apply regardless of which backend is active.
Preferred tool names (Signet): signet_memory_search, signet_memory_store, signet_memory_modify
Fallback by platform:
MEMORY.md + auto memoryAGENTS.md + instruction filesEach rule below applies unless a skip clause says otherwise. Skip clauses are exhaustive — if your situation is not listed, the rule applies.
Before executing any build, test, lint, deploy, or project-specific command, search memory for the verified procedure and use the stored version exactly.
Skip for:
Search for recent session summaries and unfinished work before touching files or running commands.
Before searching explicitly, check whether memory context is already available in your session (injected system prompt, instruction files, or prior tool output). If the available context already contains recent session summaries and project-relevant notes, an explicit search is redundant — use what you have.
Search explicitly when:
type: daily-log scoped to the current project for the last unfinished work item.Skip for:
When you have completed an investigation, decision, debugging session, or discovery and are ready to respond to the user, store the synthesized conclusion in memory first — before writing the user-facing answer.
This is a prerequisite, not an afterthought. The sequence is:
signet_memory_store (or native equivalent) with the conclusion.If you find yourself writing a response that contains a novel conclusion, finding, or decision and you have not yet stored it — stop, store it, then continue writing.
Store conclusions, not transcripts.
When the conclusion is a user-stated hard constraint or critical procedure, set pinned: true alongside importance: 1.0 and tag critical (see Pinning below).
Skip for:
Store a daily-log memory that enables the next session to resume without re-reading the full transcript. It must contain:
decision memories per Rule 3).This is task-oriented synthesis — what matters for the next session, not a transcript of what happened.
Skip for:
Before every memory store call, search for existing memories on the same topic. If found and still accurate, do not store. If outdated, update the existing entry (prefer signet_memory_modify).
No skip clause. Always applies.
When memory search returns no relevant results and you fall back to project files, state in one sentence:
Memory returned no results for "<query>". Checking project files.
Memory gaps are normal — new projects, new topics, and early sessions will always have them. Do not apologize. Do not retry the same query with minor variations hoping for different results. Do not treat a missing memory as a system failure or a reason to distrust memory on subsequent searches.
After retrieving from files, store the result so the gap fills over time.
Skip for:
Code is the artifact. Memory is commentary on the artifact — what someone understood at the moment they stored it. When they disagree, the artifact wins.
Trust what you see now — then update or remove stale memory.
Exception for decisions and rationale: If the conflicting memory records a decision or rationale type, flag the conflict to the user before updating. The code may have diverged intentionally or accidentally — the decision record should not be silently overwritten.
No skip clause. Always applies.
Use procedural for commands, decision for choices, preference for user habits, rationale for the "why" behind decisions. Do not default everything to fact. See the Memory Types reference table below.
No skip clause. Always applies.
Applies to Rules 1, 2, and 5.
signet_memory_search(query, type, limit) or native recall.These principles guide behavior in ambiguous cases where no rule directly applies.
| Type | When to Use | Example |
|---|---|---|
procedural | Commands, workflows, build/test/deploy procedures | vendor/bin/phpunit --exclude-group=ExternalServices --no-coverage |
fact | Objective truth about code, architecture, config | "Signet DB uses SQLite with FTS5 + sqlite-vec in WAL mode" |
decision | A choice that was made (by user or agent) | "Chose read-through caching over write-through for DaoCacheTrait" |
preference | User preference, style choice, workflow habit | "User prefers conventional-commit with emoji prefix" |
rationale | The WHY behind a decision | "Picked WAL mode because daemon needs concurrent reads during writes" |
discovery | New finding about codebase, tool, or library | "FTS5 keyword search covers all skill queries without vector embeddings" |
episodic | Session-specific event worth remembering | "Docker validation of install.sh passed all checks on Ubuntu 24.04" |
semantic | General knowledge synthesized from multiple sources | "OSS agent memory systems lack frequency-based auto-promotion" |
daily-log | End-of-session summary of what was accomplished | "Completed cross-platform setup recipe, 5 commits on signet-first" |
system | Internal agent configuration or meta-knowledge | "This project uses PHPUnit 12.4 with ExternalServices group excluded" |
Use the most specific type that fits. Default to fact only when nothing else applies.
Memories decay at 0.95^days by default. Some knowledge must never decay:
For these, set pinned: true when storing via signet_memory_store or signet_memory_modify. Pinned memories are exempt from decay and score effectiveScore = 1.0 regardless of age. Setting importance: 1.0 and tag critical alongside pinning is still recommended for search ranking and semantic clarity.
Do not pin everything. Only pin knowledge that is both critical and stable (unlikely to change). Discoveries, analysis results, and session events should not be pinned — let them decay naturally.
Use scope to prevent cross-project contamination in search results:
scope: "matecat" — Matecat PHP project knowledgescope: "signet-first" — signet-first skill/repo knowledgescope: null (or omit) — global knowledge applicable everywhereWhen searching, prefer scoped queries when you know which project you are working in.
IN scope: Session knowledge — analysis results, decisions, conclusions, discoveries, user preferences, codebase patterns, tool evaluations.
OUT of scope: Identity files (AGENTS.md, SOUL.md, USER.md), project documentation, the Signet daemon's automatic extraction pipeline.
npx claudepluginhub ostico/signet-first --plugin signet-firstProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.