Use this skill for source audits that ask whether capabilities are available to agents, humans, both, or neither—especially plugin-to-API integrations, typed tool layers, multi-worktree migrations, and claims of portability into an existing agent runtime.
A capability is not agent-native merely because business logic, a human REST route, or a UI exists. Prove the complete chain:
native registration → typed handler → transport request → authenticated agent route → canonical command → durable state/effect
Audit human and internal surfaces separately.
Classify every requested capability as one or more of:
git status --short before testing. Refresh remote refs when the audit permits it; a stale local checkout can falsely prove that a plugin is absent or branch-only.main override newer upstream source without saying so.Large migrations often copy the same plugin and Gate across many worktrees. Hash plugin source and Gate source, count registered tools, manifest tools, and routes, then group identical snapshots. Deep-read one representative per unique cluster plus every dirty variant.
Do not imply that copied snapshots are independent implementations.
For every capability, inspect independently:
Record exact paths and line ranges while reading.
Programmatically derive all registered/schema tool names and compare them with the plugin manifest. Report duplicates and both set differences. Beware tests that convert names to a set or validate only one toolset subset.
Normalize native tools and server routes to (tool, method, path template). For mismatches, start an in-memory server and call both the plugin-emitted path and any suspected legacy path. Mocked client tests establish formatting only, not server reachability.
A capability key may authorize a project while the URL still requires a real project ID/slug. Exercise the plugin's default project/profile reference against the real resolver. Never assume symbolic values such as current are supported without server code and a passing probe.
Verify the exact client representation is consumed by the Gate and appears in durable audit/activity rows:
A profile database row is not proof that an arbitrary existing agent runtime can use the capability. Require plugin installation/discovery, enabled config, Gate URL, secret delivery, exact project binding, identity binding, runtime launch/health, and a real native tool call through the runtime loader.
Hard-coded hosts, local monorepo imports, fixed domains, and appliance-specific scripts are coupling assumptions to report explicitly.
A disposable subprocess with HERMES_HOME set proves only single-process discovery. It does not prove safety in a gateway serving multiple profiles.
Inspect whether the plugin uses Hermes's current profile-aware APIs for active home/config/secret resolution rather than reading process-global HERMES_HOME, profile names, or credentials directly. Prove two profiles with different endpoints and keys cannot resolve each other's connection. Also determine:
For a general-purpose Hermes with broad host authority, treat global exposure of vertical mutating tools as a blast-radius finding. Prefer explicit activation, a read-only discovery surface, opaque connection aliases, and session-local target selection.
Project/module scope is not necessarily action authorization. Verify a server-enforced matrix across tenant/connection × business/project × module × action class such as read, propose, execute-under-contract, and administer. Role names and project bindings alone are insufficient.
Distinguish remote use of a tenant from relocating its brain. Confirm the vertical product remains manually operable without an external Hermes and that deterministic schedules, reconciliation, audit, credentials, and canonical state stay tenant-local. Compare deployment flags with scheduler startup code: implemented-but-disabled workers are not offline autonomy.
Prefer focused plugin tests, command parity tests, Gate integration tests, and small adversarial probes. Tests must use temporary state and keep audit-only repositories unchanged. Re-run git status --short afterward.
Use precise labels such as “branch-only,” “declared-but-broken,” and “internal-only.” Avoid collapsing a rich human Studio into an agent capability merely because both ultimately touch the same table.
See references/caduceus-hermes-plugin-agent-gate-capability-audit.md for a concrete Caduceus path map, probe recipes, and portability checks.