Skip to content

Compare agent skill sets in one run - #34

Open
RobertCrupa wants to merge 1 commit into
stack/1-mcp-per-profilefrom
stack/2-skill-sets
Open

RobertCrupa wants to merge 1 commit into
stack/1-mcp-per-profilefrom
stack/2-skill-sets

Conversation

@RobertCrupa

@RobertCrupa RobertCrupa commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Stack 2 of 4, on top of #33.

A run can inject agent skills into the session and compare skill sets side by side. Each model × skill set is its own experiment.

What changes

  • Where the skills come from: the runner downloads apify/agent-skills once per run, at the commit pinned in DEFAULT_SKILLS_REF (d522584). It is a full commit hash, so the runner does not call the GitHub API. skillsRef takes another GitHub ref, and SKILLS_DIR takes a local directory. The repo holds no copy of the skills.
  • When it downloads: a run without skills downloads nothing. A skill name that does not exist fails the run before any session starts.
  • New inputs: skillSets (none, a, a+b), skillCombinations and skillsRef. maxSessions stops a run with exit 15 when models × skill sets × scenarios × repeats is larger than the limit.
  • Isolation: Claude Code starts with --setting-sources project, so personal skills never get into the none variant.
  • What the run records: the span records agentSkills and skillsLoaded, traces get the tag skills:<label>, and OUTPUT has variants, best first.
  • Profiles: a profile lists its skills in agentSkills. store-actors offers apify-ultimate-scraper.

This PR does not change the judge. The judge learns about the agent setup in #35.

Tests: workflow-runner 76, tools 9.

@RobertCrupa
RobertCrupa requested a review from artogahr October 19, 2026 11:37
@RobertCrupa
RobertCrupa added this pull request to stack #40 October 19, 2026 11:43
@artogahr artogahr added the adhoc Ad-hoc unplanned task added during the sprint. label Oct 19, 2026
})) as unknown as {
data?: { value?: unknown; subject?: { id?: string } }[];
};
const prev = (page.data ?? []).find((sc) => sc.subject?.id && sc.subject.id !== s.datasetRunId);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The digest compares this run against the newest pass_rate it finds, whatever experiment that is. In a run with two skill sets, the second variant's "previous run" is the first variant from the same Actor run. The digest then shows the difference between the two skill sets as if the suite had changed since the last run. The lookup should only consider runs with the same model and skill set.

let flushFailed = false;

for (const model of models) {
const variants = models.flatMap((model) => skillSets.map((skillSet) => ({ model, skillSet })));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The report picks one experiment per day and model. Both variants have the same model and fullScope: true. On a day without a scheduled run they cancel each other out and the day shows nothing. We should either add the skill set to the report key or state that comparison runs stay out of the report.

// minute would otherwise merge into one experiment (three did on 22 Sept).
const runTag = (process.env.APIFY_ACTOR_RUN_ID ?? '').slice(-5).toLowerCase();
if (runTag) nameParts.push(runTag);
const effectiveRunName = runName ?? nameParts.join(' · ');

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When runName is set all variants get the same name. Langfuse then merges them into one experiment, same as on 22 Sept. Append the skills label or reject runName with more than one skill set. (Already true for models on main, I hit it today.)

A run can inject agent skills into the session and compare skill sets
side by side: every model x skill set is its own experiment.

- Skills come from apify/agent-skills at the commit pinned in
  DEFAULT_SKILLS_REF, downloaded once per run. `skillsRef` takes another
  GitHub ref, SKILLS_DIR a local directory. A run without skills
  downloads nothing; an unknown skill name fails before any session.
- Inputs `skillSets`, `skillCombinations`, `skillsRef`, `maxSessions`
  (exit 15 when the run would start more sessions).
- Claude Code starts with `--setting-sources project`, so personal
  skills never leak into the `none` variant. The span records
  `agentSkills` and `skillsLoaded`; traces get the tag `skills:<label>`.
- Profiles list `agentSkills`; store-actors offers
  apify-ultimate-scraper.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adhoc Ad-hoc unplanned task added during the sprint.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants