Skip to content
Development
Skill

/aminet-installer

Aminet package installation: LhA/LZX extraction, Amiga filesystem mapping, dependency detection, install tracking, and scan gate enforcement. Use when installing, extracting, or uninstalling Amiga packages.

From plugin
gsd-skill-creator
71102 skills61 agents26 commands1 MCP

Claude Code

$ npx -y skills add Tibsfox/gsd-skill-creator --skill aminet-installer --agent claude-code

SKILL.md

aminet-installer.SKILL.md
name: aminet-installer
description: "Aminet package installation: LhA/LZX extraction, Amiga filesystem mapping, dependency detection, install tracking, and scan gate enforcement. Use when installing, extracting, or uninstalling Amiga packages."
metadata:
  extensions:
    gsd-skill-creator:
      triggers:
        intents:
          - "aminet.*install"
          - "aminet.*extract"
          - "aminet.*uninstall"
          - "scan.*gate"
        files:
          - "src/aminet/lha-extractor.ts"
          - "src/aminet/lzx-extractor.ts"
          - "src/aminet/filesystem-mapper.ts"
          - "src/aminet/dependency-detector.ts"
          - "src/aminet/install-tracker.ts"
          - "src/aminet/scan-gate.ts"
        contexts:
          - "aminet installation"
          - "archive extraction"
        threshold: 0.7
      token_budget: "1.0%"
      version: 1
      enabled: true
      plan_origin: "242-aminet-integration"
      phase_origin: "242"

Aminet Installer

Purpose

Manages the complete Aminet package installation pipeline: extraction of LhA and LZX archives using native tools, mapping extracted files to Amiga filesystem conventions (11 assigns), dependency detection from .readme metadata, install tracking with atomic manifest persistence, and scan gate enforcement ensuring packages are verified clean before installation.

Capabilities

  • LhA extraction via lhasa with Zip-Slip path traversal prevention
  • Volume prefix stripping for clean extraction paths
  • 30-second extraction timeout for safety
  • LZX extraction via unlzx with cwd workaround (no output dir flag)
  • Tool validator with platform-specific install guidance (apt/brew)
  • unlzx exit-code-2 detection for partial extraction handling
  • Amiga filesystem mapping with 11 standard assigns (S:, C:, LIBS:, DEVS:, etc.)
  • Case-insensitive assign lookup matching Amiga conventions
  • Software/ default placement for unmapped paths
  • placeFiles with SHA-256 tracking and temp directory cleanup
  • 5 dependency types: package, os_version, hardware, library, unknown
  • Dependency detection from .readme Requires: field
  • Package deps cross-referenced against mirror state for availability
  • Install tracker with atomic manifest persistence
  • Slugified manifest filenames for cross-platform safety
  • Uninstall with file removal and directory cleanup
  • Scan gate enforcing INS-07 (refuse unscanned), INS-08 (refuse infected), INS-09 (suspicious override via confirmFn)
  • installPackage orchestrator: gate -> extract -> place -> deps -> track -> state

Key Modules

| Module | Purpose | |--------|---------| | `src/aminet/lha-extractor.ts` | LhA archive extraction via lhasa with Zip-Slip prevention | | `src/aminet/lzx-extractor.ts` | LZX archive extraction via unlzx with cwd workaround | | `src/aminet/filesystem-mapper.ts` | Maps extracted files to Amiga assigns (11 standard mappings) | | `src/aminet/dependency-detector.ts` | Detects 5 dependency types from .readme Requires: field | | `src/aminet/install-tracker.ts` | Atomic manifest persistence with install/uninstall tracking | | `src/aminet/scan-gate.ts` | Enforces scan requirements before allowing installation |

Usage Examples

**Extract an LhA archive:**

import { extractLha } from './lha-extractor.js';

const result = await extractLha(archivePath, { outputDir: './extracted', timeout: 30000 });
// result.files: extracted file paths with Zip-Slip protection

**Map to Amiga filesystem:**

import { placeFiles } from './filesystem-mapper.js';

const placed = await placeFiles(extractedFiles, {
  targetDir: './amiga-root',
  assigns: defaultAssigns,
});
// Files mapped to S:, C:, LIBS:, etc. with SHA-256 tracking

**Install with scan gate:**

import { installPackage } from './scan-gate.js';

const result = await installPackage(packagePath, {
  scanReport, // Must be clean or user-confirmed suspicious
  outputDir: './amiga-root',
  manifestDir: './manifests',
  confirmFn: async (msg) => promptUser(msg), // For suspicious overrides
});

**Detect dependencies:**

import { detectDependencies } from './dependency-detector.js';

const deps = detectDependencies(readmeText, mirrorState);
// deps: [{ type: 'package', name: 'util/libs/AHI.lha', available: true }, ...]

Dependencies

  • `lhasa` CLI tool for LhA extraction (installed via system package manager)
  • `unlzx` CLI tool for LZX extraction
  • Tool validator provides platform-specific install guidance
  • Aminet scanner (aminet-scanner skill) for scan gate integration
  • Node.js `node:crypto` for SHA-256 file tracking
  • Node.js `node:child_process` for tool execution

Token Budget Rationale

1.0% budget reflects the 6 modules covering extraction, filesystem mapping, dependencies, tracking, and scan gate. The installation pipeline is largely sequential and well-contained, requiring moderate context for the assign mapping and scan gate enforcement logic.

Read more
@tibsfox
Ships withgsd-skill-creator

An adaptive learning and coprocessor architecture for Claude Code, built as an extension to GSD (open-gsd)

71102 skills61 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
71
Star history of Tibsfox/gsd-skill-creator on GitHub, a chart by star-history.com

Other skills on gsd-skill-creator.

aminet-index

aminet-index

Manages Aminet INDEX infrastructure: fetch, parse, cache, and incremental update of ~84,000-entry package database. Use when…

aminet-mirror

aminet-mirror

Selective Aminet package mirroring: single-package fetch, integrity verification, mirror state tracking, bulk download, and sync…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about aminet-installer.

Which coding agents can use aminet-installer?
aminet-installer installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.