From 76a54df7c4f81e3a85f13eeb8ce1e686e741fce6 Mon Sep 17 00:00:00 2001 From: marcusquinn <6428977+marcusquinn@users.noreply.github.com> Date: Thu, 22 Jan 2026 14:53:56 +0000 Subject: [PATCH 1/5] docs(playwriter): update OpenCode config with correct npx format - Add -y flag to auto-confirm package installation - Use full path to npx for reliability - Add per-agent tool enabling example - Document token optimization strategy --- .agent/tools/browser/playwriter.md | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/.agent/tools/browser/playwriter.md b/.agent/tools/browser/playwriter.md index f667526d..40f4c6b5 100644 --- a/.agent/tools/browser/playwriter.md +++ b/.agent/tools/browser/playwriter.md @@ -59,12 +59,14 @@ Add to your MCP client configuration: "mcp": { "playwriter": { "type": "local", - "command": ["npx", "playwriter@latest"], + "command": ["/opt/homebrew/bin/npx", "-y", "playwriter@latest"], "enabled": true } } } -```text +``` + +> **Note**: Use full path to `npx` (e.g., `/opt/homebrew/bin/npx` on macOS with Homebrew) for reliability. The `-y` flag auto-confirms package installation. **Claude Desktop** (`claude_desktop_config.json`): @@ -73,11 +75,30 @@ Add to your MCP client configuration: "mcpServers": { "playwriter": { "command": "npx", - "args": ["playwriter@latest"] + "args": ["-y", "playwriter@latest"] } } } -```text +``` + +**Enable per-agent** (OpenCode tools section): + +```json +{ + "tools": { + "playwriter_*": false + }, + "agent": { + "Build+": { + "tools": { + "playwriter_*": true + } + } + } +} +``` + +> **Tip**: Disable globally with `"playwriter_*": false` in `tools`, then enable per-agent to reduce context token usage. ## Usage From 30e2b39239a943bffdfda0137de254ec8657f6dd Mon Sep 17 00:00:00 2001 From: marcusquinn <6428977+marcusquinn@users.noreply.github.com> Date: Thu, 22 Jan 2026 14:57:56 +0000 Subject: [PATCH 2/5] Squash commits from fix/playwriter-mcp-opencode-config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Combined commits: - 🤖 AUTO-FIX: Apply code quality improvements - docs(playwriter): update OpenCode config with correct npx format (#153) --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dac4891d..b9d1dedd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - add MiniSim iOS/Android emulator launcher support (#151) + ## [2.71.0] - 2026-01-22 ### Added From c9b27bf556f908305e3117a1055dc2c0164468ee Mon Sep 17 00:00:00 2001 From: marcusquinn <6428977+marcusquinn@users.noreply.github.com> Date: Thu, 22 Jan 2026 23:42:44 +0000 Subject: [PATCH 3/5] feat: add aidevops skill CLI command with telemetry disabled Adds cmd_skill() to aidevops.sh providing a unified interface for managing Agent Skills (agentskills.io) with telemetry disabled by default. Delegates to existing add-skill-helper.sh and skill-update-helper.sh for implementation. - Exports DISABLE_TELEMETRY, DO_NOT_TRACK, SKILLS_NO_TELEMETRY env vars - Supports add/list/remove/check/update/status subcommands - Updates help text with skill command and examples section - Updates README with new CLI syntax and reference links --- README.md | 57 ++++++++++++++++------- aidevops.sh | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 0e599635..63af1872 100644 --- a/README.md +++ b/README.md @@ -453,16 +453,26 @@ aidevops includes curated skills imported from external repositories. Skills fro | **remotion** | [remotion-dev/skills](https://github.com/remotion-dev/skills) | Programmatic video creation with React, animations, rendering | | **animejs** | [animejs.com](https://animejs.com) | JavaScript animation library patterns and API (via Context7) | -**Skill Commands:** +**CLI Commands:** ```bash -/add-skill # Import a skill from GitHub -/add-skill list # List imported skills -/add-skill check-updates # Check for upstream updates -/add-skill --force # Update an existing skill +aidevops skill add # Import a skill from GitHub +aidevops skill list # List imported skills +aidevops skill check # Check for upstream updates +aidevops skill update [name] # Update specific or all skills +aidevops skill remove # Remove an imported skill ``` -Skills are registered in `~/.aidevops/agents/configs/skill-sources.json` and checked for updates during `./setup.sh`. +Skills are registered in `~/.aidevops/agents/configs/skill-sources.json` with upstream commit tracking for update detection. Telemetry is disabled - no data is sent to third parties. + +**Browse community skills:** [skills.sh](https://skills.sh) | **Specification:** [agentskills.io](https://agentskills.io) + +**Reference:** +- [Agent Skills Specification](https://agentskills.io/specification) - The open format for SKILL.md files +- [skills.sh Leaderboard](https://skills.sh) - Discover popular community skills +- [vercel-labs/add-skill](https://github.com/vercel-labs/add-skill) - The upstream CLI tool (aidevops uses its own implementation) +- [anthropics/skills](https://github.com/anthropics/skills) - Official Anthropic example skills +- [agentskills/agentskills](https://github.com/agentskills/agentskills) - Specification source and reference library ## **Agent Design Patterns** @@ -923,30 +933,43 @@ This installs the complete framework: 13 domain agents, 225+ subagents, and 130+ ### Importing External Skills -Import skills from any GitHub repository using `/add-skill`: +Import skills from any GitHub repository using the `aidevops skill` CLI: ```bash # Import from GitHub (auto-detects format) -/add-skill owner/repo +aidevops skill add owner/repo # Examples -/add-skill anthropics/courses # SKILL.md format -/add-skill PatrickJS/awesome-cursorrules # .cursorrules format -/add-skill someone/agents-repo # AGENTS.md format +aidevops skill add anthropics/skills/pdf # Specific skill from multi-skill repo +aidevops skill add vercel-labs/agent-skills # All skills from a repo +aidevops skill add expo/skills --name expo-dev # Custom name +aidevops skill add owner/repo --dry-run # Preview without changes ``` **Supported formats:** -- `SKILL.md` - Agent Skills standard (preferred) +- `SKILL.md` - [Agent Skills standard](https://agentskills.io/specification) (preferred) - `AGENTS.md` - Claude Code agents format -- `.cursorrules` - Cursor rules (auto-converted to SKILL.md) +- `.cursorrules` - Cursor rules (auto-converted) **Features:** -- Conflict detection with existing skills -- Version tracking for updates (`/add-skill --check-updates`) -- Symlinks created for Claude Code, Cursor, Amp, and other tools +- Auto-detection of skill format and category placement +- Conflict detection with merge/replace/rename options +- Upstream commit tracking for update detection (`aidevops skill check`) +- Conversion to aidevops subagent format with YAML frontmatter - Registry stored in `.agent/configs/skill-sources.json` +- Telemetry disabled (no data sent to skills.sh or other services) + +**How it differs from `npx add-skill`:** + +| | `aidevops skill add` | `npx add-skill` | +|---|---|---| +| **Target** | Converts to aidevops format in `.agent/` | Copies SKILL.md to agent-specific dirs | +| **Tracking** | Git commit-based upstream tracking | Lock file with content hashes | +| **Telemetry** | Disabled | Sends anonymous install counts | +| **Scope** | OpenCode-first | 22+ agents | +| **Updates** | `aidevops skill check` (GitHub API) | `npx skills check` (Vercel API) | -See `.agent/tools/build-agent/add-skill.md` for full documentation. +See `.agent/scripts/add-skill-helper.sh` for implementation details. ## **AI Agents & Subagents** diff --git a/aidevops.sh b/aidevops.sh index 8a3e069d..dd7ded4d 100755 --- a/aidevops.sh +++ b/aidevops.sh @@ -1631,6 +1631,123 @@ cmd_detect() { return 0 } +# Skill command - manage agent skills +cmd_skill() { + local action="${1:-help}" + shift || true + + # Disable telemetry for any downstream tools (add-skill, skills CLI) + export DISABLE_TELEMETRY=1 + export DO_NOT_TRACK=1 + export SKILLS_NO_TELEMETRY=1 + + local add_skill_script="$AGENTS_DIR/scripts/add-skill-helper.sh" + local update_skill_script="$AGENTS_DIR/scripts/skill-update-helper.sh" + + case "$action" in + add|a) + if [[ $# -lt 1 ]]; then + print_error "Source required (owner/repo or URL)" + echo "" + echo "Usage: aidevops skill add [options]" + echo "" + echo "Examples:" + echo " aidevops skill add vercel-labs/agent-skills" + echo " aidevops skill add anthropics/skills/pdf" + echo " aidevops skill add https://github.com/owner/repo" + echo "" + echo "Options:" + echo " --name Override the skill name" + echo " --force Overwrite existing skill" + echo " --dry-run Preview without making changes" + echo "" + echo "Browse skills: https://skills.sh" + return 1 + fi + + if [[ ! -f "$add_skill_script" ]]; then + print_error "add-skill-helper.sh not found" + print_info "Run 'aidevops update' to get the latest scripts" + return 1 + fi + + bash "$add_skill_script" add "$@" + ;; + list|ls|l) + if [[ ! -f "$add_skill_script" ]]; then + print_error "add-skill-helper.sh not found" + return 1 + fi + bash "$add_skill_script" list + ;; + check|c) + if [[ ! -f "$update_skill_script" ]]; then + print_error "skill-update-helper.sh not found" + return 1 + fi + bash "$update_skill_script" check "$@" + ;; + update|u) + if [[ ! -f "$update_skill_script" ]]; then + print_error "skill-update-helper.sh not found" + return 1 + fi + bash "$update_skill_script" update "$@" + ;; + remove|rm) + if [[ $# -lt 1 ]]; then + print_error "Skill name required" + echo "Usage: aidevops skill remove " + return 1 + fi + if [[ ! -f "$add_skill_script" ]]; then + print_error "add-skill-helper.sh not found" + return 1 + fi + bash "$add_skill_script" remove "$@" + ;; + status|s) + if [[ ! -f "$update_skill_script" ]]; then + print_error "skill-update-helper.sh not found" + return 1 + fi + bash "$update_skill_script" status "$@" + ;; + help|--help|-h|*) + print_header "Agent Skills Management" + echo "" + echo "Import and manage reusable AI agent skills from the community." + echo "Skills are converted to aidevops format with upstream tracking." + echo "Telemetry is disabled - no data sent to third parties." + echo "" + echo "Usage: aidevops skill [options]" + echo "" + echo "Commands:" + echo " add Import a skill from GitHub" + echo " list List all imported skills" + echo " check Check for upstream updates" + echo " update [name] Update specific or all skills" + echo " remove Remove an imported skill" + echo " status Show detailed skill status" + echo "" + echo "Source formats:" + echo " owner/repo GitHub shorthand" + echo " owner/repo/path/to/skill Specific skill in multi-skill repo" + echo " https://github.com/owner/repo Full URL" + echo "" + echo "Examples:" + echo " aidevops skill add vercel-labs/agent-skills" + echo " aidevops skill add anthropics/skills/pdf" + echo " aidevops skill add expo/skills --name expo-dev" + echo " aidevops skill check" + echo " aidevops skill update" + echo "" + echo "Browse community skills: https://skills.sh" + echo "Agent Skills specification: https://agentskills.io" + ;; + esac +} + # Help command cmd_help() { local version @@ -1644,6 +1761,7 @@ cmd_help() { echo " init [features] Initialize aidevops in current project" echo " upgrade-planning Upgrade TODO.md/PLANS.md to latest templates" echo " features List available features for init" + echo " skill Manage agent skills (add/list/check/update/remove)" echo " status Check installation status of all components" echo " update Update aidevops to the latest version (alias: upgrade)" echo " upgrade Alias for update" @@ -1668,6 +1786,13 @@ cmd_help() { echo " aidevops update-tools -u # Update all outdated tools" echo " aidevops uninstall # Remove aidevops" echo "" + echo "Skills:" + echo " aidevops skill add # Import a skill from GitHub" + echo " aidevops skill list # List imported skills" + echo " aidevops skill check # Check for upstream updates" + echo " aidevops skill update [name] # Update skills to latest" + echo " aidevops skill remove # Remove an imported skill" + echo "" echo "Installation:" echo " npm install -g aidevops && aidevops update # via npm" echo " brew install marcusquinn/tap/aidevops && aidevops update # via Homebrew" @@ -1748,6 +1873,10 @@ main() { shift cmd_repos "$@" ;; + skill|skills) + shift + cmd_skill "$@" + ;; detect|scan) cmd_detect ;; From 49cb1df6e8520223a1f25812f6b21ca9463cf078 Mon Sep 17 00:00:00 2001 From: marcusquinn <6428977+marcusquinn@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:10:05 +0000 Subject: [PATCH 4/5] feat: add -skill suffix for imports, generate/clean subcommands, AGENTS.md docs - Imported skills now saved as *-skill.md to distinguish from native subagents - Conflict detection differentiates NATIVE vs IMPORTED conflicts - Removed merge option (was unimplemented), simplified to replace/separate/skip - Added generate/clean subcommands delegating to generate-skills.sh - Updated AGENTS.md with Imported Skills section, CLI table, key scripts - Updated commands/add-skill.md with naming convention docs and examples --- .agent/AGENTS.md | 45 +++++++++++++- .agent/scripts/add-skill-helper.sh | 91 +++++++++++++++++++++------- .agent/scripts/commands/add-skill.md | 22 ++++++- aidevops.sh | 26 +++++++- 4 files changed, 158 insertions(+), 26 deletions(-) diff --git a/.agent/AGENTS.md b/.agent/AGENTS.md index bbba37ed..f5bca579 100644 --- a/.agent/AGENTS.md +++ b/.agent/AGENTS.md @@ -511,7 +511,7 @@ Subagents provide specialized capabilities. Read them when tasks require domain | `workflows/` | Development processes - branching, releases, PR reviews, quality gates | git-workflow, plans, release, version-bump, pr, review-issue-pr, preflight, postflight, ralph-loop, session-review | | `templates/` | Document templates - PRDs, task lists, planning documents | prd-template, tasks-template, plans-template, todo-template | | `workflows/branch/` | Branch conventions - naming, purpose, merge strategies per branch type | feature, bugfix, hotfix, refactor, chore, experiment, release | -| `scripts/commands/` | Slash commands - save-todo, remember, recall, code-simplifier, humanise and other interactive commands | save-todo, remember, recall, code-simplifier, humanise | +| `scripts/commands/` | Slash commands - save-todo, remember, recall, code-simplifier, humanise, add-skill and other interactive commands | save-todo, remember, recall, code-simplifier, humanise, add-skill | @@ -554,6 +554,7 @@ aidevops features # List available features | `aidevops upgrade` | Alias for update | | `aidevops repos` | List registered projects | | `aidevops repos add` | Register current project | +| `aidevops skill ` | Manage imported skills (add/list/check/update/remove/generate) | | `aidevops detect` | Find unregistered aidevops projects | | `aidevops update-tools` | Check for outdated tools | | `aidevops uninstall` | Remove aidevops | @@ -600,6 +601,7 @@ For AI-assisted setup guidance, see `aidevops/setup.md`. | Programmatic video | `tools/video/remotion.md` (React video creation, animations) | | AI image/video generation | `tools/video/higgsfield.md` (100+ generative models via unified API) | | Mobile emulators | `tools/mobile/minisim.md` (iOS simulator, Android emulator launcher) | +| Importing skills | `scripts/commands/add-skill.md` (import, naming, update tracking) | ## Security @@ -644,6 +646,47 @@ Never create files in `~/` root for files needed only with the current task. | `full-loop-helper.sh` | End-to-end development loop (task → PR → deploy) | | `session-review-helper.sh` | Gather session context for completeness review | | `humanise-update-helper.sh` | Check for upstream updates to humanise subagent | +| `add-skill-helper.sh` | Import external skills from GitHub repos | +| `skill-update-helper.sh` | Check/update imported skills from upstream | +| `generate-skills.sh` | Generate SKILL.md stubs for cross-tool discovery | + +## Imported Skills + +Import community [Agent Skills](https://agentskills.io) into aidevops with upstream tracking. + +**Naming convention**: Imported skills use a `-skill` suffix to distinguish from native subagents: + +| Type | Pattern | Example | Managed by | +|------|---------|---------|------------| +| Native subagent | `{name}.md` | `playwright.md` | aidevops team | +| Imported skill | `{name}-skill.md` | `playwright-skill.md` | Upstream repo | + +**CLI commands:** + +```bash +aidevops skill add # Import from GitHub (→ *-skill.md) +aidevops skill list # List imported skills +aidevops skill check # Check for upstream updates +aidevops skill update [name] # Pull upstream changes +aidevops skill remove # Remove imported skill +aidevops skill generate # Generate SKILL.md stubs for cross-tool discovery +aidevops skill clean # Remove generated SKILL.md stubs +``` + +**How it works:** +1. Clones the source repo, detects format (SKILL.md, AGENTS.md, .cursorrules) +2. Converts to aidevops subagent format with `-skill.md` suffix +3. Places in appropriate category folder (auto-detected from content) +4. Registers in `.agent/configs/skill-sources.json` for update tracking +5. Telemetry disabled - no data sent to skills.sh or third parties + +**When issues arise with a subagent:** +- `*-skill.md` → Check upstream for updates: `aidevops skill check` +- Native `.md` → Evolve locally, submit PR to aidevops + +**Cross-tool discovery**: `aidevops skill generate` creates lightweight SKILL.md stubs so other tools (Cursor, VS Code Copilot, OpenCode) can discover aidevops subagents without changing our file structure. + +**Related scripts:** `add-skill-helper.sh`, `skill-update-helper.sh`, `generate-skills.sh` ## Quality Workflow diff --git a/.agent/scripts/add-skill-helper.sh b/.agent/scripts/add-skill-helper.sh index 817730ce..6cb85250 100755 --- a/.agent/scripts/add-skill-helper.sh +++ b/.agent/scripts/add-skill-helper.sh @@ -283,11 +283,14 @@ determine_target_path() { category="services/hosting" fi - echo "$category/$skill_name" + # Append -skill suffix to distinguish imported skills from native subagents + # This enables: glob *-skill.md for imports, update checks, conflict avoidance + echo "$category/${skill_name}-skill" return 0 } # Check for conflicts with existing files +# Returns conflict info with type: NATIVE (our subagent) or IMPORTED (previous skill) check_conflicts() { local target_path="$1" local agent_dir="$2" @@ -299,11 +302,28 @@ check_conflicts() { local conflicts=() if [[ -f "$md_path" ]]; then - conflicts+=("$md_path") + if [[ "$md_path" == *-skill.md ]]; then + conflicts+=("IMPORTED: $md_path") + else + conflicts+=("NATIVE: $md_path") + fi fi if [[ -d "$dir_path" ]]; then - conflicts+=("$dir_path/") + if [[ "$dir_path" == *-skill ]]; then + conflicts+=("IMPORTED: $dir_path/") + else + conflicts+=("NATIVE: $dir_path/") + fi + fi + + # Also check for native subagent without -skill suffix (same base name) + local base_name="${target_path%-skill}" + local native_md="${agent_dir}/${base_name}.md" + if [[ "$target_path" == *-skill && -f "$native_md" ]]; then + # Native subagent exists with same base name - not a conflict since + # -skill suffix differentiates, but inform the user + conflicts+=("INFO: Native subagent exists at $native_md (no conflict, -skill suffix differentiates)") fi if [[ ${#conflicts[@]} -gt 0 ]]; then @@ -491,8 +511,8 @@ cmd_add() { local skill_name="${custom_name:-$(basename "${subpath:-$repo}")}" skill_name=$(to_kebab_case "$skill_name") # openskills installs to ~/.config/opencode/skills//SKILL.md - # Register with .md extension for consistency with other paths - register_skill "$skill_name" "https://github.com/$owner/$repo" ".agent/skills/${skill_name}.md" "skill-md" "" "openskills" "Installed via openskills CLI" + # Register with -skill suffix for consistency with direct imports + register_skill "$skill_name" "https://github.com/$owner/$repo" ".agent/skills/${skill_name}-skill.md" "skill-md" "" "openskills" "Installed via openskills CLI" return 0 fi log_warning "openskills failed, falling back to direct fetch" @@ -558,35 +578,62 @@ cmd_add() { local conflicts conflicts=$(check_conflicts "$target_path" ".agent") || true if [[ -n "$conflicts" ]]; then - if [[ "$force" != true ]]; then - log_warning "Conflicts detected:" - echo "$conflicts" | while read -r conflict; do - echo " - $conflict" + # Filter out INFO lines (informational, not blocking) + local blocking_conflicts + blocking_conflicts=$(echo "$conflicts" | grep -v "^INFO:" || true) + local info_lines + info_lines=$(echo "$conflicts" | grep "^INFO:" || true) + + # Show info lines (native subagent coexistence) + if [[ -n "$info_lines" ]]; then + echo "$info_lines" | while read -r info; do + log_info "${info#INFO: }" done - echo "" + fi + + # Handle blocking conflicts + if [[ -n "$blocking_conflicts" && "$force" != true ]]; then + # Determine conflict type for better messaging + if echo "$blocking_conflicts" | grep -q "^NATIVE:"; then + log_warning "Conflicts with native aidevops subagent(s):" + echo "$blocking_conflicts" | while read -r conflict; do + echo " - ${conflict#NATIVE: }" + done + echo "" + echo "The -skill suffix should prevent this. If you see this," + echo "the imported skill has the same name as a native subagent." + echo "" + elif echo "$blocking_conflicts" | grep -q "^IMPORTED:"; then + log_warning "Conflicts with previously imported skill(s):" + echo "$blocking_conflicts" | while read -r conflict; do + echo " - ${conflict#IMPORTED: }" + done + echo "" + else + log_warning "Conflicts detected:" + echo "$blocking_conflicts" | while read -r conflict; do + echo " - $conflict" + done + echo "" + fi + echo "Options:" - echo " 1. Merge (add new content to existing)" - echo " 2. Replace (overwrite existing)" - echo " 3. Separate (use different name)" - echo " 4. Skip (cancel import)" + echo " 1. Replace (overwrite existing)" + echo " 2. Separate (use different name)" + echo " 3. Skip (cancel import)" echo "" - read -rp "Choose option [1-4]: " choice + read -rp "Choose option [1-3]: " choice case "$choice" in 1) - log_info "Merging with existing..." - # TODO: Implement merge logic - log_warning "Merge not yet implemented, using replace" - ;; - 2) log_info "Replacing existing..." ;; - 3) + 2) read -rp "Enter new name: " new_name skill_name=$(to_kebab_case "$new_name") target_path=$(determine_target_path "$skill_name" "$description" "$source_dir") ;; - 4|*) + 3|*) log_info "Import cancelled" return 0 ;; diff --git a/.agent/scripts/commands/add-skill.md b/.agent/scripts/commands/add-skill.md index 17842935..967b2e60 100644 --- a/.agent/scripts/commands/add-skill.md +++ b/.agent/scripts/commands/add-skill.md @@ -11,14 +11,17 @@ URL/Repo: $ARGUMENTS ## Quick Reference ```bash -# Import skill from GitHub +# Import skill from GitHub (saved as *-skill.md) /add-skill dmmulroy/cloudflare-skill +# → .agent/services/hosting/cloudflare-skill.md # Import specific skill from multi-skill repo /add-skill anthropics/skills/pdf +# → .agent/tools/pdf-skill.md # Import with custom name /add-skill vercel-labs/agent-skills --name vercel-deploy +# → .agent/tools/deployment/vercel-deploy-skill.md # List imported skills /add-skill list @@ -27,6 +30,21 @@ URL/Repo: $ARGUMENTS /add-skill check-updates ``` +## Naming Convention + +Imported skills are saved with a `-skill` suffix to distinguish them from native aidevops subagents: + +| Type | Example | Managed by | +|------|---------|------------| +| Native subagent | `playwright.md` | aidevops team, evolves with framework | +| Imported skill | `playwright-skill.md` | Upstream repo, checked for updates | + +This means: +- No name clashes between imports and native subagents +- `*-skill.md` glob finds all imports instantly +- `aidevops skill check` knows which files to check for upstream updates +- Issues with imported skills → check upstream; issues with native → evolve locally + ## Workflow ### Step 1: Parse Input @@ -111,7 +129,7 @@ Imported skills are tracked in `.agent/configs/skill-sources.json`: "name": "cloudflare", "upstream_url": "https://github.com/dmmulroy/cloudflare-skill", "upstream_commit": "abc123...", - "local_path": ".agent/services/hosting/cloudflare.md", + "local_path": ".agent/services/hosting/cloudflare-skill.md", "format_detected": "skill-md", "imported_at": "2026-01-21T00:00:00Z", "last_checked": "2026-01-21T00:00:00Z", diff --git a/aidevops.sh b/aidevops.sh index dd7ded4d..93fc5aa5 100755 --- a/aidevops.sh +++ b/aidevops.sh @@ -1713,6 +1713,24 @@ cmd_skill() { fi bash "$update_skill_script" status "$@" ;; + generate|gen|g) + local generate_script="$AGENTS_DIR/scripts/generate-skills.sh" + if [[ ! -f "$generate_script" ]]; then + print_error "generate-skills.sh not found" + print_info "Run 'aidevops update' to get the latest scripts" + return 1 + fi + print_info "Generating SKILL.md stubs for cross-tool discovery..." + bash "$generate_script" "$@" + ;; + clean) + local generate_script="$AGENTS_DIR/scripts/generate-skills.sh" + if [[ ! -f "$generate_script" ]]; then + print_error "generate-skills.sh not found" + return 1 + fi + bash "$generate_script" --clean "$@" + ;; help|--help|-h|*) print_header "Agent Skills Management" echo "" @@ -1723,12 +1741,14 @@ cmd_skill() { echo "Usage: aidevops skill [options]" echo "" echo "Commands:" - echo " add Import a skill from GitHub" + echo " add Import a skill from GitHub (saved as *-skill.md)" echo " list List all imported skills" echo " check Check for upstream updates" echo " update [name] Update specific or all skills" echo " remove Remove an imported skill" echo " status Show detailed skill status" + echo " generate Generate SKILL.md stubs for cross-tool discovery" + echo " clean Remove generated SKILL.md stubs" echo "" echo "Source formats:" echo " owner/repo GitHub shorthand" @@ -1741,6 +1761,10 @@ cmd_skill() { echo " aidevops skill add expo/skills --name expo-dev" echo " aidevops skill check" echo " aidevops skill update" + echo " aidevops skill generate --dry-run" + echo "" + echo "Imported skills are saved with a -skill suffix to distinguish" + echo "from native aidevops subagents (e.g., playwright-skill.md vs playwright.md)." echo "" echo "Browse community skills: https://skills.sh" echo "Agent Skills specification: https://agentskills.io" From 1e261b776adcb311decf29255f9ee187aba471d8 Mon Sep 17 00:00:00 2001 From: marcusquinn <6428977+marcusquinn@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:25:48 +0000 Subject: [PATCH 5/5] fix: address PR review feedback (changelog, error handling, timeout) - Add CHANGELOG entry for skill command under [Unreleased] - Separate unknown subcommand from help (exit 1 with error message) - Add curl --connect-timeout 10 --max-time 30 to GitHub API call --- .agent/scripts/add-skill-helper.sh | 2 +- CHANGELOG.md | 6 ++++++ aidevops.sh | 7 ++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.agent/scripts/add-skill-helper.sh b/.agent/scripts/add-skill-helper.sh index 6cb85250..c2f9b02c 100755 --- a/.agent/scripts/add-skill-helper.sh +++ b/.agent/scripts/add-skill-helper.sh @@ -785,7 +785,7 @@ cmd_check_updates() { # Get latest commit from GitHub API local api_url="https://api.github.com/repos/$owner/$repo/commits?per_page=1" local latest_commit - latest_commit=$(curl -s "$api_url" | jq -r '.[0].sha // empty' 2>/dev/null) + latest_commit=$(curl -s --connect-timeout 10 --max-time 30 "$api_url" | jq -r '.[0].sha // empty' 2>/dev/null) if [[ -z "$latest_commit" ]]; then log_warning "Could not fetch latest commit for $name" diff --git a/CHANGELOG.md b/CHANGELOG.md index b9d1dedd..fa90a91d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- add `aidevops skill` CLI command for managing agent skills with telemetry disabled (#154) +- add `-skill` suffix convention for imported skills to distinguish from native subagents +- add `generate`/`clean` subcommands for SKILL.md cross-tool discovery stubs + ## [2.72.0] - 2026-01-22 ### Added diff --git a/aidevops.sh b/aidevops.sh index 93fc5aa5..c5a7a942 100755 --- a/aidevops.sh +++ b/aidevops.sh @@ -1731,7 +1731,7 @@ cmd_skill() { fi bash "$generate_script" --clean "$@" ;; - help|--help|-h|*) + help|--help|-h) print_header "Agent Skills Management" echo "" echo "Import and manage reusable AI agent skills from the community." @@ -1769,6 +1769,11 @@ cmd_skill() { echo "Browse community skills: https://skills.sh" echo "Agent Skills specification: https://agentskills.io" ;; + *) + print_error "Unknown skill command: $action" + echo "Run 'aidevops skill help' for usage information." + return 1 + ;; esac }