Architecture: Product & Installation¶
Overview¶
syspilot separates what it delivers from how each project uses it.
The Product is the distribution package; each project installs a copy and
customizes it via the agent architecture (Soul, Duties, Workflow). Agent
frontmatter no longer prescribes a tools: list — the VS Code tool picker
proved unstable across saves and window reloads, silently rewriting or
dropping enumerated lists independent of any syspilot action. Agents instead
inherit whatever tools are enabled on your default VS Code agent, with one
exception: the Setup Bootloader keeps an explicit tools: list, since its
bootstrap agent/runSubagent call must not depend on picker state.
Layer |
What it is |
Where it lives |
|---|---|---|
Product |
The generic agent toolkit — agents, skills, scripts, templates |
|
Installed Copy |
Running agents that VS Code Copilot invokes |
|
The Setup Agent copies Product files into a project. Project teams then
customize project-owned agents directly. Specifications live in
docs/syspilot/ and cover all agents at the product level.
Required: enthali.jarvis-core — Multi-agent orchestration (the SEND /
session-messaging mechanism agents use to hand off work to each other) depends
on the enthali.jarvis-core tool set being enabled on your default VS Code
agent. If it is disabled, agents do not error — they silently lose the
ability to hand off work, and a multi-agent workflow simply stalls with no
diagnostic. Verify enthali.jarvis-core is enabled in the Copilot Chat tool
picker before running any syspilot multi-agent workflow.
Why the Separation?¶
Three problems drove this design:
Reusability — The same agents work across many projects. A change management agent doesn’t need to know your CI/CD setup. By keeping agents generic in the Product, they can be installed in any project without modification.
Update safety — When syspilot releases a new version, methodology agents (design, uat, mece, trace, docu) are replaced automatically. Project-owned agents (release, implement) are never overwritten.
Clear ownership — Every file has an explicit owner (methodology or project). This eliminates guesswork about what’s safe to edit and what will be overwritten on the next update.
What is Product?¶
The Product is everything in the syspilot/ directory at the repository root.
It’s the distribution package — what gets installed into target projects.
syspilot/ # The Product
├── agents/ # Generic agent templates
│ ├── syspilot.design.agent.md
│ ├── syspilot.uat.agent.md
│ ├── syspilot.implement.agent.md # ← Generic skeleton
│ └── ...
├── prompts/ # Prompt configurations
├── skills/ # Shared skills (folder-based)
│ ├── syspilot.ask-questions/ # Each skill has SKILL.md with YAML frontmatter
│ ├── syspilot.branching/
│ ├── syspilot.change-launcher/ # Automates branch + CD creation for new CRs
│ ├── syspilot.impact-python/
│ ├── syspilot.orchestration-jarvis/ # Async variant (mutex pair)
│ └── syspilot.orchestration-subagent/ # Sync variant (mutex pair)
├── scripts/python/ # Utility scripts
├── sphinx/ # Build scripts (docs-build.py)
└── templates/
└── change-document.md # Change Document template
Key properties:
Language-agnostic — No project-specific code, build commands, or test runners
Self-contained — Everything needed for installation in one directory
Versioned — The
version:field insyspilot/agents/syspilot.setup.agent.mdfrontmatter tracks the release; main branch = current releaseSingle source of truth — The Setup Agent sources all distributable files exclusively from
syspilot/, never from.github/or project configOrchestration variant selection —
syspilot.orchestration-jarvis(async, session-based) andsyspilot.orchestration-subagent(sync, subagent-based) are mutually exclusive. On fresh install, the Setup Agent infers a default from.jarvis/presence, asks the user to confirm or override, and installs exactly one — the same mutex mechanism applies to any future Skill that declares agroup:field. When the async variant is chosen, the Setup Agent also callsjarvis_createActorfor every eligible agent, creating a.jarvis/actors/<name>/actor entry (idempotent — skipped if already exists).
How Installation Works¶
flowchart TD
P["<b>Product</b> (syspilot/)<br/>Generic agents, skills, templates"]
G["<b>.github/agents/</b> (Installed copy)<br/>Running agents that Copilot invokes"]
S["<b>docs/syspilot/</b><br/>Product-level specifications<br/>(US → REQ → SPEC)"]
P -- "Setup Agent installs<br/>Product → .github/" --> G
S -- "Specifications describe<br/>agent architecture" --> G
The flow:
Setup Agent reads from
syspilot/(Product) and copies files to.github/Project team customizes project-owned agents (release, implement) directly
Specifications in
docs/syspilot/document the agent architecture with full traceability (US → REQ → SPEC)sphinx-needs resolves
:links:across the spec hierarchy, enabling impact analysis
Concrete Example: The PM Agent¶
The Project Manager agent demonstrates the Product/Installation pattern with the tailoring file mechanism:
Product (syspilot/agents/syspilot.pm.agent.md):
Generic workflow skeleton — 17 steps, zero project-specific nouns
Branch naming, change-doc location, and post-release distribution are deliberately absent; they live in the tailoring file
Preflight block directs the agent to read its tailoring file before executing
Specifications (docs/syspilot/design/spec_project_mgr.rst):
SYSP_SPEC_PM_WORKFLOWspecifies the Preflight pattern and Tailoring WorkflowSYSP_SPEC_AGENT_ARCH_WORKFLOWdefines the generic Tailoring File property and provides the canonical preflight sentence template
Tailoring file (.github/agents/syspilot.pm.tailoring.md — created on first PM invocation):
Instance-only; never shipped by setup, never overwritten on update
Captures this project’s bindings: branch base, change-doc path, backlog location, merge target, post-release mechanism
May be empty (proceed generic), clarify a step, or override it
Authored by PM via the Tailoring Workflow on first invocation; the file does not exist until PM runs for the first time in a new project
Skill Tailoring¶
Skills support the same per-project override mechanism as Agents, with one simplification: every Skill convention ships with a safe default, so there is no RESPOND-escalation step — a project that never tailors a skill simply gets the documented default behavior.
Product (syspilot/skills/<name>/SKILL.md):
Defines conventions with explicit, safe defaults (e.g. the
syspilot.branchingskill’s feature-branch retention policy defaults to retain)
Specification (SYSP_SPEC_SKILL_ARCH_TAILORING):
Defines the generic tailoring-file contract for Skills: an optional
tailoring.mdfile colocated withSKILL.md, read by any agent invoking that skill
Tailoring file (syspilot.<skill-name>.tailoring.md — instance-only, optional):
May be absent entirely — the skill’s documented default applies
Never shipped by setup, never overwritten on update
Example: a project may tailor
syspilot.branchingto delete feature branches after merge instead of retaining them
Update Safety¶
syspilot separates Agents (stable processes — WHAT to do) from Skills (exchangeable tool bindings — HOW to do it). Agents define workflow steps; skills encapsulate domain knowledge that agents invoke. Customize syspilot by swapping skills, not agents.
syspilot defines three ownership categories that determine what happens on update:
Category |
What |
On Update |
|---|---|---|
Methodology-owned |
design, uat, verify, mece, trace, docu agents; skills; scripts; build files |
Replaced — always get the latest version |
Project-owned |
release, implement agents and prompts |
Never touched — copied once on install, then yours |
User-owned |
Your specs, change docs, copilot-instructions.md |
Never touched — Setup Agent ignores these entirely |
Orphan cleanup — The Installer removes stale files from previous syspilot versions,
but only files whose name starts with syspilot. and does not end with
.tailoring.md. Any file without a syspilot. prefix and all *.tailoring.md files
are always preserved, regardless of whether they appear in the current release.
How to customize safely:
Use tailoring files for project-specific steps — Each agent reads a sibling
syspilot.<name>.tailoring.mdfile for project-specific details (paths, branch names, distribution targets). Edit this file freely — it is instance-only and never removed or overwritten by updates. If it is missing, the agent will walk you through creating it.Don’t edit methodology agents directly — Your changes will be overwritten on the next update. Instead, file a change request upstream.
Customize project-owned agents via
@syspilot.design— This creates proper specs with traceability. The next update won’t touch these files.Transactional rollback — Before writing any files, the Installer creates a pre-install Git commit. On failure, it executes
git reset --hardto restore the exact pre-install state. No partial installs persist.
Ontology Architecture (Phase 0: spec · Phase 1: flat-master)¶
syspilot separates four concerns cleanly so that the default L0/L1/L2 hierarchy can be replaced by any project ontology (e.g. ASPICE) without rewriting agents.
Concern |
What it defines |
|---|---|
Ontology |
Work-Product types, typed relations, lifecycle states, ownership |
Capabilities |
Type-agnostic operations (create, modify, check, validate) |
Actors |
Which Capabilities and Work-Product types each Actor owns |
Process |
Execution order derived from the ontology graph; gate conditions |
Key Invariants¶
syspilot.tomlis the single authority for ontology selection and tailoring.conf.pyis an adapter/consumer ofsyspilot.toml, never an independent authority.Every active Work-Product type has exactly one Primary-Actor-Owner (1:N ownership is forbidden; read access is unrestricted).
An Actor processes all and only its own affected types in the dependency order of the ontology graph — not a fixed L0/L1/L2 loop.
Branching graphs are first-class. “Dependency order” means graph order.
.syspilot/ Directory Structure¶
The per-project .syspilot/ directory holds all ontology and capability files:
.syspilot/
├── ontology.toml # Canonical ontology master; sphinx-needs reads [needs] directly
├── ontologies/
│ └── <name>/
│ └── ontology.toml # Ontology template definition
└── capabilities/
└── <name>.toml # Capability declarations (optional overrides)
The syspilot-default ontology (us → req → spec, L0/L1/L2) ships as a
built-in template. Other ontology templates are first-class; selecting one
does not require agent changes.
Spec elements: SYSP_SPEC_ONTOLOGY_FOUR_CONCERNS, SYSP_SPEC_ONTOLOGY_TOML_SCHEMA,
SYSP_SPEC_ONTOLOGY_DIRECTORY, SYSP_SPEC_ONTOLOGY_GRAPH, SYSP_SPEC_ONTOLOGY_CAPABILITIES.
Phase 1: Flat-Master Architecture¶
Delivered: .syspilot/ontology.toml is the single canonical ontology file.
There is no intermediate projection or generated file. docs/conf.py points
sphinx-needs directly at it via:
needs_from_toml = "../.syspilot/ontology.toml"
sphinx-needs consumes the [needs] section; [syspilot.*] sections are
ignored by the build tool (reserved for syspilot agents, Phase 2+).
Safety net: sphinx-build -W validates the master directly — a malformed
or stale ontology breaks the build immediately.
Skill: syspilot.ontology encapsulates ontology governance operations
(schema documentation, validation guardrails).
For file organization details, see methodology.md. For the development process, see workflows.md.