Skip to content

Configuration reference ​

boost.php returns a BoostConfigBuilder. Put it in the repository root, or in .config/boost.php if you prefer to keep the root clean. Declaring both is an error.

php
<?php declare(strict_types=1);

use SanderMuller\BoostCore\Config\BoostConfig;
use SanderMuller\BoostCore\Enums\Agent;
use SanderMuller\BoostCore\Enums\Tag;

return BoostConfig::configure()
    ->withAgents([Agent::CLAUDE_CODE, Agent::CURSOR])
    ->withAllowedVendors(['sandermuller/boost-skills'])
    ->withTags([Tag::Php]);

Run vendor/bin/boost install to scaffold the file and pick the agents, the vendor allowlist, and the tags interactively.

Setter semantics ​

Every with*() method replaces its collection, so calling one twice keeps only the last call. withSkillRenderers() is the exception: it accumulates. withTags() also normalizes and de-duplicates, and withRemoteSkills() rejects a duplicate (source, version, mode) entry.

Methods ​

MethodDefaultWhat it does
withAgents(list<Agent>)[]The agents that receive files. Nothing is emitted until you name at least one
withAllowedVendors(list<string>)[]Composer packages allowed to supply skills and guidelines, as vendor/package
withTags(list<Tag|string>)[]The topic tags this project wants. A vendor skill ships only when every tag it declares is listed here
withExcludedSkills(list<string>)[]Drop specific vendor skills regardless of tags, as vendor/package:skill-name
withExcludedGuidelines(list<string>)[]The guideline counterpart, as vendor/package:guideline-name. The only lever for an untagged vendor guideline
withRemoteSkills(list<RemoteSkillSource>)[]Non-Composer sources: GitHub .skill release bundles, or cherry-picked subdirectories
withConventions(array)[]Project Conventions slot values that vendor skills read at agent-read time
withSkillRenderers(list<SkillRenderer>)passthrough onlyTemplate renderers for non-.md skill files. Accumulates across calls
withDisabledRenderers(list<string>)[]Drop a renderer by class name. Listing the passthrough renderer is a no-op
withDisabledEmitters(list<string>)[]Skip an emitter class during sync
withGitignoreManagement(bool)trueWhether boost maintains its managed block in .gitignore
withSkillsPath(string).ai/skillsWhere host skills are read from
withGuidelinesPath(string).ai/guidelinesWhere host guidelines are read from
withCommandsPath(string).ai/commandsWhere host command templates are read from
withSubagentsPath(string).ai/subagentsWhere host subagent definitions are read from

Agents ​

Agent is an enum, so your IDE completes the list:

Agent::CLAUDE_CODE, Agent::CURSOR, Agent::COPILOT, Agent::CODEX, Agent::GEMINI, Agent::JUNIE, Agent::KIRO, Agent::OPENCODE, Agent::AMP, Agent::ANTIGRAVITY.

De-selecting an agent reaps the files it owned on the next sync. See File ownership.

Tags ​

Tag cases give you autocompletion, and raw strings are accepted because the vocabulary is open:

php
->withTags([Tag::Php, 'jira'])

vendor/bin/boost tags lists every tag your installed packages declare, and what each one would unlock. The filtering rule is in Tags and dependencies.

User-scope selection ​

boost sync --scope=user reads no boost.php. It reads ~/.boost/user-scope.php instead, which picks the skills each globally installed package publishes:

php
<?php

return [
    'skills' => [
        'sandermuller/boost-skills' => ['interview', 'promptimize'],
        'acme/noisy-tools' => [],
    ],
];
EntryEffect
No entry for a packageEvery skill it ships
A list of namesThose skills, plus their metadata.boost-requires dependencies from the same package
[]No skills. The package's user-scope guidelines are not affected

The rules and the -user layout are in Automating sync.