search-lossless-corpus — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited search-lossless-corpus (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.
The Lossless Group keeps a living corpus of its own decisions, shipped work, prior sessions, and tool-failure history in a local Chroma database wired into Claude Code via the chroma MCP server. Most questions a user asks about prior work can be answered from this corpus rather than training data. Don't paraphrase from training data when the corpus could answer.
This skill is the discipline that makes the corpus load-bearing. Without it, Chroma sits there full of high-signal records that nobody queries. With it, every "what did we decide about X" question becomes grounded recall — with citations the user can verify in seconds.
Trigger when the user's question takes any of these shapes:
Trigger also when the user pastes a question that touches Lossless conventions (changelog format, context-v structure, branch-tier model) — the skill canon may have moved since your training cutoff; the corpus reflects current truth.
The MCP server exposes them via tools named mcp__chroma__chroma_query_documents, mcp__chroma__chroma_list_collections, mcp__chroma__chroma_get_documents, etc. Each collection is keyed to a different question shape:
| Collection | Granularity | Best for | Key metadata fields |
|---|---|---|---|
context-vigilance-corpus | Section-level chunks of context-v/ files | Architecture, specs, plans, conventions, "what do we believe about X" | source_repo_slug, source_path, kind, chunk_heading, fm_title, fm_status, fm_tags |
lossless-changelog | Whole changelog entries | "What shipped about X and when", cross-repo | source_repo_slug, source_path, fm_date, fm_title, fm_lede, fm_tags |
claude-code-sessions | One document per message turn | "What did we decide about X", resume context | session_id, project_path, turn_role, timestamp, git_branch |
claude-code-tool-traces | One document per tool invocation | "When did X tool fail and how did we recover" | tool_name, is_error, session_id, timestamp, git_branch |
All four live in the same Chroma PersistentClient at /Users/mpstaton/code/lossless-monorepo/ai-labs/context-vigilance-kit/.chroma/. They are populated by the kit's ingest-all.sh script. You don't ingest from inside this skill. That work belongs to context-vigilance-kit.
When a triggering question arrives, run this loop. Cap at 5 chroma queries total per question — if the corpus doesn't have the answer in five tries, it doesn't have it; say so explicitly.
Read the user's question and break it into 1-3 sub-queries. Each sub-query should target the one collection most likely to hold its answer, not all four. Most questions hit one collection. A few hit two (e.g., "what did we decide about X and when did we ship it" → sessions + changelog).
Avoid the temptation to fan out to all four collections — it wastes the query budget and makes synthesis harder.
For each sub-query, call mcp__chroma__chroma_query_documents with:
collection_name: the picked collectionquery_texts: a natural-language phrasing of the sub-query (the embedder is semantic; keyword stuffing helps less than coherent phrasing)n_results: start with 5. If results look noisy, widen to 10 for one more try.where: a metadata filter when it makes the query precise. Examples below.Common where filters that narrow effectively:
# Only changelog entries from the ai-labs repo
{"source_repo_slug": "ai-labs"}
# Only tool errors (debugging memory)
{"is_error": True}
# A specific tool's failures
{"$and": [{"tool_name": "Bash"}, {"is_error": True}]}
# Only sessions from a particular project
{"project_path": "/Users/mpstaton/code/lossless-monorepo/ai-labs"}
# Only context-v files in a specific kind
{"kind": "spec"}Chroma supports $and, $or, $in, $nin, $gt, $lt, $eq, $ne operators in where. See [[chroma-local]] for the full operator reference.
Read the top results returned. Ask:
ingested_at and frontmatter dates. If a result references a renamed file or removed convention, prefer to verify against the current code rather than recommending from the record. (See "When the memory lies" below.)Combine results into one answer. The user wants the answer, not a search report. Do not dump raw chunks; summarize. But always cite, every claim, with:
source_path or source_repo_slug + source_relative_pathtimestamp or fm_date if availablefile_path:line_number for code/markdown, session_id for prior sessionsCitation template:
"We decided to usePersistentClientfor v0 ([ai-labs]context-v/explorations/ChromaDB-as-Context-Improvement-Across-Everything-Everyone.md, 2026-05-07). The reasoning was that local PersistentClient survives the four deployment shapes without rewriting the API surface, and ladder-up is decided by collaborator joining, splash live-query, or session-transcript volume — none of which apply yet."
The point of citing is that the user can independently verify, course-correct your reading, or surface staleness. A grounded answer without citations is half-grounded.
The shapes that come up most often:
"What did we decide about X." → query claude-code-sessions with the topic. Filter where={"turn_role": "assistant"} if the user wants the answer shape; leave unfiltered if they want the discussion shape.
"When did we ship X." → query lossless-changelog. Cross-repo by default; add where={"source_repo_slug": "<repo>"} only when the user specifies a repo.
"How did we fix the X failure last time." → query claude-code-tool-traces with where={"is_error": True} first to find the failure, then pivot to claude-code-sessions with the matching session_id to find the recovery turns. This is the 2-hop pattern.
"What's our convention for X." → query context-vigilance-corpus. The chunked-by-heading shape means a single chunk usually contains the convention statement plus its rationale.
"Has this been discussed before." → query claude-code-sessions broadly. If you find prior discussion, summarize the conclusion and ask whether the user wants to continue from there or start fresh.
Every result carries metadata that points back to where the full context lives. Use it:
context-vigilance-corpus hit → open the source_path to read the full doc.lossless-changelog hit → open the entry's source_path; check git log if the entry references a commit.claude-code-sessions hit → if the user wants the full conversation, they can claude --resume <session_id> to re-enter it.claude-code-tool-traces hit → the session_id + timestamp locates the surrounding conversation; the trace's input and output fields are the failure itself.The skill is for grounding answers in prior work. It's the wrong move when:
Records are point-in-time snapshots. A spec from March that named file foo.md may have been renamed; a changelog entry that announced flag --bar may have shipped with --baz. Before recommending an action that depends on a corpus result existing today:
ls / Read on it)."The corpus says X exists" is not the same as "X exists now." Recall is a starting point, not a citation.
all-MiniLM-L6-v2 embedder usually mean "no real match." Don't manufacture certainty from a soft hit.git diff, not Chroma.where-operator reference). Loaded automatically when you're writing Chroma code; complementary to this skill.context-vigilance-corpus collection indexes. The shape and rationale of context-v/.lossless-changelog collection indexes. The shape and rationale of <repo>/changelog/.source_repo_slug taxonomy you'll see in metadata across all collections.lost-in-public/up-and-running/) — the narrative of how the corpus came to be; useful when the user asks "why does this exist."When the user asks something prior work might know, run the loop: decompose into 1-3 sub-queries, hit the right collection, evaluate, synthesize with citations. Cap at five queries. Pivot back to source files when the user wants depth. Don't paraphrase training-data when the corpus is right there.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.