Skip to content

Architecture

Systematic is designed as a lightweight yet powerful extension for OpenCode. It leverages native plugin hooks to inject structured workflows and specialized agents into your development environment.

The plugin is divided into two main parts:

  1. TypeScript Source (src/): The core logic that handles plugin registration, asset discovery, config validation, and model availability resolution.
  2. Bundled Assets (skills/ and agents/): Structured engineering workflows and specialized agent definitions that are automatically discovered and registered by the plugin.

Systematic utilizes three primary OpenCode plugin hooks to integrate seamlessly:

The config hook is responsible for discovery and merging. It recursively walks the bundled asset directories (skills/ and agents/) and merges their definitions into your active OpenCode configuration. This ensures that agents like @architecture-strategist are available without manual setup.

The plugin registers a custom tool called systematic_skill. This tool is used by the AI to load the full content of bundled skills on demand. While OpenCode has a native skill tool, systematic_skill provides optimized access to the plugin’s bundled content.

This hook allows Systematic to inject a “bootstrap” instruction into the AI’s system prompt at the start of every conversation. This instruction (from the using-systematic skill) teaches the AI how to:

  • Discover available workflows.
  • Use the systematic_skill tool.
  • Follow the “invoke before response” discipline.

For developers looking to contribute or understand the implementation, here are the key modules:

| Symbol | Role | Location | |--------|------|----------| | SystematicPlugin | Main plugin factory | src/index.ts | | createConfigHandler | Implements the config hook logic | src/lib/config-handler.ts | | createSkillTool | Implements the systematic_skill tool | src/lib/skill-tool.ts | | getBootstrapContent | Handles system prompt injection | src/lib/bootstrap.ts | | convertContent | Claude Code-to-OpenCode format conversion (CLI) | src/lib/converter.ts | | findSkillsInDir | Discovers bundled skills | src/lib/skills.ts |