Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .agent/accounts.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
name: accounts
description: Financial operations and accounting - QuickFile integration, invoicing, expense tracking
mode: subagent
subagents:
- quickfile
- general
- explore
---

# Accounts - Main Agent
Expand Down
36 changes: 36 additions & 0 deletions .agent/aidevops.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,42 @@
name: aidevops
description: AI DevOps framework operations - setup, configuration, meta-agents, troubleshooting
mode: subagent
subagents:
# Framework internals
- setup
- troubleshooting
- architecture
- add-new-mcp-to-aidevops
- mcp-integrations
- mcp-troubleshooting
- configs
- providers
# Agent development
- build-agent
- agent-review
- build-mcp
- server-patterns
- api-wrapper
- transports
- deployment
# Workflows
- git-workflow
- release
- version-bump
- preflight
- postflight
# Code quality
- code-standards
- linters-local
- secretlint
# Credentials
- api-key-setup
- api-key-management
- vaultwarden
- list-keys
# Built-in
- general
- explore
---

# AI DevOps - Framework Main Agent
Expand Down
38 changes: 38 additions & 0 deletions .agent/build-plus.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,44 @@
name: build-plus
description: Enhanced build agent with semantic codebase search and context tools
mode: subagent
subagents:
# Core workflows
- git-workflow
- branch
- preflight
- postflight
- release
- version-bump
- pr
- conversation-starter
- error-feedback
# Code quality
- code-standards
- code-simplifier
- best-practices
- auditing
- secretlint
- qlty
# Context tools
- osgrep
- augment-context-engine
- context-builder
- context7
- toon
# Browser/testing
- playwright
- stagehand
- pagespeed
# Git platforms
- github-cli
- gitlab-cli
- github-actions
# Deployment
- coolify
- vercel
# Built-in
- general
- explore
---

# Build+ - Enhanced Build Agent
Expand Down
16 changes: 16 additions & 0 deletions .agent/content.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,22 @@
name: content
description: Content creation and management - copywriting, guidelines, editorial workflows
mode: subagent
subagents:
# Content
- guidelines
- summarize
# SEO integration
- keyword-research
- eeat-score
# WordPress publishing
- wp-admin
- mainwp
# Research
- context7
- crawl4ai
# Built-in
- general
- explore
---

# Content - Main Agent
Expand Down
6 changes: 6 additions & 0 deletions .agent/health.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
name: health
description: Health and wellness domain - medical information, fitness, nutrition guidance
mode: subagent
subagents:
# Research
- crawl4ai
# Built-in
- general
- explore
---

# Health - Main Agent
Expand Down
9 changes: 9 additions & 0 deletions .agent/legal.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@
name: legal
description: Legal compliance and documentation - contracts, policies, regulatory guidance
mode: subagent
subagents:
# Research
- context7
- crawl4ai
# Content
- guidelines
# Built-in
- general
- explore
---

# Legal - Main Agent
Expand Down
17 changes: 17 additions & 0 deletions .agent/marketing.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,23 @@ tools:
glob: true
grep: true
webfetch: true
subagents:
# CRM
- fluentcrm
# Content
- guidelines
- summarize
# SEO
- keyword-research
- serper
- dataforseo
# Social
- bird
# Analytics
- google-search-console
# Built-in
- general
- explore
Comment on lines +13 to +29
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# Explore .agent directory structure
find .agent -type f -name "*.md" | head -20

Repository: marcusquinn/aidevops

Length of output: 696


🏁 Script executed:

# Check if .agent/marketing.md exists and get its line count
if [ -f .agent/marketing.md ]; then
  wc -l .agent/marketing.md
  echo "---"
  echo "Lines 13-29:"
  sed -n '13,29p' .agent/marketing.md
else
  echo ".agent/marketing.md does not exist"
fi

Repository: marcusquinn/aidevops

Length of output: 330


🏁 Script executed:

# Verify referenced subagent files
for agent in bird dataforseo google-search-console keyword-research serper fluentcrm guidelines summarize general explore; do
  if [ -f ".agent/${agent}.md" ]; then
    echo "✓ .agent/${agent}.md exists"
  else
    echo "✗ .agent/${agent}.md NOT FOUND"
  fi
done

Repository: marcusquinn/aidevops

Length of output: 392


🏁 Script executed:

# Check lines 303-322 in marketing.md for SEO integration claims
if [ -f .agent/marketing.md ]; then
  echo "Lines 303-322 in .agent/marketing.md:"
  sed -n '303,322p' .agent/marketing.md
fi

Repository: marcusquinn/aidevops

Length of output: 654


🏁 Script executed:

# Check fluentcrm documentation extent (lines 39-457)
if [ -f .agent/marketing.md ]; then
  echo "Checking line 39 and nearby:"
  sed -n '35,45p' .agent/marketing.md
  echo "---"
  echo "Checking line 457 and nearby:"
  sed -n '450,457p' .agent/marketing.md | head -20
fi

Repository: marcusquinn/aidevops

Length of output: 736


🏁 Script executed:

# Check AGENTS.md for subagent definitions
if [ -f .agent/AGENTS.md ]; then
  echo "Checking .agent/AGENTS.md for subagent configuration:"
  head -100 .agent/AGENTS.md
fi

Repository: marcusquinn/aidevops

Length of output: 4612


🏁 Script executed:

# Search for any mention of subagents in AGENTS.md
if [ -f .agent/AGENTS.md ]; then
  echo "Searching for 'subagents' in AGENTS.md:"
  grep -n "subagents" .agent/AGENTS.md
fi

Repository: marcusquinn/aidevops

Length of output: 369


🏁 Script executed:

# Check directory structure for actual agent definitions
echo "Checking .agent directory for any agent MD files:"
ls -la .agent/*.md 2>/dev/null | head -20

Repository: marcusquinn/aidevops

Length of output: 1073


🏁 Script executed:

# Show full marketing.md to understand subagent structure
wc -l .agent/marketing.md && echo "---" && head -50 .agent/marketing.md

Repository: marcusquinn/aidevops

Length of output: 1032


🏁 Script executed:

# Check if there's a services subdirectory with agent definitions
find .agent -type d | head -20

Repository: marcusquinn/aidevops

Length of output: 472


🏁 Script executed:

# Search for how subagents are referenced or defined in AGENTS.md
grep -A 20 "How to use subagents" .agent/AGENTS.md

Repository: marcusquinn/aidevops

Length of output: 1359


Reject subagent declarations—most do not exist in the framework

The subagents list references agents that either don't exist or use incorrect paths. Per AGENTS.md documentation, valid agent paths are:

  • seo/dataforseo.md (not dataforseo)
  • seo/google-search-console.md (not google-search-console)
  • services/crm/fluentcrm.md (not fluentcrm)

The following subagents are not defined in the framework and must be removed:

  • guidelines, summarize, keyword-research, serper, bird, general, explore

Correct the subagent declarations to use valid paths from the .agent/ directory structure, or remove unsupported entries entirely.

🤖 Prompt for AI Agents
In @.agent/marketing.md around lines 13 - 29, The subagents list under the
"subagents" key is using invalid names; update entries to use the documented
agent paths and remove unsupported ones: replace "fluentcrm" with
"services/crm/fluentcrm.md", replace "dataforseo" with "seo/dataforseo.md",
replace "google-search-console" with "seo/google-search-console.md", and remove
the undefined entries "guidelines", "summarize", "keyword-research", "serper",
"bird", "general", and "explore"; ensure the final "subagents" array only
contains valid .agent/* markdown paths per AGENTS.md.

---

# Marketing - Main Agent
Expand Down
13 changes: 13 additions & 0 deletions .agent/onboarding.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@
name: onboarding
description: Interactive onboarding wizard - discover services, check credentials, configure integrations
mode: subagent
subagents:
# Setup/config
- setup
- troubleshooting
- api-key-setup
- list-keys
- mcp-integrations
# Services overview
- services
- service-links
# Built-in
- general
- explore
---

# Onboarding Wizard - aidevops Configuration
Expand Down
18 changes: 18 additions & 0 deletions .agent/plan-plus.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@
name: plan-plus
description: Read-only planning agent with semantic codebase search - analysis without modifications
mode: subagent
subagents:
# Context/search (read-only)
- osgrep
- augment-context-engine
- context-builder
- context7
# Planning workflows
- plans
- plans-quick
- prd-template
- tasks-template
# Architecture review
- architecture
- code-standards
- best-practices
# Built-in
- general
- explore
---

# Plan+ - Enhanced Plan Agent
Expand Down
14 changes: 14 additions & 0 deletions .agent/research.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@
name: research
description: Research and analysis - data gathering, competitive analysis, market research
mode: subagent
subagents:
# Context/docs
- context7
- augment-context-engine
- osgrep
# Web research
- crawl4ai
- serper
- outscraper
# Summarization
- summarize
# Built-in
- general
- explore
---

# Research - Main Agent
Expand Down
13 changes: 13 additions & 0 deletions .agent/sales.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,19 @@ tools:
glob: true
grep: true
webfetch: true
subagents:
# CRM
- fluentcrm
# Accounting
- quickfile
# Content for proposals
- guidelines
# Research
- outscraper
- crawl4ai
# Built-in
- general
- explore
---

# Sales - Main Agent
Expand Down
87 changes: 84 additions & 3 deletions .agent/scripts/generate-opencode-agents.sh
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,62 @@ AGENT_TEMPS = {
# Files to skip (not primary agents)
SKIP_FILES = {"AGENTS.md", "README.md"}

def parse_frontmatter(filepath):
"""Parse YAML frontmatter from markdown file."""
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()

# Check for frontmatter
if not content.startswith('---'):
return {}

# Find end of frontmatter
end_idx = content.find('---', 3)
if end_idx == -1:
return {}

frontmatter = content[3:end_idx].strip()

# Simple YAML parsing for subagents list
result = {}
lines = frontmatter.split('\n')
current_key = None
current_list = []

for line in lines:
stripped = line.strip()
# Ignore comments and empty lines
if not stripped or stripped.startswith('#'):
continue

if stripped.startswith('- ') and current_key:
# List item
current_list.append(stripped[2:].strip())
elif ':' in stripped and not stripped.startswith('-'):
# Save previous list if any
if current_key and current_list:
result[current_key] = current_list
current_list = []

# New key
key, value = stripped.split(':', 1)
current_key = key.strip()
value = value.strip()
if value:
result[current_key] = value
current_key = None

# Save final list
if current_key and current_list:
result[current_key] = current_list

return result
except (IOError, OSError, UnicodeDecodeError) as e:
import sys
print(f"Warning: Failed to parse frontmatter for {filepath}: {e}", file=sys.stderr)
return {}

def filename_to_display(filename):
"""Convert filename to display name."""
name = filename.replace(".md", "")
Expand All @@ -190,8 +246,14 @@ def filename_to_display(filename):
# Convert kebab-case to Title-Case
return "-".join(word.capitalize() for word in name.split("-"))

def get_agent_config(display_name, filename):
"""Generate agent configuration."""
def get_agent_config(display_name, filename, subagents=None):
"""Generate agent configuration.

Args:
display_name: Agent display name
filename: Agent markdown filename
subagents: Optional list of allowed subagent names (from frontmatter)
"""
tools = AGENT_TOOLS.get(display_name, DEFAULT_TOOLS.copy())
temp = AGENT_TEMPS.get(display_name, 0.2)

Expand All @@ -209,19 +271,36 @@ def get_agent_config(display_name, filename):
else:
config["permission"] = {"external_directory": "allow"}

# Add subagent filtering via permission.task if subagents specified
# This generates deny-all + allow-specific rules
if subagents and isinstance(subagents, list) and len(subagents) > 0:
task_perms = {"*": "deny"}
for subagent in subagents:
task_perms[subagent] = "allow"
config["permission"]["task"] = task_perms
print(f" {display_name}: filtered to {len(subagents)} subagents")

return config

# Discover all root-level .md files
primary_agents = {}
discovered = []
subagent_filtered_count = 0

for filepath in glob.glob(os.path.join(agents_dir, "*.md")):
filename = os.path.basename(filepath)
if filename in SKIP_FILES:
continue

display_name = filename_to_display(filename)
primary_agents[display_name] = get_agent_config(display_name, filename)

# Parse frontmatter for subagents list
frontmatter = parse_frontmatter(filepath)
subagents = frontmatter.get('subagents', None)
if subagents:
subagent_filtered_count += 1

primary_agents[display_name] = get_agent_config(display_name, filename, subagents)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

subagent_filtered_count increments on any truthy subagents value, but filtering is only applied when subagents is a non-empty list in get_agent_config(). This can make the end-of-run “Subagent filtering” summary look successful even if frontmatter is malformed (e.g., subagents: foo).

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎

discovered.append(display_name)

# Sort agents: ordered ones first, then alphabetical
Expand Down Expand Up @@ -288,6 +367,8 @@ config['agent'] = sorted_agents

print(f" Auto-discovered {len(sorted_agents)} primary agents from {agents_dir}")
print(f" Order: {', '.join(list(sorted_agents.keys())[:5])}...")
if subagent_filtered_count > 0:
print(f" Subagent filtering: {subagent_filtered_count} agents have permission.task rules")

# =============================================================================
# MCP SERVERS - Ensure required MCP servers are configured
Expand Down
Loading