monitor-binary-version-baselines
정보
이 스킬은 CLI 바이너리 내용의 버전별 종단적 기준선을 설정하고 유지합니다. API, 설정, 원격 측정 등 분류된 마커를 가중치 점수 및 임계값 기반 탐지로 분석하여 기능 수명 주기를 추적합니다. 비공개 출시되거나 제거된 기능을 모니터링하거나, 오래된 바이너리에서 알려진 정상 마커를 스캔 도구가 감지하는지 검증하는 데 사용할 수 있습니다.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/monitor-binary-version-baselinesClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
Monitor Binary Version Baselines
Vergleichbare, versionsgeschlüsselte Einträge darüber aufbauen und pflegen, welche Feature-System-Marker im Binary eines CLI-Harness erscheinen — damit Hinzufügungen, Entfernungen und dunkel ausgerollte Fähigkeiten maschinell über Releases hinweg erkannt werden können.
Wann verwenden
- Verfolgen des Lebenszyklus eines Features über mehrere Releases eines Closed-Source-CLI-Harness hinweg
- Prüfen auf dunkel ausgerollte Fähigkeiten (ausgeliefert, aber abgeschaltet) oder stillschweigend entfernte Fähigkeiten
- Verifizieren, dass ein Marker-Scanner weiterhin bekannte-gute Marker in alten Binaries findet (Regressionstest des Scanners selbst)
- Aufbau des Phase-1-Substrats, das spätere Phasen (Flag-Entdeckung, Dark-Launch-Erkennung, Wire Capture) konsumieren
- Jeder Kontext, in dem ad-hoc
grepdie Frage „ist X heute vorhanden" beantwortet, tatsächlich aber benötigt wird: „wie hat sich das aus X, Y, Z bestehende System über Versionen hinweg bewegt"
Eingaben
- Erforderlich: Eine oder mehrere installierte Binary-Versionen desselben CLI-Harness (oder extrahierte Bundles)
- Erforderlich: Eine Katalogdatei für die Markerdefinitionen (beim Erstlauf angelegt, über Versionen hinweg erweitert)
- Optional: Eine zuvor aufgezeichnete Baseline-Datei aus früheren Läufen (an Ort und Stelle erweitert, niemals umgeschrieben)
- Optional: Eine Liste von Versionen, die bekanntermaßen nie veröffentlicht wurden (ausgelassene Releases, zurückgezogene Builds)
- Optional: Eine Liste bereits verfolgter Feature-Systeme, die erweitert statt neu entdeckt werden sollen
Vorgehen
Schritt 1: Marker nach Kategorie auswählen
Strings wählen, die Rebuilds überstehen. Stabile, semantisch bedeutsame Identifikatoren nehmen — keine minifizierten Namen, die der Bundler im nächsten Release umbenennt.
Sechs empfohlene Kategorien:
- API — Endpunktpfade, Methodennamen, die in der Netzwerkoberfläche des Harness sichtbar sind
- Identity — interne Produktnamen, Codenamen, Versions-Sentinels
- Config — erkannte Schlüssel in nutzerorientierten Konfigurationsdateien
- Telemetry — Ereignisnamen, die an die Analytics-Pipeline emittiert werden
- Flag — Feature-Gate-Schlüssel, die von Gate-Prädikaten konsumiert werden
- Function — wohlbekannte String-Konstanten innerhalb spezifischer Handler (Fehlermeldungen, Log-Labels)
Vermeiden: kurze Identifikatoren, die minifiziert aussehen (z. B. _a1, bX, Zweibuchstabennamen gefolgt von Ziffern), Inline-Literale, die sich mit jeder Textüberarbeitung ändern würden, alles, was dem hauseigenen Namensschema des Bundlers entspricht.
Expected: Jeder Kandidat-Marker hat ein Kategorie-Tag und eine kurze Begründung („taucht in nutzerorientierten Docs auf", „stabil über N vorherige Releases" o. ä.). Ein typischer erster Durchlauf liefert 20–50 Marker pro System.
On failure: Verschwinden Marker über aufeinanderfolgende Minor-Versionen, hat der Katalog rebuild-volatile Strings statt stabiler Identifikatoren erfasst. Solche Einträge fallen lassen; auf längere, semantisch stärker verankerte Teilstrings ausweiten.
Schritt 2: Marker nach Feature-System gruppieren
Marker in jeweils eine Systemtabelle pro unabhängig evolvierender Fähigkeit bündeln. Ein „System" ist ein zusammenhängender Satz von Markern, deren An-/Abwesenheit sich gemeinsam bewegt, weil sie einen Feature-Lebenszyklus teilen (z. B. alle Marker, die zu einer hypothetischen Fähigkeit acme_widget_v3 gehören).
Warum Gruppierung zählt: systemweise Bewertung verhindert Kreuzkontamination. Das Fehlen der Marker eines Systems darf die Erkennung eines anderen nicht unterdrücken, und aggregierte Zählungen über nicht zusammenhängende Systeme sind aussagelos.
Form eines Arbeitskatalogs (Pseudocode):
catalog:
acme_widget_v3:
markers:
- { id: "acme_widget_v3_init", category: function, weight: 10 }
- { id: "acme.widget.v3.dialog.open", category: telemetry, weight: 5 }
- { id: "ACME_WIDGET_V3_DISABLE", category: flag, weight: 10 }
acme_other_system:
markers:
- ...
Expected: Jedes System hat seine eigene Markerliste; kein Marker erscheint in zwei Systemen. Ein neues System hinzuzufügen bedeutet, einen neuen Top-Level-Eintrag anzulegen — niemals Marker nachträglich zwischen Systemen verschieben.
On failure: Lassen sich Marker schwer einem System zuordnen (Überlappung, Mehrdeutigkeit), sind die Systemdefinitionen zu grob. System aufteilen, oder akzeptieren, dass manche Marker „geteiltes Substrat" sind, und sie von der systemweisen Bewertung ausschließen.
Schritt 3: Marker nach Signalstärke gewichten
Jedem Marker ein Gewicht zuweisen, das widerspiegelt, wie stark seine Anwesenheit allein das System bestätigt:
- 10 = allein diagnostisch — einzigartig genug, dass das Auffinden dieses Markers für sich genommen ausreicht, das Vorhandensein des Systems zu bestätigen (z. B. ein langer, systemspezifischer String, den kein anderer Codepfad emittieren würde)
- 3–5 = nur bestätigend — zu generisch, um allein zu bestätigen, trägt aber zu einer Gesamtbewertung bei (z. B. ein kurzes Telemetrie-Suffix, das der Harness über Features hinweg wiederverwendet)
Die Konvention lehren, nicht die konkreten Zahlen. Der Abstand zwischen „diagnostisch" und „bestätigend" zählt mehr als die exakt gewählten Ganzzahlen — entscheidend ist, dass die Schwellen in Schritt 5 zwischen „einem starken Signal" und „vielen schwachen Signalen" unterscheiden können.
Expected: Jeder Marker hat ein Gewicht. Die Gewichtsverteilung des Katalogs neigt zu bestätigenden Markern (3–5), mit einer geringen Anzahl allein-diagnostischer Marker (10) pro System.
On failure: Ist jeder Marker mit 10 gewichtet, verliert die Bewertung Auflösung — Teil-Präsenzbefunde werden unmöglich. Marker abstufen, die über mehrere Systeme wiederkehren oder in unverwandten Handlern erscheinen.
Schritt 4: Versionsspezifische Baselines aufzeichnen
Für jede gescannte Version sowohl vorhandene als auch abwesende Marker aufzeichnen, nach Version geschlüsselt. Beides ist Evidenz: ein abwesender Marker in Version N ist genauso informativ wie ein vorhandener, wenn Version N+1 ihn wieder einführt.
Form der Baseline:
baselines:
"1.4.0":
acme_widget_v3:
present: ["acme_widget_v3_init", "ACME_WIDGET_V3_DISABLE"]
absent: ["acme.widget.v3.dialog.open"]
score: 20
"1.5.0":
acme_widget_v3:
present: ["acme_widget_v3_init", "ACME_WIDGET_V3_DISABLE", "acme.widget.v3.dialog.open"]
absent: []
score: 25
"1.4.1":
_annotation: "never-published; skipped from upstream release timeline"
Nie veröffentlichte Versionen erhalten eine explizite Annotation statt stillschweigender Auslassung. Stillschweigend übersprungene Versionen wirken für den nächsten Leser wie Datenverlust.
Expected: Jede Version erzeugt einen Eintrag pro verfolgtem System, mit ausgefüllten present, absent und score, oder eine explizite _annotation, falls nie veröffentlicht.
On failure: Liefert ein Baseline-Scan null Marker für ein zuvor vorhandenes System, keine Entfernung unterstellen, ohne zuvor bestätigt zu haben, dass der Binary-Pfad korrekt war, strings tatsächlich Ausgabe lieferte und die Marker-IDs exakt mit dem Katalog übereinstimmen. Falsche Nullwerte korrumpieren den längsgerichteten Datensatz.
Schritt 5: Schwellen für Voll- und Teil-Erkennung festlegen
Pro System zwei Gates auf den Gesamtscore definieren:
full— Score, oberhalb dessen das System in dieser Version als vorhanden-und-aktiv giltpartial— Score, oberhalb dessen das System als ausgeliefert-aber-unvollständig gilt (einige Marker vorhanden, aber unterhalb derfull-Schwelle)
Unterhalb partial = abwesend (oder noch-nicht-vorhanden, je nach Richtung der Entwicklung).
thresholds:
acme_widget_v3:
full: 25
partial: 10
Schwellen wählen: full auf die Summe der Gewichte setzen, die eine gesunde Installation emittieren würde; partial auf einen diagnostischen Marker plus ein bestätigendes Signal. Nachjustieren, sobald Evidenz aus mehreren Versionen vorliegt.
Expected: Jeder Scan erzeugt einen beschrifteten Befund pro System: full | partial | absent. Befunde mit partial verdienen Untersuchung — sie sind die Dark-Launch- und Entfernungs-Kandidaten.
On failure: Meldet jedes System über jede Version hinweg partial, sind die Schwellen zu empfindlich (vermutlich höher gesetzt, als die Marker jemals in Summe ergeben können). Gegen eine bekannt-gute Version neu kalibrieren, in der das System nachweislich aktiv ist.
Schritt 6: Scannen mit strings -n 8
strings mit einem Mindestlängenfilter als Extraktionsprimitiv verwenden. Der Boden -n 8 filtert den meisten Lärm heraus (kurze Fragmente, Padding, Adresstabellen-Müll), ohne bedeutsame Identifikatoren zu verlieren, die fast immer länger als 8 Zeichen sind.
strings -n 8 path/to/binary > /tmp/binary-strings.txt
Dann den Katalog-Match gegen /tmp/binary-strings.txt laufen lassen (ein beliebiger zeilenorientierter Matcher: grep -F -f markers.txt, ripgrep oder ein kleines Skript).
Vorbehalte:
- Niedrigere Mindestwerte (
-n 4,-n 6) überfluten die Ausgabe mit Binärmüll und Minified-Symbol-Lärm; die Unterscheidung diagnostisch/bestätigend bricht zusammen - Höhere Mindestwerte (
-n 12+) übersehen kurze Flag-Identifikatoren und Config-Keys - Einige Bundler komprimieren oder kodieren Strings; liefert
stringsnahezu leere Ausgabe, muss das Binary möglicherweise zuerst aus dem Bundle extrahiert werden (außerhalb des Geltungsbereichs dieses Skills)
Expected: Eine Ausgabe mit einer Zeile pro String, 1k–100k Zeilen je nach Binary-Größe. Eine manuelle Inspektion sollte in den ersten 100 Zeilen erkennbare Identifikatoren zeigen.
On failure: Ist die Ausgabe leer oder unlesbar, ist das Binary vermutlich gepackt, verschlüsselt oder in einem Bytecode-Format ausgeliefert, das strings nicht lesen kann. Auf Extraktionsebene anhalten und lösen; keine Baseline aus einem unlesbaren Scan eintragen.
Schritt 7: Baselines vorwärts erweitern, ohne vergangene Einträge umzuschreiben
Wird ein neues System oder ein neuer Marker zum Katalog hinzugefügt, werden nur zukünftige Versionen darauf gescannt. Vergangene Versionseinträge bleiben wie ursprünglich geschrieben.
Warum: Baselines früherer Versionen sind empirische Evidenz dessen, was damals gescannt wurde — nicht ein aktuelles Modell dessen, was die vergangene Version enthielt. Sie nachträglich mit neu entdeckten Markern umzuschreiben, vermischt „was wir heute wissen" mit „was wir damals beobachteten". Beides ist nützlich; nur eines gehört in die Baseline-Datei.
Wird ein nachträglicher Scan tatsächlich benötigt (z. B. um zu prüfen, ob ein neuer Marker in Version N-3 vorhanden war), diesen als separates Addendum aufzeichnen:
addenda:
"1.4.0":
scan_date: "2026-04-15"
catalog_revision: "v7"
findings:
acme_new_system:
present: ["..."]
Der ursprüngliche baselines["1.4.0"]-Eintrag bleibt unberührt. Der Leser sieht sowohl den originalen Eintrag als auch den späteren nachträglichen Scan mitsamt seiner jeweiligen Katalog-Revision.
Expected: Die Baseline-Datei wächst monoton vorwärts; vergangene Einträge sind append-only mit optionalen Addenda-Blöcken. Katalog-Revisionen sind versioniert, sodass jeder Scan auf den zum Zeitpunkt verwendeten Katalogstand zurückgeführt werden kann.
On failure: Wann immer der Impuls aufkommt, die present-Liste einer vergangenen Version direkt zu editieren, anhalten. Stattdessen ein Addendum anfügen. Die Mutation vergangener Einträge zerstört die Fähigkeit, Scanner-Regressionen zu erkennen (Schritt 8 jeder späteren Scanner-Validierung stützt sich auf die Unveränderlichkeit des historischen Eintrags).
Validierung
- Katalog hat explizite Kategorie-Tags auf jedem Marker (eines von API / Identity / Config / Telemetry / Flag / Function)
- Jeder Marker ist genau einem System zugeordnet; kein Marker erscheint in zwei Systemen
- Gewichte spannen einen tatsächlichen Bereich (einige 10er, einige 3–5er); nicht alle Gewichte identisch
- Jede gescannte Version hat einen Eintrag mit
present,absentundscorepro verfolgtem System - Nie veröffentlichte Versionen sind explizit annotiert, nicht stillschweigend ausgelassen
- Jedes System hat sowohl
full- als auchpartial-Schwellen; Befunde entsprechend beschriftet -
strings -n 8ist das Extraktionsprimitiv (oder ein dokumentiertes Äquivalent für nicht-textuelle Binaries) - Vergangene Versionseinträge wurden vom letzten Scan nicht verändert; neue Befunde leben in Addenda-Blöcken, falls nachträglich
Häufige Fallstricke
- Konkrete Befunde als Katalog aufzeichnen. Der Katalog soll Marker-Kategorien und -Formen beschreiben, nicht versionsgebundene Literale auflisten. Kataloge voller befundförmiger Einträge verfallen schnell und sind bei versehentlicher Veröffentlichung das höchste Leckrisiko.
- Minifizierte Identifikatoren erfassen. Namen wie
_p3aoderq9Xwerden bei jedem Rebuild umbenannt. Auch wenn sie heute passen, sind sie morgen Rauschen. Bei semantisch bedeutsamen Identifikatoren bleiben. - Telemetrie-Ereignisse mit Feature-Flags vermischen. In vielen Harnessen teilen sie Namenskonventionen, erfüllen aber unterschiedliche Rollen. Nach Kategorie taggen (Schritt 1), damit die kategorieweise Analyse sauber bleibt.
- Nie veröffentlichte Versionen stillschweigend überspringen. Eine Lücke in der Versionsreihe ohne Annotation sieht aus wie ein verpasster Scan. Explizit annotieren:
_annotation: "never-published". - Schwellen festlegen, bevor Baseline-Daten existieren. Der erste Scan etabliert die empirischen Gewichtssummen; die Schwellen daran ausrichten, nicht vorab.
- Frühere Versionseinträge umschreiben, wenn der Katalog wächst. Vergangene Einträge sind Evidenz; Addenda sind das unterstützte Muster für nachträgliche Scans.
- Leerer Scan-Ausgabe vertrauen. „Null Marker gefunden" bedeutet nicht immer „abwesend". Vor einer Entfernungs-Erklärung bestätigen, dass das Binary lesbar ist und die Katalog-IDs exakt übereinstimmen.
strings -n 4für gründlicher halten als-n 8. Niedrigere Mindestwerte fügen Lärm schneller hinzu als Signal. Diagnostische Marker sind praktisch immer 8+ Zeichen lang.
Verwandte Skills
security-audit-codebase— geteilte Disziplin; beide Pipelines behandeln Marker-Präsenz als Befund, mit unterschiedlichen nachgelagerten Konsumentenaudit-dependency-versions— überträgt dieselbe Versionsverfolgungs-Strenge auf externe Abhängigkeits-Manifeste; dieser Skill wendet sie auf Binär-Artefakte anprobe-feature-flag-state— Phase-2-3-Folgeschritt; konsumiert Baselines, um den Flag-Rollout-Zustand zu klassifizieren (live / opt-in / dark / removed)conduct-empirical-wire-capture— Phase-4-Folgeschritt; validiert inferiertes Verhalten gegen tatsächlichen Harness-Verkehrredact-for-public-disclosure— Phase-5-Folgeschritt; regelt, welche Befunde den privaten Arbeitsbereich verlassen dürfen
GitHub 저장소
연관 스킬
qmd
개발qmd는 BM25, 벡터 임베딩, 재순위화를 결합한 하이브리드 검색을 통해 로컬 파일을 색인화하고 검색할 수 있는 로컬 검색 및 색인화 CLI 도구입니다. 명령줄 사용과 Claude 통합을 위한 MCP(Model Context Protocol) 모드를 모두 지원합니다. 이 도구는 임베딩에 Ollama를 사용하고 색인을 로컬에 저장하여 터미널에서 직접 문서나 코드베이스를 검색하는 데 이상적입니다.
subagent-driven-development
개발이 스킬은 각 독립적인 작업마다 새로운 하위 에이전트를 배치하고 작업 사이에 코드 리뷰를 진행하여 구현 계획을 실행합니다. 이 리뷰 프로세스를 통해 품질 게이트를 유지하면서 빠른 반복 작업을 가능하게 합니다. 동일한 세션 내에서 대부분 독립적인 작업을 진행할 때 내장된 품질 검증과 함께 지속적인 진행을 보장하기 위해 사용하세요.
mcporter
개발mcporter 스킬은 개발자가 Claude에서 직접 Model Context Protocol(MCP) 서버를 관리하고 호출할 수 있도록 합니다. 이 스킬은 사용 가능한 서버를 나열하고, 인수를 사용해 해당 서버의 도구를 호출하며, 인증 및 데몬 생명주기를 처리하는 명령어를 제공합니다. 개발 워크플로우에서 MCP 서버 기능을 통합하고 테스트할 때 이 스킬을 사용하세요.
adk-deployment-specialist
개발이 스킬은 A2A 프로토콜을 사용하여 Vertex AI ADK 에이전트를 배포하고 오케스트레이션하며, AgentCard 검색, 작업 제출, 코드 실행 샌드박스 및 메모리 뱅크와 같은 지원 도구를 관리합니다. Python, Java 또는 Go 언어로 순차, 병렬 또는 루프 오케스트레이션 패턴을 갖춘 다중 에이전트 시스템 구축을 가능하게 합니다. Google Cloud에서 ADK 에이전트 배포 또는 에이전트 워크플로우 오케스트레이션을 요청받았을 때 사용하세요.
