Customization¶
How to customize agentic for individual projects without modifying the shared library.
Local Profile¶
When you deploy a profile, a copy is saved to .agentic/profile.yaml. This is your project's own configuration that you can edit freely.
If you want to start from scratch without a predefined profile, scaffold the local agentic workspace first:
This creates .agentic/config.yaml, .agentic/profile.yaml,
.agentic/mcp.yaml, .agentic/providers.yaml, and .agentic/project-skills/.
What You Can Customize¶
- Add or remove fragments
- Add or remove skills (including
project:prefixed skills) - Modify
tech_stack(languages, frameworks, proprietary libraries) - Change build/test/lint commands
- Adjust tier configuration (for nested projects)
Regenerating After Changes¶
After editing .agentic/profile.yaml, regenerate your project:
This re-runs compose with your local profile, regenerates vendor files, and preserves your active vendors.
Providers Configuration¶
Optional provider preferences live in .agentic/providers.yaml:
# yaml-language-server: $schema=https://raw.githubusercontent.com/soulcodex/agentic/main/schemas/providers.schema.json
version: "1"
default_provider: "claude"
providers:
claude:
enabled: true
cursor:
enabled: true
Behavior:
- If
.agentic/providers.yamlis missing, default provider behavior applies. - If present but invalid,
agentic composeandagentic syncfail with a clear error. - This file influences runtime pivot preferences only;
AGENTS.mdremains canonical. - Cursor provider/model mapping is intentionally unsupported until Cursor publishes an official project-local contract for that configuration surface.
MCP Configuration (Pivot Model)¶
Project MCP declarations live in .agentic/mcp.yaml:
# yaml-language-server: $schema=https://raw.githubusercontent.com/soulcodex/agentic/main/schemas/mcp.schema.json
strategy: merge
servers:
github:
type: stdio
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
agentic sync and agentic compose seed vendor MCP outputs from this file:
.mcp.json(Claude shape)opencode.json(mcpblock translation).gemini/settings.json(mcpServerstranslation).cursor/mcp.json(mcpServerstranslation)
If .agentic/mcp.yaml is missing, MCP outputs are not seeded.
Local vs Issue-Backed Planning¶
Plan persistence supports two modes:
- Local-file mode:
write-plan/persist-planstore plans in.agentic/plans/. - Issue-backed mode:
github-issue-planningstores and updates a managed comment on a GitHub issue.
For issue-backed planning, use this decision order:
- GitHub MCP (preferred) when available/configured.
ghCLI fallback when MCP is unavailable or misconfigured.- Local-file fallback only when GitHub persistence is unavailable (or not desired).
Prerequisites for issue-backed mode:
- Issue URL or issue number with repository context.
- MCP configured with GitHub access, or authenticated
gh(gh auth status). - Permissions to read/write issue comments in the target repository.
Project-Local Skills¶
For skills specific to a single project that shouldn't live in the shared library,
create them in .agentic/project-skills/:
Create .agentic/project-skills/my-custom-workflow/SKILL.md:
---
name: my-custom-workflow
description: >
Project-specific deployment workflow for this repo.
version: 1.0.0
tags: [deployment, internal]
resources: []
vendor_support:
claude: native
opencode: native
copilot: prompt-inject
codex: prompt-inject
gemini: prompt-inject
---
## Steps
1. Run pre-deploy checks: `make verify`
2. Build the artifact: `make build`
3. Deploy to staging: `make deploy-staging`
4. Run smoke tests: `make smoke-test`
Reference it in your profile:
# In .agentic/profile.yaml
skills:
- code-review # from library
- project:my-custom-workflow # from .agentic/project-skills/
Or deploy with it directly:
Project skills are copied to .agentic/skills/ alongside library skills and
symlinked to vendor-specific paths just like regular skills.
Example: Use a Library Skill for Parallel Branch Work¶
Enable the shared git-worktree-workspaces skill in your local profile:
Then regenerate:
Declare Proprietary Libraries¶
List internal packages that agents need to be aware of. Agents are told to load the relevant documentation before making changes to code that uses these packages.
Project-wide¶
Declared in tech_stack in .agentic/profile.yaml — appears in the root AGENTS.md:
tech_stack:
proprietary_libraries:
- name: "@acme/core"
description: "Core domain primitives shared across all services"
url_doc: "https://docs.acme.internal/core" # optional
Tier-specific (nested profiles only)¶
Declared under the relevant tier — appears in that tier's AGENTS.md:
tiers:
backend:
proprietary_libraries:
- name: "@acme/domain-kit"
description: "Backend domain helpers"
url_doc: "https://docs.acme.internal/domain-kit"
url_doc is optional. When omitted the Docs column in AGENTS.md shows —.
When to Use What¶
| Need | Solution |
|---|---|
| Customize one project | Edit .agentic/profile.yaml, run agentic sync |
| Reusable skill for one project | Create in .agentic/project-skills/ (see above) |
| Shared across all projects | Add to library (see Contributing guide) |
What to Commit to Your Project Repo¶
agentic automatically injects a managed .gitignore block on every deploy or sync
so you never have to figure this out manually. The block is delimited by
# agentic:start / # agentic:end and is updated in-place on re-runs.
What goes in and what stays out depends on whether you deployed with --link or not.
Copy mode (default)¶
.agentic/skills/, .agentic/fragments/, and .agentic/vendor-files/ contain real
files copied from the library. They are committed to the repo so the project is
self-contained and cloneable without the library installed on every machine.
Link mode (--link)¶
Those same directories are symlinks pointing to the library on the deploying machine. Committing a symlink to an absolute local path breaks every other machine, so they are gitignored automatically.
What this means for your repo¶
| Path | Copy mode | Link mode | Why |
|---|---|---|---|
AGENTS.md |
✅ commit | ✅ commit | Source of truth — review in PRs |
.agentic/config.yaml |
✅ commit | ✅ commit | Reproducibility anchor |
.agentic/profile.yaml |
✅ commit | ✅ commit | Per-project customization |
.agentic/mcp.yaml |
✅ commit | ✅ commit | MCP source-of-truth for seeding |
.agentic/project-skills/ |
✅ commit | ✅ commit | Your code — treat as source |
.agentic/skills/ |
✅ commit | 🚫 ignore | Real files vs symlink to library |
.agentic/fragments/ |
✅ commit | 🚫 ignore | Real files vs symlink to library |
.agentic/vendor-files/ |
✅ commit | 🚫 ignore | Real files vs symlink to library |
CLAUDE.md, GEMINI.md, vendor symlinks |
🚫 ignore | 🚫 ignore | Always recreated by agentic sync / agentic switch |
Note: vendor entry-point files (
CLAUDE.md,.github/copilot-instructions.md,.gemini/system.md,.cursor/rules, etc.) are always gitignored in both modes — they are always regenerated and have no standalone value in git history.For Cursor specifically,
agentic switch cursorreads.agentic/vendor-files/cursor/switch-manifest.jsonand manages all declared Cursor rule paths (for example.cursor/rules,backend/.cursor/rules,ui/.cursor/rules). If any managed path already exists as a real directory, agentic migrates it to<path>.backup(or.backup.N) before linking, and restores prior state if activation later fails and triggers rollback.
Switching between modes¶
Switching copy → link mode (stop carrying library files in your repo):
- Re-deploy with
--link:agentic sync(if config already has link mode) or re-run deploy with--link - Remove the now-symlinked directories from git's index:
- The managed
.gitignoreblock is updated automatically — the three paths are added to it.
Switching link → copy mode (make the project fully self-contained):
- Re-deploy without
--link: updatedeploy_modein.agentic/config.yamltocopythen runagentic sync - Stage the newly materialized directories:
- The managed
.gitignoreblock is updated automatically — the three paths are removed from it.
Config Lock File¶
Every agentic deploy or agentic compose writes TARGET/.agentic/config.yaml:
# Managed by agentic library — do not edit manually
library_commit: "abc123..."
profile: "golang-hexagonal-cobra-cli"
profile_version: "1.0.0"
composed_at: "2026-03-03T12:00:00Z"
mode: lean
agentic_root: "/Users/you/agentic"
active_vendors:
- claude
- copilot
structure: nested # only for nested profiles
tiers: [backend, ui] # only for nested profiles
The agentic_root and active_vendors fields enable the global CLI to work
from any directory within your project.