Skip to documentation

Agent skill

The portable fast-forward-config skill supports fast-forward/config ^1.7 on PHP 8.3+. Earlier versions are outside this supported contract. Inspect the application's installed package before using its guidance; do not upgrade production dependencies solely to obtain instructions.

Composer distributions include the complete package at vendor/fast-forward/config/resources/skills/fast-forward-config : SKILL.md , references, executable examples and MIT LICENSE . Shipping files, copying them into a discovery root and activating a skill in an agent session are separate steps. Composer suggestions are not installed automatically.

Project scope is the default for reviewable team configuration. Global copies remain an explicit consumer choice. Record the package version or immutable source revision and preserve the application's existing discovery configuration.

Optional Composer project synchronization

The optional llm/skills plugin is development tooling. Config only advertises extra.skills.source: resources/skills and suggests the plugin; it does not require, enable or grant approval to it.

For a new consumer setup, create skills.json before installing or enabling the plugin and before its first sync :

{
  "target": ".agents/skills",
  "aliases": [],
  "discovery": false,
  "auto-sync": true,
  "vendor-sources": false,
  "dependencies": {
    "composer": {
      "trusted": ["fast-forward/config"],
      "trusted-replace": true
    }
  }
}

This narrowly selects Config, replaces implicit dependency trust and disables remote vendor sources. aliases: [] requests no additional host-directory links. Merge these choices into existing configuration: preserve deliberate aliases, unrelated dependencies and plugin approvals. A team may intentionally trust fast-forward/* , but that broader trust is not required. Claude Code-only consumers can select .claude/skills as the target.

With authority to install and approve this project plugin, run:

composer config allow-plugins.llm/skills true
composer require --dev 'llm/skills:^1.15'
composer skills:show

Plugin approval allows Composer to execute code; the donor library cannot grant it on the consumer's behalf. Preserve other allow-plugins entries. Noninteractive approval must already be explicit. Commit the intended composer.json , lockfile and skills.json according to project policy. Approved install/update runs synchronize trusted installed donors without an additional post-install hook.

For deliberate synchronization only, set auto-sync: false before installing the plugin, then inspect and apply:

composer skills:show
composer skills:update fast-forward/config --dry-run
composer skills:update fast-forward/config

Naming a donor selects/trusts it for that run; it does not test the automatic allowlist policy. For one install/update invocation, use --no-plugins to disable plugin-driven synchronization. --no-scripts skips scripts defined in composer.json; it does not disable plugins. Keep auto-sync: false for an explicit-sync policy with plugin commands available. See Composer's global options. Recheck behavior when changing tool versions and inspect copied bytes as well as exit status.

Synchronization ownership and removal

Ordinary llm/skills 1.15 synchronization merges into the destination:

  • Incoming same-path files overwrite local edits.
  • Extra local files and files removed upstream remain.
  • Removing the donor or plugin leaves existing skill copies behind.
  • A missing or moved donor path does not remove an old installed copy.

Treat the copied package as donor-managed. Make durable edits in the donor or a separately named consumer-owned skill. Inspect diffs after library/tool updates.

Cleanup is separate and potentially destructive. Preview first:

composer skills:update --clean --dry-run

An unscoped clean can delete every skill in the target, including handwritten ones. Noninteractive execution must not be assumed to prompt. A scoped clean only reinstalls the donors selected by that run; it cannot identify an already removed donor. Inventory affected packages and archive exact stale directories outside discovery before authorized cleanup. Do not add a blanket cleanup hook.

Manual project/global installation

Choose one source and destination from the consumer project root:

skill_source="vendor/fast-forward/config/resources/skills/fast-forward-config"
skill_target=".agents/skills/fast-forward-config"
# Explicit global Codex alternative:
# skill_target="$HOME/.agents/skills/fast-forward-config"
# Claude Code: .claude/skills, or its explicit home counterpart.

test -f "$skill_source/SKILL.md" &&
test ! -e "$skill_target" &&
test ! -L "$skill_target" &&
mkdir -p "$(dirname "$skill_target")" &&
cp -R "$skill_source" "$skill_target"

The guards refuse an existing destination or dangling symlink. A missing source calls for inspecting the installed version/archive; do not create an empty placeholder. A reviewed checkout or immutable revision containing the complete package is another source choice.

Agent Project Global
Codex .agents/skills/ ~/.agents/skills/
Claude Code .claude/skills/ ~/.claude/skills/

Honor the host's configured paths and avoid ambiguous duplicates. See the Codex skills guide and Claude Code skills guide. The portable package needs no host adapter.

For update or removal, archive only the selected current package outside every discovery directory. With the same skill_target :

skill_backup="$HOME/.agent-skill-backups/fast-forward-config-$(date +%Y%m%d%H%M%S)-$$"
test -d "$skill_target" &&
test ! -L "$skill_target" &&
test ! -e "$skill_backup" &&
test ! -L "$skill_backup" &&
mkdir -p "$(dirname "$skill_backup")" &&
mv "$skill_target" "$skill_backup"

Moving it out removes a manual copy from discovery. Review the new source and repeat the guarded copy for an update. For rollback, first archive any replacement, then restore the complete saved package to its original path and refresh the session. Never keep backups under .agents/skills or .claude/skills . Installer-managed copies can return on the next sync until donor/trust configuration changes.

Installing the Composer plugin globally does not install skill files globally: the tool still operates on a selected project/target. Explicit manual or Skills CLI global copies have their own lifecycle.

Optional Skills CLI

The Skills CLI is development tooling, not a PHP runtime dependency. These commands pin skills@1.7.2 and require Node.js 22.20.0+ and npm; repository sources also require Git. Review a new CLI version before changing the pin.

npx --yes skills@1.7.2 add ./vendor/fast-forward/config/resources/skills/fast-forward-config --skill fast-forward-config --agent codex --copy --yes
npx --yes skills@1.7.2 list --agent codex

Choose the actual host, such as --agent claude-code . Add --global explicitly to both commands for global installation. --copy avoids a symlink into replaceable Composer vendor content. Commit project copies and intended CLI lockfiles.

For a repository source, set SKILL_REF to its reviewed full commit SHA first:

npx --yes skills@1.7.2 add "https://github.com/php-fast-forward/config/tree/$SKILL_REF/resources/skills/fast-forward-config" --skill fast-forward-config --agent codex --copy --yes

For updates, review a new immutable revision and repeat with that source; update-to-latest is a separate choice. Back up local edits before replacement. Remove only the selected scope/name:

npx --yes skills@1.7.2 remove fast-forward-config --agent codex --yes
# Explicit global alternative:
npx --yes skills@1.7.2 remove fast-forward-config --agent codex --global --yes

Verify installation and use

Inspect the installed package, refresh the agent session and confirm discovery of fast-forward-config . Ask for a small configuration task and check its result. A file copy, CLI listing, live host activation and a successful task are different observations.

The examples accept the application's Composer autoloader:

php vendor/fast-forward/config/resources/skills/fast-forward-config/examples/application.php ./vendor/autoload.php

The other programs are composition.php , sources.php , caching.php and containers.php . They use explicit comparisons and the repository's PHPUnit integration coverage. File examples use private temporary fixtures. The cache fixture records TTLs without implementing expiration. Optional Container integration clearly reports when its dependency is absent.

First-party references: llm/skills 1.15.0, Composer suggestions and plugin approval.

Search results