Skip to content

Homebrew and GitHub release installs missing builtin skills #298

@suryaiyer95

Description

@suryaiyer95

Problem

When altimate-code is installed via Homebrew (brew install altimate/tap/altimate-code) or from GitHub release archives, builtin skills are never copied to ~/.altimate/builtin/. This means users get zero builtin skills — a significantly degraded experience compared to npm installs.

How skills get installed today

The npm install path works correctly:

  1. publish.ts:32 copies skills into the published wrapper package: cp -r ../../.opencode/skills ./dist/${pkg.name}/skills
  2. postinstall.mjs:136-149 (copySkillsToAltimate()) copies them to ~/.altimate/builtin/ on every install/upgrade
  3. At runtime, skill.ts:111-121 scans ~/.altimate/builtin/ and loads all builtin skills

What Homebrew/GitHub release archives contain

The Homebrew formula (publish.ts:191-244) only installs the bare binary:

def install
  bin.install "altimate"
  bin.install_symlink "altimate" => "altimate-code"
end

The GitHub release archives (build.ts:278-282) are created from dist/${key}/bin/ — just the compiled binary:

// Linux
await $`tar -czf ${archivePath}.tar.gz *`.cwd(`dist/${key}/bin`)
// macOS/Windows  
await $`zip -r ${archivePath}.zip *`.cwd(`dist/${key}/bin`)

Neither path includes the skills/ directory or runs postinstall.mjs.

Impact

Install method Skills copied to ~/.altimate/builtin/? Skills available?
npm install -g altimate-code Yes (via postinstall.mjs) Yes
npm install -g @altimateai/altimate-code Yes (via postinstall.mjs) Yes
brew install altimate/tap/altimate-code No No
Download from GitHub releases No No

Users who install via Homebrew (common on macOS) or download release binaries get no builtin skills — they only get project-local skills from .opencode/skills/ if they happen to be in a project that has them.

Root cause

The builtin skills distribution is coupled to npm's postinstall lifecycle hook. Homebrew and direct binary installs bypass npm entirely, so the skill copy never happens.

Proposed solutions

Option A: Bundle skills into the compiled binary (recommended)

Embed the skills directory into the Bun binary at build time using Bun.file() or a define/import:

  • Skills are just markdown files (SKILL.md) — small enough to embed
  • No filesystem dependency — works for all install methods
  • At startup, extract to ~/.altimate/builtin/ if missing or outdated (check version marker)

Option B: Include skills in release archives + Homebrew formula

  1. Release archives: Include skills/ alongside the binary in tar/zip:

    // Copy skills into dist bin directory before archiving
    await $`cp -r ../../.opencode/skills dist/${key}/bin/skills`
    await $`tar -czf ${archivePath}.tar.gz *`.cwd(`dist/${key}/bin`)
  2. Homebrew formula: Install skills directory and add a post_install step:

    def install
      bin.install "altimate"
      bin.install_symlink "altimate" => "altimate-code"
      (share/"altimate-code/skills").install Dir["skills/*"]
    end
    
    def post_install
      builtin_dir = Pathname.new(Dir.home) / ".altimate" / "builtin"
      builtin_dir.rmtree if builtin_dir.exist?
      cp_r (share/"altimate-code/skills").to_s, builtin_dir.to_s
    end
  3. Binary first-run: Have the binary itself check on startup if ~/.altimate/builtin/ exists, and if not, extract embedded skills or warn the user.

Option C: First-run self-install

Have the binary detect missing skills on first run and copy them from a known location (e.g., adjacent skills/ directory or embedded resource). This is the most resilient approach since it works regardless of install method.

Relevant files

File Role
packages/opencode/script/publish.ts:32 Copies skills into npm package
packages/opencode/script/publish.ts:191-244 Generates Homebrew formula — no skills
packages/opencode/script/build.ts:278-282 Creates release archives — no skills
packages/opencode/script/postinstall.mjs:136-149 Copies skills to ~/.altimate/builtin/ (npm only)
packages/opencode/src/skill/skill.ts:107-121 Loads builtin skills from ~/.altimate/builtin/
.opencode/skills/ Source of truth for builtin skills

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions