No description
  • Python 72.9%
  • Shell 27.1%
Find a file
Noah Kamara 91ad011b68 fix(scripts): run link-skills on the system Python 3.9
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 20:16:35 +01:00
.agents/plugins add(personal) personal Mela plugin 2026-09-11 04:43:08 +02:00
.claude-plugin add(personal) personal Mela plugin 2026-09-11 04:43:08 +02:00
docs refactor(engineering): remove setup skill prerequisites 2026-10-07 00:39:50 +02:00
plugins feat(devices): drive devices with agent-device for every agent 2026-11-02 17:47:22 +01:00
scripts fix(scripts): run link-skills on the system Python 3.9 2026-11-02 20:16:35 +01:00
template Initial Commit 2026-08-01 03:38:34 +02:00
xcode-skills add(swift-skills): xcode skills 2026-09-11 04:49:04 +02:00
.gitignore Initial Commit 2026-08-01 03:38:34 +02:00
README.md feat(scripts): sync the repository to every agent 2026-11-02 20:15:01 +01:00

Skills

Portable Agent Skills distributed as six plugins for Claude Code and Codex, and linked directly into OpenCode. All three load the same skill directories; only the Claude and Codex plugin and marketplace manifests are separate.

Plugin Contents
engineering-skills Review, diagnosis, architecture, prototypes, setup, research, PR writing, visual proof of work, and retrospectives
productivity-skills Grilling, handoffs, teaching, re-pitching, and writing for agents
swift-skills Swift concurrency, testing, SwiftUI, symbol documentation, and DocC
rust-skills Idiomatic Rust development guidance
web-skills Distinctive frontend design guidance
personal Personal workflows, including Mela recipe creation and editing

Matt Pocock skills

The included engineering and productivity skills are based on Matt Pocock's skills 1.3.1. The selected additions are pr and retro.

Engineering includes Matt Pocock's to-tickets skill. Invoke /to-tickets to split a plan, spec, or conversation into vertical slices with blocking dependencies, review the breakdown, and publish to the configured tracker. See the to-tickets guide.

Local adaptations preserve the narrower diagnosing-bugs activation scope and use portable skill-loading instructions. Domain documents use GLOSSARY.md and GLOSSARY-MAP.md; rename existing CONTEXT.md and CONTEXT-MAP.md files in projects that used the previous convention.

Install

Add this repository as a marketplace, then install only the plugins you want.

Claude Code:

claude plugin marketplace add /path/to/skills
claude plugin install swift-skills@noahs-agent-workspace

Codex:

codex plugin marketplace add /path/to/skills
codex plugin add swift-skills@noahs-agent-workspace

For a hosted repository, replace /path/to/skills with its owner/repo identifier.

Sync

After committing, publish the repository and refresh every agent:

./scripts/sync.sh

It pushes, updates the marketplace and installed plugins in Claude Code and Codex, and links new skills into OpenCode. Add --prune after restarting Claude sessions to delete cached plugin versions that no install uses.

Validate

claude plugin validate . --strict
claude plugin validate ./plugins/swift-skills --strict

Create a skill

Run the interactive generator:

./scripts/new-skill.py

It asks which plugin should contain the skill, followed by its purpose, activation context, optional resource directories, license, and compatibility requirements. Pass --plugin engineering, --plugin productivity, --plugin swift, --plugin rust, --plugin web, or --plugin personal to select the destination non-interactively. Use --output-dir <path> for a custom parent directory.

After creation, replace the TODOs in SKILL.md and validate the result:

skills-ref validate plugins/<plugin-name>/skills/<skill-name>

Marketplace installation is the normal path for Claude Code and Codex. OpenCode has no marketplace, so link the skills into it. For standalone local development, symlink every individual skill into Claude Code, Codex, and OpenCode:

./scripts/link-skills.py

Link only one agent, preview changes, or replace stale symlinks:

./scripts/link-skills.py claude
./scripts/link-skills.py codex --dry-run
./scripts/link-skills.py opencode
./scripts/link-skills.py all --replace

The defaults are ~/.claude/skills, $CODEX_HOME/skills (falling back to ~/.codex/skills), and ~/.config/opencode/skills. Use --claude-dir, --codex-dir, or --opencode-dir to override them. Existing real files and directories are never replaced.

OpenCode also reads ~/.claude/skills. When you link into Claude, skip the OpenCode target, or OpenCode sees every skill twice.

Device automation

agent-device drives iOS simulators, Android emulators, and macOS apps, including Electron, for every agent. Install the pinned CLI and its upstream agent-device and dogfood skills:

./scripts/install-agent-device.sh
agent-device doctor

The script installs into ~/.local/share/agent-device, puts a wrapper at ~/.local/bin/agent-device, and links the skills into ~/.claude/skills and ~/.codex/skills. OpenCode picks them up from ~/.claude/skills. To upgrade, bump VERSION in the script and run it again; the CLI and the skills move together.

The wrapper runs Node from a nix GC root, so it works outside project dev shells. On macOS it always uses the Xcode selected by xcode-select, because nix dev shells point DEVELOPER_DIR at a nix Apple SDK that can't build the XCTest runner. It also defaults macOS apps to the native backend, the only one that reads Electron's accessibility tree. When the wrapper changes, run agent-device daemon stop so the next command starts a daemon with the new environment.