Skip to content

Allow importing a skill from a GitHub URL #5

Description

@thesobercoder

Importing currently means having the skill on disk already: bun scripts/import.ts /path/to/skills (README.md:225) walks local directories. There is no way to import from a URL, and no import route in the HTTP API or UI.

That is an awkward gap for a self-hosted library, because the natural way to share a skill is to link a repo or a folder in one. Pasting a GitHub URL is the obvious entry point.

What it could accept

  • A repo: https://github.com/owner/repo
  • A folder inside one: https://github.com/owner/repo/tree/main/skills/my-skill
  • Ideally a single file: https://github.com/owner/repo/blob/main/my-skill/SKILL.md

Things worth deciding up front

  • Private repos. A public-only fetch needs no credentials. Private support means asking for a token and storing it encrypted — the same scheme already used for the Jev key and Executor credentials (src/server/secret-storage.ts).
  • SKILL.md at the root. The existing import requires SKILL.md in each skill directory (scripts/import.ts:42), so a fetched folder should be validated the same way rather than inventing a second rule.
  • Frontmatter name must match the id. inspectSkillPackage enforces frontmatter.name === id (src/skill-manifest.ts:190). A URL import needs a clear policy on which one wins, or a clear error.
  • Integrity and limits. Portability limits are 512 files / 16 MiB (src/skill-manifest.ts:106-109). A fetch should enforce those before writing, not after.
  • No code execution. Skillbox never runs uploaded code, and a URL import should keep that property: fetch bytes, verify, publish. No installs, no build steps.
  • Path safety. Reuse the existing safePath / validPath checks so a crafted archive or repo cannot traverse out of the skill directory.
  • Secret scanning. scripts/import.ts:105-114 already quarantines recognizable secret patterns as a heuristic. A URL import should run the same check — it matters more here, since the source is arbitrary and remote.
  • Pinning. A URL import resolves to a moving branch. Recording the resolved commit SHA with the revision would make the import reproducible.

Why this is worth doing

It turns the library from "skills I already have locally" into "skills I can pull from anywhere," which is the main reason to run a shared library at all. It also pairs well with the existing export format (skillbox-export/v1), so a repo could be a published library that others import directly.

Happy to prototype this if it would help.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions