Skip to content

EvilFreelancer/agent-template

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

Block In this template
Agent Stack A - OpenCode + ACP + ACPBox. Stack B - Coddy Agent HTTP
LLM NeuralDeep Hub API at https://api.neuraldeep.ru/v1 (gpt-oss-120b, qwen3.6-35b-a3b, ...)
MCP mcp-atlassian (Confluence + Jira). Catalog - neuraldeep.ru/mcp
CLI gh, glab, aws-cli, yt-dlp, skillsbd - see workspace/INSTRUCTIONS.md, catalog - neuraldeep.ru/tools
Skills Git 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

File Role
workspace/.opencode/opencode.json Model provider (NeuralDeep), MCP, permissions
workspace/INSTRUCTIONS.md System instructions for the agent
.env NEURALDEEP_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 id OpenCode id Notes
gpt-oss-120b neuraldeep/gpt-oss-120b Default, tools + reasoning
qwen3.6-35b-a3b neuraldeep/qwen3.6-35b-a3b Tools + reasoning + vision
qwen3.6-35b-a3b-noreason neuraldeep/qwen3.6-35b-a3b-noreason Faster, no reasoning

Start and stop

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

Endpoints

URL Purpose
http://localhost:9080/v1/models List modes
http://localhost:9080/v1/chat/completions Chat API
http://localhost:9999/mcp Atlassian 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
URL Purpose
http://localhost:3000 Open 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

File Role
config.yaml Providers, models, MCP, skills dirs, CLI allowlist
.env NEURALDEEP_API_KEY, ports, Atlassian tokens
coddy_home/ Sessions and runtime state (gitignored)

Models (NeuralDeep Hub)

Config model id Hub API name
neuraldeep/gpt-oss-120b gpt-oss-120b (default)
neuraldeep/qwen3.6-35b-a3b qwen3.6-35b-a3b
neuraldeep/qwen3.6-35b-a3b-noreason qwen3.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

URL Purpose
http://localhost:12345/ Embedded web UI
http://localhost:12345/v1/models OpenAI-compatible API
http://localhost:12345/v1/chat/completions Chat
http://localhost:9999/mcp Atlassian 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 name Target in skills_cache/ Harness
rpa-init rpa-skills/rpa-init/ both
rpa-feat rpa-skills/rpa-feat/ both
rpa-bugfix rpa-skills/rpa-bugfix/ both
rpa-gen-rules rpa-skills/rpa-gen-rules/ both
logika rpa-skills/logika/ both
humanizer-ru humanizer-ru/skills/humanizer-ru/ both
ru-text ru-text/skills/ru-text/ both
stop-slop stop-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

Client Config
OpenCode workspace/.opencode/opencode.json -> mcp.atlassian
Coddy config.yaml -> mcp_servers
Cursor workspace/.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

Resource URL
NeuralDeep https://neuraldeep.ru/
Skills https://neuraldeep.ru/skills
MCP https://neuraldeep.ru/mcp
CLI https://neuraldeep.ru/tools
Hub (LLM) https://hub.neuraldeep.ru/
API https://api.neuraldeep.ru/v1
OpenCode https://github.com/anomalyco/opencode
ACP https://github.com/agentclientprotocol/agent-client-protocol
ACPBox https://github.com/EvilFreelancer/acpbox
Coddy Agent https://github.com/coddy-project/coddy-agent
mcp-atlassian https://github.com/sooperset/mcp-atlassian
Open WebUI https://github.com/open-webui/open-webui
acpbox-agent example https://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

License

Stars

Watchers

Forks

Contributors