Skip to content

Add a "generic agent" target architecture - #38

Open
karimad wants to merge 1 commit into
microsoft:mainfrom
karimad:generic-agent-target
Open

Add a "generic agent" target architecture#38
karimad wants to merge 1 commit into
microsoft:mainfrom
karimad:generic-agent-target

Conversation

@karimad

@karimad karimad commented Aug 3, 2026

Copy link
Copy Markdown

Summary

Implements the "generic agent" target proposed in #19: a portable Skill Builder target whose capability catalogue names no product-specific tool IDs (no workiq_*, no m365_*, no named browser-tool suite) — only universal primitives every agent has in some form (a shell, file read/write/search, HTTP fetch). A recording built against this target yields a SKILL.md that isn't tied to Scout or Cowork.

  • Adds electron/skillbuilder/generic-catalog.ts — the neutral catalogue + preamble/tail instructing the builder to translate any product-specific recorded action (Teams/SharePoint/Outlook, etc.) to the closest universal primitive, or flag it explicitly rather than inventing a tool name for it.
  • Wires "generic" into SkillArchitecture, ARCHITECTURES, TARGETS (common/skill.ts) and catalogueFor() (electron/skillbuilder/scout-catalog.ts), following the same pattern as scout/cowork today.
  • Fixes a latent bug in src/Library.tsx's reopen-placement inference, which special-cased "cowork" for export-vs-install and would have silently classified a reopened generic skill as installable (only Scout has a live skills folder).
  • Adds github-issue-triage-generic to the skill-builder eval suite (evals/skillbuilder/scenarios.ts), cloning the existing gh-vs-browser scenario onto the generic architecture with a rubric forbidding any vendor-specific tool name.

Scoped to skills only, per #19 — automations remain Scout-only, unchanged.

Not implementing #20 (the registry externalization) here — this follows the existing scout/cowork pattern (enum + UI array + catalogueFor switch) rather than introducing the proposed registry, so it's additive and doesn't block or conflict with #20 landing separately.

Test plan

  • npm run typecheck — clean
  • npm run typecheck:evals — clean
  • npm run eval:skill -- --only=github-issue-triage-generic — 100% pass against the real Copilot CLI builder; the generated plan uses gh CLI shell steps with zero product-specific tool references
  • Full npm run eval:skill suite — no regressions (one pre-existing scenario's flakiness reproduced independent of this change and passed on rerun)
  • Manual: built a real skill end-to-end via the app's UI targeting "Generic agent skill", exported the SKILL.md, installed it into Claude Code's skills directory, and successfully invoked it there — confirming the output is usable by an unrelated destination agent, not just Scout/Cowork

Related: #19, #20

Adds a portable Skill Builder target with a neutral capability catalogue
that names no product-specific tool IDs (no workiq_*, no m365_*, no
named browser-tool suite) — only universal primitives every agent has
in some form: a shell, file read/write/search, and HTTP fetch. This
lets a recording be turned into a SKILL.md that works on any
destination agent, not just Scout or Cowork.

Wires "generic" into the SkillArchitecture enum, the ARCHITECTURES/
TARGETS UI metadata, and catalogueFor(); also fixes the SkillBuilderView
reopen-placement inference in Library.tsx, which special-cased "cowork"
and would have silently classified a reopened generic skill as
installable even though only Scout has a live skills folder.

Adds github-issue-triage-generic to the skill-builder eval suite,
cloning the existing gh-vs-browser scenario onto the generic
architecture with a rubric that forbids any vendor-specific tool name.
Ran against the real Copilot CLI builder: 100% pass, the plan
generalizes to gh CLI shell steps with no product-specific tool
references.
@karimad

karimad commented Aug 3, 2026

Copy link
Copy Markdown
Author

@microsoft-github-policy-service agree

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant