Skip to content

Workflows

Adding a skill from a file

To add a ready-made skill to your inventory:

bash
aiman add skill path/to/skill.md

If a file with that name already exists in the inventory with different content:

bash
aiman add skill path/to/skill.md --overwrite    # overwrite
aiman add skill path/to/skill.md --name new-name  # save under a different name

From stdin:

bash
cat skill.md | aiman add skill -

After adding, run aiman push to publish the change.

Adding an MCP server from a file

To add an MCP server configuration to your inventory:

bash
aiman add mcp path/to/server.yaml

If a file with that name already exists in the inventory with different content:

bash
aiman add mcp path/to/server.yaml --overwrite    # overwrite
aiman add mcp path/to/server.yaml --name new-name  # save under a different name

From stdin:

bash
cat server.yaml | aiman add mcp -

If the input file contains value fields in the env block, AIM automatically moves them to aim.local.yaml and does not write them to mcp/<name>.yaml. This ensures secrets never end up in Git.

After adding, run aiman push to publish the change.

Importing a skill from an AI environment

If a skill is already installed in one of your AI environments, you can import it directly:

bash
aiman import skill hello --from claude-code
aiman import skill review-code --from codex

Preview the content without writing:

bash
aiman import skill hello --from claude-code --dry-run

Supported sources: claude-code, cursor, codex.

Cursor does not store skills natively — --from cursor always returns an empty result.

After adding, run aiman push to publish the change.

Importing an MCP server from an AI environment

If an MCP server is already configured in one of your AI environments, you can import it directly:

bash
aiman import mcp context7 --from claude-code
aiman import mcp jira --from cursor

Preview the content without writing:

bash
aiman import mcp context7 --from claude-code --dry-run

Import and set all three AI environments as targets:

bash
aiman import mcp context7 --from claude-code --targets all

Supported sources: claude-code, cursor, codex.

AIM reads the live configuration of the specified environment, extracts the MCP server descriptor, and applies env-strip: real env variable values are written to aim.local.yaml, while only descriptors without secrets go to the inventory and Git.

If a server with that name already exists in the inventory with different content, the command fails. To overwrite, use --overwrite:

bash
aiman import mcp context7 --from claude-code --overwrite

After adding, run aiman push to publish the change.

Local iteration: edit → apply → test

Use aiman apply when you want to test a change before publishing.

bash
$EDITOR skills/review-code.md
aiman apply

What apply does:

  • reads local skills/ and mcp/;
  • validates items;
  • applies valid items to detected AI environments;
  • does not commit;
  • does not contact the remote;
  • does not update published_hash or synced_hash.

This cycle is intended for skill development: edit, apply, check in your AI tool, edit again. Most AI environments read skills at session start — after aiman apply, restart the agent session to pick up the changes.

Publishing: status → push

When a local change is ready:

bash
aiman status
aiman push

status shows the state of managed files. push validates the inventory, creates a commit, and pushes it to the remote repository.

push --dry-run shows the publish plan without writing to Git:

bash
aiman push --dry-run

Moving to another machine: init → sync

On a new machine:

bash
aiman init git@github.com:you/aim-loadout.git
aiman sync

sync runs a Git fetch, verifies history, fetches the published state, and applies it to the local AI environments.

Protecting against lost changes

sync is blocked if local changes might be overwritten.

bash
aiman sync
# error: local changes detected ...

Options:

  • publish changes via aiman push;
  • manually save or discard local changes;
  • use aiman sync --force if you can afford to lose the local changes.

History states

After fetch, AIM distinguishes several situations:

StateBehavior
Local is already equal to remoteapply inventory without reset
Local is behind remotefast-forward reset and apply
Local has unpublished commitsstop and ask for aiman push
History has divergedstop and ask for manual Git recovery

When to use which command

TaskCommand
Add a skill from a fileaiman add skill <file>
Add an MCP server from a fileaiman add mcp <file>
Import a skill from an AI environmentaiman import skill <name> --from <env>
Preview a skill without writingaiman import skill <name> --from <env> --dry-run
Import an MCP server from an AI environmentaiman import mcp <name> --from <env>
Preview an MCP descriptor without writingaiman import mcp <name> --from <env> --dry-run
Test a local skill without publishingaiman apply
See what has changedaiman status
Publish the ready inventoryaiman push
Apply published inventory on a machineaiman sync
Check environment and configsaiman doctor

Released under the Apache 2.0 License.