You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adopt alibaba/skill-up (examined at v0.12.0, 2026-09-18) to add a versioned, reproducible regression suite for the agent-facing PowerContext integration Skill guidance.
The system under test is the Skill's guidance quality: intent routing (which PowerContext tool should or should not be selected for a request) and authorization boundaries (what the agent must not infer from a Skill or from an empty/failed result). This is the instruction layer that determines whether an agent uses PowerContext correctly at all.
This should complement, not replace, the existing integration-guidance qualification record. The current docs already retain multi-surface observations, raw JSONL evidence, and transcript-bound review. The existing CI also gates adapter request/response mapping for selected hosts. The missing signal is narrower and still important: deterministic, turn-scoped assertions for Skill text -> tool selection, tied to a pinned Skill revision.
Scope limit, stated up front: the first version should target the claude_code + MCP runner that skill-up actually provides. Results must not be presented as coverage of every real host integration, real host permission flow, bounded recall, automatic Capture/Flush, or memory quality.
Problem and proposed solution
Problem
docs/en/development/integration-guidance-evaluation.md (and its docs/zh counterpart) records the existing integration guidance matrix and later qualification batches. That evidence is useful, but it is not a focused regression suite for the Skill text itself:
it is not a small CI gate that maintainers can run when changing SKILL.md;
a report is not mechanically tied to the exact Skill revision under test;
routing/authorization expectations are reviewed from transcripts rather than asserted as deterministic pass/fail checks;
host-specific Skill variants can drift because the repository contains multiple packaged powercontext-project-context Skills with different tool names and host conventions.
The narrow need here is to catch regressions in the instruction layer: ordinary coding should not call PowerContext, explicit memory saves should call the right memory tool, empty search results should not grant write/inventory authority, and candidate inspection should not imply approval.
Proposed solution
Build a small, self-contained skill-up eval project that treats one packaged integration Skill as the system under test and grades tool-selection accuracy with deterministic rule_based assertions. Avoid an LLM judge for these checks; the expected signal is whether the right tool name appears, or does not appear, in the transcript.
Proposed location: evaluation/skill-up/, linked from evaluation/README.md. Maintainers may prefer another path; the shape matters more than the exact directory name.
evaluation/skill-up/
README.md # prerequisites, exact commands, limitations, and report interpretation rules
evals/
eval.yaml
cases/01-*.yaml ...
fixtures/mcp/
powercontext.yaml # auth headers / optional mocked responses live here
sync-skill.sh # copies or vendors the pinned Skill revision under test
Minimal eval.yaml shape for the first version:
schema_version: v1alpha1environment:
type: none # only if README documents a pre-started PowerContext Server# Alternatively use docker + setup_steps when the suite should own the Server lifecycle.mcp:
servers:
- name: powercontextmode: realtransport: httpendpoint: http://127.0.0.1:8000/mcpconfig_ref: fixtures/mcp/powercontext.yamlskills:
- source: local_pathpath: <pinned claude-code skill copy under test>include: [SKILL.md, "references/**"]engine:
name: claude_codemodel: {provider: anthropic, name: <model>}cases:
files: [evals/cases/*.yaml]defaults:
timeout_seconds: 300max_turns: 8parallelism: 1judge:
type: rule_basedbenchmark:
enabled: truereport:
formats: [json, junit, html]artifacts: [transcript]
The MCP authentication file should use skill-up's supported config_ref shape. Do not put headers directly under mcp.servers[]; skill-up v0.12.0's MCPServer schema does not define that field, and non-strict YAML decoding can silently ignore it.
Use the Claude Code convention here: POWERCONTEXT_CLAUDE_AUTHORIZATION is the complete Bearer <token> header value. Do not mix it with the Python SDK's bare-token convention unless the README documents the conversion exactly.
Why skill-up fits this narrow need:
Requirement
skill-up facility
Skill loaded vs not-loaded comparison
benchmark.enabled + run --baseline
Tool selection as the measured quantity
judge.type: rule_based with tool_called_in_turn / tool_not_called_in_turn
Multi-turn checks
case-level turns + conversation mode
Transcript evidence
report/transcript artifacts
Skill revision under test
local-path Skill copy plus a scripted sync/pin step
Machine-readable CI output
report.formats: [json, junit, html]
MCP is a first-class part of this runner: skill-up v0.12.0 builds Claude Code MCP configuration through claude mcp add --scope project --transport http <name> <endpoint> --header <k:v>. PowerContext's local MCP endpoint can fit that shape when headers are supplied through the referenced MCP fixture.
Case set
Cases should be derived from the routing and authorization rules already written in the Skill, not from generic coding tasks:
Ordinary coding request -> no PowerContext tool is called. Negative control for the Skill's "no PowerContext call is required" rule.
Explicit "save this" request -> the memory write tool is called. Positive control.
Cases 1 and 2 must ship together. Case 1 alone can pass if the model does nothing at all; case 2 alone can pass if the model calls tools indiscriminately.
A search that returns nothing -> the result must not be treated as authorization to write or inventory. Use a fabricated project/scope fixture or mocked response so the outcome is deterministic.
Inspecting candidates -> inspection grants no decision authority; approval/publication tools must not be called.
A write that fails -> the final response must not claim the memory was persisted. This can remain rule_based: use forbidden output patterns (output_matches.not / output_contains.not) plus a controlled failure response.
Implementation caveats
These caveats are source-verified against skill-up v0.12.0 and can otherwise produce wrong-but-green results. They belong in the README and generated report, not only in comments.
C1 - MCP headers must come from config_ref.
skill-up v0.12.0's MCPServer config includes name, mode, transport, command, args, endpoint, and config_ref; it does not include headers. Headers are loaded from the file referenced by config_ref. If headers are written inline under mcp.servers[], they can be silently ignored, leaving an authentication-enabled Server unusable while negative controls still pass vacuously.
C2 - Tool-name matching is exact string equality.
internal/judge/rule_based.go compares the recorded tool name to the expected rule name directly, and pkg/transcript/transcript.go stores the name as recorded. Do not write assertions with bare names until a real transcript confirms that those are the recorded names.
For Claude Code MCP, expected names may be namespaced, such as mcp__powercontext__remember_memory, while the Skill prose may use bare names such as remember_memory. A tool_not_called_in_turn assertion using the wrong bare name can pass while the namespaced tool was actually called. Also document the expected namespace spelling; the MCP server key powercontext is the likely source for mcp__powercontext__..., not the FastMCP display name.
First task after the first run:
grep -o '"name":"[^"]*"' result.json | sort -u
Assertions must use the exact recorded names.
C3 - Hooks are disabled, so automatic memory paths are unobservable.
skill-up's Claude Code runner constructs commands with --settings '{"disableAllHooks":true}' and --permission-mode=bypassPermissions. Separately, PowerContext intentionally does not project POST /v1/context/prepare as an MCP tool. Therefore this suite cannot observe bounded recall, automatic Capture, or Flush. This is an execution-model limit, not a configuration gap.
C4 - bypassPermissions diverges from real hosts.
Writes that a real host might gate behind user confirmation can succeed unconditionally in this runner. Reports should state that the suite evaluates instruction/tool-selection behavior under the runner's permission model, not host approval UX.
C5 - Real mode is stateful.
PowerContext persists writes, so real-mode cases can affect later cases and later runs. Keep parallelism: 1 until isolation is designed. Also isolate state across runs: use a dedicated fixture Scope per run/case, or document a cleanup/reset mechanism. If mocked MCP is used for deterministic failure cases, record which behavior is mocked and avoid presenting those cases as end-to-end persistence evidence.
C6 - The Server lifecycle must be owned or documented.
environment.type: none does not start PowerContext. If the suite uses real MCP mode, the README must document an explicit pre-step to start the Server and verify readiness, or the eval should use an environment that starts the Server through setup steps. The acceptance command must not imply that a clean checkout alone is enough when an external Server is required.
C7 - The packaged Skill is not fully self-contained.
references/scope-memory.md invokes python3 "${CLAUDE_PLUGIN_ROOT}/scripts/workspace_scope.py", but scripts/ lives at the plugin root, outside the Skill directory. skill-up installs the Skill directory, and CLAUDE_PLUGIN_ROOT is a plugin-runtime variable that may not exist in this context. This should be documented or handled explicitly; if the eval surfaces it, that is a legitimate packaging/runtime-boundary finding.
C8 - First-version host coverage is intentionally narrow.
The repository has multiple PowerContext Skill variants. The first suite should not claim to qualify Codex, Hermes, WorkBuddy, OpenCode, Pi, OpenClaw, or portable Agent Plugin behavior unless those hosts are actually run or their tool namespace is faithfully represented. Per-host Skill variants can be added later as separate suites or cases once the runner boundary is clear.
Acceptance criteria
skill-up validate and skill-up run succeed on the eval project using exact commands documented in the README.
The README documents whether the suite owns the PowerContext Server lifecycle or requires a pre-started Server, including the readiness check (C6).
The Skill revision under test is pinned by commit SHA or content hash, and the sync/vendor step is scripted.
MCP authentication is configured through config_ref; the referenced fixture uses POWERCONTEXT_CLAUDE_AUTHORIZATION or an explicitly documented equivalent (C1).
The first report includes a real transcript-derived inventory of recorded tool names, and assertions use those exact names (C2).
Positive and negative controls ship together, so "the model did nothing" cannot pass the suite.
The suite runs with parallelism: 1, and documents the state-isolation mechanism across cases and runs (C5).
benchmark.enabled is on, and reports show the Skill-loaded vs not-loaded delta rather than absolute numbers alone.
report.formats includes junit in addition to human-readable artifacts, so CI can consume failures naturally.
The README and generated report state that hooks are disabled, permissions are bypassed, and the suite does not measure bounded recall, automatic Capture/Flush, or memory quality (C3/C4).
The README states the first-version host boundary: Claude Code + MCP Skill guidance only, unless additional hosts are actually implemented and verified (C8).
evaluation/README.md and docs/en/development/integration-guidance-evaluation.md / docs/zh/development/integration-guidance-evaluation.md link to the new project and describe it as complementary evidence.
Scope limit
Memory quality is out of scope here and is measured elsewhere: benchmark/locomo/ covers engine-level conversation-memory behavior, while evaluation/ covers SWE-bench Pro OFF/ON task-outcome evaluation. skill-up results should not be aggregated with those results or used as a substitute for them.
This issue also does not require solving all host-specific integration differences in the first PR. It asks for a focused, deterministic regression suite for the Skill guidance layer, with clear report language about what the suite does and does not prove.
Alternatives considered
Keep only the current integration-guidance record. It preserves useful evidence, but it is not a small Skill-revision regression gate.
Use an LLM judge for tool selection. Unnecessary for the first version; rule_based assertions express the intended checks deterministically and without grading variance.
Use only the existing evaluation/ harness. It is the right tool for task-outcome benchmarking, but it does not directly express "was the correct tool selected in this turn with this name/argument boundary", which is the behavior the Skill guidance determines.
Feature description
Adopt alibaba/skill-up (examined at v0.12.0, 2026-09-18) to add a versioned, reproducible regression suite for the agent-facing PowerContext integration Skill guidance.
The system under test is the Skill's guidance quality: intent routing (which PowerContext tool should or should not be selected for a request) and authorization boundaries (what the agent must not infer from a Skill or from an empty/failed result). This is the instruction layer that determines whether an agent uses PowerContext correctly at all.
This should complement, not replace, the existing integration-guidance qualification record. The current docs already retain multi-surface observations, raw JSONL evidence, and transcript-bound review. The existing CI also gates adapter request/response mapping for selected hosts. The missing signal is narrower and still important: deterministic, turn-scoped assertions for Skill text -> tool selection, tied to a pinned Skill revision.
Scope limit, stated up front: the first version should target the
claude_code+ MCP runner that skill-up actually provides. Results must not be presented as coverage of every real host integration, real host permission flow, bounded recall, automatic Capture/Flush, or memory quality.Problem and proposed solution
Problem
docs/en/development/integration-guidance-evaluation.md(and itsdocs/zhcounterpart) records the existing integration guidance matrix and later qualification batches. That evidence is useful, but it is not a focused regression suite for the Skill text itself:SKILL.md;powercontext-project-contextSkills with different tool names and host conventions.The narrow need here is to catch regressions in the instruction layer: ordinary coding should not call PowerContext, explicit memory saves should call the right memory tool, empty search results should not grant write/inventory authority, and candidate inspection should not imply approval.
Proposed solution
Build a small, self-contained skill-up eval project that treats one packaged integration Skill as the system under test and grades tool-selection accuracy with deterministic
rule_basedassertions. Avoid an LLM judge for these checks; the expected signal is whether the right tool name appears, or does not appear, in the transcript.Proposed location:
evaluation/skill-up/, linked fromevaluation/README.md. Maintainers may prefer another path; the shape matters more than the exact directory name.Minimal
eval.yamlshape for the first version:The MCP authentication file should use skill-up's supported
config_refshape. Do not putheadersdirectly undermcp.servers[]; skill-up v0.12.0'sMCPServerschema does not define that field, and non-strict YAML decoding can silently ignore it.Use the Claude Code convention here:
POWERCONTEXT_CLAUDE_AUTHORIZATIONis the completeBearer <token>header value. Do not mix it with the Python SDK's bare-token convention unless the README documents the conversion exactly.Why skill-up fits this narrow need:
benchmark.enabled+run --baselinejudge.type: rule_basedwithtool_called_in_turn/tool_not_called_in_turnreport.formats: [json, junit, html]MCP is a first-class part of this runner: skill-up v0.12.0 builds Claude Code MCP configuration through
claude mcp add --scope project --transport http <name> <endpoint> --header <k:v>. PowerContext's local MCP endpoint can fit that shape when headers are supplied through the referenced MCP fixture.Case set
Cases should be derived from the routing and authorization rules already written in the Skill, not from generic coding tasks:
rule_based: use forbidden output patterns (output_matches.not/output_contains.not) plus a controlled failure response.Implementation caveats
These caveats are source-verified against skill-up v0.12.0 and can otherwise produce wrong-but-green results. They belong in the README and generated report, not only in comments.
C1 - MCP headers must come from
config_ref.skill-up v0.12.0's
MCPServerconfig includesname,mode,transport,command,args,endpoint, andconfig_ref; it does not includeheaders. Headers are loaded from the file referenced byconfig_ref. If headers are written inline undermcp.servers[], they can be silently ignored, leaving an authentication-enabled Server unusable while negative controls still pass vacuously.C2 - Tool-name matching is exact string equality.
internal/judge/rule_based.gocompares the recorded tool name to the expected rule name directly, andpkg/transcript/transcript.gostores the name as recorded. Do not write assertions with bare names until a real transcript confirms that those are the recorded names.For Claude Code MCP, expected names may be namespaced, such as
mcp__powercontext__remember_memory, while the Skill prose may use bare names such asremember_memory. Atool_not_called_in_turnassertion using the wrong bare name can pass while the namespaced tool was actually called. Also document the expected namespace spelling; the MCP server keypowercontextis the likely source formcp__powercontext__..., not the FastMCP display name.First task after the first run:
Assertions must use the exact recorded names.
C3 - Hooks are disabled, so automatic memory paths are unobservable.
skill-up's Claude Code runner constructs commands with
--settings '{"disableAllHooks":true}'and--permission-mode=bypassPermissions. Separately, PowerContext intentionally does not projectPOST /v1/context/prepareas an MCP tool. Therefore this suite cannot observe bounded recall, automatic Capture, or Flush. This is an execution-model limit, not a configuration gap.C4 -
bypassPermissionsdiverges from real hosts.Writes that a real host might gate behind user confirmation can succeed unconditionally in this runner. Reports should state that the suite evaluates instruction/tool-selection behavior under the runner's permission model, not host approval UX.
C5 - Real mode is stateful.
PowerContext persists writes, so real-mode cases can affect later cases and later runs. Keep
parallelism: 1until isolation is designed. Also isolate state across runs: use a dedicated fixture Scope per run/case, or document a cleanup/reset mechanism. If mocked MCP is used for deterministic failure cases, record which behavior is mocked and avoid presenting those cases as end-to-end persistence evidence.C6 - The Server lifecycle must be owned or documented.
environment.type: nonedoes not start PowerContext. If the suite uses real MCP mode, the README must document an explicit pre-step to start the Server and verify readiness, or the eval should use an environment that starts the Server through setup steps. The acceptance command must not imply that a clean checkout alone is enough when an external Server is required.C7 - The packaged Skill is not fully self-contained.
references/scope-memory.mdinvokespython3 "${CLAUDE_PLUGIN_ROOT}/scripts/workspace_scope.py", butscripts/lives at the plugin root, outside the Skill directory. skill-up installs the Skill directory, andCLAUDE_PLUGIN_ROOTis a plugin-runtime variable that may not exist in this context. This should be documented or handled explicitly; if the eval surfaces it, that is a legitimate packaging/runtime-boundary finding.C8 - First-version host coverage is intentionally narrow.
The repository has multiple PowerContext Skill variants. The first suite should not claim to qualify Codex, Hermes, WorkBuddy, OpenCode, Pi, OpenClaw, or portable Agent Plugin behavior unless those hosts are actually run or their tool namespace is faithfully represented. Per-host Skill variants can be added later as separate suites or cases once the runner boundary is clear.
Acceptance criteria
skill-up validateandskill-up runsucceed on the eval project using exact commands documented in the README.config_ref; the referenced fixture usesPOWERCONTEXT_CLAUDE_AUTHORIZATIONor an explicitly documented equivalent (C1).parallelism: 1, and documents the state-isolation mechanism across cases and runs (C5).benchmark.enabledis on, and reports show the Skill-loaded vs not-loaded delta rather than absolute numbers alone.report.formatsincludesjunitin addition to human-readable artifacts, so CI can consume failures naturally.evaluation/README.mdanddocs/en/development/integration-guidance-evaluation.md/docs/zh/development/integration-guidance-evaluation.mdlink to the new project and describe it as complementary evidence.Scope limit
Memory quality is out of scope here and is measured elsewhere:
benchmark/locomo/covers engine-level conversation-memory behavior, whileevaluation/covers SWE-bench Pro OFF/ON task-outcome evaluation. skill-up results should not be aggregated with those results or used as a substitute for them.This issue also does not require solving all host-specific integration differences in the first PR. It asks for a focused, deterministic regression suite for the Skill guidance layer, with clear report language about what the suite does and does not prove.
Alternatives considered
rule_basedassertions express the intended checks deterministically and without grading variance.evaluation/harness. It is the right tool for task-outcome benchmarking, but it does not directly express "was the correct tool selected in this turn with this name/argument boundary", which is the behavior the Skill guidance determines.Related
Additional context
config_ref-based MCP headers, and mocked-only case-level MCP override behavior.Prepared with AI assistance.