MCP HubMCP Hub
Retour aux compétences

monitor-binary-version-baselines

pjt222
Mis à jour 2 days ago
5 vues
17
2
17
Voir sur GitHub
Développementaiapi

À propos

Cette compétence établit des références versionnées pour les binaires CLI en recherchant des marqueurs catégorisés tels que les points de terminaison d'API et les drapeaux de fonctionnalités. Elle utilise un système de pondération et des seuils pour détecter la présence de fonctionnalités à travers les versions, en suivant leur cycle de vie ou en révélant des capacités cachées. Les développeurs peuvent l'utiliser pour vérifier les outils d'analyse ou surveiller les changements dans le contenu des binaires au fil du temps.

Installation rapide

Claude Code

Recommandé
Principal
npx skills add pjt222/agent-almanac -a claude-code
Commande PluginAlternatif
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternatif
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/monitor-binary-version-baselines

Copiez et collez cette commande dans Claude Code pour installer cette compétence

Documentation

Monitor Binary Version Baselines

Build + maintain comparable, version-keyed records of which feature-system markers appear in CLI harness binary, so additions, removals, dark-launched capabilities can be detected mechanically across releases.

When Use

  • Tracking feature's lifecycle across multiple releases of closed-source CLI harness
  • Probing for dark-launched capabilities (shipped but gated off) or quietly-removed ones
  • Verifying marker scanner still detects known-good markers on old binaries (regression-testing scanner itself)
  • Building Phase 1 substrate that later phases (flag discovery, dark-launch detection, wire capture) consume
  • Any context where ad-hoc grep answers "is X present today" but you actually need "how has system composed of X, Y, Z moved across versions"

Inputs

  • Required: One or more installed binary versions of same CLI harness (or extracted bundles)
  • Required: Working catalog file for marker definitions (created on first run, extended across versions)
  • Optional: Previously-recorded baseline file from prior runs (extended in place, never rewritten)
  • Optional: List of versions known to be never-published (skipped releases, withdrawn builds)
  • Optional: List of feature-systems already under tracking, to extend rather than re-discover

Steps

Step 1: Select Markers by Category

Choose strings surviving rebuilds. Pick stable, semantically meaningful identifiers — not minified names bundler will rename next release.

Six recommended categories:

  • API — endpoint paths, method names exposed in harness's network surface
  • Identity — internal product names, codenames, version sentinels
  • Config — recognized keys in user-facing configuration files
  • Telemetry — event names emitted to analytics pipeline
  • Flag — feature-gate keys consumed by gate predicates
  • Function — well-known string constants used inside specific handlers (error messages, log labels)

Avoid: short identifiers looking minified (e.g., _a1, bX, two-letter names followed by digits), inline literals changing with any text revision, anything matching bundler's own internal naming convention.

Got: Each candidate marker has category tag + short justification ("appears in user-facing docs," "stable across N prior releases," etc.). Typical first pass yields 20-50 markers per system.

If fail: Markers vanish across consecutive minor versions? Catalog has captured rebuild-volatile strings rather than stable identifiers. Drop those entries; broaden to longer, more semantically anchored substrings.

Step 2: Group Markers by Feature-System

Bundle markers into one system table per independently-evolving capability. "System" is coherent set of markers whose presence/absence moves together because they share feature lifecycle (e.g., all markers belonging to hypothetical acme_widget_v3 capability).

Why grouping matters: per-system scoring prevents cross-contamination. Absence of one system's markers must not suppress detection of another, + aggregate counts across unrelated systems are uninformative.

Working catalog shape (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:
      - ...

Got: Each system has its own marker list; no marker appears in two systems. Adding new system means adding new top-level entry — never moving markers between systems retroactively.

If fail: Markers hard to assign to one system (overlap, ambiguity)? System definitions too coarse. Split system, or accept some markers are "shared substrate" + exclude them from per-system scoring.

Step 3: Weight Markers by Signal Strength

Assign each marker weight reflecting how much its presence alone confirms system:

  • 10 = diagnostic-alone — unique enough that finding this marker, by itself, is sufficient to confirm system is present (e.g., long, system-specific string no other code path would emit)
  • 3-5 = corroborating only — too generic to confirm alone, but contributes to aggregate score (e.g., short telemetry suffix harness reuses across features)

Teach convention, not specific numbers. Spread between "diagnostic" + "corroborating" matters more than exact integers chosen — what counts is thresholds in step 5 can distinguish "one strong signal" from "many weak signals."

Got: Each marker has weight. Catalog's weight distribution skews toward corroborating markers (3-5), with small number of diagnostic-alone markers (10) per system.

If fail: Every marker weighted 10? Scoring loses resolution — partial-presence findings become impossible. Demote markers recurring across multiple systems or appearing in unrelated handlers.

Step 4: Record Per-Version Baselines

For each version scanned, record both present and absent markers, keyed by version. Both are evidence: absent marker in version N is just as informative as present one when version N+1 reintroduces it.

Baseline shape:

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"

Never-published versions get explicit annotation rather than silent omission. Silently-skipped versions look like data loss to next reader.

Got: Every version produces one record per tracked system, with present, absent, score populated, or explicit _annotation if never-published.

If fail: Baseline scan yields zero markers for system previously present? Do not assume removal until you confirm binary path correct, strings command produced output, marker IDs match catalog exactly. False zeroes corrupt longitudinal record.

Step 5: Set Thresholds for Full + Partial Detection

Define two gates per system applied to aggregate score:

  • full — score above which system considered present-and-active in this version
  • partial — score above which system considered shipped-but-incomplete (some markers present, but below full threshold)

Below partial = absent (or not-yet-present, depending on direction of travel).

thresholds:
  acme_widget_v3:
    full:    25
    partial: 10

Choosing thresholds: set full to sum of weights you would expect healthy install to emit; set partial to one diagnostic marker plus corroborating signal. Re-tune when you have several versions of evidence.

Got: Each scan produces labeled finding per system: full | partial | absent. Findings with partial warrant investigation — they are dark-launch + removal candidates.

If fail: Every system reports partial across every version? Thresholds too sensitive (likely set higher than markers can ever sum to). Recalibrate against known-good version where system verifiably live.

Step 6: Scan with strings -n 8

Use strings with minimum length filter as extraction primitive. -n 8 floor filters most noise (short fragments, padding, address-table junk) without losing meaningful identifiers, which are almost always longer than 8 characters.

strings -n 8 path/to/binary > /tmp/binary-strings.txt

Then run catalog match against /tmp/binary-strings.txt (any line-oriented matcher: grep -F -f markers.txt, ripgrep, or small script).

Caveats:

  • Lower minimums (-n 4, -n 6) flood output with binary garbage + minified-symbol noise; diagnostic-to-corroborating distinction collapses
  • Higher minimums (-n 12+) miss short flag identifiers + config keys
  • Some bundlers compress or encode strings; if strings returns near-empty output, binary may need bundle-extraction first (out of scope for this skill)

Got: Line-per-string output of 1k-100k lines, depending on binary size. Manual inspection should reveal recognizable identifiers in first 100 lines.

If fail: Output empty or unrecognizable? Binary probably packed, encrypted, or shipped as bytecode format strings cannot read. Stop + resolve at extraction layer; do not record baseline from unreadable scan.

Step 7: Extend Baselines Forward Without Rewriting Past Records

When new system or marker added to catalog, only forward versions are scanned for it. Past version records remain as originally written.

Why: prior-version baselines are empirical evidence of what was scanned at time, not current model of what past version contained. Retroactively rewriting them with newly-discovered markers conflates "what we know now" with "what we observed then." Both useful; only one should live in baseline file.

If retroactive scan genuinely needed (e.g., to test whether new marker was present in version N-3), record as separate addendum:

addenda:
  "1.4.0":
    scan_date: "2026-04-15"
    catalog_revision: "v7"
    findings:
      acme_new_system:
        present: ["..."]

Original baselines["1.4.0"] entry untouched. Reader can see both original record + later retroactive scan, with respective catalog revisions.

Got: Baseline file grows monotonically forward; past records are append-only with optional addenda blocks. Catalog revisions are versioned so each scan can be tied back to catalog state it used.

If fail: Ever feel urge to edit past version's present list directly? Stop. Add addendum instead. Mutating past records loses ability to detect scanner regressions (Step 8 of any later scanner-validation pass relies on historical record being immutable).

Checks

  • Catalog has explicit category tags on every marker (one of API / identity / config / telemetry / flag / function)
  • Every marker assigned to exactly one system; no marker appears in two systems
  • Weights span real range (some 10s, some 3-5s); weights not all identical
  • Each scanned version has record with present, absent, score per tracked system
  • Never-published versions explicitly annotated, not silently omitted
  • Each system has both full + partial thresholds; findings labeled accordingly
  • strings -n 8 is extraction primitive (or documented equivalent for non-text binaries)
  • Past version records unchanged by latest scan; new findings live in addenda blocks if retroactive

Pitfalls

  • Recording specific findings as the catalog. Catalog should describe marker categories + shapes, not enumerate version-pinned literals. Catalogs full of finding-shaped entries decay fast + are highest leak risk if accidentally published.
  • Capturing minified identifiers. Names like _p3a or q9X rename on every rebuild. Even if they match today, they are noise tomorrow. Stay with semantically meaningful identifiers.
  • Conflating telemetry events with feature flags. They share naming conventions in many harnesses but play different roles. Tag them by category (Step 1) so per-category analysis stays clean.
  • Silently skipping never-published versions. Gap in version sequence with no annotation looks like missed scan. Annotate explicitly: _annotation: "never-published".
  • Setting thresholds before any baseline data exists. First scan establishes empirical weight totals; tune thresholds against that, not in advance.
  • Rewriting prior version records when catalog grows. Past records are evidence; addenda are supported pattern for retroactive scans.
  • Trusting empty scan output. Zero markers found does not always mean "absent." Confirm binary readable + catalog IDs match exactly before declaring removal.
  • Treating strings -n 4 as more thorough than -n 8. Lower minimums add noise faster than signal. Diagnostic markers are essentially always 8+ characters.

See Also

  • security-audit-codebase — shared discipline; both pipelines treat marker presence as finding, with different downstream consumers
  • audit-dependency-versions — extends same version-tracking rigor to external dependency manifests; this skill applies it to binary artifacts
  • probe-feature-flag-state — Phase 2-3 follow-up; consumes baselines to classify flag rollout state (live / opt-in / dark / removed)
  • conduct-empirical-wire-capture — Phase 4 follow-up; validates inferred behavior against actual harness traffic
  • redact-for-public-disclosure — Phase 5 follow-up; governs which findings can leave private workspace

Dépôt GitHub

pjt222/agent-almanac
Chemin: i18n/caveman/skills/monitor-binary-version-baselines
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Compétences associées

qmd

Développement

qmd est un outil CLI de recherche et d'indexation locale qui permet aux développeurs d'indexer et de rechercher dans des fichiers locaux en utilisant une recherche hybride combinant BM25, des embeddings vectoriels et du reranking. Il prend en charge à la fois une utilisation en ligne de commande et un mode MCP (Model Context Protocol) pour l'intégration avec Claude. L'outil utilise Ollama pour les embeddings et stocke les index localement, ce qui le rend idéal pour rechercher dans de la documentation ou des bases de code directement depuis le terminal.

Voir la compétence

subagent-driven-development

Développement

Cette compétence exécute des plans de mise en œuvre en déployant un nouveau sous-agent pour chaque tâche indépendante, avec une revue de code entre les tâches. Elle permet une itération rapide tout en maintenant des contrôles de qualité grâce à ce processus de revue. Utilisez-la lorsque vous travaillez sur des tâches principalement indépendantes au sein d'une même session pour assurer une progression continue avec des vérifications de qualité intégrées.

Voir la compétence

mcporter

Développement

La compétence mcporter permet aux développeurs de gérer et d'appeler des serveurs Model Context Protocol (MCP) directement depuis Claude. Elle fournit des commandes pour lister les serveurs disponibles, appeler leurs outils avec des arguments, et gérer l'authentification ainsi que le cycle de vie du démon. Utilisez cette compétence pour intégrer et tester les fonctionnalités des serveurs MCP dans votre flux de travail de développement.

Voir la compétence

adk-deployment-specialist

Développement

Cette compétence déploie et orchestre des agents Vertex AI ADK en utilisant le protocole A2A, gérant la découverte d'AgentCard, la soumission de tâches, et prenant en charge des outils tels que le bac à sable d'exécution de code et la banque de mémoire. Elle permet de construire des systèmes multi-agents avec des modèles d'orchestration séquentiels, parallèles ou en boucle en Python, Java ou Go. Utilisez-la lorsqu'on vous demande de déployer des agents ADK ou d'orchestrer des flux de travail d'agents sur Google Cloud.

Voir la compétence