Compose and sync your own collection of AGENTS.md, Skills, and other agentic prompts.
Cross-platform support: macOS • Linux • Windows
aps is a manifest-driven, CLI tool for syncing agentic assets (Cursor rules, Agent Skills, and AGENTS.md files) from sources like git or your filesystem in your project folders.
- Declarative manifest-driven sync - Define your agentic assets in a YAML manifest
- Composable AGENTS.md - Merge multiple AGENTS.md files from local or remote sources into one
- Safe installs - Automatic conflict detection and backup creation
- Deterministic lockfile - Idempotent syncs that only update when needed
Install or update aps using cargo
# install the latest version
cargo install apsOr use curl,
curl -fsSL https://raw.githubusercontent.com/westonplatter/aps/main/install.sh | sh
# or override the install location
APS_INSTALL_DIR=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/westonplatter/aps/main/install.sh | shPre-built binaries for all platforms are available on the Releases page.
| Platform | Download |
|---|---|
| Linux x64 | aps-linux-x64-musl.tar.gz |
| Linux ARM64 | aps-linux-arm64.tar.gz |
| macOS Intel | aps-macos-x64.tar.gz |
| macOS ARM | aps-macos-arm64.tar.gz |
| Windows x64 | aps-windows-x64.zip |
git clone https://github.com/westonplatter/aps.git
cd agentic-prompt-sync
cargo build --release
# Binary at target/release/aps-
Initialize a manifest in your project:
aps init
This creates a
aps.yamlmanifest file with an example entry. -
Add skills directly from GitHub URLs:
# Add a skill from a GitHub URL - automatically syncs the skill aps add https://github.com/hashicorp/agent-skills/blob/main/terraform/module-generation/skills/refactor-module/SKILL.md # Or use the folder URL (SKILL.md is auto-detected) aps add https://github.com/hashicorp/agent-skills/tree/main/terraform/module-generation/skills/refactor-module
This parses the GitHub URL, adds an entry to
aps.yaml, and syncs only that skill immediately (other entries are not affected). -
Or manually edit the manifest to define your assets:
entries: - id: my-agents kind: agents_md source: type: filesystem root: $HOME path: personal-generic-AGENTS.md dest: ./AGENTS.md
-
Sync and install your assets:
aps sync
-
Check status of synced assets:
aps status
| Command | Description |
|---|---|
aps init |
Create a new manifest file and update .gitignore |
aps add |
Add a skill from a GitHub URL and sync it |
aps sync |
Sync all entries from manifest and install assets |
aps validate |
Validate manifest schema and check sources |
aps status |
Display last sync information from lockfile |
--verbose- Enable verbose logging--manifest <path>- Specify manifest file path (default:aps.yaml)
--id <name>- Custom entry ID (defaults to skill folder name)--kind <type>- Asset kind:agent-skill,cursor-rules,cursor-skills-root,agents-md(default:agent-skill)--no-sync- Only add to manifest, don't sync immediately--all- Add all discovered skills without prompting (for repo-level URLs or directories)--yes/-y- Skip confirmation prompts
When you point aps add at a repository or directory that doesn't directly contain a SKILL.md, aps automatically discovers all skills within it. Skills are identified by recursively searching for directories containing a SKILL.md file.
From a GitHub repository:
# Discover all skills in a repo (or a subdirectory within it)
aps add https://github.com/anthropics/skills
# Narrow discovery to a specific path within the repo
aps add https://github.com/anthropics/skills/tree/main/skillsFrom a local directory:
# Discover skills in a local directory
aps add ~/my-skills
# Supports shell variable expansion
aps add $HOME/work/shared-skillsAfter discovery, aps presents an interactive toggle picker showing all discovered skills. Already-installed skills appear pre-checked, so you can add new skills and remove existing ones in a single pass.
Found 5 skill(s) (2 installed, 3 new):
? Toggle skills (space to toggle, enter to confirm) ›
> ✔ refactor-module Transform monolithic Terraform configurations into reusable modules
✔ plan-review Review Terraform plan output for potential issues
○ test-gen Generate unit tests for Terraform modules
○ lint-check Lint Terraform files for best practices
○ cost-estimator Estimate cloud costs from Terraform plansAfter confirming, aps shows a summary of changes:
✓ Will add: test-gen, cost-estimator
✗ Will remove: plan-review
· Unchanged: refactor-module
Proceed? [Y/n]To skip prompts and add everything, use --all. To skip the confirmation, use --yes / -y:
aps add --all https://github.com/anthropics/skills
aps add --yes https://github.com/anthropics/skills--yes- Non-interactive mode, automatically confirm overwrites--dry-run- Preview changes without applying them--only <id>- Only sync specific entry by ID
When you run aps sync:
- Entries are synced - Each entry in
aps.yamlis installed to its destination - Stale entries are cleaned - Entries in the lockfile that no longer exist in
aps.yamlare automatically removed - Lockfile is saved - The updated lockfile is written to disk
Note: Stale entry cleanup only happens during a full sync. When using --only <id> to sync specific entries, other lockfile entries are preserved.
entries:
# Single AGENTS.md file from one source
- id: my-agents
kind: agents_md
source:
type: filesystem
root: $HOME
path: AGENTS-generic.md
dest: ./AGENTS-simple.md
# Composite AGENTS.md - merge multiple markdown files into one
- id: composite-agents
kind: composite_agents_md
sources:
- type: filesystem
root: $HOME/agents
path: AGENT.python.md
- type: filesystem
root: $HOME/agents
path: AGENT.docker.md
- type: git
repo: https://github.com/apache/airflow.git
ref: main
path: AGENTS.md
dest: ./AGENTS.md
# Pull in Agent Skills from a public git repo
- id: anthropic-skills
kind: agent_skill
source:
type: git
repo: git@github.com:anthropics/skills.git
ref: main
path: skills
include:
- pdf
- skill-creation
dest: ./.claude/skills/
# Pull Cursor Rules from a private git repo
- id: personal-rules
kind: cursor_rules
source:
type: git
repo: git@github.com:your-username/dotfiles.git
ref: main
path: .cursor/rules
# shallow: false # full clone
dest: ./.cursor/rules/
# Pull in more Cursor Rules from a local file system
- id: company-rules
kind: cursor_rules
source:
type: filesystem
root: $HOME/work/acme-corp/internal-prompts
path: rules
# symlink: false # copy files instead of symlinking
dest: ./.cursor/rules/| Kind | Description | Default Destination |
|---|---|---|
agents_md |
Single AGENTS.md file | ./AGENTS.md |
composite_agents_md |
Merge multiple markdown files into one | ./AGENTS.md |
cursor_rules |
Directory of Cursor rules | ./.cursor/rules/ |
cursor_hooks |
Directory of Cursor hooks | ./.cursor/hooks/ |
cursor_skills_root |
Directory with skill subdirs | ./.cursor/skills/ |
agent_skill |
Claude agent skill directory | ./.claude/skills/ |
| Type | Description | Key Properties |
|---|---|---|
filesystem |
Sync from a local directory | root, path, symlink |
git |
Sync from a git repository | repo, ref, path, shallow |
Shell Variable Expansion: Path values in root and path fields support shell variable expansion (e.g., $HOME, $USER). This makes manifests portable across different machines and users.
When a source contains multiple subdirectories (e.g., a skills repo with many skills), use the include field to sync only specific ones:
- id: anthropic-skills
kind: agent_skill
source:
type: git
repo: git@github.com:anthropics/skills.git
ref: main
path: skills
include:
- pdf
- skill-creation
dest: ./.claude/skills/Each value in include is matched against subdirectory names within the source path. Only matching subdirectories are synced. If include is omitted, all subdirectories are synced.
The composite_agents_md kind allows you to merge multiple markdown files into a single AGENTS.md file. This is useful when you want to organize agent definitions across separate files (e.g., by language or framework) and combine them at sync time.
entries:
- id: my-composite-agents
kind: composite_agents_md
sources:
# Local filesystem sources
- type: filesystem
root: $HOME/agents-md-partials
path: AGENT.docker.md
# Remote git sources
- type: git
repo: https://github.com/westonplatter/agentically.git
ref: main
path: agents-md-partials/AGENTS.python.md
dest: ./AGENTS.mdKey features:
- Mixed sources: Combine local filesystem and remote git sources
- Order preserved: Files are merged in the order specified in
sources - Auto-generated header: Output includes a comment indicating it was composed by aps
The lockfile tracks installed assets and is automatically created/updated by aps sync. This file should be committed to version control to ensure reproducible installations across your team. It stores:
- APS version that generated/modified the lockfile
- Source information
- Destination paths
- Last update timestamp
- Content checksum (SHA256)
Environment Variables Are Preserved: Unlike other package managers (npm, uv, bundler) that expand environment variables to concrete paths, aps preserves shell variables like $HOME in the lockfile. This makes lockfiles portable across different machines and users who have the same relative directory structure.
aps sync --yesaps validate --strictSee CONTRIBUTING.md for development setup, building, testing, and linting instructions.
Built based on inspiration from these other projects,
See LICENSE for details.
