This is the full developer documentation for syllago
# Welcome to syllago
> The package manager for AI coding tool content.
[Source](/)
[Installation ](/getting-started/installation.md)Install syllago and set up your first project.
[Quick Start ](/getting-started/quick-start.md)Get up and running in under 5 minutes.
[CLI Reference ](/using-syllago/cli-reference.md)Full reference for every syllago command.
[Supported Providers ](/using-syllago/providers.md)See every supported AI coding tool.
# Registry Privacy
> How syllago prevents accidental leakage of content from private registries to public destinations.
[Source](/advanced/registry-privacy/)
Syllago includes a privacy gate system to prevent accidental leakage of content from private registries to public destinations. This is a soft gate — it prevents mistakes, not intentional circumvention.
## How It Works
The privacy gate operates in four layers:
### 1. Detection
When you add a registry, syllago determines its visibility:
* **API probes**: Checks GitHub, GitLab, or Bitbucket APIs for the repository’s privacy status
* **Manifest field**: An optional `visibility` field in `registry.yaml` provides explicit control
* **Default**: Unknown visibility defaults to **private** (safe default)
### 2. Tainting
Content imported from private registries receives permanent metadata:
```yaml
source_registry: my-private-registry
source_visibility: private
```
These fields persist through the content’s entire lifecycle in your library. They are not removed by editing, re-importing from a different path, or any other library operation.
### 3. Enforcement (Four Gates)
| Gate | Command | Behavior |
| ---- | ------------------------- | ---------------------------------------------------------------------- |
| G1 | `syllago publish` | **Blocks** publishing tainted content to public registries |
| G2 | `syllago share` | **Blocks** sharing tainted content to public repos |
| G3 | `syllago loadout create` | **Warns** when loadout contains private items |
| G4 | `syllago loadout publish` | **Blocks** publishing loadouts with private items to public registries |
The `sync-and-export` command also warns when installing private-tainted content.
### 4. Scope
Soft Gate
The privacy gate prevents accidental leakage through syllago commands. It does **not** prevent:
* Direct filesystem operations (copy/paste)
* Direct git commands
* Content modification after export
There is no override flag by design. To remove the taint, re-add the content from a public source.
## Removing Taint
The only way to remove privacy taint is to re-add the content from a public source:
```bash
# Remove the tainted version
syllago remove my-private-skill
# Re-add from a public registry or provider
syllago add skills/my-skill --from claude-code
```
## Team Workflows
### Private team registry
If your team uses a private registry for internal content:
1. Content added from the private registry is automatically tainted
2. Team members can freely install tainted content to their providers
3. Tainted content cannot be accidentally published to public registries
4. To share content publicly, create it fresh or re-add from a public source
### Mixed public/private
If you use both public and private registries:
```bash
# Check which registries are private
syllago registry list
# Inspect an item's taint status
syllago inspect my-skill --json | jq '.source_visibility'
```
## See Also
* [Registries](/using-syllago/collections/registries.md) — managing git-based registries
* `syllago publish` — contributing to registries
* [Team Setup](/advanced/team-setup.md) — configuring syllago for team use
# Sandbox
> Run AI CLI tools in bubblewrap isolation with filesystem, network, and environment variable filtering.
[Source](/advanced/sandbox/)
The sandbox runs AI CLI tools inside a [bubblewrap](https://github.com/containers/bubblewrap) (bwrap) container that restricts filesystem access, network egress, and environment variables. When an AI tool executes code — installing packages, running scripts, making API calls — the sandbox limits what that code can reach.
Linux only. macOS and Windows are not supported.
## What gets sandboxed
The sandbox enforces three boundaries:
**Filesystem.** The sandboxed process can only see your current working directory. The rest of the filesystem is hidden. This prevents AI-generated code from reading or modifying files outside the project.
**Network.** Outbound connections are blocked by default. You explicitly allow specific domains (for API calls) and localhost ports (for local dev servers). Everything else is denied.
**Environment variables.** Only env vars you explicitly allow are passed into the sandbox. API keys, tokens, and other secrets in your shell environment stay outside unless you opt them in.
## Prerequisites
Two system packages must be installed:
* **bubblewrap** (`bwrap`) >= 0.4.0 — the container runtime
* **socat** >= 1.7.0 — used for network proxying through the sandbox boundary
Install them with your system package manager:
```bash
# Debian / Ubuntu
sudo apt install bubblewrap socat
# Fedora
sudo dnf install bubblewrap socat
# Arch
sudo pacman -S bubblewrap socat
```
Verify everything is ready:
```bash
syllago sandbox check
```
To also verify that a specific provider works inside the sandbox:
```bash
syllago sandbox check claude-code
```
## Running a provider in the sandbox
Once prerequisites are in place, run any provider inside the sandbox:
```bash
syllago sandbox run claude-code
```
This starts the provider with filesystem, network, and env var restrictions active. The provider works normally from the user’s perspective, but its access is constrained to what you’ve allowed.
### One-off overrides
You can extend the sandbox for a single session without changing your saved configuration:
```bash
# Allow an extra domain for this session only
syllago sandbox run claude-code --allow-domain api.example.com
# Forward an extra env var into the sandbox
syllago sandbox run claude-code --allow-env MY_API_KEY
# Allow a localhost port (e.g., a local dev server)
syllago sandbox run claude-code --allow-port 3000
# Mount an additional path read-only
syllago sandbox run claude-code --mount-ro /usr/share/dict
# Block all network (no proxy at all)
syllago sandbox run claude-code --no-network
```
These flags can be combined and repeated.
## Configuring allowed access
The sandbox maintains persistent allowlists for domains, ports, and env vars. These apply every time you run `sandbox run`.
### Domains
Domains control which hosts the sandboxed process can reach over the network.
```bash
# Allow a domain
syllago sandbox allow-domain api.anthropic.com
# Remove a domain
syllago sandbox deny-domain api.anthropic.com
# List all allowed domains
syllago sandbox domains
```
### Localhost ports
Ports control which localhost services are reachable from inside the sandbox. Useful for local dev servers, databases, or other services running on your machine.
```bash
# Allow a port
syllago sandbox allow-port 8080
# Remove a port
syllago sandbox deny-port 8080
# List all allowed ports
syllago sandbox ports
```
### Environment variables
Env vars control which shell variables are passed into the sandbox. By default, none are forwarded — the sandbox starts with a clean environment.
```bash
# Allow an env var
syllago sandbox allow-env ANTHROPIC_API_KEY
# Remove an env var
syllago sandbox deny-env ANTHROPIC_API_KEY
# List all allowed env vars
syllago sandbox env
```
## Inspecting the configuration
To see the effective sandbox configuration (all allowed domains, ports, and env vars):
```bash
syllago sandbox info
```
To see the configuration that would apply to a specific provider:
```bash
syllago sandbox info claude-code
```
## Typical setup
A practical setup for using Claude Code in the sandbox:
```bash
# 1. Check prerequisites
syllago sandbox check claude-code
# 2. Allow the API endpoint
syllago sandbox allow-domain api.anthropic.com
# 3. Pass through the API key
syllago sandbox allow-env ANTHROPIC_API_KEY
# 4. Allow a local dev server if needed
syllago sandbox allow-port 3000
# 5. Run it
syllago sandbox run claude-code
```
After initial setup, step 5 is the only one you repeat. The allowlists persist across sessions.
## Related
* [CLI reference: sandbox commands](/using-syllago/cli-reference/sandbox.md) — full flag and option details for all sandbox subcommands
* [CLI reference: sandbox run](/using-syllago/cli-reference/sandbox-run.md) — all flags for `sandbox run`
* [CLI reference: sandbox check](/using-syllago/cli-reference/sandbox-check.md) — prerequisite verification
# Team Setup
> Share and standardize AI coding tool configurations across your team with syllago.
[Source](/advanced/team-setup/)
Teams use syllago to maintain consistent AI coding tool configurations — shared rules, skills, agents, and provider settings — without manual setup on each developer’s machine. The core workflow centers on registries for distribution, loadouts for onboarding, and project-level config for per-repo settings.
## Team registry
A [registry](/using-syllago/collections/registries.md) is a git repo that holds shared syllago content. This is the primary mechanism for distributing team standards.
### Setting up a team registry
1. Create a git repo (GitHub, GitLab, etc.)
2. Add syllago content — rules, skills, agents, hooks, MCP configs — following the standard directory layout
3. Push to your git host
4. Share the URL with your team
There is no special initialization or registry-specific metadata. Any git repo with syllago’s content structure works as a registry.
### Team members subscribe
Each team member adds the registry once:
```bash
syllago registry add https://github.com/your-org/syllago-registry.git
```
To pin everyone to a stable release:
```bash
syllago registry add https://github.com/your-org/syllago-registry.git --ref v1.0
```
### Staying up to date
Sync periodically to pull the latest content:
```bash
syllago registry sync
```
Syncing updates the local clone only — it does not modify anyone’s library or installed content. Team members choose when to pull updates into their own setup, keeping the workflow predictable.
## Contributing back
Registries are not read-only. When a team member creates content that belongs in the shared registry, they contribute it via PR:
```bash
syllago publish useful-skill --registry your-registry
```
This creates a branch in the registry clone, copies the content, commits, pushes, and opens a pull request if the `gh` CLI is installed. The registry maintainer reviews and merges through the normal PR workflow — no special tooling required on their end.
For sharing directly with a team repo (without a registry), use `syllago share`:
```bash
syllago share useful-skill
```
This means team standards can evolve from the bottom up. Individual developers experiment locally, and the best content gets published to the shared registry for everyone.
## Loadouts for onboarding
A [loadout](/using-syllago/collections/loadouts.md) bundles multiple content items into a single apply-as-a-unit configuration. For team onboarding, this turns a multi-step manual setup into one command.
### Creating a team loadout
A team lead or maintainer creates the loadout:
```bash
syllago loadout create team-standards
```
The interactive creator walks through selecting which content items to include — team rules, shared skills, standard MCP configs, etc.
### New member onboarding
A new team member’s setup becomes:
```bash
# 1. Add the team registry
syllago registry add https://github.com/your-org/syllago-registry.git
# 2. Sync to pull content
syllago registry sync
# 3. Apply the team loadout
syllago loadout apply team-standards --keep
```
The `--keep` flag writes the configuration permanently. Three commands replace what would otherwise be a checklist of individual content installations and provider configurations.
### Verifying the setup
After applying, team members can confirm what is active:
```bash
syllago loadout status
```
## Project-level config
Running `syllago init` in a project root creates `.syllago/config.json` with project-specific provider settings:
```bash
cd your-project
syllago init
```
Syllago detects which AI coding tools are in use and writes the config accordingly. Commit `.syllago/config.json` to the repo so all team members share the same provider settings without manual configuration.
This is separate from registry content. The registry holds the **what** (rules, skills, agents). The project config holds the **where** (which providers to target for this repo).
## CI/CD integration
Use `syllago sync-and-export` or `syllago install` in CI pipelines to automate content distribution. The `--json` flag produces machine-readable output suitable for scripting:
```bash
syllago install --to claude-code --json
```
Examples of CI use cases:
```bash
# Install all skills to a specific provider
syllago install --to cursor --type skills --json
# Sync registries and install in one step
syllago sync-and-export --to claude-code --json
# Install only rules
syllago install --to claude-code --type rules --json
```
This lets you enforce that project repos always have up-to-date provider configurations — for example, regenerating provider config files on every PR merge or as part of a dev environment setup script.
## Putting it together
A typical team workflow combines all of these:
```plaintext
Team registry (git repo)
├── Rules, skills, agents, hooks
├── Team members sync periodically
└── Contributors promote content via PR
Loadout (team-standards)
├── Bundles registry content
└── New members apply in one command
Project config (.syllago/config.json)
├── Committed to each repo
└── Sets provider targets per project
CI pipeline
└── Exports content on merge/deploy
```
The registry is the source of truth. Loadouts make it easy to apply. Project config ties it to specific repos. CI keeps everything in sync automatically.
## Related
* [Registries](/using-syllago/collections/registries.md) — full reference on adding, syncing, and browsing registries
* [Loadouts](/using-syllago/collections/loadouts.md) — creating, applying, and managing loadouts
* [`syllago init`](/using-syllago/cli-reference/init.md) — project initialization
* `syllago install` — installing content to providers
* `syllago publish` — contributing content to a registry
* `syllago share` — contributing content to a team repo
# Troubleshooting
> Common issues, debug tools, and where to get help with syllago.
[Source](/advanced/troubleshooting/)
## Debug Flags
syllago provides several flags to help diagnose problems. These work with any command.
| Flag | Description |
| ------------------ | -------------------------------------------------------------- |
| `--verbose` / `-v` | Verbose output showing what syllago is doing step by step |
| `--json` | Machine-readable JSON output for all commands |
| `--no-color` | Disable color output (also available via `NO_COLOR=1` env var) |
| `--dry-run` | Preview changes without writing (supported on select commands) |
Combine flags for maximum visibility:
```bash
syllago add --from claude-code --dry-run
```
***
## Common Issues
### Provider not detected
`syllago init` doesn’t find your AI coding tool.
**Symptoms:**
* `syllago init` reports no providers found
* Provider missing from `syllago list` output
**Fix:**
1. Verify the tool is installed and available in your `PATH`:
```bash
which
```
2. If the tool is installed but not detected, add it manually:
```bash
syllago config add
```
3. Run [`syllago info providers`](/using-syllago/cli-reference/info-providers.md) to see all supported providers.
***
### Content not appearing after add
You ran `syllago add` but can’t find the content.
**Symptoms:**
* Content missing from expected provider config
* `syllago list` shows fewer items than expected
**Fix:**
1. Run [`syllago list`](/using-syllago/cli-reference/list.md) to verify what’s actually imported.
2. Check the `--source` filter — content may be in a different source (registry vs library):
```bash
syllago list --source registry
syllago list --source library
```
3. Run `syllago list --verbose` for details on where each item came from.
***
### Format conversion issues
A conversion between providers fails or produces unexpected results.
**Symptoms:**
* Error during `syllago add`, `syllago install`, or `syllago convert`
* Content type mismatch warnings
**Fix:**
1. Check [`syllago info providers`](/using-syllago/cli-reference/info-providers.md) to see which content types each provider supports.
2. Not all content types work with all providers. Verify your source and target are compatible.
3. Check the [format conversion reference](/using-syllago/format-conversion.md) for the compatibility matrix.
**Related error codes:**
* [CONVERT\_001](/errors/convert-001.md) — Conversion not supported
* [EXPORT\_001](/errors/export-001.md) — Export failed
***
### Registry sync failures
`syllago registry sync` fails to pull updates.
**Symptoms:**
* Sync command errors out
* Registry content is stale or missing
**Fix:**
1. Check network connectivity — registries are fetched over the network (typically git).
2. Verify you have access to the registry repository.
3. Run sync with verbose output for details:
```bash
syllago registry sync --verbose
```
4. Check [`syllago registry list`](/using-syllago/cli-reference/registry-list.md) to confirm the registry URL is correct.
**Related error codes:**
* [REGISTRY\_001](/errors/registry-001.md) — Registry not found
* [REGISTRY\_002](/errors/registry-002.md) — Registry sync failed
***
### Permission errors on install
syllago can’t write to the provider’s configuration directory.
**Symptoms:**
* “Permission denied” errors during import or sync
* Content fails to write to the target location
**Fix:**
1. Check file permissions on the provider’s config directory.
2. Ensure your user owns the directory, or has write access.
3. On macOS/Linux:
```bash
ls -la ~/.config//
```
**Related error codes:**
* [INSTALL\_001](/errors/install-001.md) — Installation failed
***
## Error Codes
Every syllago error includes a code like `CONVERT_001` or `REGISTRY_002`. Each code has a dedicated page with explanations, common causes, and fixes.
See the full [error codes reference](/errors.md) for the complete list.
***
## Getting Help
* **Inline docs:** Run `syllago --help` or `syllago --help` for usage information on any command.
* **CLI reference:** Browse the full [CLI reference](/using-syllago/cli-reference.md) for detailed documentation.
* **GitHub issues:** Report bugs or ask questions at [github.com/OpenScribbler/syllago/issues](https://github.com/OpenScribbler/syllago/issues).
# Error Codes
> Reference for all syllago error codes with explanations and fixes.
[Source](/errors/)
When syllago encounters an error, it displays a structured error with a code, message, and suggestion. Run `syllago explain ` for offline help, or click any code below for the full reference.
## Catalog Errors
| Code | Name | Description |
| ------------------------------------ | ------------------- | -------------------------------- |
| [CATALOG\_001](/errors/catalog-001.md) | Catalog Not Found | no syllago repo or library found |
| [CATALOG\_002](/errors/catalog-002.md) | Catalog Scan Failed | catalog scan returned an error |
## Config Errors
| Code | Name | Description |
| ---------------------------------- | ---------------- | -------------------------------------------------- |
| [CONFIG\_001](/errors/config-001.md) | Config Invalid | configuration file is malformed |
| [CONFIG\_002](/errors/config-002.md) | Config Not Found | configuration file does not exist |
| [CONFIG\_003](/errors/config-003.md) | Config Path | invalid path override (not absolute, unknown type) |
| [CONFIG\_004](/errors/config-004.md) | Config Save | failed to save configuration |
## Convert Errors
| Code | Name | Description |
| ------------------------------------ | --------------------- | ---------------------------------------- |
| [CONVERT\_001](/errors/convert-001.md) | Convert Not Supported | content type does not support conversion |
| [CONVERT\_002](/errors/convert-002.md) | Convert Parse Failed | parsing content for conversion failed |
| [CONVERT\_003](/errors/convert-003.md) | Convert Render Failed | rendering to target format failed |
## Export Errors
| Code | Name | Description |
| ---------------------------------- | -------------------- | ------------------------------------- |
| [EXPORT\_001](/errors/export-001.md) | Export Not Supported | export not supported for content type |
| [EXPORT\_002](/errors/export-002.md) | Export Failed | export operation failed |
## Import Errors
| Code | Name | Description |
| ---------------------------------- | ------------------- | -------------------------------------- |
| [IMPORT\_001](/errors/import-001.md) | Import Clone Failed | cloning import source failed |
| [IMPORT\_002](/errors/import-002.md) | Import Conflict | import conflicts with existing content |
## Init Errors
| Code | Name | Description |
| ------------------------------ | ----------- | --------------------------- |
| [INIT\_001](/errors/init-001.md) | Init Exists | project already initialized |
## Input Errors
| Code | Name | Description |
| -------------------------------- | -------------- | -------------------------------------------------- |
| [INPUT\_001](/errors/input-001.md) | Input Missing | required flag or argument not provided |
| [INPUT\_002](/errors/input-002.md) | Input Conflict | mutually exclusive flags used together |
| [INPUT\_003](/errors/input-003.md) | Input Invalid | flag value is invalid (wrong format, out of range) |
| [INPUT\_004](/errors/input-004.md) | Input Terminal | command requires interactive terminal |
## Install Errors
| Code | Name | Description |
| ------------------------------------ | ---------------------- | ------------------------------------------------- |
| [INSTALL\_001](/errors/install-001.md) | Install Not Writable | install path not writable |
| [INSTALL\_002](/errors/install-002.md) | Install Item Not Found | item not found in library for install |
| [INSTALL\_003](/errors/install-003.md) | Install Method Invalid | invalid install method for content type |
| [INSTALL\_004](/errors/install-004.md) | Install Conflict | active loadout or other conflict prevents install |
| [INSTALL\_005](/errors/install-005.md) | Install Not Installed | item is not currently installed |
## Item Errors
| Code | Name | Description |
| ------------------------------ | ----------------- | ---------------------------------- |
| [ITEM\_001](/errors/item-001.md) | Item Not Found | named item not found in library |
| [ITEM\_002](/errors/item-002.md) | Item Ambiguous | item name exists in multiple types |
| [ITEM\_003](/errors/item-003.md) | Item Type Unknown | unknown content type specified |
## Loadout Errors
| Code | Name | Description |
| ------------------------------------ | ----------------- | ---------------------------------------- |
| [LOADOUT\_001](/errors/loadout-001.md) | Loadout Not Found | loadout not found in library or registry |
| [LOADOUT\_002](/errors/loadout-002.md) | Loadout Parse | loadout.yaml is malformed |
| [LOADOUT\_003](/errors/loadout-003.md) | Loadout Conflict | another loadout is already active |
| [LOADOUT\_004](/errors/loadout-004.md) | Loadout Provider | loadout references unknown provider |
| [LOADOUT\_005](/errors/loadout-005.md) | Loadout No Items | no items selected for loadout |
## Privacy Errors
| Code | Name | Description |
| ------------------------------------ | ----------------------- | ------------------------------------------------------ |
| [PRIVACY\_001](/errors/privacy-001.md) | Privacy Publish Blocked | private content cannot be published to public registry |
| [PRIVACY\_002](/errors/privacy-002.md) | Privacy Share Blocked | private content cannot be shared to public repo |
| [PRIVACY\_003](/errors/privacy-003.md) | Privacy Loadout Warn | loadout contains private items (warning) |
## Promote Errors
| Code | Name | Description |
| ------------------------------------ | ------------------ | ------------------------------------------- |
| [PROMOTE\_001](/errors/promote-001.md) | Promote Dirty Tree | uncommitted changes in working tree |
| [PROMOTE\_002](/errors/promote-002.md) | Promote Validation | content validation failed before promote |
| [PROMOTE\_003](/errors/promote-003.md) | Promote Git Failed | git operation (branch, commit, push) failed |
## Provider Errors
| Code | Name | Description |
| -------------------------------------- | --------------------- | ----------------------------- |
| [PROVIDER\_001](/errors/provider-001.md) | Provider Not Found | unknown provider slug |
| [PROVIDER\_002](/errors/provider-002.md) | Provider Not Detected | provider not detected on disk |
## Registry Errors
| Code | Name | Description |
| -------------------------------------- | -------------------- | ------------------------------------------------ |
| [REGISTRY\_001](/errors/registry-001.md) | Registry Clone | git clone of registry failed |
| [REGISTRY\_002](/errors/registry-002.md) | Registry Not Found | named registry not in config |
| [REGISTRY\_003](/errors/registry-003.md) | Registry Not Allowed | URL blocked by allowedRegistries policy |
| [REGISTRY\_004](/errors/registry-004.md) | Registry Invalid | invalid registry name or structure |
| [REGISTRY\_005](/errors/registry-005.md) | Registry Duplicate | registry with this name already exists |
| [REGISTRY\_006](/errors/registry-006.md) | Registry Not Cloned | registry exists in config but not cloned locally |
| [REGISTRY\_007](/errors/registry-007.md) | Registry Sync Failed | git pull failed during sync |
| [REGISTRY\_008](/errors/registry-008.md) | Registry Save Failed | could not save registry config changes |
## System Errors
| Code | Name | Description |
| ---------------------------------- | -------------- | ----------------------------------- |
| [SYSTEM\_001](/errors/system-001.md) | System Homedir | cannot determine home directory |
| [SYSTEM\_002](/errors/system-002.md) | System IO | filesystem read/write/mkdir failure |
# CATALOG_001 — Catalog Not Found
> Syllago could not find a repository or library to work with. The catalog requires a `.syllago` directory to discover and manage content.
[Source](/errors/catalog-001/)
## What This Means
Syllago could not find a repository or library to work with. The catalog requires a `.syllago` directory to discover and manage content.
## Common Causes
* Running a syllago command outside of a project directory
* The `.syllago` directory is missing or was deleted
* You haven’t initialized syllago in this project yet
## How to Fix
1. Navigate to your project directory and run `syllago init` to create a new syllago repository.
2. If you already have a syllago project, make sure you’re running commands from within that directory (or a subdirectory of it).
## Example Output
```plaintext
Error CATALOG_001: no syllago repository found
Suggestion: run 'syllago init' to create one, or navigate to an existing syllago project
```
# CATALOG_002 — Catalog Scan Failed
> Syllago encountered an error while scanning the catalog for content items. The scan could not complete successfully.
[Source](/errors/catalog-002/)
## What This Means
Syllago encountered an error while scanning the catalog for content items. The scan could not complete successfully.
## Common Causes
* Corrupted or malformed content files (invalid YAML/JSON syntax)
* Permission issues on content directories or files
* Broken symlinks in the content tree
* Disk I/O errors
## How to Fix
1. Check file permissions on your `.syllago` directory and its contents: `ls -la .syllago/`
2. Validate the syntax of recently modified content files.
3. Look for broken symlinks: `find .syllago -xtype l`
4. If the issue persists, try removing and re-importing the problematic content.
## Example Output
```plaintext
Error CATALOG_002: failed to scan catalog
Suggestion: check file permissions and content file syntax in .syllago/
```
# CONFIG_001 — Config Invalid
> The syllago configuration file exists but contains invalid or malformed content and cannot be parsed.
[Source](/errors/config-001/)
## What This Means
The syllago configuration file exists but contains invalid or malformed content and cannot be parsed.
## Common Causes
* Syntax error in `.syllago/config.json` from manual editing
* Incomplete JSON (missing closing braces, trailing commas)
* File was corrupted or partially written
## How to Fix
1. Open `.syllago/config.json` and check for JSON syntax errors
2. Validate with `jq . < .syllago/config.json` to pinpoint the issue
3. Fix the syntax error, or if the file is beyond repair, delete it and re-initialize:
```plaintext
rm .syllago/config.json
syllago init
```
## Example Output
```plaintext
Error CONFIG_001: invalid configuration file ".syllago/config.json": unexpected end of JSON input
Suggestion: fix JSON syntax or re-initialize with 'syllago init'
```
# CONFIG_002 — Config Not Found
> Syllago could not find a configuration file. The command requires a syllago project to be initialized in the current directory or a parent directory.
[Source](/errors/config-002/)
## What This Means
Syllago could not find a configuration file. The command requires a syllago project to be initialized in the current directory or a parent directory.
## Common Causes
* Running a syllago command outside of a syllago project directory
* The `.syllago` directory was deleted or never created
* Running from a directory that is not within a syllago project tree
## How to Fix
Initialize a syllago project in the current directory:
```plaintext
syllago init
```
Or navigate to an existing syllago project directory before running the command.
## Example Output
```plaintext
Error CONFIG_002: configuration file not found
Suggestion: run 'syllago init' to create project configuration
```
# CONFIG_003 — Config Path
> A path override in the configuration is invalid. The path is either not absolute or references an unknown configuration path key.
[Source](/errors/config-003/)
## What This Means
A path override in the configuration is invalid. The path is either not absolute or references an unknown configuration path key.
## Common Causes
* A relative path was used where an absolute path is required
* An unknown or misspelled configuration path key was specified
* The path override was set manually with an invalid value
## How to Fix
1. Use absolute paths (starting with `/` on Linux/macOS or a drive letter on Windows) for all config path overrides
2. Check valid path keys:
```plaintext
syllago config paths show
```
3. Correct the path override to use a valid absolute path and recognized key
## Example Output
```plaintext
Error CONFIG_003: invalid path override: "library" path must be absolute, got "./my-library"
Suggestion: use absolute paths for config overrides; see 'syllago config paths show' for valid keys
```
# CONFIG_004 — Config Save
> Syllago was unable to write the configuration file to disk.
[Source](/errors/config-004/)
## What This Means
Syllago was unable to write the configuration file to disk.
## Common Causes
* Permission denied on the `.syllago/` directory or config file
* Disk is full or has insufficient space
* The `.syllago/` directory was deleted while syllago was running
* The filesystem is mounted as read-only
## How to Fix
1. Check write permissions on the `.syllago/` directory: `ls -la .syllago/`
2. Verify available disk space: `df -h`
3. If the directory is missing, re-initialize: `syllago init`
4. If permissions are wrong, fix with: `chmod u+w .syllago/`
## Example Output
```plaintext
Error CONFIG_004: failed to save configuration: permission denied
Suggestion: check write permissions on the .syllago/ directory
```
# CONVERT_001 — Convert Not Supported
> The content type you are trying to convert does not support conversion between the specified providers.
[Source](/errors/convert-001/)
## What This Means
The content type you are trying to convert does not support conversion between the specified providers.
## Common Causes
* The content type is provider-specific and has no equivalent in the target provider
* The conversion path between the source and target providers is not implemented
* The content type does not have a canonical format defined
## How to Fix
Check which conversion paths are supported:
```plaintext
syllago info formats
```
If the content type cannot be converted, you may need to manually recreate it for the target provider.
## Example Output
```plaintext
Error CONVERT_001: conversion not supported for content type "commands" (claude-code → gemini)
Suggestion: check 'syllago info formats' for supported conversion paths
```
# CONVERT_002 — Convert Parse Failed
> The source content could not be parsed during conversion. The file exists but its contents are not valid for the expected format.
[Source](/errors/convert-002/)
## What This Means
The source content could not be parsed during conversion. The file exists but its contents are not valid for the expected format.
## Common Causes
* Malformed source file with syntax errors
* YAML or JSON syntax errors (missing quotes, unclosed brackets, invalid indentation)
* File encoding issues (non-UTF-8 content)
* File is empty or contains only whitespace
## How to Fix
1. Open the source file and check for syntax errors
2. For YAML files, validate with a YAML linter or online validator
3. For JSON files, validate with `jq . < file.json` or an online JSON validator
4. Ensure the file uses UTF-8 encoding
## Example Output
```plaintext
Error CONVERT_002: failed to parse "rules/my-rule.yaml": yaml: line 5: mapping values are not allowed here
Suggestion: check the source file for syntax errors
```
# CONVERT_003 — Convert Render Failed
> The content was parsed successfully but could not be rendered into the target provider's format.
[Source](/errors/convert-003/)
## What This Means
The content was parsed successfully but could not be rendered into the target provider’s format.
## Common Causes
* The content uses features not supported by the target provider
* Encoding issues when writing the output format
* The target format has constraints that the source content violates (e.g., field length limits)
## How to Fix
1. Review the content for provider-specific features that may not translate
2. Simplify the content to use only features common across providers
3. Check provider compatibility with `syllago info formats`
4. Try converting to a different target provider to isolate the issue
## Example Output
```plaintext
Error CONVERT_003: failed to render content to gemini format: unsupported hook event type "on_tool_error"
Suggestion: simplify content or check target provider compatibility
```
# EXPORT_001 — Export Not Supported
> The content type you are trying to export is not supported for the specified target provider.
[Source](/errors/export-001/)
## What This Means
The content type you are trying to export is not supported for the specified target provider.
## Common Causes
* The content type has no equivalent in the target provider’s format
* The export path between the content type and target provider is not implemented
* The content type is internal to syllago and not exportable
## How to Fix
Check which export targets are supported for your content type:
```plaintext
syllago info formats
```
If the target provider is not supported, consider exporting to a different provider or manually adapting the content.
## Example Output
```plaintext
Error EXPORT_001: export not supported for content type "agents" to provider "gemini"
Suggestion: check 'syllago info formats' for supported export targets
```
# EXPORT_002 — Export Failed
> The export operation failed while writing content to the target location.
[Source](/errors/export-002/)
## What This Means
The export operation failed while writing content to the target location.
## Common Causes
* Write permission denied on the target directory
* The target directory does not exist
* Disk is full or has insufficient space
* The target path is on a read-only filesystem
## How to Fix
1. Ensure the target directory exists: `mkdir -p /path/to/target`
2. Check write permissions on the target directory: `ls -la /path/to/target`
3. Verify available disk space: `df -h`
4. If permissions are the issue, adjust with `chmod` or run from a writable location
## Example Output
```plaintext
Error EXPORT_002: failed to export "my-skill" to /home/user/.config/provider/skills/: permission denied
Suggestion: ensure the target directory exists and is writable
```
# IMPORT_001 — Import Clone Failed
> Syllago failed to clone the import source repository. The content could not be fetched from the specified location.
[Source](/errors/import-001/)
## What This Means
Syllago failed to clone the import source repository. The content could not be fetched from the specified location.
## Common Causes
* Invalid or mistyped repository URL
* Network connectivity issues (firewall, proxy, DNS resolution)
* The repository requires authentication (private repo)
* The repository no longer exists or has been moved
## How to Fix
1. Verify the import URL is correct and accessible in a browser
2. Check your network connectivity (`ping github.com` or equivalent)
3. For private repositories, ensure your Git credentials are configured
4. If the repository has moved, update the URL to the new location
## Example Output
```plaintext
Error IMPORT_001: failed to clone "https://github.com/org/repo": authentication required
Suggestion: verify the import URL is accessible and check network connectivity
```
# IMPORT_002 — Import Conflict
> The content you are importing conflicts with content that already exists in your library. An item with the same name is already present.
[Source](/errors/import-002/)
## What This Means
The content you are importing conflicts with content that already exists in your library. An item with the same name is already present.
## Common Causes
* An item with the same name was previously imported from a different source
* The same content was imported twice
* Locally created content has the same name as the import
## How to Fix
1. Check existing items with `syllago list` to find the conflict
2. Rename the existing item if you want to keep both
3. Remove the existing item first with `syllago remove` if you want to replace it
4. Use the `--force` flag if available to overwrite the existing item
## Example Output
```plaintext
Error IMPORT_002: import conflicts with existing item "team-rules" in library
Suggestion: rename or remove the existing item, or use --force to overwrite
```
# INIT_001 — Init Exists
> The project has already been initialized with syllago. A `.syllago` directory already exists in the current directory.
[Source](/errors/init-001/)
## What This Means
The project has already been initialized with syllago. A `.syllago` directory already exists in the current directory.
## Common Causes
* Running `syllago init` in a directory that was previously initialized
* A `.syllago` directory was manually created or left behind from a previous setup
## How to Fix
1. If the project is already initialized, no action is needed — you can use syllago normally
2. If you want to reinitialize from scratch, remove the `.syllago` directory first: `rm -rf .syllago`
3. Then run `syllago init` again
## Example Output
```plaintext
Error INIT_001: project already initialized
Suggestion: the project is already initialized; to reinitialize, remove the .syllago directory first
```
# INPUT_001 — Input Missing
> A required flag or positional argument was not provided for the command.
[Source](/errors/input-001/)
## What This Means
A required flag or positional argument was not provided for the command.
## Common Causes
* Running a command without its required arguments (e.g., `syllago install` with no item name)
* Omitting a required flag (e.g., `--to` when a target provider is needed)
## How to Fix
1. Check the command’s usage with `syllago --help`
2. Provide all required arguments and flags
## Example Output
```plaintext
Error INPUT_001: missing required argument: item name
Suggestion: see 'syllago install --help' for usage
```
# INPUT_002 — Input Conflict
> Two or more flags that cannot be used together were provided in the same command.
[Source](/errors/input-002/)
## What This Means
Two or more flags that cannot be used together were provided in the same command.
## Common Causes
* Using `--local` and `--registry` together when only one source is allowed
* Combining `--json` with interactive-only flags
* Specifying conflicting output or filter options
## How to Fix
1. Review the command help with `syllago --help` to understand which flags conflict
2. Use only one of the conflicting flags per invocation
## Example Output
```plaintext
Error INPUT_002: flags --local and --registry are mutually exclusive
Suggestion: use only one of the conflicting flags
```
# INPUT_003 — Input Invalid
> A flag or argument value has an invalid format or is out of the expected range.
[Source](/errors/input-003/)
## What This Means
A flag or argument value has an invalid format or is out of the expected range.
## Common Causes
* Invalid provider slug (e.g., `--to=not-a-provider`)
* Malformed argument value (e.g., a path with invalid characters)
* Numeric value out of expected range
## How to Fix
1. Check the expected format in the command help: `syllago --help`
2. For provider slugs, run `syllago info providers` to see valid values
3. Verify the argument value matches the expected format
## Example Output
```plaintext
Error INPUT_003: invalid provider slug "not-a-provider"
Suggestion: run 'syllago info providers' for valid provider slugs
```
# INPUT_004 — Input Terminal
> The command requires an interactive terminal (TTY) but is running in a non-interactive context.
[Source](/errors/input-004/)
## What This Means
The command requires an interactive terminal (TTY) but is running in a non-interactive context.
## Common Causes
* Running the TUI or an interactive command through a pipe (e.g., `echo | syllago`)
* Running syllago in a CI/CD pipeline without interactive support
* Redirecting stdin from a file
## How to Fix
1. Run the command in an interactive terminal
2. For scripted or CI usage, use `--json` or other non-interactive flags
3. Use specific CLI subcommands instead of the TUI for automation
## Example Output
```plaintext
Error INPUT_004: this command requires an interactive terminal
Suggestion: use --json or non-interactive flags for scripted usage
```
# INSTALL_001 — Install Not Writable
> Syllago cannot write to the target install path. The content cannot be installed because the destination is not writable.
[Source](/errors/install-001/)
## What This Means
Syllago cannot write to the target install path. The content cannot be installed because the destination is not writable.
## Common Causes
* Permission issues on the provider’s configuration directory
* The target path is on a read-only filesystem
* The directory is owned by another user or root
* SELinux or other security policies restricting write access
## How to Fix
1. Check permissions on the provider’s config directory: `ls -la `
2. Ensure your user owns the directory or has write access.
3. If the directory is owned by root, check if the provider was installed system-wide and adjust permissions accordingly.
## Example Output
```plaintext
Error INSTALL_001: install path not writable
Suggestion: check permissions on the provider config directory
```
# INSTALL_002 — Install Item Not Found
> The item you tried to install could not be found. It is not present in your local library or any configured registry.
[Source](/errors/install-002/)
## What This Means
The item you tried to install could not be found. It is not present in your local library or any configured registry.
## Common Causes
* Typo in the item name
* The item hasn’t been imported into your local library yet
* The item exists in a registry that hasn’t been added
* The item was removed or renamed
## How to Fix
1. List available items: `syllago list`
2. Check for typos in the item name.
3. If the item is in a registry, make sure the registry is added and synced: `syllago registry list`
4. Import the item first if it’s from an external source.
## Example Output
```plaintext
Error INSTALL_002: item "my-rule" not found
Suggestion: run 'syllago list' to see available items
```
# INSTALL_003 — Install Method Invalid
> The requested install method is not supported for this content type. Different content types require different installation strategies.
[Source](/errors/install-003/)
## What This Means
The requested install method is not supported for this content type. Different content types require different installation strategies.
## Common Causes
* Trying to symlink a content type that requires JSON merge (hooks, MCP configs)
* Specifying an install method that doesn’t exist for the content type
* Mismatched content type and provider capabilities
## How to Fix
1. Hooks and MCP configs are installed via JSON merge into provider settings files, not as filesystem symlinks.
2. Rules, skills, agents, commands, and prompts use filesystem installation (files, directories, or symlinks).
3. Let syllago choose the default install method by omitting the method flag.
## Example Output
```plaintext
Error INSTALL_003: invalid install method "symlink" for content type "hooks"
Suggestion: hooks use JSON merge — omit the method flag to use the default
```
# INSTALL_004 — Install Conflict
> The install cannot proceed because of a conflict with an active loadout or an already-installed item.
[Source](/errors/install-004/)
## What This Means
The install cannot proceed because of a conflict with an active loadout or an already-installed item.
## Common Causes
* An active loadout already manages this content, and installing directly would conflict
* A different version of the same item is already installed
* Two items would write to the same destination path
## How to Fix
1. If a loadout is managing this content, remove the loadout first: `syllago loadout remove `
2. If a conflicting item is already installed, uninstall it before installing the new one.
3. Check which loadouts are active: `syllago loadout list`
## Example Output
```plaintext
Error INSTALL_004: conflict with active loadout "dev-setup"
Suggestion: run 'syllago loadout remove dev-setup' first, then retry the install
```
# INSTALL_005 — Install Not Installed
> The item you are trying to uninstall is not currently installed in your system.
[Source](/errors/install-005/)
## What This Means
The item you are trying to uninstall is not currently installed in your system.
## Common Causes
* Trying to uninstall an item that was never installed
* The item was already removed in a previous operation
* Typo in the item name or identifier
## How to Fix
Check what is currently installed by running:
```plaintext
syllago list --installed
```
Verify the exact name of the item you want to remove and try again.
## Example Output
```plaintext
Error INSTALL_005: item "my-rule" is not installed
Suggestion: run 'syllago list --installed' to see installed items
```
# ITEM_001 — Item Not Found
> The specified item could not be found in your local library or any configured registries.
[Source](/errors/item-001/)
## What This Means
The specified item could not be found in your local library or any configured registries.
## Common Causes
* Typo in the item name
* The item does not exist in the local library
* The item exists in a registry that is not configured or has not been synced
* The item was removed or renamed
## How to Fix
1. Check the spelling of the item name
2. Run `syllago list` to browse available items in your library
3. Run `syllago list --registry ` to browse items in a specific registry
4. If the item is in a registry, run `syllago registry sync` to pull the latest content
## Example Output
```plaintext
Error ITEM_001: item "my-ruel" not found
Suggestion: run 'syllago list' to browse available items; check spelling
```
# ITEM_002 — Item Ambiguous
> The item name matches content in multiple content types, so syllago cannot determine which one you mean.
[Source](/errors/item-002/)
## What This Means
The item name matches content in multiple content types, so syllago cannot determine which one you mean.
## Common Causes
* The same name is used for both a rule and a skill (e.g., `my-config` exists as both `rules/my-config` and `skills/my-config`)
* A registry contains duplicate names across different content types
## How to Fix
1. Qualify the item with its content type prefix: `syllago install rules/my-item` instead of `syllago install my-item`
2. Run `syllago list` to see all items grouped by type and identify the correct one
## Example Output
```plaintext
Error ITEM_002: item "my-config" is ambiguous: found in rules, skills
Suggestion: qualify with content type, e.g. 'syllago install rules/my-config'
```
# ITEM_003 — Item Type Unknown
> The specified content type is not recognized by syllago.
[Source](/errors/item-003/)
## What This Means
The specified content type is not recognized by syllago.
## Common Causes
* Typo in the content type (e.g., `--type=ruls` instead of `--type=rules`)
* Using a singular form instead of plural (e.g., `rule` instead of `rules`)
* Using a content type that does not exist in syllago
## How to Fix
1. Use one of the valid content types: `rules`, `skills`, `agents`, `commands`, `hooks`, `mcp`, `prompts`, `loadouts`
2. Check command help for accepted values: `syllago --help`
## Example Output
```plaintext
Error ITEM_003: unknown content type "ruls"
Suggestion: valid types are: rules, skills, agents, commands, hooks, mcp, prompts, loadouts
```
# LOADOUT_001 — Loadout Not Found
> The specified loadout could not be found in your local library or any configured registry.
[Source](/errors/loadout-001/)
## What This Means
The specified loadout could not be found in your local library or any configured registry.
## Common Causes
* Typo in the loadout name
* The loadout is not in your local library
* The loadout is not available in any configured registry
* The registry has not been synced recently
## How to Fix
1. Check available loadouts:
```plaintext
syllago loadout list
```
2. Verify the exact name of the loadout you are looking for
3. If the loadout is in a registry, ensure the registry is configured and synced
## Example Output
```plaintext
Error LOADOUT_001: loadout "kubernetes-setup" not found
Suggestion: run 'syllago loadout list' to see available loadouts
```
# LOADOUT_002 — Loadout Parse
> The loadout's `loadout.yaml` manifest file exists but contains invalid content and cannot be parsed.
[Source](/errors/loadout-002/)
## What This Means
The loadout’s `loadout.yaml` manifest file exists but contains invalid content and cannot be parsed.
## Common Causes
* YAML syntax errors (bad indentation, missing colons, unclosed quotes)
* Missing required fields (`name`, `provider`, `items`)
* Invalid content type references in the items list
* File encoding issues
## How to Fix
1. Open the `loadout.yaml` file and check for YAML syntax errors
2. Ensure all required fields are present:
```yaml
name: my-loadout
provider: claude-code
items:
- type: rules
path: my-rule.md
```
3. Validate YAML syntax with a linter or online validator
4. Ensure content type references match valid syllago content types
## Example Output
```plaintext
Error LOADOUT_002: failed to parse "my-loadout/loadout.yaml": yaml: line 3: did not find expected key
Suggestion: check YAML syntax and ensure required fields (name, provider, items) are present
```
# LOADOUT_003 — Loadout Conflict
> You are trying to apply a loadout, but another loadout is already active for the same provider. Only one loadout can be active at a time per provider.
[Source](/errors/loadout-003/)
## What This Means
You are trying to apply a loadout, but another loadout is already active for the same provider. Only one loadout can be active at a time per provider.
## Common Causes
* A previously applied loadout was not removed before applying a new one
* A loadout was applied in a different session and is still active
## How to Fix
1. Check which loadout is currently active:
```plaintext
syllago loadout list
```
2. Remove the current loadout before applying the new one:
```plaintext
syllago loadout remove
```
3. Apply the new loadout:
```plaintext
syllago loadout apply
```
## Example Output
```plaintext
Error LOADOUT_003: loadout "team-defaults" is already active for provider "claude-code"
Suggestion: run 'syllago loadout remove' before applying a new loadout
```
# LOADOUT_004 — Loadout Provider
> The loadout references a provider that syllago does not recognize or support.
[Source](/errors/loadout-004/)
## What This Means
The loadout references a provider that syllago does not recognize or support.
## Common Causes
* The `provider` field in `loadout.yaml` contains a typo (e.g., `cladue-code` instead of `claude-code`)
* The loadout was created for a provider that has since been removed or renamed
* The loadout was authored for a provider that your version of syllago does not support
## How to Fix
1. Open the loadout’s `loadout.yaml` and check the `provider` field
2. Run `syllago info providers` to see the list of supported provider slugs
3. Update the `provider` field to match one of the supported slugs
## Example Output
```plaintext
Error LOADOUT_004: loadout references unknown provider "cladue-code"
Suggestion: check the provider field in loadout.yaml; run 'syllago info providers' for supported providers
```
# LOADOUT_005 — Loadout No Items
> A loadout was created or modified with no content items selected.
[Source](/errors/loadout-005/)
## What This Means
A loadout was created or modified with no content items selected.
## Common Causes
* All items were deselected during interactive loadout creation
* A loadout was created programmatically with an empty items list
* Items were removed from a loadout without adding replacements
## How to Fix
1. When creating a loadout, select at least one content item (rule, skill, agent, etc.)
2. If using the TUI, ensure at least one item is checked before confirming
3. If editing `loadout.yaml` directly, ensure the `items` list is non-empty
## Example Output
```plaintext
Error LOADOUT_005: no items selected for loadout
Suggestion: select at least one content item when creating a loadout
```
# PRIVACY_001 — Privacy Publish Blocked
> Content from a private registry cannot be published to a public registry. The privacy gate prevents private content from leaking into public spaces.
[Source](/errors/privacy-001/)
## What This Means
Content from a private registry cannot be published to a public registry. The privacy gate prevents private content from leaking into public spaces.
## Common Causes
* Attempting to publish content that was imported from a private (enterprise/team) registry
* Running `syllago promote` targeting a public registry with private-origin content
* The content’s source registry is marked as private in its configuration
## How to Fix
1. Move the content to a public registry first, then publish from there
2. Or publish to a private registry instead of a public one
3. If the content should be public, copy it to your local library (removing the private origin) and publish from there
## Example Output
```plaintext
Error PRIVACY_001: cannot publish private content to public registry "community-rules"
Suggestion: move content to a public registry first, or publish to a private registry
```
# PRIVACY_002 — Privacy Share Blocked
> Content from a private registry cannot be shared to a public repository. The privacy gate prevents accidental exposure of private content.
[Source](/errors/privacy-002/)
## What This Means
Content from a private registry cannot be shared to a public repository. The privacy gate prevents accidental exposure of private content.
## Common Causes
* Running `syllago share` targeting a public git repository with content that originates from a private registry
* The target repository is publicly accessible but the content’s source registry is private
## How to Fix
1. Share to a private repository instead
2. Or move the content to your local library first (which strips the private-origin metadata), then share from there
3. Verify the target repository’s visibility matches your intent
## Example Output
```plaintext
Error PRIVACY_002: cannot share private content to public repo "github.com/org/public-rules"
Suggestion: share to a private repository, or move content to your local library first
```
# PRIVACY_003 — Privacy Loadout Warn
> A loadout being created or applied includes items that originate from private registries. This is a warning, not a blocking error.
[Source](/errors/privacy-003/)
## What This Means
A loadout being created or applied includes items that originate from private registries. This is a warning, not a blocking error.
## Common Causes
* A loadout mixes items from both private and public registries
* A loadout is being created from items that include private registry content
* An existing loadout was updated and now references private items
## How to Fix
1. This is a warning — no action is required if mixing private and public content is intentional
2. Review the listed items to confirm you intend to include private content
3. If the loadout will be shared publicly, consider replacing private items with public equivalents
## Example Output
```plaintext
Error PRIVACY_003: loadout "my-setup" contains 2 items from private registries
Suggestion: review private items; this is a warning if mixing private/public content is intended
```
# PROMOTE_001 — Promote Dirty Tree
> The working tree has uncommitted changes that must be resolved before promoting content.
[Source](/errors/promote-001/)
## What This Means
The working tree has uncommitted changes that must be resolved before promoting content.
## Common Causes
* Modified files in the syllago library that have not been committed
* Untracked files in the content directory
* A previous promote operation was interrupted, leaving partial changes
## How to Fix
1. Run `git status` in your syllago library to see uncommitted changes
2. Commit your changes: `git add . && git commit -m "your message"`
3. Or stash them temporarily: `git stash`
4. Then retry the promote operation
## Example Output
```plaintext
Error PROMOTE_001: uncommitted changes in working tree
Suggestion: commit or stash your changes before promoting content
```
# PROMOTE_002 — Promote Validation
> The content failed validation checks that run before promotion. Content must be structurally valid before it can be shared.
[Source](/errors/promote-002/)
## What This Means
The content failed validation checks that run before promotion. Content must be structurally valid before it can be shared.
## Common Causes
* Missing required fields in content metadata (e.g., no `name` or `description`)
* Invalid YAML syntax in configuration files
* Content references files that do not exist
* Hook definitions with invalid event names or tool names
## How to Fix
1. Review the validation errors in the command output — each will describe the specific issue
2. Fix the structural issues in your content files
3. Run `syllago inspect - ` to verify the content is valid
4. Retry the promote operation
## Example Output
```plaintext
Error PROMOTE_002: content validation failed: missing required field "description" in rules/my-rule
Suggestion: fix validation errors shown above, then retry
```
# PROMOTE_003 — Promote Git Failed
> A git operation (creating a branch, committing, or pushing) failed during the promote process.
[Source](/errors/promote-003/)
## What This Means
A git operation (creating a branch, committing, or pushing) failed during the promote process.
## Common Causes
* No git remote configured for the repository
* Push was rejected (e.g., remote branch has diverged)
* Git authentication failed (expired token, missing SSH key)
* Network connectivity issues
## How to Fix
1. Verify a git remote is configured: `git remote -v`
2. Check that you have push access to the remote repository
3. If authentication failed, refresh your credentials (SSH key, personal access token, etc.)
4. If the remote branch has diverged, pull the latest changes first: `git pull --rebase`
## Example Output
```plaintext
Error PROMOTE_003: git push failed: authentication required
Suggestion: ensure git remote is configured and you have push access
```
# PROVIDER_001 — Provider Not Found
> The provider name you specified is not recognized by syllago. The slug does not match any supported AI coding tool provider.
[Source](/errors/provider-001/)
## What This Means
The provider name you specified is not recognized by syllago. The slug does not match any supported AI coding tool provider.
## Common Causes
* Typo in the provider name
* Using the full tool name instead of the slug (e.g., “Claude Code” instead of “claude-code”)
* The provider is not yet supported by syllago
## How to Fix
1. List supported providers: `syllago info providers`
2. Use the exact provider slug shown in the list.
3. Check for typos in the provider name you specified.
## Example Output
```plaintext
Error PROVIDER_001: unknown provider "claudecode"
Suggestion: run 'syllago info providers' to see supported providers
```
# PROVIDER_002 — Provider Not Detected
> The specified provider was not detected on your system. Syllago looks for provider-specific configuration directories to determine which AI coding ...
[Source](/errors/provider-002/)
## What This Means
The specified provider was not detected on your system. Syllago looks for provider-specific configuration directories to determine which AI coding tools are installed.
## Common Causes
* The AI coding tool is not installed on this machine
* The tool’s configuration directory is missing or in a non-standard location
* The tool was installed but hasn’t been run yet (config directory created on first run)
## How to Fix
1. Install the AI coding tool if you haven’t already.
2. Run the tool at least once so it creates its configuration directory.
3. Check if the provider’s config directory exists in the expected location (e.g., `~/.claude/` for Claude Code).
## Example Output
```plaintext
Error PROVIDER_002: provider "claude-code" not detected
Suggestion: install Claude Code or verify its config directory exists
```
# REGISTRY_001 — Registry Clone
> Syllago failed to clone a registry repository using git. The remote repository could not be fetched.
[Source](/errors/registry-001/)
## What This Means
Syllago failed to clone a registry repository using git. The remote repository could not be fetched.
## Common Causes
* Network connectivity issues
* Invalid or mistyped registry URL
* Private repository without proper authentication configured
* Git not installed or not in PATH
* Remote server is down or unreachable
## How to Fix
1. Verify the registry URL is correct and accessible: `git ls-remote `
2. Check your network connection.
3. For private registries, ensure your git credentials are configured (SSH key or token).
4. Verify git is installed: `git --version`
## Example Output
```plaintext
Error REGISTRY_001: failed to clone registry
Suggestion: check the registry URL and your network connection
```
# REGISTRY_002 — Registry Not Found
> The specified registry name was not found in your syllago configuration. No registry with that name has been added.
[Source](/errors/registry-002/)
## What This Means
The specified registry name was not found in your syllago configuration. No registry with that name has been added.
## Common Causes
* Typo in the registry name
* The registry has not been added yet
* The registry was previously removed
## How to Fix
1. List your configured registries: `syllago registry list`
2. Check for typos in the registry name you specified.
3. If the registry isn’t listed, add it: `syllago registry add `
## Example Output
```plaintext
Error REGISTRY_002: registry "my-reg" not found
Suggestion: run 'syllago registry list' to see available registries
```
# REGISTRY_003 — Registry Not Allowed
> The registry URL you tried to use is blocked by the `allowedRegistries` policy in your configuration. This is a security control that restricts whi...
[Source](/errors/registry-003/)
## What This Means
The registry URL you tried to use is blocked by the `allowedRegistries` policy in your configuration. This is a security control that restricts which registries can be used.
## Common Causes
* Your organization has configured an allowlist of approved registries
* The registry URL doesn’t match any entry in the `allowedRegistries` list
* A workspace or global config restricts registry sources
## How to Fix
1. Check the allowed registries in your config: look for `allowedRegistries` in `.syllago/config.json`.
2. If you believe this registry should be allowed, contact your administrator to update the policy.
3. Use a registry that is already on the approved list.
## Example Output
```plaintext
Error REGISTRY_003: registry URL not in allowedRegistries
Suggestion: check your allowedRegistries policy or contact your admin
```
# REGISTRY_004 — Registry Invalid
> The registry name or structure is invalid. Syllago requires registry names to follow a specific format and registry directories to contain the expe...
[Source](/errors/registry-004/)
## What This Means
The registry name or structure is invalid. Syllago requires registry names to follow a specific format and registry directories to contain the expected layout.
## Common Causes
* Registry name contains invalid characters (spaces, special characters)
* Registry directory is missing required structure or metadata
* Corrupted registry clone
## How to Fix
1. Use alphanumeric characters and hyphens for registry names (e.g., `my-registry`).
2. Verify the registry repository has the expected directory structure.
3. If the registry was partially cloned, try removing it and re-adding: `syllago registry remove ` then `syllago registry add `.
## Example Output
```plaintext
Error REGISTRY_004: invalid registry "my registry!"
Suggestion: use alphanumeric characters and hyphens only
```
# REGISTRY_005 — Registry Duplicate
> A registry with the specified name already exists in your configuration. Registry names must be unique.
[Source](/errors/registry-005/)
## What This Means
A registry with the specified name already exists in your configuration. Registry names must be unique.
## Common Causes
* Trying to add a registry that was previously added
* Using a name that collides with an existing registry
## How to Fix
1. List existing registries to confirm: `syllago registry list`
2. Choose a different name for the new registry.
3. If you want to replace the existing one, remove it first: `syllago registry remove `
## Example Output
```plaintext
Error REGISTRY_005: registry "community" already exists
Suggestion: use a different name or remove the existing registry first
```
# REGISTRY_006 — Registry Not Cloned
> The registry is listed in your configuration but its local clone is missing. Syllago knows about the registry but cannot access its content.
[Source](/errors/registry-006/)
## What This Means
The registry is listed in your configuration but its local clone is missing. Syllago knows about the registry but cannot access its content.
## Common Causes
* The local cache was cleared or deleted
* The registry directory was manually removed
* First run after importing a config from another machine
* The clone was interrupted and never completed
## How to Fix
1. Sync your registries to re-clone missing ones: `syllago registry sync`
2. If sync fails, try removing and re-adding the registry: `syllago registry remove ` then `syllago registry add `
## Example Output
```plaintext
Error REGISTRY_006: registry "community" not cloned
Suggestion: run 'syllago registry sync' to fetch missing registries
```
# REGISTRY_007 — Registry Sync Failed
> Syllago failed to update a registry's local clone during sync. The git pull operation did not complete successfully.
[Source](/errors/registry-007/)
## What This Means
Syllago failed to update a registry’s local clone during sync. The git pull operation did not complete successfully.
## Common Causes
* Network connectivity issues
* Merge conflicts in the local clone (local modifications)
* The remote branch was force-pushed, causing history divergence
* Remote server is temporarily unavailable
## How to Fix
1. Check your network connection.
2. Try syncing again: `syllago registry sync`
3. If the problem persists, remove and re-add the registry to get a fresh clone: `syllago registry remove ` then `syllago registry add `
## Example Output
```plaintext
Error REGISTRY_007: failed to sync registry "community"
Suggestion: check your network connection, or try removing and re-adding the registry
```
# REGISTRY_008 — Registry Save Failed
> Syllago could not save changes to the registry configuration file. The operation completed in memory but failed to persist to disk.
[Source](/errors/registry-008/)
## What This Means
Syllago could not save changes to the registry configuration file. The operation completed in memory but failed to persist to disk.
## Common Causes
* Permission issues on the config file or its parent directory
* Disk is full
* The config file is locked by another process
* The `.syllago` directory was deleted mid-operation
## How to Fix
1. Check write permissions on the config file: `ls -la .syllago/config.json`
2. Verify available disk space: `df -h .`
3. Ensure no other process has the file locked.
4. Check that the `.syllago` directory still exists.
## Example Output
```plaintext
Error REGISTRY_008: failed to save registry config
Suggestion: check write permissions on .syllago/config.json
```
# SYSTEM_001 — System Homedir
> Syllago could not determine the user's home directory, which is needed for locating configuration and content files.
[Source](/errors/system-001/)
## What This Means
Syllago could not determine the user’s home directory, which is needed for locating configuration and content files.
## Common Causes
* The `HOME` environment variable is not set
* Running under an unusual OS configuration or containerized environment without a home directory
* Running as a system user without a home directory assigned
## How to Fix
1. Set the `HOME` environment variable: `export HOME=/home/youruser`
2. Run syllago from a standard user account that has a home directory
3. In containers, ensure the `HOME` variable is set in the Dockerfile or entrypoint
## Example Output
```plaintext
Error SYSTEM_001: cannot determine home directory
Suggestion: set the HOME environment variable, or run from a standard user account
```
# SYSTEM_002 — System IO
> A filesystem operation (reading, writing, or creating directories) failed unexpectedly.
[Source](/errors/system-002/)
## What This Means
A filesystem operation (reading, writing, or creating directories) failed unexpectedly.
## Common Causes
* Permission denied on the target path
* Disk is full
* Path is too long for the filesystem
* Corrupted filesystem or inaccessible mount
* Another process holds a lock on the file
## How to Fix
1. Check available disk space: `df -h`
2. Verify permissions on the target path: `ls -la `
3. If permission denied, adjust ownership or permissions: `chmod` / `chown`
4. If the path is on a network mount, verify the mount is accessible
## Example Output
```plaintext
Error SYSTEM_002: failed to create directory "/home/user/.syllago/library": permission denied
Suggestion: check disk space and verify permissions on the target path
```
# For AI assistants
> Machine-readable documentation for AI coding assistants and LLMs to learn about syllago.
[Source](/for-ai-assistants/)
Syllago supports the [llms.txt](https://llmstxt.org/) standard — a convention that makes documentation machine-readable for Large Language Models.
## Available resources
These files are generated automatically from the same source as this documentation site.
| Resource | Description | Best for |
| --------------------------------- | ------------------------------------- | ----------------------------- |
| [llms.txt](/llms.txt) | Index of available documentation sets | Discovery |
| [llms-small.txt](/llms-small.txt) | Condensed documentation | Quick context, smaller models |
| [llms-full.txt](/llms-full.txt) | Complete documentation | Comprehensive understanding |
## How to use these
Feed these resources to your AI coding assistant when you need help working with syllago.
**Paste into a chat:** Copy the content of `llms-full.txt` into Claude, ChatGPT, or any LLM chat, then ask your question.
**Use with CLI tools:**
```bash
# Feed syllago docs to Claude Code
curl -s https://syllago.dev/llms-full.txt | pbcopy
# Use with any tool that accepts URLs
# Many AI tools can fetch URLs directly
```
**Context window tips:**
* Use `llms-small.txt` when you just need an overview or are working with smaller context windows
* Use `llms-full.txt` when you need detailed information about specific features
* The **Copy page** button (top-right of any page) copies individual page content for focused questions
# Core Concepts
> How syllago works — providers, content types, collections, and format conversion.
[Source](/getting-started/core-concepts/)
syllago manages AI coding tool content across multiple providers. This page covers the four concepts you need to understand how everything fits together: **providers**, **content types**, **collections**, and **format conversion**.
## Providers
A **provider** is an AI coding tool that syllago supports. Each provider has its own file format and stores content in different locations on your system. syllago handles these differences automatically — you work with one set of content, and syllago adapts it to each provider’s requirements.
syllago supports the following providers:
| Provider | Description |
| ----------- | ------------------------ |
| Claude Code | Anthropic’s CLI agent |
| Gemini CLI | Google’s CLI agent |
| Cursor | AI-powered code editor |
| Copilot CLI | GitHub’s CLI agent |
| Codex | OpenAI’s CLI agent |
| Kiro | AWS AI IDE |
| Windsurf | AI-powered code editor |
| OpenCode | Terminal-based AI agent |
| Roo Code | VS Code extension |
| Cline | VS Code extension |
| Amp | AI coding assistant |
| Zed | Editor with AI assistant |
syllago auto-detects which providers are installed on your system. You don’t need to configure them manually.
For details on each provider’s capabilities and file locations, see [Supported Providers](/using-syllago/providers.md).
## Content Types
syllago manages six kinds of content:
| Content Type | What it is |
| --------------- | -------------------------------------- |
| **Rules** | System prompts and custom instructions |
| **Skills** | Multi-file workflow packages |
| **Agents** | AI agent definitions and personas |
| **MCP Configs** | MCP server configurations |
| **Hooks** | Event-driven automation scripts |
| **Commands** | Custom slash commands |
Not every provider supports every content type. For example, some providers have no concept of hooks, and others don’t support slash commands. syllago tracks the support matrix so you know what will work where.
For the full compatibility matrix and details on each type, see [Content Types](/using-syllago/content-types.md).
## Collections
Content in syllago is organized into three collections, each serving a different purpose:
### Library
Your personal content store, located at `~/.syllago/content/`. This is read-write — it’s where your content lives.
Content arrives in the library when you add it from a provider:
```bash
syllago add --from # pull content from an installed provider
```
### Registries
Git-based repositories of shared content. A registry lets a team (or the community) publish and maintain a collection of rules, skills, agents, and other content that anyone can consume locally.
You add a registry to your system, sync it to pull updates, and browse its items:
```bash
syllago registry add
syllago registry sync
syllago registry items
```
When you’ve created content locally that you want to share back, you can publish it to a registry — syllago opens a PR against the registry repo:
```bash
syllago publish my-skill --registry team-registry
```
Or share directly with your team repo:
```bash
syllago share my-skill
```
### Loadouts
A loadout is a bundled set of content that applies as a unit. Think of it as a named configuration profile — “my Python stack,” “frontend review setup,” or “security audit kit.”
```bash
syllago loadout create # define a loadout
syllago loadout apply # preview what would happen (default)
syllago loadout apply --try # apply temporarily, auto-reverts on session end
syllago loadout apply --keep # apply permanently
syllago loadout remove # revert and clean up
```
Loadouts apply and revert cleanly, so you can switch contexts without leaving stale content behind.
For more on how these three collections work together, see [Collections](/using-syllago/collections.md).
## Format Conversion
This is the mechanism that makes everything else work. syllago uses a **hub-and-spoke model** for format conversion:
```plaintext
Source Provider ──→ syllago format ──→ Target Provider
```
**syllago format** is a provider-neutral representation of content. It’s the internal format syllago uses to store everything in your library, registries, and loadouts.
The conversion flow works in two directions:
* **Inbound** — When you `syllago add` content from a provider, syllago reads the provider’s native format and converts it to syllago format for storage.
* **Outbound** — When you install content to a provider (or convert it for sharing), syllago converts from syllago format to the provider’s native format.
This hub-and-spoke design means you add content once and install it anywhere. A rule written for Claude Code can be installed into Cursor, Windsurf, or any other supported provider — syllago handles the format translation automatically.
For implementation details, see [Format Conversion](/using-syllago/format-conversion.md).
***
These four concepts — providers as the tools you target, content types as the things you manage, collections as how content is organized, and format conversion as the translation layer — form the complete mental model for syllago. Every command in the CLI maps to an operation on one of these concepts.
# Installation
> Install syllago on Linux, macOS, or Windows.
[Source](/getting-started/installation/)
## System Requirements
| Requirement | Details |
| ---------------- | ----------------------------------------------------- |
| **OS** | Linux, macOS, Windows (WSL or msys/mingw/cygwin) |
| **Architecture** | x86\_64 (amd64) or arm64 |
| **Go** | 1.25+ (only for `go install` or building from source) |
## Install Script (Recommended)
Downloads the latest release binary and verifies its SHA-256 checksum. Works on Linux, macOS, and Windows.
```bash
curl -fsSL https://raw.githubusercontent.com/OpenScribbler/syllago/main/install.sh | sh
```
Installs to `~/.local/bin` by default. To override the install directory:
```bash
curl -fsSL https://raw.githubusercontent.com/OpenScribbler/syllago/main/install.sh | INSTALL_DIR=/usr/local/bin sh
```
The install script creates a `syl` alias symlink automatically, so you can use either `syllago` or `syl` to run commands.
## Homebrew
```bash
brew install openscribbler/tap/syllago
```
## Go Install
```bash
go install github.com/OpenScribbler/syllago/cli/cmd/syllago@latest
```
Requires Go 1.25+.
## From Source
Requires Go 1.25+.
```bash
git clone https://github.com/OpenScribbler/syllago.git
cd syllago
make build
```
## Verify Installation
```bash
syllago version
```
## Self-Update
```bash
syllago update
```
Updates syllago to the latest release.
## Shell Completions
syllago generates completions for bash, zsh, fish, and PowerShell.
* Bash
Current session:
```bash
source <(syllago completion bash)
```
Permanent (Linux):
```bash
syllago completion bash > /etc/bash_completion.d/syllago
```
Permanent (macOS):
```bash
syllago completion bash > $(brew --prefix)/etc/bash_completion.d/syllago
```
* Zsh
Current session:
```bash
source <(syllago completion zsh)
```
Permanent (Linux):
```bash
syllago completion zsh > "${fpath[1]}/_syllago"
```
Permanent (macOS):
```bash
syllago completion zsh > $(brew --prefix)/share/zsh/site-functions/_syllago
```
* Fish
Current session:
```bash
syllago completion fish | source
```
Permanent:
```bash
syllago completion fish > ~/.config/fish/completions/syllago.fish
```
* PowerShell
Current session:
```powershell
syllago completion powershell | Out-String | Invoke-Expression
```
## Next Steps
Head to the [Quick Start](/getting-started/quick-start.md) to start managing your AI coding tool content.
# Quick Start
> Get up and running with syllago in under five minutes.
[Source](/getting-started/quick-start/)
This guide covers two paths to get started with syllago:
1. **Import from your existing tools** — pull in rules, skills, or context you already have configured in an AI coding tool
2. **Browse a registry** — discover and install shared content from a team or community registry
Both paths start with `syllago init`.
## Import from your existing tools
If you already have AI coding tools configured (Claude Code rules, Cursor rules, etc.), syllago can discover that content and bring it into your library.
### Initialize syllago
```bash
syllago init
```
This detects AI coding tools (providers) on your machine and creates your config at `.syllago/config.json`. Follow the interactive prompts, or pass `--yes` to accept defaults.
### Discover available content
```bash
syllago add --from claude-code
```
Without a positional argument, `add` runs in **discovery mode** — it shows what content the provider has available without importing anything.
### Add content to your library
Once you know what’s there, add it:
```bash
# Add all rules from a provider
syllago add rules --from claude-code
# Add a specific item
syllago add rules/security --from claude-code
```
Content is copied into your library (`~/.syllago/content/`), where syllago manages it independently of the original provider.
> **Tip:** Use `--dry-run` to preview what would be written without making changes. Use `--all` to add everything at once.
### See what you have
```bash
syllago list
```
Output is grouped by type (rules, skills, agents, etc.). Use `--source` to filter by origin and `--type` to filter by content type.
### Install to another provider
```bash
syllago install my-rule --to cursor
```
This installs the item from your library into Cursor’s expected location, converting the format automatically. By default, syllago uses a **symlink** so changes stay in sync. Pass `--method copy` if you need a standalone file.
```bash
# Preview what would happen without writing anything
syllago install my-rule --to cursor --dry-run
```
That’s it — you’ve moved content from one AI coding tool to another with format conversion handled for you.
## Browse a registry
Registries are git-based repos of shared content. Use them to pull in team standards, community collections, or curated configurations.
### Initialize syllago
Skip this if you already ran it above.
```bash
syllago init
```
### Add a registry
```bash
syllago registry add https://github.com/team/ai-configs.git
```
You can optionally pass `--name` to give it a short alias, or `--ref` to pin a specific branch or tag.
### Sync registry content
```bash
syllago registry sync
```
This pulls the latest content from all registered registries. To sync a specific one, pass its name: `syllago registry sync my-registry`.
### Browse available items
```bash
syllago registry items
```
Filter by type to narrow results:
```bash
syllago registry items --type skills
```
### Install from the registry
```bash
syllago install some-skill --to claude-code
```
Same `install` command as before — syllago resolves the item from your registries, converts the format for the target provider, and symlinks it into place.
### Or use the TUI
Launch the interactive terminal UI to browse and install content visually:
```bash
syllago
```
Running `syllago` with no arguments opens the TUI, where you can explore your library, registries, and providers in one place.
## Next steps
Now that you have content flowing between tools, learn how the pieces fit together in [Core Concepts](/getting-started/core-concepts.md).
# Hook Interchange Format Specification
> Provider-neutral interchange format for AI coding tool hooks (v1.0.0-draft)
[Source](/reference/hooks-v1/)
Draft Specification
This is a draft specification (v1.0.0-draft). It has not been finalized and is subject to change.
**Version:** 1.0.0-draft | **License:** CC-BY-4.0
This specification defines a provider-neutral interchange format for AI coding tool hooks. It enables hook authors to write lifecycle hooks once and deploy them across multiple AI coding tool providers through a canonical representation, capability model, and conversion pipeline.
For a user-friendly overview, see [Hooks content type](/using-syllago/content-types/hooks.md). This page is the full technical specification.
***
## 1. Introduction
AI coding tools provide hook systems that let developers run custom logic at lifecycle points: before a tool executes, when a session starts, after the agent stops. These hooks enforce policy, audit actions, inject context, and customize behavior.
Every provider’s hook system is different. Event names, JSON schemas, output contracts, matcher syntax, timeout units, and configuration file layouts vary across providers. A hook written for one tool cannot run on another without manual adaptation.
This specification defines a **canonical hook format** that serves as an interchange representation between providers. It does not replace any provider’s native format. Instead, it provides a neutral hub through which hooks are converted: decode from a source provider’s format into canonical, then encode from canonical into a target provider’s format.
### What This Spec Defines
* A canonical JSON format for hook manifests
* An exit code contract for hook processes
* A canonical output schema for structured hook responses
* A typed matcher system for tool filtering
* A registry of canonical event names with provider mappings
* A capability model describing optional features with provider support matrices
* A tool vocabulary mapping canonical tool names to provider-native names
* Degradation strategies for handling capability gaps during conversion
* Conformance levels for implementations
***
## 2. Canonical Format
### Top-Level Structure
```json
{
"spec": "hooks/1.0",
"hooks": [
{
"event": "before_tool_execute",
"matcher": "shell",
"handler": {
"type": "command",
"command": "./safety-check.sh",
"timeout": 10
},
"blocking": true
}
]
}
```
| Field | Type | Required | Description |
| ------- | ------ | -------- | ----------------------------------- |
| `spec` | string | Yes | Must be `"hooks/1.0"` |
| `hooks` | array | Yes | Non-empty array of hook definitions |
### Hook Definition
| Field | Type | Required | Description |
| --------------- | ------------------------ | -------- | --------------------------------------------------------------------- |
| `event` | string | Yes | Canonical event name (see Event Registry) |
| `matcher` | string, object, or array | No | Tool matcher expression (see Matcher Types) |
| `handler` | object | Yes | Handler definition |
| `blocking` | boolean | No | Whether this hook can prevent the triggering action. Default: `false` |
| `degradation` | object | No | Per-capability fallback strategies |
| `provider_data` | object | No | Opaque provider-specific data, keyed by provider slug |
### Handler Definition
| Field | Type | Required | Description |
| ---------- | ------- | ----------- | --------------------------------------------------- |
| `type` | string | Yes | `"command"`, `"http"`, `"prompt"`, or `"agent"` |
| `command` | string | Conditional | Shell command (required when type is `"command"`) |
| `platform` | object | No | Per-OS command overrides: `windows`, `linux`, `osx` |
| `cwd` | string | No | Working directory relative to project root |
| `env` | object | No | Environment variables for the hook process |
| `timeout` | number | No | Max execution time in seconds (default: 30) |
| `async` | boolean | No | Fire-and-forget execution. Default: `false` |
***
## 3. Exit Code Contract
| Exit Code | Name | Behavior |
| --------- | ---------- | ------------------------------------------------- |
| 0 | Success | Action proceeds. Stdout parsed as JSON if present |
| 1 | Hook Error | Non-blocking warning. Action proceeds |
| 2 | Block | Action prevented (only when `blocking: true`) |
| Other | Hook Error | Same as exit code 1 |
***
## 4. Canonical Output Schema
When a hook exits 0 with JSON on stdout:
| Field | Type | Description |
| ---------- | ------- | -------------------------------------------------- |
| `decision` | string | `"allow"`, `"deny"`, or `"ask"` |
| `reason` | string | Human-readable explanation |
| `continue` | boolean | Whether agent continues its loop (default: `true`) |
| `context` | string | Context injected into agent conversation |
Advanced fields (capability-specific):
* `updated_input` — modified tool arguments (requires `input_rewrite` capability)
* `suppress_output` — suppress tool output display (requires `structured_output`)
* `system_message` — inject system prompt message (requires `structured_output`)
***
## 5. Matcher Types
### Bare String
Tool vocabulary lookup:
```json
"matcher": "shell"
```
### Pattern Object
Regex on tool name:
```json
"matcher": {"pattern": "file_(read|write|edit)"}
```
### MCP Object
Target MCP server/tool:
```json
"matcher": {"mcp": {"server": "github", "tool": "create_issue"}}
```
### Array (OR)
Match any element:
```json
"matcher": ["shell", "file_write", {"mcp": {"server": "github"}}]
```
***
## 6. Event Registry
### Core Events
| Event | Description | Blocking Semantic |
| --------------------- | ------------------------------ | --------------------------------- |
| `before_tool_execute` | Before any tool runs | Can prevent tool execution |
| `after_tool_execute` | After tool completes | Observational only |
| `session_start` | Session begins/resumes | Observational; may inject context |
| `session_end` | Session terminates | Observational |
| `before_prompt` | After user input, before agent | Can modify/reject input |
| `agent_stop` | Agent main loop ends | Can trigger retry |
### Extended Events
`before_compact`, `notification`, `error_occurred`, `subagent_start`, `subagent_stop`, `permission_request`
### Provider-Exclusive Events
| Event | Origin Provider |
| ------------------------------------------------------ | --------------- |
| `before_model`, `after_model`, `before_tool_selection` | Gemini CLI |
| `config_change` | Claude Code |
| `file_created`, `file_saved`, `file_deleted` | Kiro |
| `before_task`, `after_task` | Kiro |
### Event Name Mapping
| Canonical | claude-code | gemini-cli | cursor | copilot-cli | kiro |
| --------------------- | ---------------- | ----------- | -------------------- | ------------------- | ---------------- |
| `before_tool_execute` | PreToolUse | BeforeTool | beforeShellExecution | preToolUse | preToolUse |
| `after_tool_execute` | PostToolUse | AfterTool | afterFileEdit | postToolUse | postToolUse |
| `before_prompt` | UserPromptSubmit | BeforeAgent | beforeSubmitPrompt | userPromptSubmitted | userPromptSubmit |
| `agent_stop` | Stop | AfterAgent | stop | — | stop |
***
## 7. Tool Vocabulary
| Canonical | claude-code | gemini-cli | cursor | copilot-cli | kiro |
| ------------ | ----------- | ------------------- | ------------------ | ----------- | ------------- |
| `shell` | Bash | run\_shell\_command | run\_terminal\_cmd | bash | execute\_bash |
| `file_read` | Read | read\_file | read\_file | view | fs\_read |
| `file_write` | Write | write\_file | edit\_file | create | fs\_write |
| `file_edit` | Edit | replace | edit\_file | edit | fs\_write |
| `search` | Grep | grep\_search | grep\_search | grep | grep |
| `find` | Glob | glob | file\_search | glob | glob |
| `web_search` | WebSearch | google\_web\_search | web\_search | — | web\_search |
| `web_fetch` | WebFetch | web\_fetch | — | web\_fetch | web\_fetch |
| `agent` | Agent | — | — | task | use\_subagent |
***
## 8. Capability Registry
| Capability | Description | Default Degradation |
| ------------------- | --------------------------------------- | ------------------- |
| `structured_output` | JSON output with rich fields | `warn` |
| `input_rewrite` | Modify tool arguments (safety-critical) | `block` |
| `llm_evaluated` | LLM logic, not deterministic script | `exclude` |
| `http_handler` | HTTP POST handler | `warn` |
| `async_execution` | Fire-and-forget | `warn` |
| `platform_commands` | OS-specific overrides | `warn` |
| `custom_env` | Environment variables | `warn` |
| `configurable_cwd` | Working directory | `warn` |
***
## 9. Degradation Strategies
| Strategy | Behavior |
| --------- | ----------------------------------------------------------------------------------- |
| `block` | Converted hook blocks action entirely instead of running with reduced functionality |
| `warn` | Hook runs with reduced functionality; warning emitted |
| `exclude` | Hook excluded from target provider’s configuration |
Authors specify per-capability strategies in the `degradation` field. Absent strategies use safe defaults from the capability registry.
***
## 10. Conversion Pipeline
1. **Decode** — Source adapter reads provider-native config → canonical manifest
2. **Validate** — Check capabilities against target provider, apply degradation
3. **Encode** — Target adapter writes canonical → provider-native config
4. **Verify** — Re-decode output to check structural fidelity
***
## 11. Conformance Levels
| Level | Requirements |
| ------------ | ---------------------------------------------------------------------------------------------- |
| **Core** | Parse/produce manifests, core events, exit codes, bare string matchers, event+tool translation |
| **Extended** | + All matcher types, output schema, capability inference, degradation, extended events |
| **Full** | + Provider data round-trip, verification, all capabilities, provider-exclusive events |
***
## Appendix: Provider Strengths
* **Claude Code** — Richest output contract, four handler types, 25+ events
* **Gemini CLI** — Unique LLM-interaction hooks (`before_model`, `after_model`)
* **Kiro** — File system lifecycle hooks, spec task integration
* **Cursor** — Pre-read file access control
* **Windsurf** — Enterprise deployment infrastructure
* **OpenCode** — Programmatic TypeScript/JavaScript extensibility
* **Copilot CLI** — Conservative safety design, repository-bound hooks
# CLI Reference
> Complete reference for all syllago commands and flags.
[Source](/using-syllago/cli-reference/)
Auto-generated from syllago dev on 2026-03-24.
### Core Commands
| Command | Description |
| -------------------------------------------------------------------------- | ------------------------------------------------------------- |
| [`syllago add`](/using-syllago/cli-reference/add.md) | Add content to your library from a provider |
| [`syllago compat`](/using-syllago/cli-reference/compat.md) | Show provider compatibility matrix for a content item |
| [`syllago convert`](/using-syllago/cli-reference/convert.md) | Convert library content to a provider format |
| [`syllago create`](/using-syllago/cli-reference/create.md) | Scaffold a new content item in the global library |
| [`syllago explain`](/using-syllago/cli-reference/explain.md) | Show detailed documentation for an error code |
| [`syllago init`](/using-syllago/cli-reference/init.md) | Initialize syllago for this project |
| [`syllago inspect`](/using-syllago/cli-reference/inspect.md) | Show details about a content item |
| [`syllago install`](/using-syllago/cli-reference/install.md) | Activate library content in a provider |
| [`syllago list`](/using-syllago/cli-reference/list.md) | List content items in the library |
| [`syllago publish`](/using-syllago/cli-reference/publish.md) | Contribute library content to a registry |
| [`syllago remove`](/using-syllago/cli-reference/remove.md) | Remove content from your library and uninstall from providers |
| [`syllago share`](/using-syllago/cli-reference/share.md) | Contribute library content to a team repo |
| [`syllago sync-and-export`](/using-syllago/cli-reference/sync-and-export.md) | Sync registries then export content to a provider |
| [`syllago uninstall`](/using-syllago/cli-reference/uninstall.md) | Deactivate content from a provider |
| [`syllago update`](/using-syllago/cli-reference/update.md) | Check for and apply content updates from registries |
| [`syllago update`](/using-syllago/cli-reference/update.md) | Update syllago to the latest release |
| [`syllago version`](/using-syllago/cli-reference/version.md) | Print syllago version |
### [`syllago completion`](/using-syllago/cli-reference/completion.md)
Generate the autocompletion script for the specified shell
| Command | Description |
| -------------------------------------------------------------------------------------- | ------------------------------------------------- |
| [`syllago completion bash`](/using-syllago/cli-reference/completion-bash.md) | Generate the autocompletion script for bash |
| [`syllago completion fish`](/using-syllago/cli-reference/completion-fish.md) | Generate the autocompletion script for fish |
| [`syllago completion powershell`](/using-syllago/cli-reference/completion-powershell.md) | Generate the autocompletion script for powershell |
| [`syllago completion zsh`](/using-syllago/cli-reference/completion-zsh.md) | Generate the autocompletion script for zsh |
### [`syllago config`](/using-syllago/cli-reference/config.md)
View and edit syllago configuration
| Command | Description |
| ---------------------------------------------------------------------- | ---------------------------------------- |
| [`syllago config add`](/using-syllago/cli-reference/config-add.md) | Add a provider to the configuration |
| [`syllago config list`](/using-syllago/cli-reference/config-list.md) | List current configuration |
| [`syllago config paths`](/using-syllago/cli-reference/config-paths.md) | Manage custom provider path overrides |
| [`syllago config remove`](/using-syllago/cli-reference/config-remove.md) | Remove a provider from the configuration |
### [`syllago info`](/using-syllago/cli-reference/info.md)
Show syllago capabilities
| Command | Description |
| ------------------------------------------------------------------------ | --------------------------- |
| [`syllago info formats`](/using-syllago/cli-reference/info-formats.md) | List supported file formats |
| [`syllago info providers`](/using-syllago/cli-reference/info-providers.md) | List all known providers |
### [`syllago loadout`](/using-syllago/cli-reference/loadout.md)
Apply, create, and manage loadouts
| Command | Description |
| ------------------------------------------------------------------------ | ------------------------------------------------------------ |
| [`syllago loadout apply`](/using-syllago/cli-reference/loadout-apply.md) | Apply a loadout |
| [`syllago loadout create`](/using-syllago/cli-reference/loadout-create.md) | Interactively create a new loadout |
| [`syllago loadout list`](/using-syllago/cli-reference/loadout-list.md) | List available loadouts |
| [`syllago loadout remove`](/using-syllago/cli-reference/loadout-remove.md) | Remove the active loadout and restore original configuration |
| [`syllago loadout status`](/using-syllago/cli-reference/loadout-status.md) | Show active loadout status |
### [`syllago registry`](/using-syllago/cli-reference/registry.md)
Manage git-based content registries
| Command | Description |
| -------------------------------------------------------------------------- | ---------------------------------------------- |
| [`syllago registry add`](/using-syllago/cli-reference/registry-add.md) | Add a git registry |
| [`syllago registry create`](/using-syllago/cli-reference/registry-create.md) | Create a new registry |
| [`syllago registry items`](/using-syllago/cli-reference/registry-items.md) | Browse content available in registries |
| [`syllago registry list`](/using-syllago/cli-reference/registry-list.md) | List registered registries |
| [`syllago registry remove`](/using-syllago/cli-reference/registry-remove.md) | Remove a registry and delete its local clone |
| [`syllago registry sync`](/using-syllago/cli-reference/registry-sync.md) | Pull latest content from one or all registries |
### [`syllago sandbox`](/using-syllago/cli-reference/sandbox.md)
Run and manage AI CLI tools in bubblewrap sandboxes
| Command | Description |
| ------------------------------------------------------------------------------------ | --------------------------------------------------- |
| [`syllago sandbox allow-domain`](/using-syllago/cli-reference/sandbox-allow-domain.md) | Add a domain to the sandbox allowlist |
| [`syllago sandbox allow-env`](/using-syllago/cli-reference/sandbox-allow-env.md) | Add an env var to the sandbox allowlist |
| [`syllago sandbox allow-port`](/using-syllago/cli-reference/sandbox-allow-port.md) | Add a localhost port to the sandbox allowlist |
| [`syllago sandbox check`](/using-syllago/cli-reference/sandbox-check.md) | Verify bubblewrap, socat, and optionally a provider |
| [`syllago sandbox deny-domain`](/using-syllago/cli-reference/sandbox-deny-domain.md) | Remove a domain from the sandbox allowlist |
| [`syllago sandbox deny-env`](/using-syllago/cli-reference/sandbox-deny-env.md) | Remove an env var from the sandbox allowlist |
| [`syllago sandbox deny-port`](/using-syllago/cli-reference/sandbox-deny-port.md) | Remove a localhost port from the sandbox allowlist |
| [`syllago sandbox domains`](/using-syllago/cli-reference/sandbox-domains.md) | List allowed domains |
| [`syllago sandbox env`](/using-syllago/cli-reference/sandbox-env.md) | List allowed env vars |
| [`syllago sandbox info`](/using-syllago/cli-reference/sandbox-info.md) | Show effective sandbox configuration |
| [`syllago sandbox ports`](/using-syllago/cli-reference/sandbox-ports.md) | List allowed localhost ports |
| [`syllago sandbox run`](/using-syllago/cli-reference/sandbox-run.md) | Run a provider in a sandbox |
# syllago add
> Add content to your library from a provider
[Source](/using-syllago/cli-reference/add/)
## Synopsis
```plaintext
syllago add [[/]] --from [flags]
```
## Description
Discovers content from a provider and adds it to your library (\~/.syllago/content/).
Without a positional argument, shows what content is available (discovery mode). Provide a type or type/name to add content.
Syllago handles format conversion automatically. Once added, content can be installed to any supported provider with “syllago install —to \”.
After adding, use “syllago install” to activate content in a provider.
Hooks-specific flags (—exclude, —scope) are only meaningful when adding hooks.
## Options
| Flag | Type | Default | Required | Description |
| --------------------- | ------------- | ------- | -------- | --------------------------------------------------------------------- |
| `--all` | `bool` | — | No | Add all discovered content (cannot combine with positional target) |
| `--base-dir` | `string` | — | No | Override base directory for content discovery |
| `--dry-run` | `bool` | — | No | Show what would be written without actually writing |
| `--exclude` | `stringArray` | — | No | Skip hooks by auto-derived name (hooks only) |
| `-f`, `--force` | `bool` | — | No | Overwrite existing item without prompting |
| `--from` | `string` | — | Yes | Provider to add from (required) |
| `--no-input` | `bool` | — | No | Disable interactive prompts, use defaults |
| `--scope` | `string` | `all` | No | Settings scope to read from: global, project, or all (hooks/mcp only) |
| `--source-registry` | `string` | — | No | Registry name for taint tracking |
| `--source-visibility` | `string` | — | No | Source registry visibility (public, private, unknown) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Discover available content (read-only)
syllago add --from claude-code
# Add all rules from a provider
syllago add rules --from claude-code
# Add a specific rule by name
syllago add rules/security --from claude-code
# Add everything
syllago add --all --from claude-code
# Preview what would be written
syllago add --from claude-code --dry-run
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/add.go)
# syllago compat
> Show provider compatibility matrix for a content item
[Source](/using-syllago/cli-reference/compat/)
## Synopsis
```plaintext
syllago compat
```
## Description
Analyzes a library item and shows which providers support it, what warnings arise during conversion, and which providers cannot handle the content type at all.
For each provider, syllago attempts the full canonicalize-then-render pipeline and reports the result.
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Show compatibility for a skill
syllago compat my-skill
# JSON output for scripting
syllago compat my-skill --json
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/compat.go)
# syllago completion
> Generate the autocompletion script for the specified shell
[Source](/using-syllago/cli-reference/completion/)
Generate the autocompletion script for syllago for the specified shell. See each sub-command’s help for details on how to use the generated script.
## Subcommands
| Command | Description |
| ------------------------------------------------------------------- | ------------------------------------------------- |
| [`bash`](/using-syllago/cli-reference/completion-bash.md) | Generate the autocompletion script for bash |
| [`fish`](/using-syllago/cli-reference/completion-fish.md) | Generate the autocompletion script for fish |
| [`powershell`](/using-syllago/cli-reference/completion-powershell.md) | Generate the autocompletion script for powershell |
| [`zsh`](/using-syllago/cli-reference/completion-zsh.md) | Generate the autocompletion script for zsh |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/completion_cmd.go)
# syllago completion bash
> Generate the autocompletion script for bash
[Source](/using-syllago/cli-reference/completion-bash/)
## Synopsis
```plaintext
syllago completion bash
```
## Description
Generate the autocompletion script for the bash shell.
This script depends on the ‘bash-completion’ package. If it is not installed already, you can install it via your OS’s package manager.
To load completions in your current shell session:
```bash
source <(syllago completion bash)
```
To load completions for every new session, execute once:
#### Linux:
```bash
syllago completion bash > /etc/bash_completion.d/syllago
```
#### macOS:
```bash
syllago completion bash > $(brew --prefix)/etc/bash_completion.d/syllago
```
You will need to start a new shell for this setup to take effect.
## Options
| Flag | Type | Default | Required | Description |
| ------------------- | ------ | ------- | -------- | ------------------------------- |
| `--no-descriptions` | `bool` | — | No | disable completion descriptions |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## See Also
* [syllago completion](/using-syllago/cli-reference/completion.md)
* [syllago completion fish](/using-syllago/cli-reference/completion-fish.md)
* [syllago completion powershell](/using-syllago/cli-reference/completion-powershell.md)
* [syllago completion zsh](/using-syllago/cli-reference/completion-zsh.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/completion_cmd.go)
# syllago completion fish
> Generate the autocompletion script for fish
[Source](/using-syllago/cli-reference/completion-fish/)
## Synopsis
```plaintext
syllago completion fish [flags]
```
## Description
Generate the autocompletion script for the fish shell.
To load completions in your current shell session:
```bash
syllago completion fish | source
```
To load completions for every new session, execute once:
```bash
syllago completion fish > ~/.config/fish/completions/syllago.fish
```
You will need to start a new shell for this setup to take effect.
## Options
| Flag | Type | Default | Required | Description |
| ------------------- | ------ | ------- | -------- | ------------------------------- |
| `--no-descriptions` | `bool` | — | No | disable completion descriptions |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## See Also
* [syllago completion](/using-syllago/cli-reference/completion.md)
* [syllago completion bash](/using-syllago/cli-reference/completion-bash.md)
* [syllago completion powershell](/using-syllago/cli-reference/completion-powershell.md)
* [syllago completion zsh](/using-syllago/cli-reference/completion-zsh.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/completion_cmd.go)
# syllago completion powershell
> Generate the autocompletion script for powershell
[Source](/using-syllago/cli-reference/completion-powershell/)
## Synopsis
```plaintext
syllago completion powershell [flags]
```
## Description
Generate the autocompletion script for powershell.
To load completions in your current shell session:
```bash
syllago completion powershell | Out-String | Invoke-Expression
```
To load completions for every new session, add the output of the above command to your powershell profile.
## Options
| Flag | Type | Default | Required | Description |
| ------------------- | ------ | ------- | -------- | ------------------------------- |
| `--no-descriptions` | `bool` | — | No | disable completion descriptions |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## See Also
* [syllago completion](/using-syllago/cli-reference/completion.md)
* [syllago completion bash](/using-syllago/cli-reference/completion-bash.md)
* [syllago completion fish](/using-syllago/cli-reference/completion-fish.md)
* [syllago completion zsh](/using-syllago/cli-reference/completion-zsh.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/completion_cmd.go)
# syllago completion zsh
> Generate the autocompletion script for zsh
[Source](/using-syllago/cli-reference/completion-zsh/)
## Synopsis
```plaintext
syllago completion zsh [flags]
```
## Description
Generate the autocompletion script for the zsh shell.
If shell completion is not already enabled in your environment you will need to enable it. You can execute the following once:
```bash
echo "autoload -U compinit; compinit" >> ~/.zshrc
```
To load completions in your current shell session:
```bash
source <(syllago completion zsh)
```
To load completions for every new session, execute once:
#### Linux:
```bash
syllago completion zsh > "${fpath[1]}/_syllago"
```
#### macOS:
```bash
syllago completion zsh > $(brew --prefix)/share/zsh/site-functions/_syllago
```
You will need to start a new shell for this setup to take effect.
## Options
| Flag | Type | Default | Required | Description |
| ------------------- | ------ | ------- | -------- | ------------------------------- |
| `--no-descriptions` | `bool` | — | No | disable completion descriptions |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## See Also
* [syllago completion](/using-syllago/cli-reference/completion.md)
* [syllago completion bash](/using-syllago/cli-reference/completion-bash.md)
* [syllago completion fish](/using-syllago/cli-reference/completion-fish.md)
* [syllago completion powershell](/using-syllago/cli-reference/completion-powershell.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/completion_cmd.go)
# syllago config
> View and edit syllago configuration
[Source](/using-syllago/cli-reference/config/)
Manage provider selection and preferences in .syllago/config.json.
## Subcommands
| Command | Description |
| ------------------------------------------------------- | ---------------------------------------- |
| [`add`](/using-syllago/cli-reference/config-add.md) | Add a provider to the configuration |
| [`list`](/using-syllago/cli-reference/config-list.md) | List current configuration |
| [`paths`](/using-syllago/cli-reference/config-paths.md) | Manage custom provider path overrides |
| [`remove`](/using-syllago/cli-reference/config-remove.md) | Remove a provider from the configuration |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/config_cmd.go)
# syllago config add
> Add a provider to the configuration
[Source](/using-syllago/cli-reference/config-add/)
## Synopsis
```plaintext
syllago config add
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago config add cursor
```
## See Also
* [syllago config](/using-syllago/cli-reference/config.md)
* [syllago config list](/using-syllago/cli-reference/config-list.md)
* [syllago config paths](/using-syllago/cli-reference/config-paths.md)
* [syllago config remove](/using-syllago/cli-reference/config-remove.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/config_cmd.go)
# syllago config list
> List current configuration
[Source](/using-syllago/cli-reference/config-list/)
## Synopsis
```plaintext
syllago config list
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Show configured providers
syllago config list
# JSON output
syllago config list --json
```
## See Also
* [syllago config](/using-syllago/cli-reference/config.md)
* [syllago config add](/using-syllago/cli-reference/config-add.md)
* [syllago config paths](/using-syllago/cli-reference/config-paths.md)
* [syllago config remove](/using-syllago/cli-reference/config-remove.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/config_cmd.go)
# syllago config paths
> Manage custom provider path overrides
[Source](/using-syllago/cli-reference/config-paths/)
Configure custom base directories or per-type path overrides for providers. Overrides are stored in the global config (\~/.syllago/config.json) since paths are machine-specific.
## Subcommands
| Command | Description |
| ----------------------------------------------------------- | ----------------------------------- |
| [`clear`](/using-syllago/cli-reference/config-paths-clear.md) | Clear path overrides for a provider |
| [`set`](/using-syllago/cli-reference/config-paths-set.md) | Set path overrides for a provider |
| [`show`](/using-syllago/cli-reference/config-paths-show.md) | Show configured path overrides |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/config_cmd.go)
# syllago config paths clear
> Clear path overrides for a provider
[Source](/using-syllago/cli-reference/config-paths-clear/)
## Synopsis
```plaintext
syllago config paths clear [flags]
```
## Options
| Flag | Type | Default | Required | Description |
| -------- | -------- | ------- | -------- | -------------------------------------------------- |
| `--type` | `string` | — | No | specific content type to clear (omit to clear all) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Clear all overrides for a provider
syllago config paths clear claude-code
# Clear only a specific type override
syllago config paths clear cursor --type rules
```
## See Also
* [syllago config paths](/using-syllago/cli-reference/config-paths.md)
* [syllago config paths set](/using-syllago/cli-reference/config-paths-set.md)
* [syllago config paths show](/using-syllago/cli-reference/config-paths-show.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/paths_cmd.go)
# syllago config paths set
> Set path overrides for a provider
[Source](/using-syllago/cli-reference/config-paths-set/)
## Synopsis
```plaintext
syllago config paths set [flags]
```
## Description
Set a base directory or per-type path override for a provider. Paths must be absolute (start with / or \~/).
## Options
| Flag | Type | Default | Required | Description |
| ------------ | -------- | ------- | -------- | ------------------------------------------- |
| `--base-dir` | `string` | — | No | base directory override (replaces home dir) |
| `--path` | `string` | — | No | absolute path for the content type |
| `--type` | `string` | — | No | content type (e.g., skills, hooks) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Set a base directory for a provider
syllago config paths set claude-code --base-dir ~/custom/claude
# Set a per-type path override
syllago config paths set cursor --type rules --path ~/my-rules
```
## See Also
* [syllago config paths](/using-syllago/cli-reference/config-paths.md)
* [syllago config paths clear](/using-syllago/cli-reference/config-paths-clear.md)
* [syllago config paths show](/using-syllago/cli-reference/config-paths-show.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/paths_cmd.go)
# syllago config paths show
> Show configured path overrides
[Source](/using-syllago/cli-reference/config-paths-show/)
## Synopsis
```plaintext
syllago config paths show [flags]
```
## Options
| Flag | Type | Default | Required | Description |
| ------------ | -------- | ------- | -------- | ----------------------- |
| `--provider` | `string` | — | No | filter by provider slug |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Show all path overrides
syllago config paths show
# Show overrides for a specific provider
syllago config paths show --provider claude-code
```
## See Also
* [syllago config paths](/using-syllago/cli-reference/config-paths.md)
* [syllago config paths clear](/using-syllago/cli-reference/config-paths-clear.md)
* [syllago config paths set](/using-syllago/cli-reference/config-paths-set.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/paths_cmd.go)
# syllago config remove
> Remove a provider from the configuration
[Source](/using-syllago/cli-reference/config-remove/)
## Synopsis
```plaintext
syllago config remove
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago config remove windsurf
```
## See Also
* [syllago config](/using-syllago/cli-reference/config.md)
* [syllago config add](/using-syllago/cli-reference/config-add.md)
* [syllago config list](/using-syllago/cli-reference/config-list.md)
* [syllago config paths](/using-syllago/cli-reference/config-paths.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/config_cmd.go)
# syllago convert
> Convert library content to a provider format
[Source](/using-syllago/cli-reference/convert/)
## Synopsis
```plaintext
syllago convert [flags]
```
## Description
Renders a library item to a target provider’s format without installing it. Output goes to stdout by default, or to a file with —output.
No state changes are made — this is purely for ad-hoc sharing.
## Options
| Flag | Type | Default | Required | Description |
| ---------------- | -------- | ------- | -------- | ----------------------------------------------------------------------------- |
| `--batch` | `string` | — | No | Directory of hook files to batch-canonicalize (mutual exclusive with \) |
| `--dry-run` | `bool` | — | No | Show what would be converted without writing files |
| `--from` | `string` | — | No | Source provider slug (required with —batch) |
| `-o`, `--output` | `string` | — | No | Write output to this file path (default: stdout) |
| `--to` | `string` | — | Yes | Target provider (required) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Convert a skill to Cursor format (stdout)
syllago convert my-skill --to cursor
# Convert and save to a file
syllago convert my-rule --to windsurf --output ./windsurf-rule.md
# Batch-canonicalize a directory of hooks
syllago convert --batch ./hooks/ --from claude-code --to canonical
# Batch dry-run
syllago convert --batch ./hooks/ --from claude-code --to canonical --dry-run
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/convert.go)
# syllago create
> Scaffold a new content item in the global library
[Source](/using-syllago/cli-reference/create/)
## Synopsis
```plaintext
syllago create [flags]
```
## Description
Creates a new content item directory under \~/.syllago/content/ with .syllago.yaml metadata.
## Options
| Flag | Type | Default | Required | Description |
| ------------------ | -------- | ------- | -------- | --------------------------------------------------- |
| `-p`, `--provider` | `string` | — | No | Provider slug (required for rules, hooks, commands) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Create a new skill
syllago create skills my-new-skill
# Create a provider-specific rule
syllago create rules my-rule --provider claude-code
# Create a new agent
syllago create agents my-agent
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/create.go)
# syllago explain
> Show detailed documentation for an error code
[Source](/using-syllago/cli-reference/explain/)
## Synopsis
```plaintext
syllago explain CODE [flags]
```
## Description
Display documentation for a syllago error code.
Each error code has a detailed explanation including what it means, common causes, and how to fix it.
## Options
| Flag | Type | Default | Required | Description |
| -------- | ------ | ------- | -------- | ------------------------------ |
| `--list` | `bool` | — | No | list all available error codes |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago explain CATALOG_001
syllago explain --list
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/explain.go)
# syllago info
> Show syllago capabilities
[Source](/using-syllago/cli-reference/info/)
Machine-readable capability manifest. Useful for agents discovering syllago’s features.
## Subcommands
| Command | Description |
| ----------------------------------------------------------- | --------------------------- |
| [`formats`](/using-syllago/cli-reference/info-formats.md) | List supported file formats |
| [`providers`](/using-syllago/cli-reference/info-providers.md) | List all known providers |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/info_cmd.go)
# syllago info formats
> List supported file formats
[Source](/using-syllago/cli-reference/info-formats/)
## Synopsis
```plaintext
syllago info formats
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago info formats
```
## See Also
* [syllago info](/using-syllago/cli-reference/info.md)
* [syllago info providers](/using-syllago/cli-reference/info-providers.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/info_cmd.go)
# syllago info providers
> List all known providers
[Source](/using-syllago/cli-reference/info-providers/)
## Synopsis
```plaintext
syllago info providers
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# List providers and their supported types
syllago info providers
# JSON output
syllago info providers --json
```
## See Also
* [syllago info](/using-syllago/cli-reference/info.md)
* [syllago info formats](/using-syllago/cli-reference/info-formats.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/info_cmd.go)
# syllago init
> Initialize syllago for this project
[Source](/using-syllago/cli-reference/init/)
## Synopsis
```plaintext
syllago init [flags]
```
## Description
Detects AI coding tools in use, creates .syllago/config.json with provider selection.
## Options
| Flag | Type | Default | Required | Description |
| ------------- | ------ | ------- | -------- | ----------------------------- |
| `--force` | `bool` | — | No | Overwrite existing config |
| `-y`, `--yes` | `bool` | — | No | Skip interactive confirmation |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Interactive setup
syllago init
# Skip confirmation prompts
syllago init --yes
# Overwrite existing config
syllago init --force
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/init.go)
# syllago inspect
> Show details about a content item
[Source](/using-syllago/cli-reference/inspect/)
## Synopsis
```plaintext
syllago inspect / [flags]
```
## Description
Display full details about a content item for pre-install auditing.
By default, shows metadata and the primary content file. Use —as to preview what the content would look like converted to a specific provider’s format.
Path formats: skills/my-skill Universal content (type/name) rules/claude-code/my-rule Provider-specific (type/provider/name)
## Options
| Flag | Type | Default | Required | Description |
| ----------------- | -------- | ------- | -------- | --------------------------------------------------- |
| `--as` | `string` | — | No | Preview content converted to a provider’s format |
| `--compatibility` | `bool` | — | No | Show per-provider compatibility matrix (hooks only) |
| `--files` | `bool` | — | No | Show file contents |
| `--risk` | `bool` | — | No | Show detailed risk analysis |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Inspect a skill (shows metadata + content)
syllago inspect skills/my-skill
# Preview what a rule looks like in Cursor format
syllago inspect rules/coding-standards --as cursor
# Compare formats side by side
syllago inspect rules/coding-standards --as claude-code
syllago inspect rules/coding-standards --as cursor
# JSON output for scripting
syllago inspect --json skills/my-skill
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/inspect.go)
# syllago install
> Activate library content in a provider
[Source](/using-syllago/cli-reference/install/)
## Synopsis
```plaintext
syllago install [name] [flags]
```
## Description
Install content from your library into a provider’s location.
By default uses a symlink so edits in your library are reflected immediately. Use —method copy to place a standalone copy instead.
## Options
| Flag | Type | Default | Required | Description |
| ----------------- | -------- | --------- | -------- | ------------------------------------------------ |
| `--base-dir` | `string` | — | No | Override base directory for content installation |
| `-n`, `--dry-run` | `bool` | — | No | Show what would happen without making changes |
| `--method` | `string` | `symlink` | No | Install method: symlink (default) or copy |
| `--no-input` | `bool` | — | No | Disable interactive prompts, use defaults |
| `--to` | `string` | — | Yes | Provider to install into (required) |
| `--type` | `string` | — | No | Filter to a specific content type |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Install a skill to Claude Code
syllago install my-skill --to claude-code
# Install with a standalone copy instead of symlink
syllago install my-skill --to cursor --method copy
# Install all skills to a provider
syllago install --to claude-code --type skills
# Preview what would happen
syllago install my-skill --to claude-code --dry-run
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/install.go)
# syllago list
> List content items in the library
[Source](/using-syllago/cli-reference/list/)
## Synopsis
```plaintext
syllago list [flags]
```
## Description
Show a quick inventory of all content without launching the TUI.
By default, lists all content grouped by type. Use flags to filter.
## Options
| Flag | Type | Default | Required | Description |
| ---------- | -------- | ------- | -------- | --------------------------------------------------------- |
| `--source` | `string` | `all` | No | Filter by source: library, shared, registry, builtin, all |
| `--type` | `string` | — | No | Filter to one content type (e.g., skills, rules) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# List all content grouped by type
syllago list
# Show only library items
syllago list --source library
# Show only skills
syllago list --type skills
# JSON output for scripting
syllago list --json
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/list.go)
# syllago loadout
> Apply, create, and manage loadouts
[Source](/using-syllago/cli-reference/loadout/)
Loadouts bundle a curated set of syllago content — rules, hooks, skills, agents, MCP servers — into a single shareable configuration.
Use “syllago loadout apply” to try or apply a loadout. Use “syllago loadout create” to build a new loadout interactively. Use “syllago loadout remove” to revert an active loadout.
## Subcommands
| Command | Description |
| -------------------------------------------------------- | ------------------------------------------------------------ |
| [`apply`](/using-syllago/cli-reference/loadout-apply.md) | Apply a loadout |
| [`create`](/using-syllago/cli-reference/loadout-create.md) | Interactively create a new loadout |
| [`list`](/using-syllago/cli-reference/loadout-list.md) | List available loadouts |
| [`remove`](/using-syllago/cli-reference/loadout-remove.md) | Remove the active loadout and restore original configuration |
| [`status`](/using-syllago/cli-reference/loadout-status.md) | Show active loadout status |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/loadout_cmd.go)
# syllago loadout apply
> Apply a loadout
[Source](/using-syllago/cli-reference/loadout-apply/)
## Synopsis
```plaintext
syllago loadout apply [name] [flags]
```
## Description
Apply a loadout to configure the current project for Claude Code.
Default mode (no flags): preview what would happen without making changes. —try: apply temporarily; reverts automatically when the session ends. —keep: apply permanently; run “syllago loadout remove” to undo.
## Options
| Flag | Type | Default | Required | Description |
| ------------ | -------- | --------- | -------- | ------------------------------------------------------------------------------- |
| `--base-dir` | `string` | — | No | Override base directory for content installation |
| `--keep` | `bool` | — | No | Apply permanently |
| `--method` | `string` | `symlink` | No | Install method: symlink (default) or copy |
| `--preview` | `bool` | — | No | Dry run: show planned actions without applying |
| `--to` | `string` | — | No | Target provider (overrides manifest provider; defaults to claude-code if unset) |
| `--try` | `bool` | — | No | Apply temporarily; auto-revert on session end |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Preview what a loadout would do
syllago loadout apply my-loadout
# Try temporarily (auto-reverts on session end)
syllago loadout apply my-loadout --try
# Apply permanently
syllago loadout apply my-loadout --keep
# Apply to a specific provider
syllago loadout apply my-loadout --keep --to cursor
```
## See Also
* [syllago loadout](/using-syllago/cli-reference/loadout.md)
* [syllago loadout create](/using-syllago/cli-reference/loadout-create.md)
* [syllago loadout list](/using-syllago/cli-reference/loadout-list.md)
* [syllago loadout remove](/using-syllago/cli-reference/loadout-remove.md)
* [syllago loadout status](/using-syllago/cli-reference/loadout-status.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/loadout_apply.go)
# syllago loadout create
> Interactively create a new loadout
[Source](/using-syllago/cli-reference/loadout-create/)
## Synopsis
```plaintext
syllago loadout create
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago loadout create
```
## See Also
* [syllago loadout](/using-syllago/cli-reference/loadout.md)
* [syllago loadout apply](/using-syllago/cli-reference/loadout-apply.md)
* [syllago loadout list](/using-syllago/cli-reference/loadout-list.md)
* [syllago loadout remove](/using-syllago/cli-reference/loadout-remove.md)
* [syllago loadout status](/using-syllago/cli-reference/loadout-status.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/loadout_create.go)
# syllago loadout list
> List available loadouts
[Source](/using-syllago/cli-reference/loadout-list/)
## Synopsis
```plaintext
syllago loadout list
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# List all available loadouts
syllago loadout list
# JSON output
syllago loadout list --json
```
## See Also
* [syllago loadout](/using-syllago/cli-reference/loadout.md)
* [syllago loadout apply](/using-syllago/cli-reference/loadout-apply.md)
* [syllago loadout create](/using-syllago/cli-reference/loadout-create.md)
* [syllago loadout remove](/using-syllago/cli-reference/loadout-remove.md)
* [syllago loadout status](/using-syllago/cli-reference/loadout-status.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/loadout_list.go)
# syllago loadout remove
> Remove the active loadout and restore original configuration
[Source](/using-syllago/cli-reference/loadout-remove/)
## Synopsis
```plaintext
syllago loadout remove [flags]
```
## Options
| Flag | Type | Default | Required | Description |
| -------- | ------ | ------- | -------- | ------------------------------------------- |
| `--auto` | `bool` | — | No | Skip confirmation (used by SessionEnd hook) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago loadout remove
```
## See Also
* [syllago loadout](/using-syllago/cli-reference/loadout.md)
* [syllago loadout apply](/using-syllago/cli-reference/loadout-apply.md)
* [syllago loadout create](/using-syllago/cli-reference/loadout-create.md)
* [syllago loadout list](/using-syllago/cli-reference/loadout-list.md)
* [syllago loadout status](/using-syllago/cli-reference/loadout-status.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/loadout_remove.go)
# syllago loadout status
> Show active loadout status
[Source](/using-syllago/cli-reference/loadout-status/)
## Synopsis
```plaintext
syllago loadout status
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Check if a loadout is active
syllago loadout status
# JSON output
syllago loadout status --json
```
## See Also
* [syllago loadout](/using-syllago/cli-reference/loadout.md)
* [syllago loadout apply](/using-syllago/cli-reference/loadout-apply.md)
* [syllago loadout create](/using-syllago/cli-reference/loadout-create.md)
* [syllago loadout list](/using-syllago/cli-reference/loadout-list.md)
* [syllago loadout remove](/using-syllago/cli-reference/loadout-remove.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/loadout_status.go)
# syllago publish
> Contribute library content to a registry
[Source](/using-syllago/cli-reference/publish/)
## Synopsis
```plaintext
syllago publish [flags]
```
## Description
Copies a library item to a registry clone, stages the change, and optionally creates a branch and PR.
## Options
| Flag | Type | Default | Required | Description |
| ------------ | -------- | ------- | -------- | ----------------------------------------------- |
| `--no-input` | `bool` | — | No | Skip interactive git prompts, stage only |
| `--registry` | `string` | — | Yes | Registry name to publish to (required) |
| `--type` | `string` | — | No | Disambiguate when name exists in multiple types |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Publish a skill to a registry
syllago publish my-skill --registry my-registry
# Publish a specific rule type
syllago publish my-rule --registry team-rules --type rules
# Non-interactive mode
syllago publish my-skill --registry my-registry --no-input
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/publish.go)
# syllago registry
> Manage git-based content registries
[Source](/using-syllago/cli-reference/registry/)
Add, remove, list, and sync git repositories as content registries.
Registries are read-only git repos containing shared content (skills, rules, hooks, MCP configs, etc.). Use “registry sync” to pull updates, and “registry items” to browse what’s available.
To use registry content, browse it in the TUI (“syllago”) or install it directly with “syllago install —to \”.
## Subcommands
| Command | Description |
| --------------------------------------------------------- | ---------------------------------------------- |
| [`add`](/using-syllago/cli-reference/registry-add.md) | Add a git registry |
| [`create`](/using-syllago/cli-reference/registry-create.md) | Create a new registry |
| [`items`](/using-syllago/cli-reference/registry-items.md) | Browse content available in registries |
| [`list`](/using-syllago/cli-reference/registry-list.md) | List registered registries |
| [`remove`](/using-syllago/cli-reference/registry-remove.md) | Remove a registry and delete its local clone |
| [`sync`](/using-syllago/cli-reference/registry-sync.md) | Pull latest content from one or all registries |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/registry_cmd.go)
# syllago registry add
> Add a git registry
[Source](/using-syllago/cli-reference/registry-add/)
## Synopsis
```plaintext
syllago registry add [flags]
```
## Options
| Flag | Type | Default | Required | Description |
| -------- | -------- | ------- | -------- | ----------------------------------------------------------------- |
| `--name` | `string` | — | No | Override the registry name (default: derived from URL) |
| `--ref` | `string` | — | No | Branch, tag, or commit to checkout (default: repo default branch) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Add a registry by URL
syllago registry add https://github.com/team/rules.git
# Add with a custom name
syllago registry add https://github.com/team/rules.git --name team-rules
# Pin to a specific branch
syllago registry add https://github.com/team/rules.git --ref main
```
## See Also
* [syllago registry](/using-syllago/cli-reference/registry.md)
* [syllago registry create](/using-syllago/cli-reference/registry-create.md)
* [syllago registry items](/using-syllago/cli-reference/registry-items.md)
* [syllago registry list](/using-syllago/cli-reference/registry-list.md)
* [syllago registry remove](/using-syllago/cli-reference/registry-remove.md)
* [syllago registry sync](/using-syllago/cli-reference/registry-sync.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/registry_cmd.go)
# syllago registry create
> Create a new registry
[Source](/using-syllago/cli-reference/registry-create/)
## Synopsis
```plaintext
syllago registry create [flags]
```
## Description
Create a new registry in one of two modes:
—new \ Scaffold an empty registry directory structure —from-native Index provider-native content in the current repo
## Options
| Flag | Type | Default | Required | Description |
| --------------- | -------- | ------- | -------- | --------------------------------------------------- |
| `--description` | `string` | — | No | Short description of the registry (used with —new) |
| `--from-native` | `bool` | — | No | Index provider-native content in the current repo |
| `--new` | `string` | — | No | Scaffold an empty registry directory with this name |
| `--no-git` | `bool` | — | No | Skip git init and initial commit (used with —new) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Scaffold an empty registry
syllago registry create --new my-rules
# Scaffold with a description
syllago registry create --new my-rules --description "Team coding standards"
# Index existing provider-native content
syllago registry create --from-native
```
## See Also
* [syllago registry](/using-syllago/cli-reference/registry.md)
* [syllago registry add](/using-syllago/cli-reference/registry-add.md)
* [syllago registry items](/using-syllago/cli-reference/registry-items.md)
* [syllago registry list](/using-syllago/cli-reference/registry-list.md)
* [syllago registry remove](/using-syllago/cli-reference/registry-remove.md)
* [syllago registry sync](/using-syllago/cli-reference/registry-sync.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/registry_cmd.go)
# syllago registry items
> Browse content available in registries
[Source](/using-syllago/cli-reference/registry-items/)
## Synopsis
```plaintext
syllago registry items [name] [flags]
```
## Description
Lists content items from one or all registries.
Use —type to filter by content type. To install registry content, use “syllago install —to \” or browse in the TUI with “syllago”.
## Options
| Flag | Type | Default | Required | Description |
| -------- | -------- | ------- | -------- | --------------------------------------------------- |
| `--type` | `string` | — | No | Filter by content type (skills, rules, hooks, etc.) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# List all items from all registries
syllago registry items
# List items from a specific registry
syllago registry items my-rules
# Filter by content type
syllago registry items --type skills
```
## See Also
* [syllago registry](/using-syllago/cli-reference/registry.md)
* [syllago registry add](/using-syllago/cli-reference/registry-add.md)
* [syllago registry create](/using-syllago/cli-reference/registry-create.md)
* [syllago registry list](/using-syllago/cli-reference/registry-list.md)
* [syllago registry remove](/using-syllago/cli-reference/registry-remove.md)
* [syllago registry sync](/using-syllago/cli-reference/registry-sync.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/registry_cmd.go)
# syllago registry list
> List registered registries
[Source](/using-syllago/cli-reference/registry-list/)
## Synopsis
```plaintext
syllago registry list
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# List all configured registries
syllago registry list
# JSON output
syllago registry list --json
```
## See Also
* [syllago registry](/using-syllago/cli-reference/registry.md)
* [syllago registry add](/using-syllago/cli-reference/registry-add.md)
* [syllago registry create](/using-syllago/cli-reference/registry-create.md)
* [syllago registry items](/using-syllago/cli-reference/registry-items.md)
* [syllago registry remove](/using-syllago/cli-reference/registry-remove.md)
* [syllago registry sync](/using-syllago/cli-reference/registry-sync.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/registry_cmd.go)
# syllago registry remove
> Remove a registry and delete its local clone
[Source](/using-syllago/cli-reference/registry-remove/)
## Synopsis
```plaintext
syllago registry remove
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago registry remove team-rules
```
## See Also
* [syllago registry](/using-syllago/cli-reference/registry.md)
* [syllago registry add](/using-syllago/cli-reference/registry-add.md)
* [syllago registry create](/using-syllago/cli-reference/registry-create.md)
* [syllago registry items](/using-syllago/cli-reference/registry-items.md)
* [syllago registry list](/using-syllago/cli-reference/registry-list.md)
* [syllago registry sync](/using-syllago/cli-reference/registry-sync.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/registry_cmd.go)
# syllago registry sync
> Pull latest content from one or all registries
[Source](/using-syllago/cli-reference/registry-sync/)
## Synopsis
```plaintext
syllago registry sync [name]
```
## Description
Runs git pull on registry clones to fetch the latest content.
Sync updates the local clone only — it does not modify your library or installed provider content. Use “syllago registry items” to see what changed, and “syllago install” to activate updated content.
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Sync all registries
syllago registry sync
# Sync a specific registry
syllago registry sync my-rules
```
## See Also
* [syllago registry](/using-syllago/cli-reference/registry.md)
* [syllago registry add](/using-syllago/cli-reference/registry-add.md)
* [syllago registry create](/using-syllago/cli-reference/registry-create.md)
* [syllago registry items](/using-syllago/cli-reference/registry-items.md)
* [syllago registry list](/using-syllago/cli-reference/registry-list.md)
* [syllago registry remove](/using-syllago/cli-reference/registry-remove.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/registry_cmd.go)
# syllago remove
> Remove content from your library and uninstall from providers
[Source](/using-syllago/cli-reference/remove/)
## Synopsis
```plaintext
syllago remove [flags]
```
## Description
Removes a content item from your library (\~/.syllago/content/) and uninstalls it from any providers where it is currently installed.
## Options
| Flag | Type | Default | Required | Description |
| ----------------- | -------- | ------- | -------- | ----------------------------------------------- |
| `-n`, `--dry-run` | `bool` | — | No | Show what would happen without making changes |
| `-f`, `--force` | `bool` | — | No | Skip confirmation prompt |
| `--no-input` | `bool` | — | No | Disable interactive prompts, use defaults |
| `--type` | `string` | — | No | Disambiguate when name exists in multiple types |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Remove a skill from library and all providers
syllago remove my-skill
# Disambiguate by type when name exists in multiple types
syllago remove my-rule --type rules
# Skip confirmation prompt
syllago remove my-skill --force
# Preview what would happen
syllago remove my-skill --dry-run
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/remove.go)
# syllago sandbox
> Run and manage AI CLI tools in bubblewrap sandboxes
[Source](/using-syllago/cli-reference/sandbox/)
Sandbox wraps AI CLI tools in bubblewrap to restrict filesystem access, network egress, and environment variables.
Linux only: requires bubblewrap >= 0.4.0 and socat >= 1.7.0.
## Subcommands
| Command | Description |
| -------------------------------------------------------------------- | --------------------------------------------------- |
| [`allow-domain`](/using-syllago/cli-reference/sandbox-allow-domain.md) | Add a domain to the sandbox allowlist |
| [`allow-env`](/using-syllago/cli-reference/sandbox-allow-env.md) | Add an env var to the sandbox allowlist |
| [`allow-port`](/using-syllago/cli-reference/sandbox-allow-port.md) | Add a localhost port to the sandbox allowlist |
| [`check`](/using-syllago/cli-reference/sandbox-check.md) | Verify bubblewrap, socat, and optionally a provider |
| [`deny-domain`](/using-syllago/cli-reference/sandbox-deny-domain.md) | Remove a domain from the sandbox allowlist |
| [`deny-env`](/using-syllago/cli-reference/sandbox-deny-env.md) | Remove an env var from the sandbox allowlist |
| [`deny-port`](/using-syllago/cli-reference/sandbox-deny-port.md) | Remove a localhost port from the sandbox allowlist |
| [`domains`](/using-syllago/cli-reference/sandbox-domains.md) | List allowed domains |
| [`env`](/using-syllago/cli-reference/sandbox-env.md) | Add an env var to the sandbox allowlist |
| [`info`](/using-syllago/cli-reference/sandbox-info.md) | Show effective sandbox configuration |
| [`ports`](/using-syllago/cli-reference/sandbox-ports.md) | List allowed localhost ports |
| [`run`](/using-syllago/cli-reference/sandbox-run.md) | Run a provider in a sandbox |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox allow-domain
> Add a domain to the sandbox allowlist
[Source](/using-syllago/cli-reference/sandbox-allow-domain/)
## Synopsis
```plaintext
syllago sandbox allow-domain
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox allow-domain api.example.com
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox allow-env
> Add an env var to the sandbox allowlist
[Source](/using-syllago/cli-reference/sandbox-allow-env/)
## Synopsis
```plaintext
syllago sandbox allow-env
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox allow-env OPENAI_API_KEY
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox allow-port
> Add a localhost port to the sandbox allowlist
[Source](/using-syllago/cli-reference/sandbox-allow-port/)
## Synopsis
```plaintext
syllago sandbox allow-port
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox allow-port 8080
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox check
> Verify bubblewrap, socat, and optionally a provider
[Source](/using-syllago/cli-reference/sandbox-check/)
## Synopsis
```plaintext
syllago sandbox check [provider]
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Check sandbox prerequisites
syllago sandbox check
# Check prerequisites for a specific provider
syllago sandbox check claude-code
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox deny-domain
> Remove a domain from the sandbox allowlist
[Source](/using-syllago/cli-reference/sandbox-deny-domain/)
## Synopsis
```plaintext
syllago sandbox deny-domain
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox deny-domain api.example.com
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox deny-env
> Remove an env var from the sandbox allowlist
[Source](/using-syllago/cli-reference/sandbox-deny-env/)
## Synopsis
```plaintext
syllago sandbox deny-env
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox deny-env OPENAI_API_KEY
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox deny-port
> Remove a localhost port from the sandbox allowlist
[Source](/using-syllago/cli-reference/sandbox-deny-port/)
## Synopsis
```plaintext
syllago sandbox deny-port
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox deny-port 8080
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox domains
> List allowed domains
[Source](/using-syllago/cli-reference/sandbox-domains/)
## Synopsis
```plaintext
syllago sandbox domains
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox domains
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox env
> List allowed env vars
[Source](/using-syllago/cli-reference/sandbox-env/)
## Synopsis
```plaintext
syllago sandbox env
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox env
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox info
> Show effective sandbox configuration
[Source](/using-syllago/cli-reference/sandbox-info/)
## Synopsis
```plaintext
syllago sandbox info [provider]
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Show sandbox config
syllago sandbox info
# Show config with provider mount profile
syllago sandbox info claude-code
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox ports
> List allowed localhost ports
[Source](/using-syllago/cli-reference/sandbox-ports/)
## Synopsis
```plaintext
syllago sandbox ports
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago sandbox ports
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox run](/using-syllago/cli-reference/sandbox-run.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago sandbox run
> Run a provider in a sandbox
[Source](/using-syllago/cli-reference/sandbox-run/)
## Synopsis
```plaintext
syllago sandbox run [flags]
```
## Options
| Flag | Type | Default | Required | Description |
| ---------------- | ------------- | ------- | -------- | ---------------------------------------------- |
| `--allow-domain` | `stringArray` | — | No | Allow an additional domain for this session |
| `--allow-env` | `stringArray` | — | No | Forward an additional env var into the sandbox |
| `--allow-port` | `stringArray` | — | No | Allow a localhost port inside the sandbox |
| `--force-dir` | `bool` | — | No | Skip directory safety checks |
| `--mount-ro` | `stringArray` | — | No | Mount additional path read-only inside sandbox |
| `--no-network` | `bool` | — | No | Block all network egress (no proxy) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Run Claude Code in a sandbox
syllago sandbox run claude-code
# Run with additional domain access
syllago sandbox run claude-code --allow-domain api.example.com
# Run with no network at all
syllago sandbox run gemini-cli --no-network
```
## See Also
* [syllago sandbox](/using-syllago/cli-reference/sandbox.md)
* [syllago sandbox allow-domain](/using-syllago/cli-reference/sandbox-allow-domain.md)
* [syllago sandbox allow-env](/using-syllago/cli-reference/sandbox-allow-env.md)
* [syllago sandbox allow-port](/using-syllago/cli-reference/sandbox-allow-port.md)
* [syllago sandbox check](/using-syllago/cli-reference/sandbox-check.md)
* [syllago sandbox deny-domain](/using-syllago/cli-reference/sandbox-deny-domain.md)
* [syllago sandbox deny-env](/using-syllago/cli-reference/sandbox-deny-env.md)
* [syllago sandbox deny-port](/using-syllago/cli-reference/sandbox-deny-port.md)
* [syllago sandbox domains](/using-syllago/cli-reference/sandbox-domains.md)
* [syllago sandbox env](/using-syllago/cli-reference/sandbox-env.md)
* [syllago sandbox info](/using-syllago/cli-reference/sandbox-info.md)
* [syllago sandbox ports](/using-syllago/cli-reference/sandbox-ports.md)
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sandbox_cmd.go)
# syllago share
> Contribute library content to a team repo
[Source](/using-syllago/cli-reference/share/)
## Synopsis
```plaintext
syllago share [flags]
```
## Description
Copies a library item to your team repo, stages the change, and optionally creates a branch and PR.
## Options
| Flag | Type | Default | Required | Description |
| ------------ | -------- | ------- | -------- | ----------------------------------------------- |
| `--no-input` | `bool` | — | No | Skip interactive git prompts, stage only |
| `--type` | `string` | — | No | Disambiguate when name exists in multiple types |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Share a skill to the team repo
syllago share my-skill
# Disambiguate by type
syllago share my-rule --type rules
# Non-interactive mode (stage only, no git prompts)
syllago share my-skill --no-input
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/share.go)
# syllago sync-and-export
> Sync registries then export content to a provider
[Source](/using-syllago/cli-reference/sync-and-export/)
## Synopsis
```plaintext
syllago sync-and-export [flags]
```
## Description
Convenience command that syncs all registries then installs.
Equivalent to running: syllago registry sync && syllago install —to \
This is useful in CI/CD or automation where you want a single command to ensure registries are up-to-date before installing.
## Options
| Flag | Type | Default | Required | Description |
| ------------- | -------- | ------- | -------- | ------------------------------------------------------------------------------------------------ |
| `--llm-hooks` | `string` | `skip` | No | How to handle LLM-evaluated hooks: skip (drop with warning) or generate (create wrapper scripts) |
| `--name` | `string` | — | No | Filter by item name (substring match) |
| `--source` | `string` | `local` | No | Which items to export: local (default), shared, registry, builtin, all |
| `--to` | `string` | — | Yes | Provider slug to export to, or “all” for every provider (required) |
| `--type` | `string` | — | No | Filter to a specific content type (e.g., skills, rules) |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Sync registries and export to Cursor
syllago sync-and-export --to cursor
# Export to all providers
syllago sync-and-export --to all --type skills
# Export only registry content to Kiro
syllago sync-and-export --to kiro --source registry
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/sync-and-export.go)
# syllago uninstall
> Deactivate content from a provider
[Source](/using-syllago/cli-reference/uninstall/)
## Synopsis
```plaintext
syllago uninstall [flags]
```
## Description
Removes installed content from a provider’s location.
For symlinked content: removes the symlink. For copied content: removes the copied file or directory. For hooks/MCP: reverses the JSON merge from the provider’s settings file.
The content remains in your library (\~/.syllago/content/) and can be reinstalled at any time with “syllago install”.
## Options
| Flag | Type | Default | Required | Description |
| ----------------- | -------- | ------- | -------- | ------------------------------------------------------- |
| `-n`, `--dry-run` | `bool` | — | No | Show what would happen without making changes |
| `-f`, `--force` | `bool` | — | No | Skip confirmation prompt |
| `--from` | `string` | — | No | Provider to uninstall from (omit to uninstall from all) |
| `--no-input` | `bool` | — | No | Disable interactive prompts, use defaults |
| `--type` | `string` | — | No | Disambiguate when name exists in multiple types |
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
# Uninstall from a specific provider
syllago uninstall my-skill --from claude-code
# Uninstall from all providers
syllago uninstall my-agent
# Skip confirmation prompt
syllago uninstall my-rule --from cursor --force
# Preview what would happen
syllago uninstall my-skill --dry-run
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/uninstall.go)
# syllago update
> Update syllago to the latest release
[Source](/using-syllago/cli-reference/update/)
## Synopsis
```plaintext
syllago update
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago update
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/update.go)
# syllago version
> Print syllago version
[Source](/using-syllago/cli-reference/version/)
## Synopsis
```plaintext
syllago version
```
## Global Options
| Flag | Type | Default | Required | Description |
| ----------------- | ------ | ------- | -------- | ----------------------------- |
| `--json` | `bool` | — | No | Output in JSON format |
| `--no-color` | `bool` | — | No | Disable color output |
| `-q`, `--quiet` | `bool` | — | No | Suppress non-essential output |
| `-v`, `--verbose` | `bool` | — | No | Verbose output |
## Examples
```bash
syllago version
```
***
[Source](https://github.com/OpenScribbler/syllago/blob/main/cli/cmd/syllago/version.go)
# Collections
> How content is organized in syllago — your library, registries, and loadouts.
[Source](/using-syllago/collections/)
Syllago organizes content into three collection types, each serving a different role in your workflow. Your **library** holds content you own and manage directly. **Registries** connect you to shared content from teams or the community. **Loadouts** bundle content together so you can apply entire configurations at once.
## Quick comparison
| Aspect | Library | Registries | Loadouts |
| ------------ | ------------------------ | ------------------------------- | ----------------------------- |
| Location | `~/.syllago/content/` | Git repos (cloned locally) | Defined in config |
| Access | Read-write | Read locally, contribute via PR | Apply/revert |
| Purpose | Your personal content | Shared team/community content | Bundled configurations |
| Key commands | `add`, `install`, `list` | `registry add/sync/items` | `loadout create/apply/remove` |
## Library
Your personal content store at `~/.syllago/content/`. This is where syllago manages the content you acquire from providers. You have full read-write access — add, edit, or remove content as needed.
```bash
syllago add --from
syllago list
syllago install --to
```
[Library deep-dive](/using-syllago/collections/library.md)
## Registries
Git-based repositories of shared content maintained by teams or the community. You consume registry content locally and can contribute back via pull request using `syllago publish`.
```bash
syllago registry add
syllago registry sync
syllago registry items
```
[Registries deep-dive](/using-syllago/collections/registries.md)
## Loadouts
Bundled sets of content — rules, skills, agents, hooks, MCP configs — that apply as a unit. Loadouts let you switch between configurations quickly, either temporarily for testing or permanently.
```bash
syllago loadout create
syllago loadout apply --try # temporary
syllago loadout apply --keep # permanent
syllago loadout remove
```
[Loadouts deep-dive](/using-syllago/collections/loadouts.md)
# Library
> Your personal content store — the read-write collection you own and manage directly.
[Source](/using-syllago/collections/library/)
The library is your personal content store at `~/.syllago/content/`. Unlike [registries](/using-syllago/collections/registries.md) (shared, read-only locally) or [loadouts](/using-syllago/collections/loadouts.md) (bundled configurations), the library is fully read-write. You own this content and can add, edit, or remove it freely.
## Directory structure
Content is organized by type. Each item is a directory containing a `.syllago.yaml` metadata file and one or more content files.
```plaintext
~/.syllago/content/
├── rules/
│ ├── typescript/
│ │ ├── .syllago.yaml
│ │ └── typescript.md
│ └── security/
│ ├── .syllago.yaml
│ └── security.md
├── skills/
│ └── develop-docs/
│ ├── .syllago.yaml
│ └── develop-docs.md
├── agents/
├── hooks/
├── commands/
└── loadouts/
```
The `.syllago.yaml` file stores metadata like the item’s name, description, content type, and provider compatibility. The accompanying files hold the actual content that gets exported to providers.
## Adding content
There are three ways to get content into your library.
### Import from a provider
Pull content from an existing provider setup into syllago. This is the most common starting point — bring in what you already have.
```bash
# Discover what a provider has
syllago add --from claude-code
# Add only a specific content type
syllago add skills --from claude-code
# Add a specific item by name
syllago add rules/my-rule --from cursor
# Preview what would be written without actually writing
syllago add --from claude-code --dry-run
# Add everything
syllago add --all --from claude-code
```
Syllago handles format conversion automatically. A Cursor rule becomes a universal syllago item that can later be installed to Claude Code, Kiro, or any other supported provider.
See `syllago add --help` for full options.
### Create from scratch
Scaffold a new content item with the correct directory structure and metadata template.
```bash
# Create a new skill
syllago create skills my-new-skill
# Create a provider-specific rule
syllago create rules my-rule --provider claude-code
```
This creates the directory, `.syllago.yaml`, and a starter content file — ready for you to edit.
See [`syllago create`](/using-syllago/cli-reference/create.md) for full options.
## Browsing and inspecting content
### List content
```bash
# Show all content grouped by type
syllago list
# Show only library content
syllago list --source library
# Filter by content type
syllago list --type skills
# JSON output for scripting
syllago list --json
```
The `--source` flag accepts: `library`, `shared`, `registry`, `builtin`, or `all` (default).
See [`syllago list`](/using-syllago/cli-reference/list.md) for full options.
### Inspect an item
View the full metadata and content details for any item.
```bash
# Inspect by type/name
syllago inspect skills/my-skill
# Provider-specific content uses type/provider/name
syllago inspect rules/claude-code/my-rule
```
See [`syllago inspect`](/using-syllago/cli-reference/inspect.md) for full options.
## Exporting to providers
Once content is in your library, install it to any supported provider. Syllago converts between provider formats automatically.
```bash
# Install a specific item to Cursor
syllago install my-rule --to cursor
# Install all skills to Kiro
syllago install --to kiro --type skills
```
For project-scoped providers (Kiro, Cline, Zed), content is written to the current working directory’s provider config.
See `syllago install --help` for full options.
## How it connects
The library sits at the center of the syllago workflow:
* **Providers** are the source and destination. Import from one, export to many.
* **[Registries](/using-syllago/collections/registries.md)** are shared content you consume. Registry items appear alongside library items when you run `syllago list --source all`, but they live in separate cloned repos.
* **[Loadouts](/using-syllago/collections/loadouts.md)** bundle library content into named configurations that can be applied or reverted as a unit.
For an overview of how all three collections work together, see [Collections](/using-syllago/collections.md).
# Loadouts
> Bundle and apply curated sets of AI coding tool content as named configuration profiles.
[Source](/using-syllago/collections/loadouts/)
Loadouts are bundled sets of content — rules, skills, agents, hooks, MCP configs — that apply as a unit. Think of them as named configuration profiles: instead of adding content piece by piece, you define a loadout once and apply everything in a single command.
Loadouts currently emit configuration for **Claude Code** only. Additional provider emitters are planned.
## How loadouts fit in
Your [library](/using-syllago/collections/library.md) stores individual content items. [Registries](/using-syllago/collections/registries.md) share content across teams. Loadouts sit on top of both — they bundle content from your library into apply-as-a-unit configurations.
```plaintext
Library (individual items) --> Loadouts (bundled profiles) --> Provider config (Claude Code)
```
## Creating a loadout
Use the interactive creator to define a new loadout:
```bash
syllago loadout create
```
This walks you through selecting which content items to include. The result is a named loadout stored in your syllago configuration.
## Applying a loadout
The `apply` command has three modes controlled by flags:
```bash
# Preview what would change (default, no flags)
syllago loadout apply
# Apply temporarily — auto-reverts when the session ends
syllago loadout apply --try
# Apply permanently — persists until you explicitly remove it
syllago loadout apply --keep
```
To target a specific provider:
```bash
syllago loadout apply --keep --to
```
The default (no flags) is a dry run — it shows what files would be created or modified without touching anything. This lets you inspect the effect before committing.
### Temporary vs. permanent
**`--try`** is designed for experimentation. Apply a loadout, test it during your coding session, and it automatically reverts when the session ends. Nothing to clean up.
**`--keep`** writes the configuration to disk permanently. To undo it, use `syllago loadout remove`.
## Managing loadouts
```bash
# List all available loadouts
syllago loadout list
# Check what's currently active
syllago loadout status
# Remove the active loadout and restore original configuration
syllago loadout remove
```
## Use cases
**Per-project configurations.** Define loadouts for different work contexts — a Python backend stack, a frontend stack, a security audit profile — and switch between them as needed.
**Team onboarding.** New team members apply the team’s standard loadout in one command instead of manually configuring rules, skills, and MCP servers.
**Temporary experimentation.** Use `--try` to test a new set of rules or skills without risk. If it doesn’t work out, it reverts automatically.
## Related
* [Collections overview](/using-syllago/collections.md) — how library, registries, and loadouts work together
* [Library](/using-syllago/collections/library.md) — your personal content store
* [Registries](/using-syllago/collections/registries.md) — shared team and community content
* [CLI reference: loadout commands](/using-syllago/cli-reference/loadout-apply.md) — full flag and option details
# Registries
> Share and consume content through git-based registries.
[Source](/using-syllago/collections/registries/)
Registries are git repositories that hold shared syllago content. Teams publish content to a registry, and consumers add, sync, and browse it locally. Unlike a read-only package feed, registries support contributing back — `syllago publish` opens a pull request against the registry repo.
## How registries work
When you add a registry, syllago clones the git repo locally. Syncing pulls the latest commits. Browsing lists the content available in the clone. Nothing is installed into your [library](/using-syllago/collections/library.md) until you explicitly install an item.
```plaintext
Remote git repo Local clone Your library
┌──────────────┐ add ┌──────────┐ install ┌──────────┐
│ registry.git │──────→ │ .syllago/ │────────→ │ content/ │
└──────────────┘ sync └──────────┘ └──────────┘
↑ │
└──────────────────────┘
publish (PR)
```
## Adding a registry
```bash
syllago registry add https://github.com/your-org/syllago-registry.git
```
Options:
* `--name` — override the registry name (defaults to name derived from the URL)
* `--ref` — pin to a specific branch, tag, or commit (defaults to the repo’s default branch)
```bash
# Pin to a release tag
syllago registry add https://github.com/your-org/syllago-registry.git --ref v2.1
# Custom local name
syllago registry add https://github.com/your-org/syllago-registry.git --name team-rules
```
## Syncing
Pull the latest content from one or all registries:
```bash
# Sync all registries
syllago registry sync
# Sync a specific registry
syllago registry sync team-rules
```
Syncing only updates the local clone. It does not modify your library or any installed content. This keeps your workflow predictable — you choose when to pull updates into your library.
## Browsing content
List what a registry offers:
```bash
# All items across all registries
syllago registry items
# Items from a specific registry
syllago registry items team-rules
# Filter by content type
syllago registry items --type rules
```
## Installing registry content
Install content from a registry into your library using the same `install` command you use for any content:
```bash
syllago install --to
```
Syllago resolves the item from your registered registries. Once installed, the content lives in your library and behaves like any other library content.
## Managing registries
```bash
# List all registered registries
syllago registry list
# Remove a registry (deletes the local clone)
syllago registry remove team-rules
```
## Contributing back
Registries are not read-only. If you have content in your library that belongs in a shared registry, publish it:
```bash
syllago publish my-skill --registry team-rules
```
This opens a pull request against the registry’s git repo. The registry maintainers review and merge through their normal PR workflow — no special tooling required on their end.
For team repos (non-registry), use `syllago share` instead:
```bash
syllago share my-skill
```
## Privacy gate
Content from private registries is automatically tainted with source metadata. Syllago blocks publishing tainted content to public registries to prevent accidental leakage. See [Registry Privacy](/advanced/registry-privacy.md) for details.
## Creating your own registry
You can scaffold a new registry with `syllago registry create`:
```bash
# Scaffold an empty registry
syllago registry create --new my-rules --description "Team coding standards"
# Index existing provider-native content in a repo
syllago registry create --from-native
```
Or create one manually — a registry is just a git repo with syllago’s content structure:
1. Create a new git repo
2. Add syllago content following the standard directory layout
3. Push to a git host (GitHub, GitLab, etc.)
4. Share the URL — others add it with `syllago registry add`
## Relationship to other collections
| Collection | Role | Access model |
| ------------------------------------------------ | ----------------------------- | ---------------------------------- |
| [Library](/using-syllago/collections/library.md) | Your personal content | Full read-write |
| **Registries** | Shared team/community content | Consume locally, contribute via PR |
| [Loadouts](/using-syllago/collections/loadouts.md) | Bundled configurations | Apply and revert as a unit |
Registries feed your library. You browse what is available, install what you need, and the installed content becomes part of your library. Loadouts can then bundle library content into switchable configurations.
## Command reference
* [`syllago registry add`](/using-syllago/cli-reference/registry-add.md)
* [`syllago registry sync`](/using-syllago/cli-reference/registry-sync.md)
* [`syllago registry items`](/using-syllago/cli-reference/registry-items.md)
* [`syllago registry list`](/using-syllago/cli-reference/registry-list.md)
* [`syllago registry remove`](/using-syllago/cli-reference/registry-remove.md)
* `syllago registry create`
* `syllago publish`
* `syllago share`
# Content Types
> Overview of syllago content types and provider compatibility.
[Source](/using-syllago/content-types/)
Syllago manages several content types, each stored in a provider-neutral **syllago format**. When installed to a provider, syllago automatically converts to the provider’s native format. See [Format Conversion](/using-syllago/format-conversion.md) for details.
## Provider Compatibility Matrix
| Content Type | CC | Gemini | Cursor | Copilot | Codex | Kiro | Windsurf | OpenCode | Roo | Cline | Amp | Zed |
| ------------ | -- | ------ | ------ | ------- | ----- | ---- | -------- | -------- | --- | ----- | --- | --- |
| Rules | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Skills | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | — |
| Agents | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ | — | — | — |
| MCP Configs | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Hooks | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | — | ✅ | — | — |
| Commands | ✅ | ✅ | ✅ | ✅ | ✅ | — | — | ✅ | — | — | — | — |
| Loadouts | ✅ | — | — | — | — | — | — | — | — | — | — | — |
## Content Type Reference
**[Rules](/using-syllago/content-types/rules.md)** — System prompts and custom instructions that guide AI behavior. Supported by every provider.
**[Skills](/using-syllago/content-types/skills.md)** — Multi-file workflow packages that teach the AI specific capabilities.
**[Agents](/using-syllago/content-types/agents.md)** — AI agent definitions and personas with specialized roles.
**[MCP Configs](/using-syllago/content-types/mcp-configs.md)** — MCP server configurations for tool and resource access.
**[Hooks](/using-syllago/content-types/hooks.md)** — Event-driven automation scripts triggered by AI tool lifecycle events.
**[Commands](/using-syllago/content-types/commands.md)** — Custom slash commands that extend the AI tool’s command palette.
**[Loadouts](/using-syllago/collections/loadouts.md)** — Curated content bundles that apply as a unit. Loadouts bundle other content types together so they can be installed and removed in one operation.
# Agents
> How syllago manages AI agent definitions and personas across providers.
[Source](/using-syllago/content-types/agents/)
Agents are named personas with specialized roles. An agent defines a description and a set of instructions that an AI coding tool can assume, letting you switch between focused behaviors — an API design expert, a security reviewer, a documentation writer — without rewriting prompts.
Supported by most providers: Claude Code, Gemini CLI, Cursor, Copilot CLI, Codex, Roo Code, OpenCode, and Kiro.
## Canonical Fields
Agents support the following metadata fields:
| Field | Description | Provider Support |
| ---------------- | -------------------------------------------------- | ------------------------------------- |
| `name` | Agent name (required) | All providers |
| `description` | What the agent does (required) | All providers |
| `permissionMode` | Permission level (5 values) | Claude Code (all 5); others as prose |
| `effort` | Time/complexity: `min`, `moderate`, `large`, `max` | Claude Code (native); others as prose |
### Permission Modes
The `permissionMode` field supports five values:
| Value | Meaning |
| ------------------- | ------------------------------ |
| `default` | Normal permission checking |
| `acceptEdits` | Auto-accept file edits |
| `plan` | Plan-only mode (no execution) |
| `dontAsk` | Skip permission prompts |
| `bypassPermissions` | Full bypass (use with caution) |
Claude Code supports all five modes natively. Other providers embed non-native modes as behavioral prose notes.
See the [Content Types overview](/using-syllago/content-types.md) for the full compatibility matrix.
## Syllago Format
Each agent in your library has a `.syllago.yaml` manifest and a Markdown source file.
**Manifest** (`.syllago.yaml`):
```yaml
id: 4369aa21-9660-4511-a9bb-7cea37751529
name: api-agent
type: agents
source_format: md
source_type: provider
added_at: 2026-03-13T00:13:24Z
added_by: syllago
```
**Source file** (`api-agent.md`):
```markdown
---
name: api-agent
description: REST API design agent
---
Design RESTful endpoints with OpenAPI conventions.
Follow resource naming best practices and use proper HTTP methods.
Return consistent error shapes with appropriate status codes.
```
The Markdown body contains the agent’s instructions — what the AI should know and do when assuming this persona. The YAML frontmatter carries metadata (name, description) that providers use for display and selection.
## Provider Format Differences
Most providers use Markdown with YAML frontmatter, so agents install with minimal transformation. Two providers use different native formats:
### Codex (TOML)
Codex stores agent definitions in TOML. Syllago auto-converts between TOML and Markdown frontmatter on import and install:
```toml
[agent]
name = "api-agent"
description = "REST API design agent"
[agent.instructions]
content = """
Design RESTful endpoints with OpenAPI conventions.
Follow resource naming best practices and use proper HTTP methods.
Return consistent error shapes with appropriate status codes.
"""
```
When you import a Codex agent, syllago parses the TOML and stores it as standard Markdown with frontmatter. When you install to Codex, syllago converts back. No manual format handling needed.
### Kiro (JSON)
Kiro uses JSON-based steering files. Syllago embeds the Markdown content into Kiro’s JSON structure automatically during install.
## Workflow
```bash
# Add an agent from a provider
syllago add agents/api-agent --from claude-code
# List agents in your library
syllago list --type agents
# Install to a different provider
syllago install api-agent --to codex
# Inspect the stored format
syllago inspect api-agent
```
## Further Reading
* [Content Types overview](/using-syllago/content-types.md) — compatibility matrix and all content types
* [Format Conversion](/using-syllago/format-conversion.md) — how syllago converts between provider formats
# Commands
> How syllago manages custom slash commands across providers.
[Source](/using-syllago/content-types/commands/)
Commands are custom slash commands that extend an AI tool’s command palette. They let you define reusable prompts or workflows that users invoke with a slash prefix (e.g., `/fix-typo`).
## Provider Support
Commands are supported by the following providers:
| Provider | Format | Notes |
| ----------- | -------- | -------------------------------------- |
| Claude Code | Markdown | Command files in `.claude/commands/` |
| Gemini CLI | Markdown | Command files in `.gemini/commands/` |
| Cursor | Markdown | Command files in `.cursor/commands/` |
| Copilot CLI | Markdown | Command files in `.copilot/commands/` |
| Codex | Markdown | Command files in `.codex/commands/` |
| OpenCode | Markdown | Command files in `.opencode/commands/` |
## Canonical Fields
Commands support the following metadata:
| Field | Description | Provider Support |
| -------- | -------------------------------------------------- | ------------------------------------------------ |
| `effort` | Time/complexity: `min`, `moderate`, `large`, `max` | Claude Code (native); others as behavioral notes |
## Syllago Format
Commands are stored in your library using syllago’s provider-neutral format. The metadata file (`.syllago.yaml`) describes the content, and a separate source file holds the command definition.
### Catalog Entry
```yaml
id: 6c0ce509-7960-490f-9100-4d5009d6261c
name: fix_typo
type: commands
source_format: toml
source_type: provider
has_source: true
added_at: 2026-03-11T19:23:53Z
added_by: syllago
```
Key fields:
* **type** — always `commands` for this content type
* **source\_format** — the format of the source file (`toml`, `md`, `yaml`)
* **has\_source** — indicates the item includes a source file with the command definition
### Command Source
The source file contains the actual command definition. The format depends on where the command was imported from. Here is a TOML example (Codex-style):
```toml
description = "Fix a typo in a document."
[variables]
file_path = "{{FILE_PATH}}"
file_content = "{{FILE_CONTENT}}"
[instructions]
preamble = "You are a documentation editor..."
steps = [
"Read the file content carefully.",
"Find and fix the reported typo.",
]
```
A Markdown-based command (Claude Code or Gemini CLI style) would instead be a `.md` file with the prompt content directly as prose, optionally with frontmatter for metadata.
## Format Conversion
When you export a command to a provider, syllago converts between formats automatically. See [Format Conversion](/using-syllago/format-conversion.md) for details on how syllago handles cross-format translation.
## Working with Commands
```bash
# Add a command from a provider
syllago add commands/fix-typo --from claude-code
# List commands in your library
syllago list --type commands
# Install a command to a different provider
syllago install fix_typo --to gemini-cli
# Inspect a command's metadata and source
syllago inspect fix_typo
```
## See Also
* [Content Types Overview](/using-syllago/content-types.md) — compatibility matrix and all content types
* [Format Conversion](/using-syllago/format-conversion.md) — how syllago converts between provider formats
# Hooks
> How syllago manages hooks across providers.
[Source](/using-syllago/content-types/hooks/)
Hooks are event-driven automation scripts triggered by AI tool lifecycle events. They let you run custom logic when specific events occur — before or after a tool call, on session start, on file change, and so on.
Supported by Claude Code, Gemini CLI, Copilot CLI, Cursor, Windsurf, Codex, Cline, and Kiro.
## Canonical Format
Syllago uses a provider-neutral canonical format for hooks, defined by the [Hook Interchange Format Specification](/reference/hooks-v1.md).
### Handler Types
Hooks support four handler types:
| Type | Description |
| --------- | ---------------------------------------------------- |
| `command` | Shell command executed as a subprocess |
| `http` | HTTP POST to a URL |
| `prompt` | LLM-evaluated logic (not all providers support this) |
| `agent` | Delegated to an agent subprocess |
### Event Names (Canonical)
Hook events use provider-neutral names in the canonical format:
| Canonical Event | Claude Code | Gemini CLI |
| --------------------- | ------------------ | ------------------ |
| `before_tool_execute` | `PreToolUse` | `before_tool_call` |
| `after_tool_execute` | `PostToolUse` | `after_tool_call` |
| `before_prompt` | `UserPromptSubmit` | `before_send` |
| `agent_stop` | `Stop` | `on_complete` |
| `session_start` | `SessionStart` | `session_start` |
| `session_end` | `SessionEnd` | `session_end` |
Syllago translates event names automatically when converting between providers.
### Matcher Types
Hooks use matchers to target specific tools or events:
* **Bare string**: Tool vocabulary lookup (e.g., `"shell"`, `"file_read"`)
* **Pattern object**: Regex on tool name (`{"pattern": "file_(read|write|edit)"}`)
* **MCP object**: Server+tool targeting (`{"mcp": {"server": "github", "tool": "create_issue"}}`)
* **Array**: OR logic across multiple matchers
### Exit Code Contract
| Code | Meaning |
| ----- | --------------------------------------- |
| `0` | Success — parse JSON output |
| `1` | Non-blocking warning |
| `2` | Block action (only if `blocking: true`) |
| Other | Treated as warning |
## Provider Support
| Provider | Hook Support | Notes |
| ---------------------------- | ------------ | --------------------------------------------------------------------- |
| Claude Code | Full | Richest output contract, all event types |
| Gemini CLI | Full | Unique events: `before_model`, `after_model`, `before_tool_selection` |
| Copilot CLI | Full | Conservative safety design |
| Cursor | Yes | JSON merge into `.cursor/settings.json` |
| Windsurf | Yes | JSON merge |
| Codex | Yes | JSON hooks in `.codex/hooks.json` |
| Cline | Yes | File-based executables in `.clinerules/hooks/` |
| Kiro | Yes | Embedded in agent JSON files |
| Zed, Roo Code, OpenCode, Amp | No | — |
## Hook Security
Syllago includes a **hook security scanner** that detects dangerous patterns when converting hooks:
| Risk Level | Patterns Detected |
| ---------- | --------------------------------------------------- |
| **HIGH** | `curl`, `rm -rf`, piped execution, network commands |
| **MEDIUM** | Broad matchers, wildcard patterns |
| **LOW** | System paths, environment variable access |
Security warnings appear in `syllago convert` and `syllago install` output.
## Portability Warnings
When converting hooks between providers, syllago surfaces warnings for:
* **Unsupported events**: e.g., Gemini’s `before_model` has no Claude Code equivalent
* **Capability mismatches**: e.g., `updated_input` (input rewriting) not supported by target
* **Degradation applied**: hooks that use the `block`, `warn`, or `exclude` degradation strategy
## See Also
* [Hook Interchange Format Specification](/reference/hooks-v1.md) — full canonical format specification
* [Content Types Overview](/using-syllago/content-types.md) — full provider compatibility matrix
* [Format Conversion](/using-syllago/format-conversion.md) — how syllago converts between provider formats
# MCP Configs
> How syllago manages MCP server configurations across providers.
[Source](/using-syllago/content-types/mcp-configs/)
MCP (Model Context Protocol) server configurations define external tools and data sources that AI coding tools can connect to — things like database access, API integrations, or custom tool servers. Syllago stores these in a provider-neutral format and converts them to each provider’s native configuration on install.
## Syllago Format
MCP configs are stored as JSON with a `mcpServers` key. Each server entry specifies the command to run, its arguments, and any environment variables:
```json
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://localhost:5432/mydb"
}
},
"github": {
"command": "node",
"args": ["github-server.js"],
"env": {
"GITHUB_TOKEN": "..."
}
}
}
}
```
Each server entry supports:
* **`command`** — the executable to launch the MCP server
* **`args`** — command-line arguments passed to the server process
* **`env`** — environment variables available to the server at runtime
* **`disabledTools`** — list of tools to disable on this server (supported by Kiro, Windsurf, Roo Code)
### disabledTools
The `disabledTools` field lets you selectively disable specific tools from an MCP server:
```json
{
"mcpServers": {
"github": {
"command": "node",
"args": ["github-server.js"],
"disabledTools": ["create_issue", "delete_repo"]
}
}
}
```
This field round-trips through Kiro, Windsurf, and Roo Code. Other providers drop it with a portability warning during conversion.
## Provider Support
MCP configs are supported by every provider:
| Provider | Supported | Notes |
| ----------- | --------- | ---------------------------------- |
| Claude Code | Yes | `.claude.json`, `.mcp.json` |
| Gemini CLI | Yes | `.gemini/settings.json` |
| Cursor | Yes | `.cursor/mcp.json` |
| Copilot CLI | Yes | `.copilot/mcp-config.json` |
| Codex | Yes | JSON merge |
| Kiro | Yes | `.kiro/settings/mcp.json` |
| Windsurf | Yes | JSON merge |
| Zed | Yes | Uses `context_servers` key |
| Cline | Yes | VS Code globalStorage |
| Roo Code | Yes | `.roo/mcp.json` |
| OpenCode | Yes | `opencode.json` / `opencode.jsonc` |
| Amp | Yes | `.amp/settings.json` |
## Format Differences
Most providers use the same `mcpServers` JSON structure, so conversion is straightforward. The notable exception is Zed.
### Zed: `context_servers` Mapping
Zed uses the key `context_servers` instead of `mcpServers` in its configuration. Syllago handles this mapping automatically during install and import — no manual adjustment needed.
Zed native format:
```json
{
"context_servers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"]
}
}
}
```
When you import from Zed, syllago reads `context_servers` and normalizes it to `mcpServers`. When you install to Zed, syllago converts `mcpServers` back to `context_servers`.
## See Also
* [Content Types Overview](/using-syllago/content-types.md) — full compatibility matrix and content type listing
* [Format Conversion](/using-syllago/format-conversion.md) — how syllago converts between provider formats
# Rules
> How syllago manages rules — system prompts and custom instructions — across all providers.
[Source](/using-syllago/content-types/rules/)
Rules are system prompts and custom instructions that guide AI behavior. They define coding standards, project conventions, response styles, and any other behavioral guidance for the AI tool. Rules are the most universal content type — every provider supports them.
## What Rules Do
Rules tell the AI tool *how to behave*. Common uses:
* Coding conventions (language preferences, formatting, patterns)
* Project-specific context (architecture decisions, tech stack)
* Response style (verbosity, tone, explanation depth)
* Workflow instructions (testing requirements, review processes)
## syllago Format
Rules in your library are stored as a directory containing two files: a `.syllago.yaml` metadata file and a Markdown content file.
**Metadata** (`.syllago.yaml`):
```yaml
id: d21d767c-1654-46a5-bc5c-d6aa8d5fbe2c
name: typescript
type: rules
source_format: md
source_type: provider
added_at: 2026-03-11T19:23:53Z
added_by: syllago
```
**Content** (`typescript.md`):
```markdown
---
description: TypeScript coding conventions for this project
globs: "**/*.ts"
---
Use strict TypeScript with explicit return types. Prefer functional
patterns over classes. Write Vitest tests for all new functions.
```
The `source_format` field records the original format the rule was imported from. The `source_type` field indicates whether it came from a provider config or was created directly.
## Provider Compatibility
Rules are supported by every provider:
| Provider | Format | Extension | Notes |
| ----------- | -------- | --------- | ------------------------------------------------ |
| Claude Code | Markdown | `.md` | `CLAUDE.md` or `.claude/rules/` |
| Gemini CLI | Markdown | `.md` | `GEMINI.md` |
| Copilot CLI | Markdown | `.md` | `.github/copilot-instructions.md` or `AGENTS.md` |
| Codex | Markdown | `.md` | `AGENTS.md` |
| Cursor | MDC | `.mdc` | `.cursor/rules/` or `.cursorrules` |
| Windsurf | Markdown | `.md` | `.windsurfrules` or `.windsurf/rules/` |
| Zed | Markdown | `.md` | `.rules`, `.cursorrules`, or `CLAUDE.md` |
| Cline | Markdown | `.md` | `.clinerules/` |
| Roo Code | Markdown | `.md` | `.roo/rules/` with mode-specific subdirectories |
| OpenCode | Markdown | `.md` | `AGENTS.md` or `CLAUDE.md` |
| Kiro | Markdown | `.md` | `.kiro/steering/` |
| Amp | Markdown | `.md` | `AGENTS.md`, `AGENT.md`, `CLAUDE.md` |
## Format Differences
Most providers use plain Markdown, but two require conversion:
### Cursor (MDC format)
Cursor uses MDC (Markdown Component) format with `.mdc` extension. Syllago maps Markdown frontmatter fields to MDC metadata headers automatically.
**syllago format** (Markdown with frontmatter):
```markdown
---
description: TypeScript coding conventions
globs: "**/*.ts"
alwaysApply: false
---
Use strict TypeScript with explicit return types.
```
**Cursor output** (`.mdc`):
```plaintext
---
description: TypeScript coding conventions
globs: "**/*.ts"
alwaysApply: false
---
Use strict TypeScript with explicit return types.
```
The structure looks similar, but the file extension and how the metadata is parsed differs. Cursor expects `.mdc` and interprets the header block as MDC metadata rather than YAML frontmatter.
### OpenCode (YAML format)
OpenCode stores rules as YAML files. Syllago strips the Markdown frontmatter and converts the content into OpenCode’s YAML structure.
**syllago format** (Markdown):
```markdown
---
description: TypeScript coding conventions
globs: "**/*.ts"
---
Use strict TypeScript with explicit return types.
```
**OpenCode output** (`.yaml`):
```yaml
name: typescript
description: TypeScript coding conventions
globs:
- "**/*.ts"
content: |
Use strict TypeScript with explicit return types.
```
## Working with Rules
### Creating a rule
```bash
syllago create rules my-rule --provider claude-code
```
This scaffolds a new rule directory under `local/` with template files and `.syllago.yaml` metadata.
### Importing from a provider
```bash
syllago add --from claude-code
```
This scans the provider’s config directory and imports any rules into your syllago library in the provider-neutral format.
### Installing to a provider
Rules install to the target provider’s rules directory, converting format automatically:
```bash
syllago install my-rule --to cursor
```
### Inspecting a rule
```bash
syllago inspect rules/claude-code/my-rule
```
Shows the full metadata and content for pre-install auditing.
## Further Reading
* [Content Types Overview](/using-syllago/content-types.md) — provider compatibility matrix and other content types
* [Format Conversion](/using-syllago/format-conversion.md) — how syllago converts between provider formats
# Skills
> How syllago manages skills across providers.
[Source](/using-syllago/content-types/skills/)
Skills are multi-file workflow packages that teach the AI specific capabilities. Unlike [rules](/using-syllago/content-types/rules.md), which provide general behavioral guidance, skills encode structured procedures — they include metadata (name, description, triggers) in frontmatter and detailed step-by-step instructions in the body.
## Syllago Format
Each skill in your library has a `.syllago.yaml` manifest and a Markdown content file with YAML frontmatter.
### Manifest (.syllago.yaml)
```yaml
id: a1c7bba3-d8ed-4590-8338-b96895737bf2
name: develop-docs
type: skills
source_format: md
source_type: provider
added_at: 2026-03-16T17:09:06Z
added_by: syllago
```
The `type: skills` field identifies this content as a skill. The `source_format` records the original format so syllago can track provenance.
### Content File
Skill content is a Markdown file with YAML frontmatter containing metadata:
```markdown
---
name: develop-docs
description: Documentation design and planning workflow.
---
# DevelopDocs
Orchestrates the complete documentation development lifecycle.
## Steps
1. Analyze the target audience and scope
2. Create an outline with section headings
3. Draft each section following the style guide
4. Review for technical accuracy
5. Format for the target platform
```
The frontmatter `name` and `description` fields are the skill’s identity — they determine how the AI discovers and activates the skill. The body contains the actual instructions.
## Canonical Fields
Skills support the following metadata fields in YAML frontmatter:
| Field | Description | Provider Support |
| --------------- | -------------------------------------------------- | ------------------------------------- |
| `name` | Skill name (required) | All providers |
| `description` | What the skill does (required) | All providers |
| `license` | License identifier (Agent Skills spec) | Claude Code, Cursor |
| `compatibility` | Tool/version constraints | Claude Code, Cursor |
| `metadata` | Arbitrary key-value pairs | Claude Code, Cursor |
| `effort` | Time/complexity: `min`, `moderate`, `large`, `max` | Claude Code (native); others as prose |
| `hooks` | Skill-scoped event hooks | Claude Code (native); others warn |
## Provider Compatibility
Skills are supported by most providers:
| Provider | Format | Notes |
| ----------- | --------------------------- | ------------------------------------------ |
| Claude Code | Markdown + YAML frontmatter | Full field support including effort, hooks |
| Gemini CLI | Markdown | Metadata embedded in body |
| Cursor | Markdown | Full field support |
| Copilot CLI | Markdown | Skills in `.github/skills/` |
| Codex | Markdown | Skills in `.agents/skills/` |
| Kiro | Markdown steering files | Skills in `.kiro/steering/` |
| Windsurf | Markdown | Skills in `.windsurf/skills/` |
| OpenCode | Markdown | Skills in `.opencode/skills/` |
| Roo Code | Markdown | Skills in `.roo/skills/` |
| Amp | Markdown | Skills in `.agents/skills/` |
Zed and Cline do not support skills.
## Format Differences
### Frontmatter Handling
The key conversion challenge for skills is frontmatter. Claude Code uses standard YAML frontmatter (`---` delimiters), but other providers handle metadata differently:
* **Claude Code** stores `name` and `description` as YAML frontmatter. The AI reads these fields to understand when and how to apply the skill.
* **Gemini CLI** does not use YAML frontmatter. When converting, syllago either embeds the metadata as a heading/description in the Markdown body or omits it if Gemini can infer the skill’s purpose from context.
* **Kiro** uses JSON-based steering files. Syllago wraps the Markdown content into JSON string fields and maps frontmatter keys to their JSON equivalents.
* **OpenCode** uses Markdown-based skills with its own conventions for metadata.
### Conversion Example
Converting a skill from Claude Code format to Gemini CLI:
```bash
syllago convert develop-docs --to gemini-cli
```
The Claude Code source with frontmatter:
```markdown
---
name: develop-docs
description: Documentation design and planning workflow.
---
# DevelopDocs
Orchestrates the complete documentation development lifecycle...
```
Becomes a Gemini CLI file without frontmatter, with metadata folded into the body:
```markdown
# DevelopDocs
Documentation design and planning workflow.
Orchestrates the complete documentation development lifecycle...
```
The `description` field is preserved as prose rather than lost, and tool name references in the body are automatically translated to Gemini’s equivalents. See [Format Conversion](/using-syllago/format-conversion.md) for the full conversion model.
## Working with Skills
```bash
# Import a skill from your current provider
syllago add --from claude-code
# List all skills in your library
syllago list --type skills
# Install a skill to a specific provider
syllago install develop-docs --to gemini-cli
# Inspect a skill's metadata and content
syllago inspect develop-docs
```
## See Also
* [Content Types Overview](/using-syllago/content-types.md) — compatibility matrix and all content types
* [Format Conversion](/using-syllago/format-conversion.md) — how syllago converts between provider formats
# Format Conversion
> How syllago converts content between AI coding tool formats.
[Source](/using-syllago/format-conversion/)
## How Conversion Works
Syllago uses a hub-and-spoke model. Content in your library is stored in syllago format — a provider-neutral representation that syllago converts to and from each provider’s native format:
```plaintext
Source Provider -> syllago format -> Target Provider
```
When you run `syllago install my-skill --to cursor` or `syllago convert my-rule --to windsurf`, syllago:
1. Reads the content from your library (already in syllago format)
2. Converts to the target provider’s format
3. Translates tool names, metadata, and frontmatter automatically
## Compatibility Matrix
| Content Type | Coverage | Notes |
| ------------ | ---------------- | --------------------------------------------------------------------------------- |
| Rules | Every provider | Format varies (Markdown, MDC) but content fully preserved |
| Skills | Most providers | Metadata rendering varies by provider capability |
| Agents | Most providers | Codex uses TOML format, Kiro uses Markdown with YAML frontmatter (auto-converted) |
| MCP configs | Every provider | Zed uses `context_servers` key (handled automatically) |
| Hooks | Many providers | Claude Code, Gemini CLI, Copilot CLI, Cursor, Windsurf, Codex, Cline, Kiro |
| Commands | Many providers | Claude Code, Gemini CLI, Cursor, Copilot CLI, Codex, OpenCode |
| Loadouts | Claude Code (v1) | Additional provider emitters planned |
## Provider-Specific Format Notes
### Cursor
Rules are converted to MDC (Markdown Component) format with `.mdc` extension. Frontmatter fields map to MDC metadata headers.
### Codex
Agent definitions use TOML format. Syllago auto-converts between TOML and Markdown frontmatter.
### Kiro
Agent definitions use Markdown with YAML frontmatter (14 fields). Also supports a JSON CLI agent format with embedded MCP servers and lifecycle hooks. Rules and skills are Markdown steering files.
### Amp
Rules use `AGENTS.md` format with globs array frontmatter. MCP configs use a provider-specific JSON key.
### Zed
MCP server configs use the `context_servers` key instead of `mcpServers`. Syllago handles this mapping automatically.
### OpenCode
Rules use YAML format. Syllago strips Markdown frontmatter and converts to OpenCode’s YAML structure.
## What Gets Preserved
* **Content body** — always preserved in full
* **Metadata** — mapped to provider-equivalent fields where possible
* **Tool names** — automatically translated (e.g., Claude Code’s `Read` becomes Gemini’s `read_file`)
* **Frontmatter** — converted to provider-appropriate format (YAML, TOML, JSON, or embedded as prose)
When metadata can’t be represented in the target format, it’s either embedded as a comment or note in the content body, or reported as a **portability warning** during conversion.
## Portability Warnings
Both `syllago convert` and `syllago install` surface warnings when content uses features unsupported by the target provider. Warnings appear inline in text mode and in the `warnings` array in JSON mode.
Common warnings include:
* Unsupported hook events (e.g., Gemini’s `before_model` has no Claude Code equivalent)
* Missing capability support (e.g., `input_rewrite` not available on target)
* Fields dropped during conversion (e.g., `disabledTools` on MCP servers)
## Canonical Tool Names
The canonical format uses provider-neutral tool names:
| Canonical | Claude Code | Gemini CLI | Cursor |
| ------------ | ----------- | ------------------- | ------------------ |
| `file_read` | Read | read\_file | read\_file |
| `file_write` | Write | write\_file | edit\_file |
| `file_edit` | Edit | replace | edit\_file |
| `shell` | Bash | run\_shell\_command | run\_terminal\_cmd |
| `search` | Grep | grep\_search | grep\_search |
| `find` | Glob | glob | file\_search |
| `web_fetch` | WebFetch | web\_fetch | — |
| `agent` | Agent | — | — |
Translation happens automatically during conversion. You never need to manually adjust tool names.
## Using the Convert Command
```bash
# Convert a specific item to stdout
syllago convert my-skill --to gemini-cli
# Save to a file
syllago convert my-rule --to windsurf --output ./windsurf-rule.md
# JSON output with portability warnings
syllago convert my-skill --to cursor --json
# Check compatibility across all providers
syllago compat my-skill
```
## Hook Conversion
For hooks specifically, syllago uses the [Hook Interchange Format](/reference/hooks-v1.md) as the canonical representation. This handles:
* Event name translation between providers
* Matcher type conversion (tool vocabulary, regex, MCP targeting)
* Timeout unit normalization (seconds canonical, auto-converts to/from milliseconds)
* Capability degradation (block, warn, or exclude based on target support)
## See Also
* [Content Types](/using-syllago/content-types.md) — what each content type supports
* [Hook Interchange Format](/reference/hooks-v1.md) — full hook conversion specification
* `syllago compat` — check provider compatibility
# Providers
> The AI coding tools syllago integrates with, their supported content types, and how provider detection works.
[Source](/using-syllago/providers/)
A **provider** is an AI coding tool that syllago can read from and write to. Each provider has its own configuration format, file locations, and set of supported content types. syllago handles the differences so you can share configuration between them.
## Checking available providers
To see the full list of providers and what each one supports:
```bash
syllago info providers
```
## Content type support matrix
Not every provider supports every content type. The matrix below shows what each provider can handle.
| Provider | Slug | Rules | Skills | Agents | MCP | Hooks | Commands |
| ---------------------------------------------------- | ------------- | :---: | :----: | :----: | :-: | :---: | :------: |
| [Claude Code](/using-syllago/providers/claude-code.md) | `claude-code` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [Gemini CLI](/using-syllago/providers/gemini-cli.md) | `gemini-cli` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [Cursor](/using-syllago/providers/cursor.md) | `cursor` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [Copilot CLI](/using-syllago/providers/copilot.md) | `copilot-cli` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [Codex](/using-syllago/providers/codex.md) | `codex` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [Kiro](/using-syllago/providers/kiro.md) | `kiro` | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| [Windsurf](/using-syllago/providers/windsurf.md) | `windsurf` | ✅ | ✅ | — | ✅ | ✅ | — |
| [OpenCode](/using-syllago/providers/opencode.md) | `opencode` | ✅ | ✅ | ✅ | ✅ | — | ✅ |
| [Roo Code](/using-syllago/providers/roo-code.md) | `roo-code` | ✅ | ✅ | ✅ | ✅ | — | — |
| [Cline](/using-syllago/providers/cline.md) | `cline` | ✅ | — | — | ✅ | ✅ | — |
| [Amp](/using-syllago/providers/amp.md) | `amp` | ✅ | ✅ | — | ✅ | — | — |
| [Zed](/using-syllago/providers/zed.md) | `zed` | ✅ | — | — | ✅ | — | — |
Every provider supports rules. Beyond that, support varies based on what each tool’s configuration format can express.
## Auto-detection
When you run `syllago init`, syllago scans your system for installed providers and configures itself to work with the ones it finds. You don’t need to manually specify which providers you use.
## The `--from` and `--to` flags
When working with content, the `--from` flag tells syllago which provider to read from, and the `--to` flag tells it which provider to write to. Use the provider slug as the value:
```bash
# Add content from Cursor to your library
syllago add --from cursor
# Install a rule to Gemini CLI
syllago install my-rule --to gemini-cli
```
If the source and target providers use different configuration formats, syllago converts automatically. See [Format Conversion](/using-syllago/format-conversion.md) for details.
## Provider compatibility
Use `syllago compat` to check which providers support a specific content item:
```bash
syllago compat my-skill
```
This shows a matrix of which providers can handle the item, with any conversion warnings.
## Provider descriptions
* **Claude Code** (`claude-code`) — Anthropic’s CLI and IDE agent with full support for all content types including loadouts.
* **Gemini CLI** (`gemini-cli`) — Google’s CLI agent with full support for all six standard content types.
* **Cursor** (`cursor`) — AI-native code editor supporting all six content types with MDC format for rules.
* **Copilot CLI** (`copilot-cli`) — GitHub’s CLI agent supporting all six content types.
* **Codex** (`codex`) — OpenAI’s CLI agent supporting all six content types with TOML agent format.
* **Kiro** (`kiro`) — AWS’s AI IDE supporting rules, skills, agents, MCP, and hooks with Markdown/YAML frontmatter agent format.
* **Windsurf** (`windsurf`) — AI-native code editor supporting rules, skills, hooks, and MCP.
* **OpenCode** (`opencode`) — Terminal-based AI coding tool supporting rules, skills, agents, MCP, and commands.
* **Roo Code** (`roo-code`) — VS Code extension supporting rules, skills, agents, and MCP with mode-specific rule directories.
* **Cline** (`cline`) — VS Code extension supporting rules, hooks (file-based), and MCP.
* **Amp** (`amp`) — AI coding assistant supporting rules (AGENTS.md), skills, and MCP.
* **Zed** (`zed`) — High-performance editor supporting rules and MCP with unique `context_servers` JSON key.
# Amp
> How syllago works with Amp.
[Source](/using-syllago/providers/amp/)
Amp is an AI coding assistant that uses `AGENTS.md` for its rule files.
## Provider Details
| Detail | Value |
| --------------------------- | -------------------------- |
| **Slug** | `amp` |
| **Config directory** | `~/.config/amp` |
| **Supported content types** | Rules, Skills, MCP Configs |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Agents | No | — |
| Hooks | No | — |
| Commands | No | — |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | -------------------- | -------------------------- | -------- |
| Rules | `AGENTS.md` | `~/.config/amp/AGENTS.md` | Markdown |
| Skills | `.agents/skills/` | `~/.config/agents/skills/` | Markdown |
| MCP Configs | `.amp/settings.json` | — | JSON |
## Discovery Paths
When adding content from Amp, syllago looks in these locations:
| Content Type | Discovery Paths |
| ------------ | ---------------------------------------------------------------------- |
| Rules | `AGENTS.md`, `AGENT.md`, `CLAUDE.md` |
| Skills | `.agents/skills/`, `.claude/skills/` (compatibility fallback) |
| MCP Configs | `.amp/settings.json` (workspace-scoped, requires user approval in Amp) |
## Format Notes
Amp adds an implicit `**/` prefix to glob patterns at runtime. When converting rules to Amp format, syllago strips any existing `**/` prefix from globs to avoid double-prefixing.
## Detection
Syllago detects Amp by checking for the `~/.config/amp` directory.
## Working with Amp
```bash
# Add content from Amp
syllago add --from amp
# Install content to Amp
syllago install my-rule --to amp
# Check compatibility with Amp
syllago compat my-skill
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Claude Code
> How syllago works with Claude Code.
[Source](/using-syllago/providers/claude-code/)
Anthropic’s CLI and IDE agent, with the broadest content type support of any provider.
## Provider Details
| Detail | Value |
| --------------------------- | ------------------------------------------------------------- |
| **Slug** | `claude-code` |
| **Config directory** | `~/.claude` |
| **Supported content types** | Rules, Skills, Agents, MCP Configs, Hooks, Commands, Loadouts |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Agents | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Hooks | Yes | JSON merge |
| Commands | Yes | Symlink |
| Loadouts | Yes | JSON merge |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | ----------------------------- | --------------------- | -------- |
| Rules | `CLAUDE.md`, `.claude/rules/` | `~/.claude/rules/` | Markdown |
| Skills | `.claude/skills/` | `~/.claude/skills/` | Markdown |
| Agents | `.claude/agents/` | `~/.claude/agents/` | Markdown |
| MCP Configs | `.claude.json`, `.mcp.json` | — | JSON |
| Hooks | `.claude/settings.json` | — | JSON |
| Commands | `.claude/commands/` | `~/.claude/commands/` | Markdown |
| Loadouts | `.claude/settings.json` | — | JSON |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ----------------------------- |
| Rules | `CLAUDE.md`, `.claude/rules/` |
| Skills | `.claude/skills/` |
| Agents | `.claude/agents/` |
| MCP Configs | `.claude.json`, `.mcp.json` |
| Hooks | `.claude/settings.json` |
| Commands | `.claude/commands/` |
## Format Notes
Claude Code uses plain Markdown for most content types, making its files straightforward to read and edit manually. MCP configurations, hooks, and loadouts are stored as JSON within settings files. Claude Code supports all seven content types that syllago tracks, so no conversion or feature gaps apply when working with this provider.
## Detection
Syllago detects Claude Code by checking for the `~/.claude` directory.
## Working with Claude Code
```bash
# Add content from Claude Code
syllago add --from claude-code
# Install content to Claude Code
syllago install my-rule --to claude-code
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Cline
> How syllago works with Cline.
[Source](/using-syllago/providers/cline/)
A VS Code extension for AI-assisted coding with support for rules, hooks, and MCP configurations.
## Provider Details
| Detail | Value |
| --------------------------- | ------------------------- |
| **Slug** | `cline` |
| **Config directory** | `.clinerules` |
| **Supported content types** | Rules, Hooks, MCP Configs |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------------------------- |
| Rules | Yes | Symlink |
| Hooks | Yes | Symlink (file-based executables) |
| MCP Configs | Yes | JSON merge |
| Skills | No | — |
| Agents | No | — |
| Commands | No | — |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | --------------------- | -------------------------- | -------- |
| Rules | `.clinerules/` | `~/Documents/Cline/Rules/` | Markdown |
| Hooks | `.clinerules/hooks/` | — | Markdown |
| MCP Configs | VS Code globalStorage | — | JSON |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ------------------------------------------- |
| Rules | `.clinerules/`, `~/Documents/Cline/Rules/` |
| Hooks | `.clinerules/hooks/` |
| MCP Configs | VS Code globalStorage (platform-aware path) |
## Format Notes
Cline’s MCP configuration is stored in VS Code’s `globalStorage` directory, which varies by platform. Syllago detects the correct path automatically.
Hooks in Cline are file-based executables in the `.clinerules/hooks/` directory, unlike the JSON-based hooks used by most other providers.
## Detection
Syllago detects Cline by checking for the `~/Documents/Cline/Rules` directory.
## Working with Cline
```bash
# Add content from Cline
syllago add --from cline
# Install content to Cline
syllago install my-rule --to cline
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Codex
> How syllago works with Codex.
[Source](/using-syllago/providers/codex/)
OpenAI’s CLI agent with support for rules, skills, agents, MCP, hooks, and commands.
## Provider Details
| Detail | Value |
| --------------------------- | --------------------------------------------------- |
| **Slug** | `codex` |
| **Config directory** | `~/.codex` |
| **Supported content types** | Rules, Skills, Agents, MCP Configs, Hooks, Commands |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Agents | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Hooks | Yes | File-based |
| Commands | Yes | Symlink |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | ------------------- | ------------------- | -------- |
| Rules | `AGENTS.md` | `~/.codex/` | Markdown |
| Skills | `.agents/skills/` | `~/.agents/skills/` | Markdown |
| Agents | `.codex/agents/` | `~/.codex/` | TOML |
| Hooks | `.codex/hooks.json` | `~/.codex/` | JSON |
| Commands | `.codex/commands/` | `~/.codex/` | Markdown |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ------------------- |
| Rules | `AGENTS.md` |
| Skills | `.agents/skills/` |
| Agents | `.codex/agents/` |
| Hooks | `.codex/hooks.json` |
| Commands | `.codex/commands/` |
## Format Notes
Codex uses **TOML** for agent configuration files, which is unique among providers. Syllago handles the conversion between TOML and other agent formats (Markdown, YAML) automatically. Rules and commands use standard Markdown.
## Detection
Syllago detects Codex by checking for the `~/.codex` directory or the `codex` command in PATH.
## Working with Codex
```bash
# Add content from Codex
syllago add --from codex
# Install content to Codex
syllago install my-skill --to codex
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Copilot CLI
> How syllago works with Copilot CLI.
[Source](/using-syllago/providers/copilot/)
GitHub’s CLI agent supporting rules, skills, agents, MCP, hooks, and commands.
## Provider Details
| Detail | Value |
| --------------------------- | --------------------------------------------------- |
| **Slug** | `copilot-cli` |
| **Config directory** | `~/.copilot` |
| **Supported content types** | Rules, Skills, Agents, MCP Configs, Hooks, Commands |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Agents | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Hooks | Yes | JSON merge |
| Commands | Yes | Symlink |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | ---------------------------------------------- | ---------------------- | -------- |
| Rules | `.github/copilot-instructions.md`, `AGENTS.md` | `~/.copilot/` | Markdown |
| Skills | `.github/skills/` | `~/.github/skills/` | Markdown |
| Agents | `.copilot/agents/`, `.github/agents/` | `~/.github/agents/` | Markdown |
| MCP Configs | `.copilot/mcp-config.json` | — | JSON |
| Hooks | `.github/hooks/` | — | JSON |
| Commands | `.copilot/commands/` | `~/.copilot/commands/` | Markdown |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ------------------------------------------------------------------- |
| Rules | `.github/copilot-instructions.md`, `AGENTS.md` |
| Skills | `.github/skills/` |
| Agents | `.copilot/agents/`, `.github/agents/`, `.claude/agents/` (fallback) |
| MCP Configs | `.copilot/mcp-config.json` |
| Hooks | `.github/hooks/` |
| Commands | `.copilot/commands/` |
## Detection
Syllago detects Copilot CLI by checking for the `~/.copilot` directory or the `gh` command in PATH.
## Working with Copilot CLI
```bash
# Add content from Copilot CLI
syllago add --from copilot-cli
# Install content to Copilot CLI
syllago install my-rule --to copilot-cli
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Cursor
> How syllago works with Cursor.
[Source](/using-syllago/providers/cursor/)
An AI-native code editor with broad content type support. Cursor uses MDC (Markdown Component) format for rule files.
## Provider Details
| Detail | Value |
| --------------------------- | --------------------------------------------------- |
| **Slug** | `cursor` |
| **Config directory** | `~/.cursor` |
| **Supported content types** | Rules, Skills, Agents, MCP Configs, Hooks, Commands |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Agents | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Hooks | Yes | JSON merge |
| Commands | Yes | Symlink |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | ------------------------------ | --------------------- | ------------ |
| Rules | `.cursor/rules/` | `~/.cursor/` | MDC (`.mdc`) |
| Skills | `.cursor/skills/` | `~/.cursor/skills/` | Markdown |
| Agents | `.cursor/agents/`, `AGENTS.md` | `~/.cursor/agents/` | Markdown |
| MCP Configs | `.cursor/mcp.json` | — | JSON |
| Hooks | `.cursor/settings.json` | — | JSON |
| Commands | `.cursor/commands/` | `~/.cursor/commands/` | Markdown |
## Discovery Paths
When adding content from Cursor, syllago looks in these locations:
| Content Type | Discovery Paths |
| ------------ | -------------------------------- |
| Rules | `.cursor/rules/`, `.cursorrules` |
| Skills | `.cursor/skills/` |
| Agents | `.cursor/agents/`, `AGENTS.md` |
| MCP Configs | `.cursor/mcp.json` |
| Hooks | `.cursor/settings.json` |
| Commands | `.cursor/commands/` |
## Format Notes
Cursor uses **MDC (Markdown Component)** format for rule files. MDC has a metadata header delimited by `---` containing fields like `description`, `globs`, and `alwaysApply`. Syllago converts between standard Markdown and MDC automatically.
Example MDC structure:
```plaintext
---
description: Rule description here
globs: "**/*.ts"
alwaysApply: false
---
Rule content in Markdown.
```
Other content types (skills, agents, commands) use standard Markdown. MCP and hooks are stored as JSON.
## Detection
Syllago detects Cursor by checking for the `~/.cursor` directory.
## Working with Cursor
```bash
# Add content from Cursor
syllago add --from cursor
# Install content to Cursor
syllago install my-rule --to cursor
# Check what converts cleanly to Cursor
syllago compat my-skill
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Gemini CLI
> How syllago works with Gemini CLI.
[Source](/using-syllago/providers/gemini-cli/)
Google’s CLI agent with full support for all six standard content types.
## Provider Details
| Detail | Value |
| --------------------------- | --------------------------------------------------- |
| **Slug** | `gemini-cli` |
| **Config directory** | `~/.gemini` |
| **Supported content types** | Rules, Skills, Agents, MCP Configs, Hooks, Commands |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Agents | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Hooks | Yes | JSON merge |
| Commands | Yes | Symlink |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | ------------------------------------ | --------------------- | -------- |
| Rules | `GEMINI.md` | `~/.gemini/` | Markdown |
| Skills | `.gemini/skills/`, `.agents/skills/` | `~/.gemini/skills/` | Markdown |
| Agents | `.gemini/agents/` | `~/.gemini/agents/` | Markdown |
| MCP Configs | `.gemini/settings.json` | — | JSON |
| Hooks | `.gemini/settings.json` | — | JSON |
| Commands | `.gemini/commands/` | `~/.gemini/commands/` | Markdown |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ----------------------------------------------- |
| Rules | `GEMINI.md` |
| Skills | `.gemini/skills/`, `.agents/skills/` (fallback) |
| Agents | `.gemini/agents/` |
| MCP Configs | `.gemini/settings.json` |
| Hooks | `.gemini/settings.json` |
| Commands | `.gemini/commands/` |
## Format Notes
Gemini CLI uses Markdown for text-based content types and JSON for structured configurations. Gemini CLI supports unique hook events (`before_model`, `after_model`, `before_tool_selection`) not available in other providers.
## Detection
Syllago detects Gemini CLI by checking for the `~/.gemini` directory.
## Working with Gemini CLI
```bash
# Add content from Gemini CLI
syllago add --from gemini-cli
# Install content to Gemini CLI
syllago install my-rule --to gemini-cli
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Kiro
> How syllago works with Kiro.
[Source](/using-syllago/providers/kiro/)
AWS’s AI IDE with support for rules, skills, agents, MCP configs, and hooks.
## Provider Details
| Detail | Value |
| --------------------------- | ----------------------------------------- |
| **Slug** | `kiro` |
| **Config directory** | `~/.kiro` |
| **Supported content types** | Rules, Skills, Agents, MCP Configs, Hooks |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Agents | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Hooks | Yes | JSON merge |
| Commands | No | — |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | -------------------------- | ----------------- | --------------------------- |
| Rules | `.kiro/steering/` | — | Markdown |
| Skills | `.kiro/steering/` | — | Markdown |
| Agents | `.kiro/agents/` | `~/.kiro/agents/` | Markdown (YAML frontmatter) |
| MCP Configs | `.kiro/settings/mcp.json` | — | JSON |
| Hooks | `.kiro/agents/` (embedded) | — | JSON |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ------------------------- |
| Rules | `.kiro/steering/` |
| Skills | `.kiro/steering/` |
| Agents | `.kiro/agents/` |
| MCP Configs | `.kiro/settings/mcp.json` |
| Hooks | `.kiro/agents/` |
## Format Notes
Kiro agents use **Markdown with YAML frontmatter** containing up to 14 fields. There is also a **JSON CLI agent format** with support for embedded MCP servers, per-tool settings, lifecycle hooks, and keyboard shortcuts.
Rules and skills are stored as Markdown “steering” files in `.kiro/steering/`. Hooks are embedded within agent JSON files rather than stored separately.
## Detection
Syllago detects Kiro by checking for the `~/.kiro` directory.
## Working with Kiro
```bash
# Add content from Kiro
syllago add --from kiro
# Install content to Kiro
syllago install my-rule --to kiro
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# OpenCode
> How syllago works with OpenCode.
[Source](/using-syllago/providers/opencode/)
A terminal-based AI coding tool supporting rules, skills, agents, MCP, and commands.
## Provider Details
| Detail | Value |
| --------------------------- | -------------------------------------------- |
| **Slug** | `opencode` |
| **Config directory** | `~/.config/opencode` |
| **Supported content types** | Rules, Skills, Agents, MCP Configs, Commands |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Agents | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Commands | Yes | Symlink |
| Hooks | No | — |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | --------------------------------- | ------------------------------ | -------- |
| Rules | `AGENTS.md`, `CLAUDE.md` | `~/.config/opencode/` | Markdown |
| Skills | `.opencode/skills/` | `~/.config/opencode/skills/` | Markdown |
| Agents | `.opencode/agents/` | `~/.config/opencode/agents/` | Markdown |
| MCP Configs | `opencode.json`, `opencode.jsonc` | — | JSONC |
| Commands | `.opencode/commands/` | `~/.config/opencode/commands/` | Markdown |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | --------------------------------- |
| Rules | `AGENTS.md`, `CLAUDE.md` |
| Skills | `.opencode/skills/` |
| Agents | `.opencode/agents/` |
| MCP Configs | `opencode.json`, `opencode.jsonc` |
| Commands | `.opencode/commands/` |
## Format Notes
OpenCode uses **JSONC** (JSON with comments) for MCP configurations. Syllago handles the conversion automatically. Rules are discovered from both `AGENTS.md` and `CLAUDE.md` files.
## Detection
Syllago detects OpenCode by checking for the `~/.config/opencode/` directory or the `opencode` command in PATH.
## Working with OpenCode
```bash
# Add content from OpenCode
syllago add --from opencode
# Install content to OpenCode
syllago install my-rule --to opencode
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Roo Code
> How syllago works with Roo Code.
[Source](/using-syllago/providers/roo-code/)
A VS Code extension supporting rules, skills, agents, and MCP configurations.
## Provider Details
| Detail | Value |
| --------------------------- | ---------------------------------- |
| **Slug** | `roo-code` |
| **Config directory** | `~/.roo` |
| **Supported content types** | Rules, Skills, Agents, MCP Configs |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Agents | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Hooks | No | — |
| Commands | No | — |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | --------------------------------- | ---------------- | -------- |
| Rules | `.roo/rules/`, `.roorules` | `~/.roo/rules/` | Markdown |
| Skills | `.roo/skills/`, `.agents/skills/` | `~/.roo/skills/` | Markdown |
| Agents | `.roomodes`, `.roo/` | — | YAML |
| MCP Configs | `.roo/mcp.json` | — | JSON |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Rules | `.roo/rules/`, `.roo/rules-code/`, `.roo/rules-architect/`, `.roo/rules-ask/`, `.roo/rules-debug/`, `.roo/rules-orchestrator/`, `.roorules`, `~/.roo/rules/` |
| Skills | `.roo/skills/`, `.agents/skills/` (fallback) |
| MCP Configs | `.roo/mcp.json` |
## Format Notes
Roo Code uses **mode-specific rule directories** (e.g., `rules-code/`, `rules-architect/`), which syllago discovers automatically. Agent configurations use YAML format.
## Detection
Syllago detects Roo Code by checking for the `~/.roo` directory.
## Working with Roo Code
```bash
# Add content from Roo Code
syllago add --from roo-code
# Install content to Roo Code
syllago install my-skill --to roo-code
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Windsurf
> How syllago works with Windsurf.
[Source](/using-syllago/providers/windsurf/)
An AI-native code editor from Codeium with support for rules, skills, hooks, and MCP configurations.
## Provider Details
| Detail | Value |
| --------------------------- | --------------------------------- |
| **Slug** | `windsurf` |
| **Config directory** | `~/.codeium/windsurf` |
| **Supported content types** | Rules, Skills, Hooks, MCP Configs |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| Skills | Yes | Symlink |
| Hooks | Yes | JSON merge |
| MCP Configs | Yes | JSON merge |
| Agents | No | — |
| Commands | No | — |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | -------------------------------------- | ----------------------------- | -------- |
| Rules | `.windsurfrules`, `.windsurf/rules/` | `~/.codeium/windsurf/` | Markdown |
| Skills | `.windsurf/skills/`, `.agents/skills/` | `~/.codeium/windsurf/skills/` | Markdown |
| Hooks | — | — | JSON |
| MCP Configs | — | — | JSON |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ------------------------------------------------- |
| Rules | `.windsurfrules`, `.windsurf/rules/` |
| Skills | `.windsurf/skills/`, `.agents/skills/` (fallback) |
## Detection
Syllago detects Windsurf by checking for the `~/.codeium/windsurf` directory.
## Working with Windsurf
```bash
# Add content from Windsurf
syllago add --from windsurf
# Install content to Windsurf
syllago install my-rule --to windsurf
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# Zed
> How syllago works with Zed.
[Source](/using-syllago/providers/zed/)
A high-performance editor with a built-in AI assistant, supporting rules and MCP configurations.
## Provider Details
| Detail | Value |
| --------------------------- | ------------------ |
| **Slug** | `zed` |
| **Config directory** | `~/.config/zed` |
| **Supported content types** | Rules, MCP Configs |
## Supported Content Types
| Content Type | Supported | Install Method |
| ------------ | --------- | -------------- |
| Rules | Yes | Symlink |
| MCP Configs | Yes | JSON merge |
| Skills | No | — |
| Agents | No | — |
| Hooks | No | — |
| Commands | No | — |
## File Format and Location
| Content Type | Project Location | Global Location | Format |
| ------------ | ---------------- | ----------------------------- | -------- |
| Rules | `.rules` | — | Markdown |
| MCP Configs | — | `~/.config/zed/settings.json` | JSON |
## Discovery Paths
| Content Type | Discovery Paths |
| ------------ | ------------------------------------- |
| Rules | `.rules`, `.cursorrules`, `CLAUDE.md` |
## Format Notes
Zed uses a different JSON key for MCP server definitions. Where most providers use `mcpServers`, Zed uses `context_servers`. Syllago handles this key mapping automatically.
Zed discovers rules from three file formats: `.rules`, `.cursorrules`, and `CLAUDE.md`.
## Detection
Syllago detects Zed by checking for the `~/.config/zed` directory or the `zed` command in PATH.
## Working with Zed
```bash
# Add content from Zed
syllago add --from zed
# Install content to Zed
syllago install my-rule --to zed
```
## See Also
* [Providers Overview](/using-syllago/providers.md)
* [Format Conversion](/using-syllago/format-conversion.md)
# .syllago.yaml Format
> Reference for the .syllago.yaml metadata file that accompanies every content item in your library.
[Source](/using-syllago/syllago-yaml/)
Every content item in your [library](/using-syllago/collections/library.md) has a `.syllago.yaml` file in its directory. This file tracks the item’s identity, provenance, and [type](/using-syllago/content-types.md) — syllago uses it to manage, inspect, and export content.
You rarely need to edit `.syllago.yaml` by hand. Syllago generates and maintains it automatically when you [`create`](/using-syllago/cli-reference/create.md), `add`, or sync content.
## Field Reference
| Field | Type | Required | Description |
| ----------------- | ----------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------ |
| `id` | string (UUID) | Yes | Unique identifier for this content item. |
| `name` | string | Yes | Human-readable name. Used in CLI output and directory naming. |
| `type` | string | Yes | Content type: `rules`, `skills`, `agents`, `hooks`, `commands`, or `loadouts`. |
| `source_format` | string | Conditional | Original file format (`md`, `json`, `toml`). Present for imported/synced content. |
| `source_type` | string | Conditional | How the content was acquired: `provider` or `created`. Present for imported/synced content. |
| `source_provider` | string | Conditional | Which provider the content came from (e.g., `claude-code`). Only present when `source_type` is `provider`. |
| `source_hash` | string | Conditional | SHA-256 hash of the original content, prefixed with `sha256:`. Used for change detection. |
| `has_source` | boolean | Conditional | Whether the original source file is preserved alongside the converted content. |
| `source` | string | Conditional | Alternate source descriptor. Used instead of `source_type`/`source_format` for locally created items (value: `created`). |
| `added_at` | string (ISO 8601) | Yes | Timestamp when the item was added to the library. |
| `added_by` | string | Yes | Who or what added the item — `syllago`, a version number like `0.6.1`, or a person’s name. |
**Conditional fields** appear based on how the content was acquired. Imported content has `source_format`, `source_type`, and usually `source_hash`. Locally created content uses `source: created` instead.
## Examples
### Rules (imported from a provider)
```yaml
id: 671fbd47-ce51-4d2b-8b4c-dc04fa4764d7
name: typescript
type: rules
source_format: md
source_type: provider
source_hash: sha256:9fa5fdb87b29dac26eb947717d8a0e0b39d8dc2268393f682f061097c0410206
added_at: 2026-03-16T17:09:06Z
added_by: syllago
```
Standard pattern for content pulled from a provider. The `source_hash` lets syllago detect when the upstream content has changed.
### Hooks (imported with source file preserved)
```yaml
id: 0e15bb54-3187-4673-9e2e-d1d44e40c951
name: settings
type: hooks
source_provider: claude-code
source_format: json
source_type: provider
has_source: true
added_at: 2026-03-05T22:08:18Z
added_by: 0.6.1
```
When `has_source` is `true`, the original file (here, a JSON file) is stored in the item’s directory alongside any converted versions. The `source_provider` field records which provider it came from.
### Loadouts (locally created)
```yaml
id: 3b9656ca-ce37-4146-aed6-5f67244688df
name: testing
type: loadouts
source: created
added_at: 2026-03-12T17:16:18Z
added_by: Holden Hewett
```
Content created with [`syllago create`](/using-syllago/cli-reference/create.md) uses `source: created` instead of the `source_type`/`source_format`/`source_hash` fields. The `added_by` field records the user who created it.
## Directory Layout
Each content item lives in its own directory within the library. The `.syllago.yaml` file sits alongside the actual content files:
```plaintext
library/
rules/
typescript/
.syllago.yaml
typescript.md
hooks/
settings/
.syllago.yaml
settings.json
loadouts/
testing/
.syllago.yaml
testing.yaml
```
The directory name matches the `name` field in `.syllago.yaml`. Content files use whatever format is appropriate for their [type](/using-syllago/content-types.md).
# The TUI
> How to navigate the syllago terminal user interface.
[Source](/using-syllago/tui/)
Running `syllago` with no arguments launches the interactive terminal user interface (TUI). It gives you a visual way to browse and manage your library, registries, and providers without memorizing CLI commands.
```sh
syllago
# or use the alias
syl
```
## What you can do
* Browse your library, registries, and providers in one place
* Install and uninstall content to/from providers
* Add content from providers
* Search and filter content with live results
* Inspect content details
## Keyboard shortcuts
### Navigation
| Key | Action |
| -------------- | ---------------------------------------- |
| Up/Down or j/k | Navigate lists and scroll |
| PgUp/PgDn | Jump a full viewport |
| Home/End | Jump to first/last item |
| Enter | Open item / confirm action |
| Esc | Go back one level |
| Tab/Shift+Tab | Switch focus between sidebar and content |
| Ctrl+N/Ctrl+P | Next/previous item in detail view |
### Actions
| Key | Action |
| --- | ---------------------------------------- |
| / | Search (live filtering with match count) |
| ? | Toggle keyboard shortcut help |
| i | Install selected item |
| u | Uninstall selected item |
| a | Add content (context-specific) |
| r | Remove item |
| c | Copy content to clipboard |
| H | Toggle hidden items |
## Mouse support
Click to select cards, items, tabs, breadcrumbs, and modal buttons. The scroll wheel works in all scrollable areas.
## TUI vs CLI
The TUI and CLI are equivalent — anything you can do in the TUI, you can do with [CLI commands](/using-syllago/cli-reference.md). The TUI is for interactive exploration; the CLI is for scripting and automation (`--json` output on all commands).
## Accessibility
For screen reader users, CLI commands with `--json` output are recommended. Colors can be disabled with `NO_COLOR=1` or `--no-color`.