Skip to content

Support .md skill files as user-configurable default skills#5392

Draft
lukemelia wants to merge 1 commit into
mainfrom
default-skills-on-system-card
Draft

Support .md skill files as user-configurable default skills#5392
lukemelia wants to merge 1 commit into
mainfrom
default-skills-on-system-card

Conversation

@lukemelia

Copy link
Copy Markdown
Contributor

What

Lets a user's active System Card supply the skills enabled by default in new AI assistant rooms, referencing the new .md skill files (MarkdownDef whose boxel.kind: skill frontmatter makes them a skill source) rather than only legacy Skill cards.

Previously the default LLM model for new rooms came from the user's system card, but default skills were a hardcoded list in the host pointing at Skill/*.json cards — not user-configurable and card-only.

Changes

  • SystemCard — new defaultSkills = linksToMany(MarkdownDef) field + a "Default Skills" section in the isolated view.
  • loadDefaultSkills(submode) now returns skill ids: the system card's defaultSkills when set (applied to every new room, mode-agnostic), otherwise the hardcoded fallback — which is repointed from legacy Skill/* cards to skills/*/SKILL.md.
  • Room creation (fork A)CreateAIAssistantRoomInput gains enabledSkillIds/disabledSkillIds; create-ai-assistant-room resolves ids kind-agnostically via loadSkillSource (splitting .md file uploads vs Skill card uploads, gathering commands via getSkillSourceCommands) and bakes them into the room's initial state.
  • "Add same skills" is now id-based, so .md skills survive that flow (previously dropped by an isCardInstance filter).
  • Seed — the default SystemCard instance (catalog realm) is populated with the three default .md skills via universal @cardstack/skills/... refs. (Committed separately in the catalog contents repo.)

When a user has no system card, or it lists no skills, new rooms fall back to the (now .md) hardcoded defaults — no regression out of the box.

Verification

  • ✅ glint type-check (ember-tsc --noEmit) clean across host app + tests.
  • ✅ eslint clean on changed host files. Base .gts "parse errors" under bare/lint-staged eslint are a known content-tag-preprocessor artifact (reproduce on untouched .gts); the glint path is clean.
  • ⏳ Host acceptance + matrix suites need CI — the default-skill id change ripples through several skill tests (they import the repointed constants; the live test realm-server serves the .md skills).

Notes / follow-ups

  • Bundled system-card.d.ts is a gitignored build artifact, regenerated from the source change.
  • The catalog default.json seed lives in the nested catalog contents repo and needs its own PR/commit.
  • Worth confirming in a running env: cross-realm universal-ref resolution for the seeded defaultSkills, and that linksToMany defaultSkills ids are available on the loaded system card at room-creation time.

🤖 Generated with Claude Code

Add a `defaultSkills` field to `SystemCard` so a user's active system card
supplies the skills enabled by default in new AI assistant rooms, referencing
`.md` skill files (`MarkdownDef` with `boxel.kind: skill` frontmatter).

- SystemCard: `defaultSkills = linksToMany(MarkdownDef)` + a "Default Skills"
  section in the isolated view.
- `loadDefaultSkills(submode)` now returns skill ids — from the system card's
  `defaultSkills` when set (mode-agnostic), else the hardcoded fallback, which
  is repointed from legacy `Skill/*` cards to `skills/*/SKILL.md`.
- Room creation resolves skill ids kind-agnostically (`.md` files or legacy
  `Skill` cards) via `loadSkillSource`, splitting card vs file uploads;
  `CreateAIAssistantRoomInput` gains `enabledSkillIds`/`disabledSkillIds`.
- "Add same skills" is now id-based so `.md` skills survive that flow.
- Seed the default SystemCard with the three default `.md` skills.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Preview deployments

Host Test Results

    1 files      1 suites   2h 15m 5s ⏱️
3 269 tests 3 227 ✅ 15 💤  1 ❌ 26 🔥
3 287 runs  3 219 ✅ 15 💤 27 ❌ 26 🔥

Results for commit 4635503.

For more details on these errors, see this check.

Realm Server Test Results

    1 files      1 suites   9m 50s ⏱️
1 674 tests 1 674 ✅ 0 💤 0 ❌
1 753 runs  1 753 ✅ 0 💤 0 ❌

Results for commit 4635503.

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