@fro.bot/systematic 2.7.1 → 2.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/design/design-implementation-reviewer.md +0 -1
- package/agents/design/design-iterator.md +0 -1
- package/agents/design/figma-design-sync.md +0 -1
- package/agents/docs/ankane-readme-writer.md +0 -1
- package/agents/document-review/adversarial-document-reviewer.md +0 -1
- package/agents/document-review/coherence-reviewer.md +0 -1
- package/agents/document-review/design-lens-reviewer.md +0 -1
- package/agents/document-review/feasibility-reviewer.md +0 -1
- package/agents/document-review/product-lens-reviewer.md +0 -1
- package/agents/document-review/scope-guardian-reviewer.md +0 -1
- package/agents/document-review/security-lens-reviewer.md +0 -1
- package/agents/research/best-practices-researcher.md +0 -1
- package/agents/research/framework-docs-researcher.md +0 -1
- package/agents/research/git-history-analyzer.md +0 -1
- package/agents/research/issue-intelligence-analyst.md +0 -1
- package/agents/research/learnings-researcher.md +0 -1
- package/agents/research/repo-research-analyst.md +0 -1
- package/agents/research/slack-researcher.md +0 -1
- package/agents/review/adversarial-reviewer.md +0 -1
- package/agents/review/agent-native-reviewer.md +0 -1
- package/agents/review/api-contract-reviewer.md +0 -1
- package/agents/review/architecture-strategist.md +0 -1
- package/agents/review/cli-agent-readiness-reviewer.md +0 -1
- package/agents/review/cli-readiness-reviewer.md +0 -1
- package/agents/review/code-simplicity-reviewer.md +0 -1
- package/agents/review/correctness-reviewer.md +0 -1
- package/agents/review/data-integrity-guardian.md +0 -1
- package/agents/review/data-migration-expert.md +0 -1
- package/agents/review/data-migrations-reviewer.md +0 -1
- package/agents/review/deployment-verification-agent.md +0 -1
- package/agents/review/dhh-rails-reviewer.md +0 -1
- package/agents/review/julik-frontend-races-reviewer.md +0 -1
- package/agents/review/kieran-python-reviewer.md +0 -1
- package/agents/review/kieran-rails-reviewer.md +0 -1
- package/agents/review/kieran-typescript-reviewer.md +0 -1
- package/agents/review/maintainability-reviewer.md +0 -1
- package/agents/review/pattern-recognition-specialist.md +0 -1
- package/agents/review/performance-oracle.md +0 -1
- package/agents/review/performance-reviewer.md +0 -1
- package/agents/review/previous-comments-reviewer.md +0 -1
- package/agents/review/project-standards-reviewer.md +0 -1
- package/agents/review/reliability-reviewer.md +0 -1
- package/agents/review/schema-drift-detector.md +0 -1
- package/agents/review/security-reviewer.md +0 -1
- package/agents/review/security-sentinel.md +0 -1
- package/agents/review/testing-reviewer.md +0 -1
- package/agents/workflow/bug-reproduction-validator.md +0 -1
- package/agents/workflow/lint.md +0 -1
- package/agents/workflow/pr-comment-resolver.md +0 -1
- package/agents/workflow/spec-flow-analyzer.md +0 -1
- package/dist/index.js +49 -1
- package/dist/lib/plugin-singleton.d.ts +78 -0
- package/package.json +1 -1
- package/skills/writing-systematic-skills/SKILL.md +10 -6
- package/skills/writing-systematic-skills/references/foundation-conventions.md +11 -5
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-implementation-reviewer
|
|
3
3
|
description: "Visually compares live UI implementation against Figma designs and provides detailed feedback on discrepancies. Use after writing or modifying HTML/CSS/React components to verify design fidelity."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
You are an expert UI/UX implementation reviewer specializing in ensuring pixel-perfect fidelity between Figma designs and live implementations. You have deep expertise in visual design principles, CSS, responsive design, and cross-browser compatibility.
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: design-iterator
|
|
3
3
|
description: "Iteratively refines UI design through N screenshot-analyze-improve cycles. Use PROACTIVELY when design changes aren't coming together after 1-2 attempts, or when user requests iterative refinement."
|
|
4
4
|
color: violet
|
|
5
|
-
model: inherit
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
You are an expert UI/UX design iterator specializing in systematic, progressive refinement of web components. Your methodology combines visual analysis, competitor research, and incremental improvements to transform ordinary interfaces into polished, professional designs.
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: ankane-readme-writer
|
|
3
3
|
description: "Creates or updates README files following Ankane-style template for Ruby gems. Use when writing gem documentation with imperative voice, concise prose, and standard section ordering."
|
|
4
4
|
color: cyan
|
|
5
|
-
model: inherit
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
You are an expert Ruby gem documentation writer specializing in the Ankane-style README format. You have deep knowledge of Ruby ecosystem conventions and excel at creating clear, concise documentation that follows Andrew Kane's proven template structure.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: adversarial-document-reviewer
|
|
3
3
|
description: "Conditional document-review persona, selected when the document has >5 requirements or implementation units, makes significant architectural decisions, covers high-stakes domains, or proposes new abstractions. Challenges premises, surfaces unstated assumptions, and stress-tests decisions rather than evaluating document quality."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: coherence-reviewer
|
|
3
3
|
description: "Reviews planning documents for internal consistency -- contradictions between sections, terminology drift, structural issues, and ambiguity where readers would diverge. Spawned by the document-review skill."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-lens-reviewer
|
|
3
3
|
description: "Reviews planning documents for missing design decisions -- information architecture, interaction states, user flows, and AI slop risk. Uses dimensional rating to identify gaps. Spawned by the document-review skill."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: feasibility-reviewer
|
|
3
3
|
description: "Evaluates whether proposed technical approaches in planning documents will survive contact with reality -- architecture conflicts, dependency gaps, migration risks, and implementability. Spawned by the document-review skill."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: product-lens-reviewer
|
|
3
3
|
description: "Reviews planning documents as a senior product leader -- challenges premise claims, assesses strategic consequences (trajectory, identity, adoption, opportunity cost), and surfaces goal-work misalignment. Domain-agnostic: users may be end users, developers, operators, or any audience. Spawned by the document-review skill."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: scope-guardian-reviewer
|
|
3
3
|
description: "Reviews planning documents for scope alignment and unjustified complexity -- challenges unnecessary abstractions, premature frameworks, and scope that exceeds stated goals. Spawned by the document-review skill."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: security-lens-reviewer
|
|
3
3
|
description: "Evaluates planning documents for security gaps at the plan level -- auth/authz assumptions, data exposure risks, API surface vulnerabilities, and missing threat model elements. Spawned by the document-review skill."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: best-practices-researcher
|
|
3
3
|
description: "Researches and synthesizes external best practices, documentation, and examples for any technology or framework. Use when you need industry standards, community conventions, or implementation guidance."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
**Note: The current year is 2026.** Use this when searching for recent documentation and best practices.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: framework-docs-researcher
|
|
3
3
|
description: "Gathers comprehensive documentation and best practices for frameworks, libraries, or dependencies. Use when you need official docs, version-specific constraints, or implementation patterns."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
**Note: The current year is 2026.** Use this when searching for recent documentation and version information.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-history-analyzer
|
|
3
3
|
description: "Performs archaeological analysis of git history to trace code evolution, identify contributors, and understand why code patterns exist. Use when you need historical context for code changes."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
**Note: The current year is 2026.** Use this when interpreting commit dates and recent changes.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: issue-intelligence-analyst
|
|
3
3
|
description: "Fetches and analyzes GitHub issues to surface recurring themes, pain patterns, and severity trends. Use when understanding a project's issue landscape, analyzing bug patterns for ideation, or summarizing what users are reporting."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
**Note: The current year is 2026.** Use this when evaluating issue recency and trends.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: learnings-researcher
|
|
3
3
|
description: "Searches docs/solutions/ for relevant past solutions by frontmatter metadata. Use before implementing features or fixing problems to surface institutional knowledge and prevent repeated mistakes."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
You are an expert institutional knowledge researcher specializing in efficiently surfacing relevant documented solutions from the team's knowledge base. Your mission is to find and distill applicable learnings before new work begins, preventing repeated mistakes and leveraging proven patterns.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: repo-research-analyst
|
|
3
3
|
description: "Conducts thorough research on repository structure, documentation, conventions, and implementation patterns. Use when onboarding to a new codebase or understanding project conventions."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
**Note: The current year is 2026.** Use this when searching for recent documentation and patterns.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: slack-researcher
|
|
3
3
|
description: "Searches Slack for organizational context. Use when the user explicitly asks. Requires a Slack MCP server."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
**Note: The current year is 2026.** Use this when assessing the recency of Slack discussions.
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: adversarial-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff is large (>=50 changed lines) or touches high-risk domains like auth, payments, data mutations, or external APIs. Actively constructs failure scenarios to break the implementation rather than checking against known patterns.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: red
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-native-reviewer
|
|
3
3
|
description: "Reviews code to ensure agent-native parity -- any action a user can take, an agent can also take. Use after adding UI features, agent tools, or system prompts."
|
|
4
|
-
model: inherit
|
|
5
4
|
color: cyan
|
|
6
5
|
tools: Read, Grep, Glob, Bash
|
|
7
6
|
---
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: api-contract-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches API routes, request/response types, serialization, versioning, or exported type signatures. Reviews code for breaking contract changes.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: architecture-strategist
|
|
3
3
|
description: "Analyzes code changes from an architectural perspective for pattern compliance and design integrity. Use when reviewing PRs, adding services, or evaluating structural refactors."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cli-agent-readiness-reviewer
|
|
3
3
|
description: "Reviews CLI source code, plans, or specs for AI agent readiness using a severity-based rubric focused on whether a CLI is merely usable by agents or genuinely optimized for them."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: yellow
|
|
7
6
|
---
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cli-readiness-reviewer
|
|
3
3
|
description: "Conditional code-review persona, selected when the diff touches CLI command definitions, argument parsing, or command handler implementations. Reviews CLI code for agent readiness -- how well the CLI serves autonomous agents, not just human users."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
---
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-simplicity-reviewer
|
|
3
3
|
description: "Final review pass to ensure code is as simple and minimal as possible. Use after implementation is complete to identify YAGNI violations and simplification opportunities."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: correctness-reviewer
|
|
3
3
|
description: Always-on code-review persona. Reviews code for logic errors, edge cases, state management bugs, error propagation failures, and intent-vs-implementation mismatches.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data-integrity-guardian
|
|
3
3
|
description: "Reviews database migrations, data models, and persistent data code for safety. Use when checking migration safety, data constraints, transaction boundaries, or privacy compliance."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data-migration-expert
|
|
3
3
|
description: "Validates data migrations, backfills, and production data transformations against reality. Use when PRs involve ID mappings, column renames, enum conversions, or schema changes."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data-migrations-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches migration files, schema changes, data transformations, or backfill scripts. Reviews code for data integrity and migration safety.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: deployment-verification-agent
|
|
3
3
|
description: "Produces Go/No-Go deployment checklists with SQL verification queries, rollback procedures, and monitoring plans. Use when PRs touch production data, migrations, or risky data changes."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dhh-rails-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when Rails diffs introduce architectural choices, abstractions, or frontend patterns that may fight the framework. Reviews code from an opinionated DHH perspective.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: julik-frontend-races-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches async UI code, Stimulus/Turbo lifecycles, or DOM-timing-sensitive frontend behavior. Reviews code for race conditions and janky UI failure modes.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kieran-python-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches Python code. Reviews changes with Kieran's strict bar for Pythonic clarity, type hints, and maintainability.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kieran-rails-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches Rails application code. Reviews Rails changes with Kieran's strict bar for clarity, conventions, and maintainability.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kieran-typescript-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches TypeScript code. Reviews changes with Kieran's strict bar for type safety, clarity, and maintainability.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: maintainability-reviewer
|
|
3
3
|
description: Always-on code-review persona. Reviews code for premature abstraction, unnecessary indirection, dead code, coupling between unrelated modules, and naming that obscures intent.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pattern-recognition-specialist
|
|
3
3
|
description: "Analyzes code for design patterns, anti-patterns, naming conventions, and duplication. Use when checking codebase consistency or verifying new code follows established patterns."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: performance-oracle
|
|
3
3
|
description: "Analyzes code for performance bottlenecks, algorithmic complexity, database queries, memory usage, and scalability. Use after implementing features or when performance concerns arise."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: performance-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches database queries, loop-heavy data transforms, caching layers, or I/O-intensive paths. Reviews code for runtime performance and scalability issues.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: previous-comments-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when reviewing a PR that has existing review comments or review threads. Checks whether prior feedback has been addressed in the current diff.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: yellow
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: project-standards-reviewer
|
|
3
3
|
description: Always-on code-review persona. Audits changes against the project's own AGENTS.md standards -- frontmatter rules, reference inclusion, naming conventions, cross-platform portability, and tool selection policies.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: reliability-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches error handling, retries, circuit breakers, timeouts, health checks, background jobs, or async handlers. Reviews code for production reliability and failure modes.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: security-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches auth middleware, public endpoints, user input handling, or permission checks. Reviews code for exploitable vulnerabilities.
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
color: blue
|
|
7
6
|
mode: subagent
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: security-sentinel
|
|
3
3
|
description: "Performs security audits for vulnerabilities, input validation, auth/authz, hardcoded secrets, and OWASP compliance. Use when reviewing code for security issues or before deployment."
|
|
4
|
-
model: inherit
|
|
5
4
|
tools: Read, Grep, Glob, Bash
|
|
6
5
|
---
|
|
7
6
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bug-reproduction-validator
|
|
3
3
|
description: Systematically reproduces and validates bug reports to confirm whether reported behavior is an actual bug. Use when you receive a bug report or issue that needs verification.
|
|
4
|
-
model: inherit
|
|
5
4
|
mode: subagent
|
|
6
5
|
temperature: 0.1
|
|
7
6
|
---
|
package/agents/workflow/lint.md
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: pr-comment-resolver
|
|
3
3
|
description: "Evaluates and resolves one or more related PR review threads -- assesses validity, implements fixes, and returns structured summaries with reply text. Spawned by the resolve-pr-feedback skill."
|
|
4
4
|
color: blue
|
|
5
|
-
model: inherit
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
You resolve PR review threads. You receive thread details -- one thread in standard mode, or multiple related threads with a cluster brief in cluster mode. Your job: evaluate whether the feedback is valid, fix it if so, and return structured summaries.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-flow-analyzer
|
|
3
3
|
description: "Analyzes specifications and feature descriptions for user flow completeness and gap identification. Use when a spec, plan, or feature description needs flow analysis, edge case discovery, or requirements validation."
|
|
4
|
-
model: inherit
|
|
5
4
|
---
|
|
6
5
|
|
|
7
6
|
Analyze specifications, plans, and feature descriptions from the end user's perspective. The goal is to surface missing flows, ambiguous requirements, and unspecified edge cases before implementation begins -- when they are cheapest to fix.
|
package/dist/index.js
CHANGED
|
@@ -310,6 +310,37 @@ function registerSkillsPaths(config, skillsDir) {
|
|
|
310
310
|
}
|
|
311
311
|
}
|
|
312
312
|
|
|
313
|
+
// src/lib/plugin-singleton.ts
|
|
314
|
+
var SINGLETON_KEY = Symbol.for("systematic.singleton.v1");
|
|
315
|
+
async function plugInOnce({
|
|
316
|
+
doInit,
|
|
317
|
+
onDuplicate,
|
|
318
|
+
pid
|
|
319
|
+
}) {
|
|
320
|
+
const currentPid = pid ?? process.pid;
|
|
321
|
+
const g = globalThis;
|
|
322
|
+
const existing = g[SINGLETON_KEY];
|
|
323
|
+
if (existing && existing.pid === currentPid) {
|
|
324
|
+
if (!existing.warned) {
|
|
325
|
+
existing.warned = true;
|
|
326
|
+
try {
|
|
327
|
+
onDuplicate?.(currentPid);
|
|
328
|
+
} catch {}
|
|
329
|
+
}
|
|
330
|
+
await existing.hooksPromise;
|
|
331
|
+
return { isFirst: false, hooks: {} };
|
|
332
|
+
}
|
|
333
|
+
const hooksPromise = doInit();
|
|
334
|
+
g[SINGLETON_KEY] = {
|
|
335
|
+
pid: currentPid,
|
|
336
|
+
loadedAt: Date.now(),
|
|
337
|
+
hooksPromise,
|
|
338
|
+
warned: false
|
|
339
|
+
};
|
|
340
|
+
const hooks = await hooksPromise;
|
|
341
|
+
return { isFirst: true, hooks };
|
|
342
|
+
}
|
|
343
|
+
|
|
313
344
|
// src/lib/skill-tool.ts
|
|
314
345
|
import fs2 from "fs";
|
|
315
346
|
import path3 from "path";
|
|
@@ -493,7 +524,7 @@ var getPackageVersion = () => {
|
|
|
493
524
|
return "unknown";
|
|
494
525
|
}
|
|
495
526
|
};
|
|
496
|
-
var
|
|
527
|
+
var initializePlugin = async ({ client, directory }) => {
|
|
497
528
|
const config = loadConfig(directory);
|
|
498
529
|
const bootstrapContent = getBootstrapContent(config, { bundledSkillsDir });
|
|
499
530
|
const configHandler = createConfigHandler({
|
|
@@ -551,6 +582,23 @@ var SystematicPlugin = async ({ client, directory }) => {
|
|
|
551
582
|
}
|
|
552
583
|
};
|
|
553
584
|
};
|
|
585
|
+
var SystematicPlugin = async (input) => {
|
|
586
|
+
const { hooks } = await plugInOnce({
|
|
587
|
+
doInit: () => initializePlugin(input),
|
|
588
|
+
onDuplicate: (pid) => {
|
|
589
|
+
const message = `[systematic] duplicate factory invocation in same process (pid=${pid}); skipping duplicate registration. Multiple opencode.json sources may list this plugin.`;
|
|
590
|
+
console.warn(message);
|
|
591
|
+
input.client.app.log({
|
|
592
|
+
body: {
|
|
593
|
+
service: "systematic",
|
|
594
|
+
level: "warn",
|
|
595
|
+
message
|
|
596
|
+
}
|
|
597
|
+
}).catch(() => {});
|
|
598
|
+
}
|
|
599
|
+
});
|
|
600
|
+
return hooks;
|
|
601
|
+
};
|
|
554
602
|
var src_default = SystematicPlugin;
|
|
555
603
|
export {
|
|
556
604
|
src_default as default
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-process register-once guard for the Systematic plugin factory.
|
|
3
|
+
*
|
|
4
|
+
* OpenCode invokes the plugin factory more than once per process when the
|
|
5
|
+
* same plugin is referenced by multiple config sources (for example a
|
|
6
|
+
* user-level `~/.config/opencode/opencode.json` AND a project-level
|
|
7
|
+
* `opencode.json`). Each invocation evaluates the plugin module fresh —
|
|
8
|
+
* module-local variables reset between calls — so the guard state must
|
|
9
|
+
* live on `globalThis` to persist across module instances within the
|
|
10
|
+
* same process.
|
|
11
|
+
*
|
|
12
|
+
* On the first invocation `doInit` runs and the resulting hooks promise
|
|
13
|
+
* is cached on `globalThis`; the caller receives `{ isFirst: true, hooks }`.
|
|
14
|
+
* On every subsequent invocation in the same PID `doInit` is skipped, the
|
|
15
|
+
* cached promise is awaited (so sticky rejections still propagate),
|
|
16
|
+
* `onDuplicate` fires exactly once, and the caller receives
|
|
17
|
+
* `{ isFirst: false, hooks: {} as T }`. Across PIDs the guard is treated
|
|
18
|
+
* as absent and init runs fresh — `globalThis` is per-process, but the
|
|
19
|
+
* explicit PID check adds defensive belt-and-suspenders against any
|
|
20
|
+
* state-leakage edge case.
|
|
21
|
+
*
|
|
22
|
+
* **Why empty hooks on duplicate invocations.** A whole-hooks singleton
|
|
23
|
+
* that returns the same hooks reference to both invocations does not
|
|
24
|
+
* deduplicate host-side tool registration: OpenCode iterates each plugin
|
|
25
|
+
* source's returned hook surface and registers every tool entry it finds,
|
|
26
|
+
* even when two sources return the same JS reference. Returning `{}` from
|
|
27
|
+
* the duplicate path is the only shape that prevents host-side double
|
|
28
|
+
* registration of `systematic_skill`, the `config` hook, and the
|
|
29
|
+
* `experimental.chat.system.transform` hook. The Phase 0 follow-up probe
|
|
30
|
+
* (see `docs/plans/2026-05-01-001-fix-idempotent-plugin-registration-plan.md`)
|
|
31
|
+
* verified the duplicate `systematic_skill` entry in OpenCode's
|
|
32
|
+
* `client.tool.list(...)` output, which is the LLM-visible tool catalog.
|
|
33
|
+
*
|
|
34
|
+
* **Known limitation — rejected init is sticky.** If `doInit()` rejects,
|
|
35
|
+
* the rejected promise is stored on `globalThis` and every subsequent
|
|
36
|
+
* invocation in the same PID returns the same rejection without retrying
|
|
37
|
+
* init. This is intentional: re-running heavy init on every call would
|
|
38
|
+
* defeat the guard's purpose. Recovery requires a process restart.
|
|
39
|
+
*/
|
|
40
|
+
export interface PlugInOnceOptions<T> {
|
|
41
|
+
/** Heavy init work that should run at most once per process. */
|
|
42
|
+
doInit: () => Promise<T>;
|
|
43
|
+
/**
|
|
44
|
+
* Called exactly once on the first duplicate invocation in the same
|
|
45
|
+
* process. Subsequent duplicates are silent. Receives the same `pid`
|
|
46
|
+
* value the guard used for its identity check (so test overrides flow
|
|
47
|
+
* through faithfully). Implementations must not throw; fire-and-forget
|
|
48
|
+
* side effects (logging, metrics) are expected. Synchronous exceptions
|
|
49
|
+
* are swallowed defensively.
|
|
50
|
+
*/
|
|
51
|
+
onDuplicate?: (pid: number) => void;
|
|
52
|
+
/** Test override; defaults to `process.pid`. */
|
|
53
|
+
pid?: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Result envelope for `plugInOnce(...)`.
|
|
57
|
+
*
|
|
58
|
+
* - `isFirst: true` — caller should return `hooks` to OpenCode.
|
|
59
|
+
* - `isFirst: false` — caller MUST return `hooks` (which is an empty `{}`)
|
|
60
|
+
* so the host loader does not register tools or hooks twice.
|
|
61
|
+
*
|
|
62
|
+
* Callers that just `return result.hooks` do the right thing in both
|
|
63
|
+
* cases without needing to inspect `isFirst`.
|
|
64
|
+
*/
|
|
65
|
+
export interface PlugInOnceResult<T> {
|
|
66
|
+
isFirst: boolean;
|
|
67
|
+
hooks: T;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Run `doInit` at most once per process; on duplicate invocations resolve to
|
|
71
|
+
* empty hooks so the OpenCode host does not double-register tools and hooks.
|
|
72
|
+
*/
|
|
73
|
+
export declare function plugInOnce<T>({ doInit, onDuplicate, pid, }: PlugInOnceOptions<T>): Promise<PlugInOnceResult<T>>;
|
|
74
|
+
/**
|
|
75
|
+
* Test-only: clear the singleton state so the next invocation re-runs
|
|
76
|
+
* init. Must not be called in production code paths.
|
|
77
|
+
*/
|
|
78
|
+
export declare function _resetPluginSingleton(): void;
|
package/package.json
CHANGED
|
@@ -27,7 +27,7 @@ Systematic adds repository-specific constraints:
|
|
|
27
27
|
|
|
28
28
|
- Runtime-recognized frontmatter fields are fixed by the skill loader.
|
|
29
29
|
- Skill sub-files live in a small set of conventional directories.
|
|
30
|
-
- Bundled agents
|
|
30
|
+
- Bundled agents omit the `model` field; subagents inherit the invoking primary agent's model.
|
|
31
31
|
- Content-integrity enforces the mechanical parts in CI.
|
|
32
32
|
|
|
33
33
|
For worked examples and judgment calls, read `references/foundation-conventions.md`.
|
|
@@ -76,13 +76,17 @@ Keep the main `SKILL.md` small enough to decide whether and how to proceed. Move
|
|
|
76
76
|
|
|
77
77
|
## Identity Defaults
|
|
78
78
|
|
|
79
|
-
Bundled agents must
|
|
79
|
+
Bundled agents must omit the `model` field entirely:
|
|
80
80
|
|
|
81
81
|
```yaml
|
|
82
|
-
|
|
82
|
+
---
|
|
83
|
+
name: example-agent
|
|
84
|
+
description: ...
|
|
85
|
+
# no `model:` line
|
|
86
|
+
---
|
|
83
87
|
```
|
|
84
88
|
|
|
85
|
-
|
|
89
|
+
Per [OpenCode's agent docs](https://opencode.ai/docs/agents/), subagents with no `model` inherit the model of the primary agent that invoked them — which is the desired portable behavior. Do **not** declare `model: inherit`: that literal value is undocumented and produces `ProviderModelNotFoundError` on OpenCode older than ~v1.13.x (pre [sst/opencode#17888](https://github.com/sst/opencode/pull/17888)). Hardcoded provider model IDs (`anthropic/...`, `openai/...`, etc.) are also banned because they break users on other providers.
|
|
86
90
|
|
|
87
91
|
For agent or API attribution, `ai:systematic` is the machine ID used by Systematic-owned operations, such as Proof's `by` field and `X-Agent-Id` header. It is not a skill cross-reference convention.
|
|
88
92
|
|
|
@@ -99,7 +103,7 @@ The gate checks:
|
|
|
99
103
|
- Skill frontmatter is present and uses only runtime-recognized fields.
|
|
100
104
|
- Required `name` and `description` fields are non-empty.
|
|
101
105
|
- Banned frontmatter such as `preconditions` is absent.
|
|
102
|
-
- Bundled agents
|
|
106
|
+
- Bundled agents omit the `model` field.
|
|
103
107
|
- Skill references to `references/`, `scripts/`, `assets/`, and `templates/` resolve on disk.
|
|
104
108
|
|
|
105
109
|
If the gate fails, fix the content rather than broadening the validator unless the runtime loader contract has actually changed.
|
|
@@ -110,6 +114,6 @@ If the gate fails, fix the content rather than broadening the validator unless t
|
|
|
110
114
|
|---|---|
|
|
111
115
|
| Adding a new frontmatter field because it reads well | Add body prose instead, unless the runtime loader consumes the field. |
|
|
112
116
|
| Summarizing the whole workflow in `description` | Describe trigger conditions only. |
|
|
113
|
-
| Adding
|
|
117
|
+
| Adding any `model` field to a bundled agent | Omit the field; subagents inherit from the invoking primary agent. |
|
|
114
118
|
| Linking to a non-existent reference file | Create the file or remove the link. |
|
|
115
119
|
| Duplicating the general writing-skills guidance | Link to the foundation and document only the Systematic delta. |
|
|
@@ -18,7 +18,7 @@ Systematic skill frontmatter mirrors what the runtime loader actually reads. Do
|
|
|
18
18
|
| `metadata` | No | String-only metadata map. Keep it boring. | `metadata: { owner: systematic }` |
|
|
19
19
|
| `user-invocable` | No | Direct user invocation should be explicitly advertised or suppressed. | `user-invocable: false` |
|
|
20
20
|
| `agent` | No | A loader-supported companion agent is required. | `agent: general` |
|
|
21
|
-
| `model` | No | A skill-level model choice is justified
|
|
21
|
+
| `model` | No | A skill-level model choice is justified for *skill execution* (not bundled agents — see below). | `model: anthropic/claude-haiku-4-5` |
|
|
22
22
|
| `context` | No | Forked execution is required. `fork` derives subtask behavior at runtime. | `context: fork` |
|
|
23
23
|
| `subtask` | No | Explicit forked-subtask dispatch marker. | `subtask: true` |
|
|
24
24
|
|
|
@@ -106,15 +106,21 @@ Avoid ambiguous references such as "the conventions doc". They are harder for ag
|
|
|
106
106
|
|
|
107
107
|
### Bundled Agent Model
|
|
108
108
|
|
|
109
|
-
Bundled agents must
|
|
109
|
+
Bundled agents must omit the `model` field entirely:
|
|
110
110
|
|
|
111
111
|
```yaml
|
|
112
|
-
|
|
112
|
+
---
|
|
113
|
+
name: example-agent
|
|
114
|
+
description: ...
|
|
115
|
+
# no `model:` line
|
|
116
|
+
---
|
|
113
117
|
```
|
|
114
118
|
|
|
115
|
-
|
|
119
|
+
Per [OpenCode's agent docs](https://opencode.ai/docs/agents/): **"If you don't specify a model, primary agents use the model globally configured while subagents will use the model of the primary agent that invoked the subagent."** All bundled Systematic agents are subagents, so omitting `model` gives the desired portable inheritance behavior.
|
|
116
120
|
|
|
117
|
-
|
|
121
|
+
Do **not** declare `model: inherit`. That literal value is undocumented and was treated as a real provider/model string by `Provider.parseModel()` until [sst/opencode#17888](https://github.com/sst/opencode/pull/17888) landed in mid-March 2026 — producing `ProviderModelNotFoundError` on every subagent invocation for anyone on an older OpenCode. Omitting the field works on every OpenCode version and is what the docs canonically describe.
|
|
122
|
+
|
|
123
|
+
Hardcoded provider IDs (`anthropic/claude-...`, `openai/gpt-...`, etc.) are also banned because they make an agent unusable for users on other providers. If a future agent truly depends on a specific provider, document the constraint in the plan and get explicit review before adding the hardcoded model.
|
|
118
124
|
|
|
119
125
|
### Machine ID
|
|
120
126
|
|