Skip to content

Repository files navigation

Agent template

A Lego-style agent system template built from agent, MCP, CLI, and skills. Two harness stacks, a shared workspace, and catalogs on NeuralDeep.

Based on the Lego approach to agent systems post.

What is inside

BlockIn this template
AgentStack A - OpenCode + ACP + ACPBox. Stack B - Coddy Agent HTTP
LLMNeuralDeep Hub API at https://api.neuraldeep.ru/v1 (gpt-oss-120b, qwen3.6-35b-a3b, ...)
MCPmcp-atlassian (Confluence + Jira). Catalog - neuraldeep.ru/mcp
CLIgh, glab, aws-cli, yt-dlp, skillsbd - see workspace/INSTRUCTIONS.md, catalog - neuraldeep.ru/tools
SkillsGit submodules in skills_cache/ + symlinks in workspace/ - neuraldeep.ru/skills
UI (optional)Open WebUI on top of ACPBox

Full architecture - docs/architecture.md.

Quick start

git clone <this-repo> agent-template &&cd agent-template
git submodule update --init --recursive
cp .env.example .env
# Edit .env: NEURALDEEP_API_KEY from https://hub.neuraldeep.ru/# Optional: CONFLUENCE_* and JIRA_* for Atlassian MCP
mkdir -p atlassian_data coddy_home open-webui_data

Register at hub.neuraldeep.ru, copy your sk- key into .env as NEURALDEEP_API_KEY.

Pick one stack below (or run both on different ports if you need both).


OpenCode + ACPBox

OpenCode runs as an ACP agent inside ACPBox. Any OpenAI-compatible client talks to ACPBox; ACPBox spawns OpenCode over stdio.

Compose file - docker-compose.acpbox.yaml

Config files

FileRole
workspace/.opencode/opencode.jsonModel provider (NeuralDeep), MCP, permissions
workspace/INSTRUCTIONS.mdSystem instructions for the agent
.envNEURALDEEP_API_KEY, ports, Atlassian tokens

Set provider.neuraldeep.options.apiKey in workspace/.opencode/opencode.json if ${NEURALDEEP_API_KEY} is not expanded inside the container.

Models (NeuralDeep Hub)

Hub model idOpenCode idNotes
gpt-oss-120bneuraldeep/gpt-oss-120bDefault, tools + reasoning
qwen3.6-35b-a3bneuraldeep/qwen3.6-35b-a3bTools + reasoning + vision
qwen3.6-35b-a3b-noreasonneuraldeep/qwen3.6-35b-a3b-noreasonFaster, no reasoning

Start and stop

docker compose -f docker-compose.acpbox.yaml up -d
docker compose -f docker-compose.acpbox.yaml down

Endpoints

URLPurpose
http://localhost:9080/v1/modelsList modes
http://localhost:9080/v1/chat/completionsChat API
http://localhost:9999/mcpAtlassian MCP (same compose file)

HTTP examples - examples/acpbox-openai.http.

Open WebUI (optional)

Browser chat UI that uses ACPBox as the OpenAI backend.

docker compose -f docker-compose.acpbox.yaml --profile openwebui up -d
URLPurpose
http://localhost:3000Open WebUI

Data is stored in ./open-webui_data/ (gitignored bind mount). Create it before the first run: mkdir -p open-webui_data.

Inside Compose, Open WebUI uses OPENAI_API_BASE_URL=http://acpbox:8080/v1.


Coddy HTTP

Coddy Agent in HTTP mode - embedded web UI, OpenAI-compatible /v1 API, MCP, skills, and CLI tools in one binary.

Compose file - docker-compose.coddy.yaml

Config files

FileRole
config.yamlProviders, models, MCP, skills dirs, CLI allowlist
.envNEURALDEEP_API_KEY, ports, Atlassian tokens
coddy_home/Sessions and runtime state (gitignored)

Models (NeuralDeep Hub)

Config model idHub API name
neuraldeep/gpt-oss-120bgpt-oss-120b (default)
neuraldeep/qwen3.6-35b-a3bqwen3.6-35b-a3b
neuraldeep/qwen3.6-35b-a3b-noreasonqwen3.6-35b-a3b-noreason

Change the default in config.yaml under agent.model.

Start and stop

docker compose -f docker-compose.coddy.yaml up -d
docker compose -f docker-compose.coddy.yaml down

Endpoints

URLPurpose
http://localhost:12345/Embedded web UI
http://localhost:12345/v1/modelsOpenAI-compatible API
http://localhost:12345/v1/chat/completionsChat
http://localhost:9999/mcpAtlassian MCP (same compose file)

HTTP examples - examples/coddy-openai.http.


Skills (submodules)

git submodule update --init --recursive

Layout

  • skills_cache/ - git submodules at repo root (sources, agents do not scan repo roots)
  • workspace/.opencode/skills/<name>/ - symlinks for OpenCode (../../../skills_cache/...)
  • workspace/.coddy/skills/<name>/ - symlinks for Coddy (../../../skills_cache/...)

rpa-skills is a multi-skill repo - link each skill separately, not the repo root.

Skill link nameTarget in skills_cache/Harness
rpa-initrpa-skills/rpa-init/both
rpa-featrpa-skills/rpa-feat/both
rpa-bugfixrpa-skills/rpa-bugfix/both
rpa-gen-rulesrpa-skills/rpa-gen-rules/both
logikarpa-skills/logika/both
humanizer-ruhumanizer-ru/skills/humanizer-ru/both
ru-textru-text/skills/ru-text/both
stop-slopstop-slop/both

Docker mounts

  • Both stacks - ./skills_cache:/skills_cache:ro (outside /workspace, no skills_cache folder inside workspace)
  • Symlinks ../../../skills_cache/... resolve to /skills_cache/... in the container

Coddy config.yaml -> skills.dirs: [/workspace/.coddy/skills].

Add a submodule under skills_cache/, then symlink each SKILL.md folder into both .opencode/skills/ and .coddy/skills/.

Add a skill from the NeuralDeep catalog:

npx skillsbd search yandex
npx skillsbd add <owner/repo>

MCP Atlassian

Both compose files include mcp-atlassian for Confluence and Jira.

  1. Set CONFLUENCE_* and JIRA_* in .env.
  2. MCP endpoint - http://localhost:9999/mcp (streamable HTTP).
  3. Persistent cache - atlassian_data/ (gitignored).

Wiring

ClientConfig
OpenCodeworkspace/.opencode/opencode.json -> mcp.atlassian
Coddyconfig.yaml -> mcp_servers
Cursorworkspace/.cursor/mcp.json

More MCP servers - neuraldeep.ru/mcp.


CLI

The agent uses console tools from the host (not bundled in containers). Tool list and pipeline examples - workspace/INSTRUCTIONS.md. Catalog - neuraldeep.ru/tools.


Repository layout

agent-template/
├── docker-compose.acpbox.yaml # OpenCode + ACPBox (+ optional openwebui profile)
├── docker-compose.coddy.yaml # Coddy HTTP
├── config.yaml # Coddy stack config
├── open-webui_data/ # Open WebUI state (gitignored)
├── coddy_home/ # Coddy sessions (gitignored)
├── atlassian_data/ # mcp-atlassian cache (gitignored)
├── skills_cache/ # git submodules (sources)
├── workspace/ # .opencode/opencode.json, .opencode/skills/, .coddy/skills/
├── docs/architecture.md
└── AGENTS.md

What to use when

  • MCP - frequent operations with external systems, bounded access, tool always available.
  • CLI - rare or heavy jobs, easy to wrap in a script and skill.
  • Skills - complex MCP + CLI chains with project rules without overloading the base agent.

Do not grow the stack without need (Lusser's law).

Links

ResourceURL
NeuralDeephttps://neuraldeep.ru/
Skillshttps://neuraldeep.ru/skills
MCPhttps://neuraldeep.ru/mcp
CLIhttps://neuraldeep.ru/tools
Hub (LLM)https://hub.neuraldeep.ru/
APIhttps://api.neuraldeep.ru/v1
OpenCodehttps://github.com/anomalyco/opencode
ACPhttps://github.com/agentclientprotocol/agent-client-protocol
ACPBoxhttps://github.com/EvilFreelancer/acpbox
Coddy Agenthttps://github.com/coddy-project/coddy-agent
mcp-atlassianhttps://github.com/sooperset/mcp-atlassian
Open WebUIhttps://github.com/open-webui/open-webui
acpbox-agent examplehttps://github.com/EvilFreelancer/acpbox-agent

License

This project is licensed under the MIT License, see the LICENSE file in the repository root for details.

About

A Lego-style agent system template built from agent, MCP, CLI, and skills.

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Contributors