feat(v2.3.0): Add multi-agent installation support

Add automatic skill installation to 10+ AI coding agents with a single command.

New Features:
- New install-agent command for installing skills to any AI agent
- Support for 10+ agents: Claude Code, Cursor, VS Code, Amp, Goose, OpenCode, Letta, Aide, Windsurf
- Smart path resolution (global ~/.agent vs project-relative .agent/)
- Fuzzy agent name matching with suggestions
- --agent all flag to install to all agents at once
- --force flag to overwrite existing installations
- --dry-run flag to preview installations
- Comprehensive error handling and user feedback

Implementation:
- Created install_agent.py (379 lines) with core installation logic
- Updated main.py with install-agent subcommand
- Updated pyproject.toml with entry point
- Added 32 comprehensive tests (all passing, 603 total)
- No regressions in existing functionality

Documentation:
- Updated README.md with multi-agent installation guide
- Updated CLAUDE.md with install-agent examples
- Updated CHANGELOG.md with v2.3.0 release notes
- Added agent compatibility table

Technical Details:
- 100% own implementation (no external dependencies)
- Pure Python using stdlib (shutil, pathlib, argparse)
- Compatible with Agent Skills open standard (agentskills.io)
- Works offline

Closes #210

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
yusyus
2025-12-22 02:04:32 +03:00
parent e3fc660457
commit 72611af87d
7 changed files with 1096 additions and 10 deletions

View File

@@ -8,20 +8,22 @@ Usage:
skill-seekers <command> [options]
Commands:
scrape Scrape documentation website
github Scrape GitHub repository
pdf Extract from PDF file
unified Multi-source scraping (docs + GitHub + PDF)
enhance AI-powered enhancement (local, no API key)
package Package skill into .zip file
upload Upload skill to Claude
estimate Estimate page count before scraping
scrape Scrape documentation website
github Scrape GitHub repository
pdf Extract from PDF file
unified Multi-source scraping (docs + GitHub + PDF)
enhance AI-powered enhancement (local, no API key)
package Package skill into .zip file
upload Upload skill to Claude
estimate Estimate page count before scraping
install-agent Install skill to AI agent directories
Examples:
skill-seekers scrape --config configs/react.json
skill-seekers github --repo microsoft/TypeScript
skill-seekers unified --config configs/react_unified.json
skill-seekers package output/react/
skill-seekers install-agent output/react/ --agent cursor
"""
import sys
@@ -60,7 +62,7 @@ For more information: https://github.com/yusufkaraaslan/Skill_Seekers
parser.add_argument(
"--version",
action="version",
version="%(prog)s 2.2.0"
version="%(prog)s 2.3.0"
)
subparsers = parser.add_subparsers(
@@ -156,6 +158,32 @@ For more information: https://github.com/yusufkaraaslan/Skill_Seekers
estimate_parser.add_argument("config", help="Config JSON file")
estimate_parser.add_argument("--max-discovery", type=int, help="Max pages to discover")
# === install-agent subcommand ===
install_agent_parser = subparsers.add_parser(
"install-agent",
help="Install skill to AI agent directories",
description="Copy skill to agent-specific installation directories"
)
install_agent_parser.add_argument(
"skill_directory",
help="Skill directory path (e.g., output/react/)"
)
install_agent_parser.add_argument(
"--agent",
required=True,
help="Agent name (claude, cursor, vscode, amp, goose, opencode, all)"
)
install_agent_parser.add_argument(
"--force",
action="store_true",
help="Overwrite existing installation without asking"
)
install_agent_parser.add_argument(
"--dry-run",
action="store_true",
help="Preview installation without making changes"
)
# === install subcommand ===
install_parser = subparsers.add_parser(
"install",
@@ -300,6 +328,15 @@ def main(argv: Optional[List[str]] = None) -> int:
sys.argv.extend(["--max-discovery", str(args.max_discovery)])
return estimate_main() or 0
elif args.command == "install-agent":
from skill_seekers.cli.install_agent import main as install_agent_main
sys.argv = ["install_agent.py", args.skill_directory, "--agent", args.agent]
if args.force:
sys.argv.append("--force")
if args.dry_run:
sys.argv.append("--dry-run")
return install_agent_main() or 0
elif args.command == "install":
from skill_seekers.cli.install_skill import main as install_main
sys.argv = ["install_skill.py"]