-
Notifications
You must be signed in to change notification settings - Fork 0
Customization Guide
The Códice workspace is designed to be adapted to your workflow — not the other way around. This guide covers the most common customizations, from changing AI models to adding custom commands, grouped into practical recipes.
Each recipe follows the same structure: Problem → Solution → Step-by-step → Verification.
Problem: The workspace ships with a default AI model (nvidia/stepfun-ai/step-3.7-flash), but you prefer a different provider — Claude Sonnet for complex reasoning, GPT-5 for general tasks, or DeepSeek for cost-sensitive work.
Solution: Change the model and small_model fields in opencode.json. The template ships with 7 pre-configured providers, so switching is typically a one-field change.
Step-by-step:
- Open
opencode.jsonat the project root. - Locate the
modelfield near the top of the file:"model": "nvidia/stepfun-ai/step-3.7-flash",
- Replace it with your preferred model reference. For example, to use Claude Sonnet 4 via OpenRouter:
"model": "openrouter/anthropic/claude-sonnet-4",
- Optionally update the
small_modelfor lightweight operations:"small_model": "openrouter/anthropic/claude-haiku-4-5",
- If the provider is already configured in the
providersection (all 7 are), no further changes are needed. The template includes configurations for Anthropic, DeepSeek, Google, OpenAI, MiniMax, Moonshot, and Z-AI.
Per-agent overrides: You can use different models for specific agents:
"agent": {
"tlaloc": {
"model": "openrouter/anthropic/claude-sonnet-4",
"temperature": 0.2
},
"moctezuma": {
"model": "openrouter/deepseek/deepseek-v4-flash",
"temperature": 0.1
}
}Verification: Run any slash command (e.g., /help). The agent's response should reflect the new model's style and reasoning capabilities. Check the model identifier in the agent's response header in the OpenCode UI.
Problem: The workspace includes 46 skills, but your team doesn't use UI/UX design, mobile development, or data analysis. These skills clutter the discovery tree and waste context when the agent scans the skills/ directory.
Solution: Remove or rename skill directories you do not need. The agent discovers skills by scanning the filesystem — if the directory is gone or renamed, the skill won't be found.
Step-by-step:
- Identify the skills you want to remove. Browse
skills/and list the directories:ls skills/
- Remove unwanted skills:
rm -rf skills/ui-ux-design-pro skills/design-taste-frontend skills/xlsx
- Alternatively, archive them instead of deleting — rename the directory with a leading underscore or
.baksuffix:The agent will not findmv skills/ui-ux-design-pro skills/_ui-ux-design-pro
@skills/_ui-ux-design-pro/SKILL.mdand will skip it. - Update
skills/using-agent-skills/SKILL.mdto remove the deleted skills from the discovery tree and Quick Reference table. This prevents the meta-skill from suggesting skills that no longer exist.
Verification: Ask an agent a question in the removed skill's domain (e.g., "Create a professional color palette for my app"). The agent should not reference the removed skill and should handle the request using general knowledge instead.
Caution: Some skills are referenced by commands. Removing a skill that a command depends on (e.g., removing test-driven-development when /build expects it) may cause agents to proceed without the structured workflow. Check which commands reference the skill before removing it.
Problem: The workspace has 12 SDD commands, but your workflow needs a custom phase — for example, a /deploy command that handles deployment to your specific infrastructure.
Solution: Create a new command file in commands/ and register it in the SDD pipeline plugin.
Step-by-step:
-
Create
commands/deploy.mdwith YAML frontmatter and numbered steps:--- description: Deploy the application to a target environment with rollback support agent: tlaloc --- ## Phase 0 — Pre-flight: Detect Target Environment 1. Check for deployment config files (Dockerfile, compose.yml, etc.). 2. Use the `question` tool to let the user select the target environment. 3. Validate required environment variables are set. ## Phase 1 — Build and Package 1. Run the build step for the detected environment. 2. Package the application into the deployable artifact. 3. Verify the artifact is valid (checksum, size check). ## Rules 1. Never deploy without a health check verification step. 2. Always have a rollback plan before starting the deploy. ## Suggested Next Step > Deployment complete. Run `/diagnosis` to monitor for issues.
-
Register the command in
.opencode/plugins/sdd-pipeline.ts:const COMMAND_AGENT_MAP: Record<string, string> = { // ... existing commands ... "/deploy": "tlaloc", }
-
Optional: Add intent patterns so the SDD plugin auto-detects when a user's question should trigger
/deploy:const INTENT_PATTERNS: Record<string, string[]> = { "/deploy": [ "deploy", "desplegar", "release", "push to production", "go live", "roll out", ], }
-
Restart your OpenCode session.
Verification: Type /deploy in OpenCode. The command should load and the target agent (tlaloc, in this example) should follow the workflow steps you defined.
Problem: You installed the workspace with placeholder names (e.g., "My Project") and now need to update it to your actual project name so agents use the correct name in documentation, configuration, and responses.
Solution: Update three key files that contain the project name. The workspace template uses your project directory name as a starting point, but you may want a distinct display name.
Step-by-step:
-
Update
README.md— Change the title and description at the top of the file:# Your Project Name > One-line description of what your project does.
Update any usage instructions, installation paths, or links that reference the old name.
-
Update
package.json(if your project uses one) — Change thename,description, andrepositoryfields:{ "name": "your-project-name", "description": "What your project does", "repository": "https://github.com/your-org/your-project" } -
Update
opencode.json— The workspace name is referenced in the configuration. Update anyname-related fields or file paths that include the old project name:{ "name": "Your Project", ... } -
Update workspace name in agent context — If you have agent files that reference the project by name, update those too. Agent files in
agents/may mention the project in their role descriptions or rules:# Your Project Name Agent Instructions
Verification: Run /help and check that agents refer to your project by the new name in their responses. Verify that README.md renders correctly with the updated name.
Problem: The default permission model is restrictive by design — agents must ask before running most shell commands and cannot read credential files. Your team may need to broaden or further restrict these boundaries.
Solution: Edit the permission section in opencode.json. The permission system has three levels: allow (no prompt), ask (prompt before executing), and deny (block entirely).
Step-by-step:
-
Open
opencode.jsonand locate thepermissionsection (around line 403). -
Add new deny patterns for file reads — Prevent agents from reading files you consider sensitive:
"read": { "*": "allow", "*.env": "deny", ".npmrc": "deny", "*.pem": "deny", "secrets/**": "deny", "deployment-keys/*": "deny" }
-
Restrict bash commands — Add patterns to block commands your team considers unsafe:
"bash": { "*": "ask", "ls": "allow", "cat *": "allow", "docker exec *": "deny", "kubectl exec *": "deny", "sudo *": "deny", ... }
-
Allow specific commands — If your agents frequently need
npm installorgo build, add them asallowto reduce friction:"npm install": "allow", "npm install *": "allow", "go build *": "allow"
-
Control task delegation — Restrict which subagents a primary agent can invoke:
"task": { "*": "deny", "code-reviewer": "allow", "docs-writer": "allow" }
Verification: Ask an agent to run a blocked command (e.g., sudo apt update). It should either ask for permission or refuse. Then ask it to run an allowed command (e.g., ls). It should execute without prompting.
Problem: The workspace ships with 7 providers (Anthropic, DeepSeek, Google, OpenAI, MiniMax, Moonshot, Z-AI), but you want to use a provider not on that list — for example, a custom enterprise endpoint or a less common AI service.
Solution: Add a new entry in the provider section of opencode.json following the existing provider format.
Step-by-step:
-
Open
opencode.jsonand locate theprovidersection (around line 13). -
Add a new provider entry. Follow the pattern of existing providers. At minimum, you need a provider name, a model key, and options:
"provider": { "my-enterprise": { "models": { "my-custom-model": { "options": { "temperature": 0.3, "maxTokens": 4096 }, "variants": { "deep-think": { "temperature": 0.1, "maxTokens": 8192 }, "economy": { "temperature": 0.5, "maxTokens": 2048 } } } } }, // ... existing providers remain ... }
-
Set the model as your default (or use it for specific agents):
"model": "my-enterprise/my-custom-model"
-
Add the required API key as an environment variable (the provider configuration may reference it). Refer to your provider's documentation for the exact environment variable name and format.
Verification: Change the model field to your new provider's model key and run any command. The agent should use the new model. Check the response header in the OpenCode UI to confirm the model identifier matches.
Problem: The SDD cycle includes a /review phase that runs a five-axis code review. For small personal projects or rapid prototyping, the review step adds friction without corresponding value — you want to skip it.
Solution: There is no configuration toggle for this. The SDD cycle is workflow guidance, not enforcement. Simply do not call /review, or configure the command to be hidden.
Step-by-step (option A — skip it):
- Follow the SDD cycle as usual through
/spec→/plan→/build→/test. - When
/testfinishes, it will suggest: "Run/code-simplifyto refactor and simplify the code, or run/webperfto optimize web performance, or run/reviewto review the latest implementations." - Ignore the suggestion and call
/shipdirectly if you are ready for launch. The SDD pipeline does not enforce a mandatory order.
Step-by-step (option B — hide the command):
- Open
.opencode/plugins/sdd-pipeline.ts. - Remove
/reviewfrom theCOMMAND_AGENT_MAP:const COMMAND_AGENT_MAP: Record<string, string> = { "/spec": "quetzalcoatl", // ... keep everything except "/review" }
- Restart OpenCode. The
/reviewcommand will no longer be recognized.
Verification: Type /ship after a build without running /review first. The ship command should proceed normally. If you removed the command, typing /review should produce a "command not found" response.
Problem: The workspace is designed for software development — SDD cycles, code reviews, TDD, builds. But you work on a different domain: technical writing, data analysis, system administration, or project management.
Solution: The agents and skills adapt to your content. Skip the code-specific commands and focus on the ones that apply. The spec, plan, and documentation workflows work for any domain.
Step-by-step:
-
Install the workspace normally:
bunx @fisherk2-dev/codice
-
Run
/specto define your project — Use this to describe what you are building, whether it is a documentation site, a research paper, a system architecture, or a training curriculum. Quetzalcoatl will ask about your goals, audience, and deliverables in domain-agnostic terms. -
Run
/planto break it into tasks — Moctezuma will create a task breakdown regardless of domain. For a documentation project, tasks might be: "Write introduction section," "Create API reference," "Review for consistency." -
Run
/buildor work manually — For non-coding projects,/buildmay be less useful. Use the generated plan as a checklist and work manually. Or skip/buildentirely and use/testto verify deliverables against your criteria. -
Use applicable skills — Many skills are domain-agnostic:
-
crafting-effective-readmes— Works for any project documentation -
architecture-diagrams— System architecture, network topology, org charts -
documentation-and-adrs— Decision records for any domain -
git-workflow-and-versioning— Version control for any content -
incident-response— Incident management regardless of domain -
excel-analysis— Data analysis for spreadsheets
-
-
Disable code-specific commands — If you do not write code, consider hiding commands that are code-specific:
// In .opencode/plugins/sdd-pipeline.ts // Remove: "/build", "/test", "/code-simplify", "/review"
Or simply ignore them — they will not interfere if you do not call them.
Verification: Run through the SDD cycle for a non-coding deliverable. For example, run /spec with "I want to create a technical documentation site for a REST API." The agent should produce a SPEC.md with sections for audience analysis, content structure, style guide, and delivery timeline — without assuming code implementation.
These files are marked as obligatorio in the template — they will be overwritten on every update:
| File | Reason |
|---|---|
agents/*.md |
Agent behavior definitions are updated with template releases |
commands/*.md |
Command workflows may be updated to fix bugs or add features |
.opencode/plugins/sdd-pipeline.ts |
SDD routing and validation logic is maintained by the template |
opencode.json (model/permission sections) |
Core configuration updated with each release |
These files are marked as estándar — they are created once and never overwritten:
| File | Reason |
|---|---|
README.md |
Your project's public face |
CONTRIBUTING.md |
Your team's contribution guidelines |
SPEC.md |
Your project specification |
docs/*.md |
Your project documentation |
specs/*.md |
Your modular specs and ADRs |
When you run Update Workspace mode, only obligatorio files are overwritten. Standard files are preserved exactly as you customized them. Optional files are never touched in update mode. This means you can safely customize README.md, docs/, specs/, and tasks/ without fear of losing changes during an update.
If you have customized an obligatorio file (such as opencode.json), make a backup before updating — the update will overwrite it with the template version.
-
Configuration — Full reference for
opencode.jsonsettings. - MCP Servers — Pre-configured MCP servers, activation, and per-agent control.
- Agents — Agent permission model and how to add new agents.
- Commands — Adding and modifying slash commands.
- Workspace Structure — File classification and update behavior.
- opencode.ai/docs/configuration — Official OpenCode configuration reference.