feat: add llama dev-agent container alongside Anthropic agents #29

Closed
opened 2026-03-28 17:20:11 +00:00 by dev-bot · 0 comments
Collaborator

Design

Add a second agents container (agents-llama) to docker-compose, configured for local llama inference. The existing agents container stays untouched.

Why a separate container

  • Own /tmp — lock files are isolated, no conflict with Anthropic agents
  • Own CLAUDE_CONFIG_DIR — no OAuth token race (llama doesn't use OAuth)
  • Own repo clone — worktrees don't collide
  • No code changes — same dev-poll.sh, dev-agent.sh, entrypoint. Just different env vars.

Coordination

The in-progress label on Forgejo is the shared coordination. When either agent claims an issue, it labels it in-progress and removes backlog. The other agent's poll won't see it.

Compose addition

agents-llama:
  build: ./docker/agents
  restart: unless-stopped
  volumes:
    - agent-data-llama:/home/agent/data
    - project-repos-llama:/home/agent/repos
    - ./:/home/agent/disinto:ro
    - ${HOME}/.ssh:/home/agent/.ssh:ro
    - CLAUDE_BIN_PLACEHOLDER:/usr/local/bin/claude:ro
  environment:
    FORGE_URL: http://forgejo:3000
    DISINTO_CONTAINER: "1"
    PROJECT_REPO_ROOT: /home/agent/repos/disinto
    ANTHROPIC_BASE_URL: "http://10.10.10.1:8081"
    ANTHROPIC_API_KEY: "sk-no-key-required"
    CLAUDE_CONFIG_DIR: /home/agent/.claude-local
  env_file:
    - .env
  networks:
    - disinto-net

No ~/.claude mount — this container doesn't talk to Anthropic API. The llama-server address needs to be reachable from inside Docker (host IP or Docker host gateway).

Cron vs loop

The llama container could use a while-true loop instead of cron for dev-poll, since we control its entrypoint and don't need all the cron env var workarounds. But cron also works — the container has its own env.

The llama container should only run dev-poll, not review-poll (local model shouldn't review — needs strong model for quality gate).

What stays the same

  • agents container — unchanged, keeps running Anthropic-backed polls
  • All scripts — unchanged
  • Forgejo labels — unchanged, shared coordination
  • Mirrors — both containers can push (SSH keys mounted)

Acceptance criteria

  • agents-llama container runs alongside agents
  • Uses llama backend for all Claude invocations
  • Picks up backlog issues independently
  • No conflicts with Anthropic agents (label-based coordination)
  • llama-server accessible from container
## Design Add a second agents container (`agents-llama`) to docker-compose, configured for local llama inference. The existing `agents` container stays untouched. ### Why a separate container - **Own /tmp** — lock files are isolated, no conflict with Anthropic agents - **Own CLAUDE_CONFIG_DIR** — no OAuth token race (llama doesn't use OAuth) - **Own repo clone** — worktrees don't collide - **No code changes** — same dev-poll.sh, dev-agent.sh, entrypoint. Just different env vars. ### Coordination The `in-progress` label on Forgejo is the shared coordination. When either agent claims an issue, it labels it `in-progress` and removes `backlog`. The other agent's poll won't see it. ### Compose addition ```yaml agents-llama: build: ./docker/agents restart: unless-stopped volumes: - agent-data-llama:/home/agent/data - project-repos-llama:/home/agent/repos - ./:/home/agent/disinto:ro - ${HOME}/.ssh:/home/agent/.ssh:ro - CLAUDE_BIN_PLACEHOLDER:/usr/local/bin/claude:ro environment: FORGE_URL: http://forgejo:3000 DISINTO_CONTAINER: "1" PROJECT_REPO_ROOT: /home/agent/repos/disinto ANTHROPIC_BASE_URL: "http://10.10.10.1:8081" ANTHROPIC_API_KEY: "sk-no-key-required" CLAUDE_CONFIG_DIR: /home/agent/.claude-local env_file: - .env networks: - disinto-net ``` No `~/.claude` mount — this container doesn't talk to Anthropic API. The llama-server address needs to be reachable from inside Docker (host IP or Docker host gateway). ### Cron vs loop The llama container could use a while-true loop instead of cron for dev-poll, since we control its entrypoint and don't need all the cron env var workarounds. But cron also works — the container has its own env. The llama container should only run dev-poll, not review-poll (local model shouldn't review — needs strong model for quality gate). ### What stays the same - `agents` container — unchanged, keeps running Anthropic-backed polls - All scripts — unchanged - Forgejo labels — unchanged, shared coordination - Mirrors — both containers can push (SSH keys mounted) ## Acceptance criteria - [ ] `agents-llama` container runs alongside `agents` - [ ] Uses llama backend for all Claude invocations - [ ] Picks up backlog issues independently - [ ] No conflicts with Anthropic agents (label-based coordination) - [ ] llama-server accessible from container
dev-bot added the
backlog
label 2026-03-28 17:20:11 +00:00
disinto-admin removed the
backlog
label 2026-03-28 17:20:35 +00:00
dev-bot changed title from feat: replace dev-agent cron with while-true loop process to feat: add llama dev-agent loop process alongside cron 2026-03-28 17:21:39 +00:00
dev-bot changed title from feat: add llama dev-agent loop process alongside cron to feat: add llama dev-agent container alongside Anthropic agents 2026-03-28 17:29:48 +00:00
disinto-admin added the
backlog
label 2026-03-28 17:35:58 +00:00
dev-bot removed the
backlog
label 2026-03-28 17:37:09 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: johba/disinto#29
No description provided.