Create plugin.yaml#1
Conversation
Reviewer's guide (collapsed on small PRs)Reviewer's GuideAdds an initial plugin manifest for the Agent OS plugin, defining its metadata and configuration scope without any custom settings sections. Entity relationship diagram for the new AgentOS plugin manifesterDiagram
PluginManifest {
string name
string description
string version
string[] settings_sections
boolean per_project_config
boolean per_agent_config
}
ProjectConfig {
string id
}
AgentConfig {
string id
}
PluginManifest ||--o{ ProjectConfig : scoped_by
PluginManifest ||--o{ AgentConfig : scoped_by
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Review Summary by QodoAdd Agent OS plugin configuration file
WalkthroughsDescription• Add plugin.yaml configuration file for Agent OS plugin • Define plugin metadata including name, version, and description • Configure per-project settings support for coding conventions Diagramflowchart LR
A["Plugin Configuration"] -- "defines metadata" --> B["Agent OS Plugin"]
A -- "enables per-project config" --> C["Project-level Settings"]
B -- "manages" --> D["Coding Conventions"]
File Changes1. plugins/agent-os/plugin.yaml
|
Code Review by Qodo
1. Plugin added outside usr/plugins/
|
📝 WalkthroughWalkthroughAdds an Agent OS plugin and related agent/config manifests, a backend system_prompt extension that appends an Agent OS reference into system prompts, and several new Agent OS prompt and spec documentation files for discovering, indexing, injecting, and planning standards. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Agent
participant StandardsDiscoverer as Discoverer
participant FileSystem as FS
participant Index as index.yml
User->>Agent: invoke discover/index/inject/plan commands
Agent->>Discoverer: run Standards Discoverer (prompts)
Discoverer->>FS: read repository files & prompts (fw.agent_os.reference.md)
FS-->>Discoverer: file contents
Discoverer->>Index: generate/update index.yml entries
Index-->>Agent: updated index
Agent->>User: present suggested standards / inject into context
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 1 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Hey - I've left some high level feedback:
- Consider adding a stable, machine-readable identifier field (e.g.,
id: agent-os) in addition to the human-friendlynameto avoid future collisions and make programmatic references to this plugin more robust.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- Consider adding a stable, machine-readable identifier field (e.g., `id: agent-os`) in addition to the human-friendly `name` to avoid future collisions and make programmatic references to this plugin more robust.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| name: Agent OS | ||
| description: Standards discovery, extraction, and deployment system for AI-assisted development. Keeps agents aligned with project coding conventions. | ||
| version: 1.0.0 | ||
| settings_sections: [] | ||
| per_project_config: true | ||
| per_agent_config: false |
There was a problem hiding this comment.
1. Plugin added outside usr/plugins/ 📘 Rule violation ✓ Correctness
The new plugin manifest is added under plugins/agent-os/ instead of the required usr/plugins/<plugin_name>/ location. This breaks the documented plugin development convention and may prevent correct plugin discovery/maintenance.
Agent Prompt
## Issue description
The plugin is being added under `plugins/agent-os/`, but new plugins must be developed under `usr/plugins/<plugin_name>/`.
## Issue Context
This PR adds a new `plugin.yaml` for `agent-os`, but its location violates the repository’s plugin directory convention.
## Fix Focus Areas
- plugins/agent-os/plugin.yaml[1-6]
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
| @@ -0,0 +1,6 @@ | |||
| name: Agent OS | |||
There was a problem hiding this comment.
2. Wrong manifest key 🐞 Bug ✓ Correctness
plugins/agent-os/plugin.yaml uses name instead of the expected title field for the runtime plugin manifest. As a result, the loader won’t read the intended display name and will fall back to the plugin directory name (agent-os).
Agent Prompt
## Issue description
The runtime plugin manifest schema expects `title`, but `plugins/agent-os/plugin.yaml` uses `name`. This means the intended human-friendly display name won’t be loaded and the UI will fall back to showing the directory name (`agent-os`).
## Issue Context
`PluginMetadata` defines `title`, and plugin discovery builds `display_name=meta.title or d.name`.
## Fix Focus Areas
- plugins/agent-os/plugin.yaml[1-1]
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@plugins/agent-os/plugin.yaml`:
- Line 1: The plugin manifest uses the wrong field key: replace the top-level
"name" field with "title" in plugins/agent-os/plugin.yaml so the plugin schema
validates and the display title is populated; locate the "name: Agent OS" entry
and change the key to "title" (keeping the value unchanged).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 0a5ce3b7-d2cb-4aaa-9e03-966297dc7b05
📒 Files selected for processing (1)
plugins/agent-os/plugin.yaml
| @@ -0,0 +1,6 @@ | |||
| name: Agent OS | |||
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# First, verify the PluginMetadata schema definition
echo "=== PluginMetadata class definition ==="
rg -A 20 "^class PluginMetadata" backend/utils/plugins.py
echo -e "\n=== Checking for model_validate usage ==="
rg "model_validate" backend/utils/plugins.py -A 3 -B 3
echo -e "\n=== Checking how manifest files are loaded ==="
rg -A 10 "def load.*manifest\|plugin.*yaml\|\.yaml" backend/utils/plugins.py | head -50Repository: FortiShield/CtxAI
Length of output: 1453
🏁 Script executed:
#!/bin/bash
# Check Pydantic configuration for extra field handling
echo "=== Checking for ConfigDict or model_config ==="
rg -B 5 "^class PluginMetadata" backend/utils/plugins.py | grep -A 10 "ConfigDict\|model_config\|class PluginMetadata"
# Check the actual plugin.yaml file content
echo -e "\n=== Full content of plugins/agent-os/plugin.yaml ==="
cat plugins/agent-os/plugin.yaml
# Look for other plugin.yaml files to see if they use 'name' or 'title'
echo -e "\n=== Checking other plugin.yaml files for field usage ==="
find plugins -name "plugin.yaml" -exec sh -c 'echo "--- $1 ---"; head -3 "$1"' _ {} \;Repository: FortiShield/CtxAI
Length of output: 1610
🏁 Script executed:
#!/bin/bash
# Verify Pydantic configuration - check if there's any extra field handling
echo "=== Full PluginMetadata class with context ==="
rg -B 5 -A 15 "^class PluginMetadata" backend/utils/plugins.py
# Check if there's any ConfigDict specifying extra field behavior
echo -e "\n=== Searching for model_config or Config class ==="
rg "model_config|class Config" backend/utils/plugins.py | head -20Repository: FortiShield/CtxAI
Length of output: 670
Critical: Field name mismatch — use title instead of name.
The plugin schema expects a title field, not name. The name field will be silently ignored during validation, leaving title as an empty string and breaking plugin display.
Proposed fix
-name: Agent OS
+title: Agent OS📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| name: Agent OS | |
| title: Agent OS |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/agent-os/plugin.yaml` at line 1, The plugin manifest uses the wrong
field key: replace the top-level "name" field with "title" in
plugins/agent-os/plugin.yaml so the plugin schema validates and the display
title is populated; locate the "name: Agent OS" entry and change the key to
"title" (keeping the value unchanged).
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@plugins/agent-os/prompts/fw.agent_os.reference.md`:
- Around line 35-42: The two Markdown fenced code blocks showing directory
listings need language identifiers to satisfy markdownlint MD040: update the
opening fences that currently read ``` to ```text for both the block beginning
with "agent-os/specs/YYYY-MM-DD-HHMM-feature-slug/" and the larger block
starting with "agent-os/" so the directory-list examples are marked as text.
In `@plugins/agent-os/prompts/fw.agent_os.shape_spec.md`:
- Around line 54-56: Two fenced code blocks in fw.agent_os.shape_spec.md are
missing language tags; add a language identifier (e.g., text) to both fences so
they pass MD040. Specifically, update the single-line fence containing
"YYYY-MM-DD-HHMM-{feature-slug}/" and the multi-line fence starting with
"agent-os/specs/{YYYY-MM-DD-HHMM-feature-slug}/" to use ```text instead of ```;
keep the block contents unchanged.
In `@plugins/agent-os/standards_discoverer/agent.yaml`:
- Around line 1-6: The agent manifest titled "Standards Discoverer" (agent.yaml)
is placed under plugins/agent-os/standards_discoverer and thus won't be
discovered; move the agent.yaml file for the Standards Discoverer agent into the
agents subdirectory used by the loader so it lives under the plugin's agents
folder (i.e., ensure the file named agent.yaml for the Standards Discoverer
agent is relocated into the plugin's agents/<agent_name>/ directory), and update
any internal references or imports that point to the old location (search for
uses of "Standards Discoverer" or "standards_discoverer" to find places to
update).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 3bfd5327-7c67-4726-b3c3-63e93ac9b007
📒 Files selected for processing (9)
plugins/agent-os/extensions/backend/system_prompt/_50_agent_os_context.pyplugins/agent-os/prompts/fw.agent_os.discover_standards.mdplugins/agent-os/prompts/fw.agent_os.index_standards.mdplugins/agent-os/prompts/fw.agent_os.inject_standards.mdplugins/agent-os/prompts/fw.agent_os.plan_product.mdplugins/agent-os/prompts/fw.agent_os.reference.mdplugins/agent-os/prompts/fw.agent_os.shape_spec.mdplugins/agent-os/standards_discoverer/agent.yamlplugins/agent-os/standards_discoverer/prompts/agent.system.standards_discoverer.md
✅ Files skipped from review due to trivial changes (3)
- plugins/agent-os/standards_discoverer/prompts/agent.system.standards_discoverer.md
- plugins/agent-os/prompts/fw.agent_os.index_standards.md
- plugins/agent-os/prompts/fw.agent_os.inject_standards.md
| ``` | ||
| agent-os/specs/YYYY-MM-DD-HHMM-feature-slug/ | ||
| plan.md | ||
| shape.md | ||
| standards.md | ||
| references.md | ||
| visuals/ | ||
| ``` |
There was a problem hiding this comment.
Add code fence language identifiers (MD040).
At Line 35 and Line 63, code fences should declare a language to satisfy markdownlint.
Proposed fix
-```
+```text
agent-os/specs/YYYY-MM-DD-HHMM-feature-slug/
plan.md
shape.md
standards.md
references.md
visuals/@@
- +text
agent-os/
standards/
index.yml
api/
response-format.md
error-handling.md
database/
migrations.md
global/
tech-stack.md
naming.md
product/
mission.md
roadmap.md
tech-stack.md
specs/
2026-01-15-1430-user-comment-system/
plan.md
shape.md
standards.md
references.md
visuals/
Also applies to: 63-86
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 35-35: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/agent-os/prompts/fw.agent_os.reference.md` around lines 35 - 42, The
two Markdown fenced code blocks showing directory listings need language
identifiers to satisfy markdownlint MD040: update the opening fences that
currently read ``` to ```text for both the block beginning with
"agent-os/specs/YYYY-MM-DD-HHMM-feature-slug/" and the larger block starting
with "agent-os/" so the directory-list examples are marked as text.
| ``` | ||
| YYYY-MM-DD-HHMM-{feature-slug}/ | ||
| ``` |
There was a problem hiding this comment.
Add code fence language identifiers (MD040).
At Line 54 and Line 95, fenced blocks are missing a language tag.
Proposed fix
-```
+```text
YYYY-MM-DD-HHMM-{feature-slug}/@@
- +text
agent-os/specs/{YYYY-MM-DD-HHMM-feature-slug}/
plan.md # The full plan
shape.md # Shaping decisions and context
standards.md # Which standards apply and key points
references.md # Pointers to similar code
visuals/ # Mockups, screenshots (if any)
Also applies to: 95-102
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 54-54: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/agent-os/prompts/fw.agent_os.shape_spec.md` around lines 54 - 56, Two
fenced code blocks in fw.agent_os.shape_spec.md are missing language tags; add a
language identifier (e.g., text) to both fences so they pass MD040.
Specifically, update the single-line fence containing
"YYYY-MM-DD-HHMM-{feature-slug}/" and the multi-line fence starting with
"agent-os/specs/{YYYY-MM-DD-HHMM-feature-slug}/" to use ```text instead of ```;
keep the block contents unchanged.
| title: Standards Discoverer | ||
| description: Discovers, extracts, and documents coding standards and conventions from existing codebases. Analyzes code patterns to produce concise, scannable standards that keep AI agents aligned with project conventions. | ||
| context: You are a Standards Discoverer agent. Your specialty is analyzing codebases | ||
| to extract tribal knowledge, coding patterns, and conventions that are not obvious | ||
| from the code alone. You produce concise, well-structured standards documents that | ||
| AI agents and developers can reference to stay aligned with project norms. |
There was a problem hiding this comment.
Agent config won’t be discovered at the current path.
This manifest is valid YAML, but the loader only scans plugin agent dirs under plugins/{plugin}/agents/{agent_name}/agent.yaml (see backend/utils/plugins.py and backend/utils/subagents.py). At Line 1 this file is rooted under plugins/agent-os/standards_discoverer/, so it will be skipped at runtime.
Please move it to:
plugins/agent-os/agents/standards_discoverer/agent.yaml
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/agent-os/standards_discoverer/agent.yaml` around lines 1 - 6, The
agent manifest titled "Standards Discoverer" (agent.yaml) is placed under
plugins/agent-os/standards_discoverer and thus won't be discovered; move the
agent.yaml file for the Standards Discoverer agent into the agents subdirectory
used by the loader so it lives under the plugin's agents folder (i.e., ensure
the file named agent.yaml for the Standards Discoverer agent is relocated into
the plugin's agents/<agent_name>/ directory), and update any internal references
or imports that point to the old location (search for uses of "Standards
Discoverer" or "standards_discoverer" to find places to update).
Summary by Sourcery
New Features:
Summary by CodeRabbit