From observo-qa-toolkit
Record one plugin_install telemetry event per consumer repo, idempotently. Reads `.observo-toolkit.json:telemetry_enabled` as the opt-in gate (default false) and `.claude-plugin/plugin.json:version` for the version field. Writes a marker file `.observo-toolkit/.install-seeded` so subsequent invocations are a no-op until the plugin version changes. Use when the user asks to "set up observo-qa-toolkit", "initialize observo plugin telemetry", "bootstrap observo toolkit", or as a one-time first-run step after enabling telemetry. The skill is privacy-first — when the opt-in flag is false or absent, the skill exits silently and records nothing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/observo-qa-toolkit:observo-toolkit-bootstrapThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Send the `plugin_install` Layer 2 telemetry beacon **exactly once per consumer
Send the plugin_install Layer 2 telemetry beacon exactly once per consumer
repo, gated on the user's opt-in. After the first successful run, subsequent
invocations are a no-op until the plugin version changes (upgrade re-seed).
The beacon is what gives the Observo team a discrete "install" data point —
without it, Layer 1 server-side telemetry only sees tool_invoke events and
cannot tell first-time installs from repeat usage.
observo-qa-toolkit and is enabling telemetry for
the first time (.observo-toolkit.json:telemetry_enabled flipped to true)..claude-plugin/plugin.json since the
last bootstrap (the skill detects this from the marker file and re-fires)..observo-toolkit.json missing, or
telemetry_enabled is false / absent). The skill exits silently — opt-in
means opt-in.None — the skill discovers everything it needs from the consumer repo and the installed plugin.
Read .observo-toolkit.json from the consumer repo root using the Read tool.
Telemetry not configured (.observo-toolkit.json absent). Skipping bootstrap.Could not parse .observo-toolkit.json. Skipping bootstrap.// comments, parse JSON, look for telemetry_enabled.telemetry_enabled is anything other than literal boolean true → exit
with: Telemetry opt-in is off (telemetry_enabled = <value>). Nothing to do.Do not prompt the user to opt in. Opt-in is a deliberate config change the user makes themselves; an interactive nudge would feel like dark-pattern opt-in.
The skill needs the plugin's own semver. Resolution order — stop at the
first path that yields a parseable version:
Marketplace cache (canonical path for /plugin install). Claude Code
unpacks marketplace plugins into a versioned cache directory:
$HOME/.claude/plugins/cache/<marketplace-name>/observo-qa-toolkit/<version>/.claude-plugin/plugin.json
Multiple versions can coexist if /plugin install was run several times.
Pick the highest version directory (the dir name itself is the semver
— sort and take the last). Recommended one-liner:
ls -1d $HOME/.claude/plugins/cache/*/observo-qa-toolkit/*/ 2>/dev/null \
| sort -V | tail -n1
Then read .version from <dir>/.claude-plugin/plugin.json. If sort -V
is unavailable, fall back to plain sort (semver naming is mostly
lex-equivalent for single-digit majors).
Direct install:
$HOME/.claude/plugins/observo-qa-toolkit/.claude-plugin/plugin.json
Submodule / vendored copy in the consumer repo — useful only when the
consumer is the Observo monorepo itself, which pins via git submodule:
./.claude/plugins/observo-qa-toolkit/.claude-plugin/plugin.json
⚠️ This path is often stale (submodule pointer lags upstream /plugin install updates). It is intentionally last so the user's actual runtime
version is preferred when both exist.
Alternate config location:
$HOME/.config/claude/plugins/observo-qa-toolkit/.claude-plugin/plugin.json
Parse the JSON, read .version (e.g. "1.1.1").
If no path yields a parseable version → exit with:
Could not resolve plugin.json:version from any known install path. Bootstrap aborted (no beacon sent).
Better to silently skip the beacon than to send a wrong / placeholder version.
Why cache-first, not submodule-first: when the user runs /plugin update observo-qa-toolkit, only the cache path changes. The vendored / submodule
copy stays at whatever the consumer repo pinned. Sending the submodule
version as plugin_version would mis-attribute install events to a stale
release.
Marker path: ./.observo-toolkit/.install-seeded (in the consumer repo, hidden
inside the .observo-toolkit/ directory).
Expected content if exists (JSON):
{
"seeded_at": "2026-05-17T17:00:00Z",
"plugin_version": "1.0.0"
}
Three decision branches:
plugin_version matches → already seeded for this
version → exit with:
Already bootstrapped for plugin version <version> on <seeded_at>. No-op.plugin_version differs → upgrade re-seed → proceed
to Step 4 with note that this is an upgrade.Call the MCP tool:
mcp__observo__telemetry_event(
event_type = "plugin_install",
plugin_version = "<version from Step 2>"
// skill_name omitted — required-empty for plugin_install
)
Expected response: {"recorded": true}.
On any error from the MCP call (network, 4xx, 5xx) — surface the error to the user but do not abort the rest of the workflow (Step 5 still runs to prevent retry-storms on subsequent invocations).
Using Write, create / overwrite ./.observo-toolkit/.install-seeded with:
{
"seeded_at": "<current UTC time, RFC3339>",
"plugin_version": "<version from Step 2>"
}
Also ensure ./.observo-toolkit/.gitignore exists with content:
*
!.gitignore
This nested .gitignore causes git to ignore everything inside
.observo-toolkit/ (including the marker) except the .gitignore file
itself — so the directory's intent to be local-only is committable, but the
marker is never tracked. The user does not need to touch their root
.gitignore.
Report exactly one short line:
✓ Bootstrapped observo-qa-toolkit v<version>. Telemetry enabled for this repo.✓ Re-bootstrapped from v<old> to v<new>. plugin_install event sent.Already bootstrapped for v<version> on <date>. No-op.Telemetry opt-in is off. Nothing to do.Could not resolve plugin version. Bootstrap aborted (no beacon sent).No further prose — the user invoked an idempotent bootstrap, not a tutorial.
.observo-toolkit/.install-seeded is a small JSON document, never edited by
the user manually. Fields:
| Field | Type | Purpose |
|---|---|---|
seeded_at | RFC3339 timestamp (UTC) | When the most recent bootstrap completed. |
plugin_version | semver string | Plugin version at the time of seed. |
To force a re-seed (e.g. for testing), delete the marker file and re-invoke the skill.
telemetry_enabled is not
true. Privacy-by-default is the contract documented in TELEMETRY.md."unknown",
"0.0.0"). Aggregate-version analytics on the server side would be
poisoned. Skip the beacon if the version can't be resolved.plugin_install events..observo-toolkit.json other than
telemetry_enabled. Other fields (project codes, assignees, paths) are
none of this skill's business. Stay narrow.seeded_at and plugin_version. The marker is local
and small on purpose.mcp__observo__telemetry_event — once per fresh seed or upgrade.Read-only otherwise. No suite / project / case mutations.
account_id (already known from the user's API key) and plugin_version.
Nothing else..gitignore), and contains no
user-identifying information.npx claudepluginhub observo-ai/claude-plugins --plugin observo-qa-toolkitSearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.