PHPackages                             thinkliveid/crew - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [CLI &amp; Console](/categories/cli)
4. /
5. thinkliveid/crew

ActiveLibrary[CLI &amp; Console](/categories/cli)

thinkliveid/crew
================

A PHP CLI tool for managing AI agent skills, guidelines, and MCP configurations across multiple IDE coding assistants.

v1.1.11(2mo ago)213↓92.9%MITPHPPHP ^8.3CI passing

Since Feb 24Pushed 2mo agoCompare

[ Source](https://github.com/thinkliveid/crew)[ Packagist](https://packagist.org/packages/thinkliveid/crew)[ Docs](https://github.com/thinkliveid/crew)[ RSS](/packages/thinkliveid-crew/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (12)Versions (17)Used By (0)

Crew
====

[](#crew)

A PHP CLI tool for managing AI agent skills, sub-agents, and slash commands across multiple IDE coding assistants.

Crew discovers which AI agents are installed on your system, downloads resources from GitHub repositories, syncs local definitions, and writes configurations to the correct agent-specific directories — all from a single command.

Requirements
------------

[](#requirements)

- PHP 8.3+
- Composer

Installation
------------

[](#installation)

```
composer require thinkliveid/crew
```

Quick Start
-----------

[](#quick-start)

```
# One-shot setup: install skills and sub-agents together
crew init

# Refresh everything from saved config in one pass
crew sync

# Or run a single resource type
crew install:skill

# Create a new skill from scratch
crew new:skill

# Add skills from a GitHub repository
crew add:skill owner/repo

# Update all configured skills to the latest version
crew update:skill
```

Supported Agents
----------------

[](#supported-agents)

Crew auto-detects the following AI coding assistants on your system and in your project:

AgentSkills PathMCP Config PathClaude Code`.claude/skills``.mcp.json`Cursor`.cursor/skills``.cursor/mcp.json`GitHub Copilot`.github/skills``.vscode/mcp.json`Gemini CLI`.agents/skills``.gemini/settings.json`Junie`.junie/skills``.junie/mcp/mcp.json`Codex`.agents/skills``.codex/config.toml`OpenCode`.agents/skills``opencode.json`When you run `crew install:skill`, only detected agents are shown for selection. Resources are written to the correct paths for each selected agent.

Commands
--------

[](#commands)

Crew organises commands into four groups across three resource types, plus top-level `init` and `sync` commands that run installers/updaters in one pass:

SkillsSub-agentsCommands**new**`new:skill``new:subagent``new:command`**install**`install:skill``install:subagent``install:command`**add**`add:skill``add:subagent``add:command`**update**`update:skill``update:subagent``update:command`### `init` — Install everything at once

[](#init--install-everything-at-once)

Runs `install:skill` and `install:subagent` in sequence. The first step performs agent detection and saves the selection to `crew.json`; the second reuses that selection, so you're only prompted for agents once.

```
crew init

# Non-interactive: uses saved/auto-detected agents, skips all prompts
crew init --no-interaction
```

### `sync` — Update everything at once

[](#sync--update-everything-at-once)

Runs `update:skill`, `update:subagent`, and `update:command` in sequence. Each step reuses the agents saved in `crew.json` and refreshes local resources plus any configured GitHub sources.

```
crew sync
```

### `new:*` — Scaffold a new resource locally

[](#new--scaffold-a-new-resource-locally)

Create a new skill, sub-agent, or slash command definition from scratch with an interactive prompt.

```
# Interactive — prompts for name and description
crew new:skill
crew new:subagent
crew new:command

# Provide the name upfront to skip the name prompt
crew new:skill my-skill
crew new:subagent my-agent
crew new:command my-command
```

Generated files:

CommandOutput`new:skill``.ai/skills/{name}/SKILL.md``new:subagent``.ai/agents/{name}.md``new:command``.ai/commands/{name}.md`Names must be lowercase alphanumeric with hyphens (1–64 chars, no leading/trailing/consecutive hyphens). `new:subagent` also prompts for a model choice (`sonnet`, `opus`, `haiku`, or `inherit`).

### `install:*` — Full setup flow

[](#install--full-setup-flow)

Runs the complete setup: detect agents, select them, sync local resources, and install from GitHub.

```
crew install:skill
crew install:subagent
crew install:command
```

Non-interactive mode (uses auto-detected agents, skips prompts):

```
crew install:skill --no-interaction
```

### `add:*` — Add from a GitHub repository

[](#add--add-from-a-github-repository)

Discover and install resources from a GitHub repository. The repository is saved to `crew.json` for future installs and updates.

```
# Interactive — prompts for repository if not provided
crew add:skill
crew add:subagent
crew add:command

# Direct — provide the repository
crew add:skill owner/repo
crew add:subagent owner/repo
crew add:command owner/repo

# Full GitHub URL with branch and subdirectory
crew add:skill https://github.com/owner/repo/tree/main/path/to/skills
```

### `update:*` — Update to the latest version

[](#update--update-to-the-latest-version)

Re-runs the install flow in non-interactive mode to refresh all local and GitHub resources.

```
crew update:skill
crew update:subagent
crew update:command
```

Configuration
-------------

[](#configuration)

Crew stores its configuration in `crew.json` at the project root:

```
{
    "agents": ["claude_code", "junie"],
    "skills": ["owner/repo"],
    "subagents": ["owner/repo"],
    "commands": ["owner/repo"]
}
```

KeyTypeDescription`agents``string[]`Selected agent identifiers`skills``string[]`GitHub repositories to install skills from`subagents``string[]`GitHub repositories to install sub-agents from`commands``string[]`GitHub repositories to install slash commands from`guidelines``bool`Whether guideline writing is enabled`mcp``bool`Whether MCP configuration is enabled`github_token``string`GitHub API token for private repositories### GitHub Authentication

[](#github-authentication)

For private repositories or to avoid API rate limits, set a GitHub token:

```
{
    "github_token": "ghp_your_token_here"
}
```

Or use an environment variable:

```
export GITHUB_TOKEN=ghp_your_token_here
```

Project Structure
-----------------

[](#project-structure)

### Local Resources

[](#local-resources)

Place resources in your project's `.ai/` directory:

```
.ai/
  skills/
    my-skill/
      SKILL.md
      other-files...
  agents/
    my-agent.md
eq  commands/
    my-command.md

```

Running `crew install:skill` copies skills from `.ai/skills/` to each selected agent's skill directory (e.g., `.claude/skills/my-skill/`, `.junie/skills/my-skill/`). The same pattern applies to sub-agents and slash commands.

### Remote Resources (GitHub)

[](#remote-resources-github)

Crew discovers resources in GitHub repositories by traversing the repo tree and looking for marker files (`SKILL.md`, agent markdown files, slash-command markdown files).

Architecture
------------

[](#architecture)

Crew is built with a contract-driven architecture. Each agent implements interfaces that define its capabilities:

- **SupportsSkills** — agent can receive skill files
- **SupportsSubAgents** — agent can receive sub-agent definitions
- **SupportsCommands** — agent can receive slash command files
- **SupportsGuidelines** — agent can receive guideline files
- **SupportsMcp** — agent can receive MCP server configurations

The detection system uses a strategy pattern to discover agents:

- **DirectoryDetectionStrategy** — checks for directories/paths (supports glob patterns)
- **FileDetectionStrategy** — checks for specific files in the project
- **CommandDetectionStrategy** — runs shell commands to detect installed tools
- **CompositeDetectionStrategy** — combines multiple strategies with OR logic

Running in a Container (Claude on Host)
---------------------------------------

[](#running-in-a-container-claude-on-host)

If `crew` runs inside a container but the AI agent (e.g. Claude Code) is installed on the host, the container's `command -v claude` won't see the host binary. The fix is to **bind-mount the host's binary and config into the container** so `command -v claude` resolves and crew's system detection passes.

### Find the host paths first

[](#find-the-host-paths-first)

```
which claude          # e.g. /Users/you/.npm-global/bin/claude
ls ~/.claude          # config, settings, credentials
```

### docker-compose.yml

[](#docker-composeyml)

```
services:
  app:
    image: php:8.3-cli
    working_dir: /workspace
    volumes:
      - .:/workspace
      # Claude config (settings, session, credentials)
      - ${HOME}/.claude:/root/.claude
      # Binary into a directory on container PATH
      - ${HOME}/.npm-global/bin/claude:/usr/local/bin/claude:ro
      # If installed via npm, mount its node_modules so the wrapper resolves
      - ${HOME}/.npm-global/lib/node_modules:/usr/local/lib/node_modules:ro
    environment:
      # Optional: macOS Keychain auth doesn't survive into a Linux container.
      # Use an API key, or run `claude /login` once inside the container.
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
```

### `docker run` one-liner

[](#docker-run-one-liner)

```
docker run --rm -it \
  -v "$PWD:/workspace" -w /workspace \
  -v "$HOME/.claude:/root/.claude" \
  -v "$(which claude):/usr/local/bin/claude:ro" \
  -v "$HOME/.npm-global/lib/node_modules:/usr/local/lib/node_modules:ro" \
  php:8.3-cli bash
```

### `.devcontainer/devcontainer.json`

[](#devcontainerdevcontainerjson)

```
{
  "image": "mcr.microsoft.com/devcontainers/php:8.3",
  "mounts": [
    "source=${localEnv:HOME}/.claude,target=/home/vscode/.claude,type=bind",
    "source=${localEnv:HOME}/.npm-global/bin/claude,target=/usr/local/bin/claude,type=bind,readonly",
    "source=${localEnv:HOME}/.npm-global/lib/node_modules,target=/usr/local/lib/node_modules,type=bind,readonly"
  ],
  "containerEnv": {
    "ANTHROPIC_API_KEY": "${localEnv:ANTHROPIC_API_KEY}"
  }
}
```

### Notes

[](#notes)

- The container must have **Node.js** available — `claude` is a Node CLI. Use a base image with Node, or install it in your Dockerfile.
- Mount targets must match the container user's `$HOME`: `/root/...` for root images, `/home/vscode/...` for the Microsoft devcontainer images.
- **macOS quirk**: when you log in via `claude /login` on a macOS host, credentials may live in the Keychain rather than `~/.claude/.credentials.json`. Bind-mounting `~/.claude` won't carry those credentials into a Linux container — set `ANTHROPIC_API_KEY` in the container env, or run `claude /login` once from inside the container so credentials land in the mounted file.
- Once the mounts are active, `command -v claude` succeeds inside the container and `crew install:skill` detects `claude_code` with no code changes.

If you can't bind-mount the binary, you can still tell crew which agents are present by listing them in `crew.json` and passing `--skip-detection`:

```
crew install:skill --skip-detection
```

License
-------

[](#license)

MIT

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance86

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

16

Last Release

70d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/34b982b41bb191ec0ffe4ca720efe890dddef5204feeefa763dc1a24feee8cdb?d=identicon)[purwantoid](/maintainers/purwantoid)

![](https://www.gravatar.com/avatar/9a03748e2f386da58d91eb04740ae9949b196be6e0a8f2fed253ec7ba0c7a44a?d=identicon)[smallerid](/maintainers/smallerid)

---

Top Contributors

[![thinkliveid](https://avatars.githubusercontent.com/u/202394371?v=4)](https://github.com/thinkliveid "thinkliveid (17 commits)")

---

Tags

phpclisymfonymcpaislimcodexcursornativeagentsskillsGeminicopilotopencodeclaudeJunie

### Embed Badge

![Health badge](/badges/thinkliveid-crew/health.svg)

```
[![Health](https://phpackages.com/badges/thinkliveid-crew/health.svg)](https://phpackages.com/packages/thinkliveid-crew)
```

###  Alternatives

[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

21866.0M1.7k](/packages/drupal-core)[tempest/framework

The PHP framework that gets out of your way.

2.2k34.4k15](/packages/tempest-framework)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6942.5M420](/packages/drupal-core-recommended)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k5.9M736](/packages/sylius-sylius)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.6M574](/packages/shopware-core)[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.7k38.9k](/packages/matomo-matomo)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
