Skip to content

fix: skill alias collision with a non-symlink path permanently breaks session bootstrap for the whole org #108

Description

@AsperforMias

Problem

exposeNativeSkillAliases throws when a desired skill name collides with an existing non-symlink entry in the alias root (src/runtimes/skill-materialization.ts:166-168); it likewise throws if .agents exists as a non-directory (:76-87).

The alias root (<sharedRootPath>/.agents/skills/) lives in the shared, persistent org root and is agent-facing: provider CLIs discover and can create skills there. Nothing stops an agent — or a user, via the provider CLI's own skill-creation flow — from creating a real directory at .agents/skills/<name>. When the org later distributes a catalog skill with the same name (the driver's name pattern ^[a-z0-9-]+$ matches typical agent-created skill names), every session in that org fails at bootstrap.

Reproduction

  1. In an org's shared root: mkdir -p .agents/skills/foo (what a provider CLI's skill scaffolding would do).
  2. Distribute a catalog skill named foo to that org.
  3. Start any session in the org → bootstrap throws collides with an existing path; every subsequent session fails the same way. No recovery short of manual filesystem intervention.

Impact

Persistent, org-wide denial of service triggered by a plausible, non-malicious action.

Proposed direction

Degrade per-skill instead of failing the boot: skip the colliding skill's native alias, surface a warning in diagnostics, and keep prompt-injected exposure working. Optionally quarantine/rename the conflicting path when ownership is clear.

Acceptance criteria

  • A colliding path disables only that skill's native alias; the session starts.
  • The conflict is visible in diagnostics.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions