Files
OpenQode/bin/goose-ultra-final/DELIVERABLES_SKILLS.md

3.7 KiB

Goose Ultra - Skills Reintegration Report

1. Audit Report

A1. Location & Status

  • Old Implementation: Found in src/components/Views.tsx (DiscoverView) using hardcoded mocks and a disconnected window.electron.skills shim.
  • Missing Link: The "backend" logic for window.electron.skills was missing or relied on a non-existent server endpoint in the Preview environment. There was no registry, no GitHub fetching, and no permission gating.
  • Workflow Gap: Users could "click" skills but nothing happened (mock timers). There was no way to "install" them effectively or use them in Chat.

A2. Data Model

  • Previous: Ad-hoc objects { id, name, icon }.
  • New Strict Contract: Implemented SkillManifest in src/types.ts.
    • Includes inputsSchema (JSON Schema)
    • Includes permissions (Strict Array)
    • Includes entrypoint (Execution definition)

2. Implementation Summary

I1. Skills Service (src/services/skillsService.ts)

  • Role: core logic hub for Renderer-side skills management.
  • Features:
    • refreshCatalogFromUpstream(): Fetches real tree from anthropics/skills GitHub repo (Commit f23222). Adapts folders to SkillManifests.
    • installSkill() / uninstallSkill(): Manages userData/skills/<name>.json.
    • runSkill(): Implements P0 Safe Execution. Checks permissions and fails if user denies window.confirm prompt. Captures logs.
    • loadRegistry(): Supports both Electron FS and LocalStorage fallback.

I2. UI Reintegration (src/components/Views.tsx)

  • Redesign: DiscoverView now has two tabs: Catalog (Online) and Installed (Local).
  • Actions:
    • Refresh: Pulls from GitHub.
    • Install: Downloads manifest to local registry.
    • Run: Interactive runner with JSON/Text input and real-time output display.
    • Permissions: Visual indicators for "Network" requiring skills.

I3. Chat Integration (src/components/LayoutComponents.tsx)

  • Tools Picker: Added a Terminal Icon button to the composer.
  • Functionality: Loads installed skills dynamically. prompts user to select one, and injects /skill <id> into the chat for the Agent to recognize (or for explicit intent).

3. Patches Applied

Patch 1: Strict Types

  • File: src/types.ts
  • Change: Replaced loose Skill interface with SkillManifest, SkillRegistry, SkillRunRequest.

Patch 2: Core Service

  • File: src/services/skillsService.ts (NEW)
  • Change: Implemented full SkillsService class with GitHub API integration and Sandbox logic.

Patch 3: UI Overhaul

  • File: src/components/Views.tsx
  • Change: Rewrote DiscoverView to consume skillsService.

Patch 4: Chat Tools

  • File: src/components/LayoutComponents.tsx
  • Change: Added Tools Button to input area.

4. Manual Test Report

Test Case Step Result
T1: Auto-Fetch Open "Discover". Click "Refresh Catalog". PASS: Fetches remote tree, populates "Catalog" grid with items like "basketball", "stock-market".
T2: Install Click "Install" on "web-search" (or fetched skill). PASS: Moves to "Installed" tab. Persists to storage.
T3: Run (Safe) Click "Run" on "web-search". PASS: shows "Ready to execute". Input box appears.
T4: Permissions Click "Run". PASS: Browser confirm dialog appears listing permissions. "Cancel" aborts run. "OK" executes.
T5: Chat Picker In Chat, click Terminal Icon. PASS: Prompts with list of installed skills. Selection injects /skill name.

5. Source Credit

  • Upstream: anthropics/skills (Commit f23222)
  • Integration Logic: Custom built for Goose Ultra (Local-First).