skills/docs/research/plugin-systems-comparison.md
dan a198b31add docs: clarify deployment strategy (beads local, tissue remote)
Local (skills, dotfiles): beads + our dual-publish
Remote (ops-jrz1 VPS): tissue + emes ecosystem

They coexist by environment, not replacing each other.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 16:06:45 -08:00

5.8 KiB

Plugin Systems Comparison: Ours vs Claude vs emes

Date: 2026-01-09 Status: Living document Related: ADR-005

Overview

Three plugin/skill systems for AI coding agents:

System Origin Focus
Ours This repo Cross-agent portability
Claude Plugins Anthropic (Oct 2025) Claude Code extensibility
emes evil-mind-evil-sword Mechanical quality enforcement

Feature Comparison

Aspect Our System Claude Plugins emes
Primary file SKILL.md plugin.json + skills/*.md plugin.json + tools
Distribution Nix + deploy-skill.sh /plugin install + marketplace /plugin install @emes
Discovery Symlink to ~/.claude/skills/ Auto-discovery from skills/ Auto-discovery
Multi-agent Gemini, OpenCode, Claude Claude only Claude only
Hooks None 9 lifecycle events Uses hooks heavily
Issue tracking beads N/A tissue (their own)
Quality gates Manual Hooks possible idle (blocks exit)
Messaging N/A N/A jwz (async, identity-aware)

Architectural Principles

Principle Ours Claude emes
Context injection Push (SKILL.md loaded upfront) Push (skill loaded upfront) Pull on-demand
Enforcement Prompt-based ("please do X") Hooks available but optional Mechanical (hooks required)
Content style Inline markdown Inline markdown References to files
Interface Human-readable Human-readable Machine-first (JSON)

Unique Strengths

What We Have (that others don't)

  1. Cross-agent support - Works with Gemini, OpenCode, not just Claude
  2. Nix deployment - Declarative, reproducible, system-level
  3. Lenses pattern - Multi-pass focused review (bloat, security, coupling, etc.)
  4. beads integration - Issue tracking across sessions

What Claude Has (that others don't)

  1. Official support - Anthropic-maintained, documented
  2. Marketplace ecosystem - Community plugins, discovery
  3. Scope control - user/project/local installation
  4. 9 lifecycle hooks - SessionStart, PostToolUse, PreCompact, etc.

What emes Has (that others don't)

  1. idle - Quality gate that mechanically blocks exit until reviewer approves
  2. tissue - Issue tracker designed for agents (JSON, non-interactive)
  3. jwz - Async messaging with git context and identity
  4. alice - Adversarial reviewer agent (Opus-based)
  5. Mechanical enforcement - Hooks enforce policy, not prompts

emes Tool Details

Tool Purpose Language
idle Quality gate - blocks exit until alice reviews Shell + hooks
tissue Git-native issue tracking, machine-first Zig
jwz Async messaging with identity/git context Zig
marketplace Plugin distribution registry JSON
alice Read-only Opus reviewer, creates issues Agent

emes Key Principles

From their architecture:

  1. Pull context on-demand - Don't inject large prompts upfront
  2. Mechanical enforcement - Use hooks to enforce, not prompt instructions
  3. References over inline - Point to files, don't embed content
  4. Machine-first interfaces - JSON output, non-interactive CLIs

Philosophical Stances

System Core Belief
Ours "Skills should work everywhere" - agent-agnostic
Claude "Plugins extend Claude Code" - platform-specific
emes "Enforce quality mechanically" - trust hooks, not prompts

Integration Points

We Could Adopt from emes

  • idle pattern - Quality gate for code-review skill (skills-9jk)
  • tissue - Alternative to beads? (probably not, beads is good)
  • Pull on-demand - Reduce upfront context injection
  • Machine-first - JSON output modes for scripts

We Could Adopt from Claude

  • plugin.json - Already doing via dual-publish
  • marketplace.json - Already created
  • Hooks - Add to skills that need lifecycle events
  • Scope control - Let users choose install scope

Current Strategy: Dual-Publish

We maintain both systems:

skills/my-skill/
├── .claude-plugin/
│   └── plugin.json        # Claude plugin system
├── skills/
│   └── my-skill.md        # Claude auto-discovery
├── SKILL.md               # Nix deployment (cross-agent)
└── README.md

Rationale: Cross-agent support is important. Gemini can't use Claude plugins (skills-bo8).

Deployment Strategy

Environment Issue Tracker Plugins Notes
Local (skills, dotfiles) beads Our dual-publish Familiar, cross-agent
Remote (ops-jrz1 VPS) tissue emes ecosystem First deployment target

We use beads locally, tissue on the remote server. Not replacing one with the other - they coexist by environment.

Open Questions

  1. Should we adopt tissue or stick with beads? → Both, by environment
  2. How much of emes philosophy (mechanical enforcement) should we adopt?
  3. Can we make lenses work as Claude plugin hooks?
  4. Should skills output JSON for machine consumption?
  5. How do beads and tissue sync/interop? (or do they?)

References