nebari-dev / nebari-dev/nebari-frames

Link the Frame skills slot to real registry skills

Open
#53 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

needs: discussion 💬 type: enhancement 💅🏼
Dominant language
Go
Stars
2
Forks
1
Avg merge
10h 55m
Merged PRs (30d)
9

Description

Motivation

A Frame's skills slot is currently a list of bare strings (backend/internal/frames/schema.go), e.g.:

skills:
  - proposal-writing
  - technical-writing

It names relevant skills but connects to nothing. Meanwhile skillsctl already hosts Claude Code skills as a sibling artifact type on the same registry foundation (see the migration design doc's "Approach A": Frames and Skills share infrastructure but keep separate tables/services). The design doc also flags the typed-list slots as "conservative; richer structures are easy additive evolutions later," and the SkillSource enum (INTERNAL/FEDERATED) already anticipates resolving across registries.

So: let a Frame's skills entries resolve to real skills and render as links.

Proposal

  • Schema: allow a skills entry to be a reference (skill name + optional version/source) alongside the existing bare string. Bare strings keep working (back-compatible; unknown-key rejection stays).
  • Resolution: when resolving/composing a Frame, resolve each reference against the skill registry (internal skillsctl skills now, FEDERATED sources later) to a title plus an install/detail link.
  • Rendering: MCP get_frame output and the web frame view render resolvable skills as links (install command / skill detail page), not plain text.

Scope decision

  • Link-only (recommended): Frames references skills; skillsctl stays the host of the skill bundles. Purely additive, respects the deliberate skillsctl/Frames separation.
  • Host skill bundles in Frames: Frames stores/serves the multi-file skill packages itself. Much bigger (file storage, multi-file versioning, executable-content security) and re-merges two projects the migration doc split on purpose. Since skillsctl already holds the bundles, linking gets the same "include relevant skills in a Frame" outcome without that weight.

Acceptance criteria

  • A Frame can declare skills that resolve to real registry skills.
  • Bare-string skills still validate (back-compat).
  • MCP get_frame and the web view render resolvable skills as links.
  • Unresolvable references degrade gracefully (render the name, note it's unresolved) rather than failing the Frame.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with backend/internal/frames/schema.go and trace how Frame skills are validated, resolved, and composed. Then locate the MCP get_frame entry point and the web frame view to understand their current rendering paths. Done means reference entries resolve to skill title and links, bare strings remain valid, and unresolved names render gracefully.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
api, backend, web-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.