WARNING — USE AT YOUR OWN RISK
This container runs an autonomous AI agent with full access to the host Docker engine via the mounted Docker socket. This means the agent can create containers, mount host directories, and theoretically access and modify any file on the host system. Docker guardrails are defined in the agent's
CLAUDE.mdconfiguration to harden the setup — restricting privileged mode, sensitive host mounts, and destructive commands — but these are AI-level soft guardrails, not kernel-level enforcement. They significantly reduce risk but do not eliminate it. There is no guarantee of safety or data integrity. By using this image you accept full responsibility for any consequences. Do not run this on production systems or machines with sensitive data unless you understand the risks.
A fully autonomous AI agent container powered by Claude Code and Gemini CLI. Ships with 6 creative tools, a broad set of language runtimes (Java, Node.js, Python, Go, C/C++), a web terminal, and a built-in File Browser — ready to build software, generate documents, process media, and deploy containers from any browser.
Java/Angular by default, fully overridable — A bare
docker runof this image yields a working Quarkus + Java + Angular agent with a 5-agent dev team, no setup required. To use a different stack (or no stack), unzip a bundle ZIP into your project; every bundle ships.claudenius-setup/.skip-default, so the bundle's.claudenius-setup/is the COMPLETE truth — image defaults are skipped, and what you see in the unzipped tree is exactly what the agent reads. See How Your Project Is Organized below.
docker run -d \
--name ai-agent \
-p 14000:14000 \
-p 14002-14100:14002-14100 \
-v /var/run/docker.sock:/var/run/docker.sock \
hauschi86/claudenius-studio:latest
Open http://localhost:14000 in your browser for the web terminal. A File Browser is available at http://localhost:14002 (default credentials: admin/admin) for browsing and downloading files the agent creates.
Authenticate and start an agent:
# Claude Code
claude auth login
claude --dangerously-skip-permissions
# Gemini CLI
gemini # will ask you to log in on first run
gemini -y # YOLO mode — auto-approves actions
The easiest way is to download the bundle ZIP for the latest release and unzip it in your project root:
unzip claudenius-studio-<version>-minimal.zip
# Easiest — run the shipped launcher (no Docker knowledge required):
./start.sh # Linux / macOS
start.bat # Windows (double-click also works)
# Or directly:
docker compose up -d
The bundle ships docker-compose.yml, .env, .gitignore, start.sh, start.bat, and a .claudenius-setup/ skeleton with working defaults (port 14000). Release bundles also pre-pin the image version in .env so docker compose up always gets the matching release. Edit .env if you need a different port, image tag, or want to enable Git persistence.
The bundle's docker-compose.yml is static and safe to commit — it defines the claude-agent + postgres services, maps ports 14000 (terminal), 14002 (File Browser) and 14003-14100 (apps), mounts your project as /workspace plus the Docker socket, and reads all settings from a gitignored .env:
.env (your actual values):
HOST_PORT_BASE=14000
DB_PORT=14001
FB_PORT=14002
APP_PORT_START=14003
APP_PORT_END=14100
FILEBROWSER_USER=admin
FILEBROWSER_PASSWORD=admin
# Release bundles ship IMAGE_TAG=<version> uncommented; SNAPSHOT bundles leave
# it commented and the compose file falls back to :latest.
IMAGE_TAG=1.5.1
#GIT_REPO=https://github.com/your-org/your-repo.git
#GIT_TOKEN=your-token-here
Docker Compose reads .env automatically — no extra flags needed.
Your project folder is the workspace. The single volume mount .:/workspace means the agent works directly inside your repo — no subfolders, no syncing. You see the agent's files in your IDE in real-time, and the agent sees your code instantly.
All claudenius-specific directories use a dot-prefix (.claudenius-*) so they stay out of the way — just like .git/ does.
After unzipping the bundle and starting the container:
my-project/ ← your git repo root = /workspace
│
│ YOUR CODE (untouched)
├── src/ ← your source code
├── package.json ← your project files
├── docker-compose.yml ← starts the container (safe to commit)
├── .env ← secrets: ports, git tokens (gitignored)
├── start.sh / start.bat ← shipped launcher scripts (one per OS)
│
│ CUSTOMIZATION (checked into git — you manage these)
├── .claudenius-setup/
│ ├── context/ ← custom agent instructions (.md files merged into CLAUDE.md)
│ │ └── 00-project.md ← sample: your project-specific rules
│ ├── skills/ ← override built-in skill definitions
│ ├── agents/ ← native Claude Code subagent files (<role>.md with YAML frontmatter)
│ └── agent-team/ ← non-prompt team docs (workflow.md etc.)
│
│ DATA (shared — agent writes here, you can add files too)
├── .claudenius-data/
│ ├── diagrams/ ← /mermaid output
│ ├── captures/ ← /playwright screenshots & PDFs
│ ├── scripts/ ← generated scripts (.ts, .js, .py)
│ ├── media/ ← /ffmpeg video & audio
│ ├── images/ ← /imagemagick output
│ ├── presentations/ ← /python-pptx .pptx files
│ ├── drops/ ← files you paste/drag-drop into the terminal (gitignored)
│ ├── startup.log ← full container-startup log (verify skill/agent sync)
│ ├── backups/<timestamp>/files/ ← snapshot of .claude taken before each start's merge (gitignored)
│ └── (your files) ← drop CSVs, images, docs here for the agent
│
│ RUNTIME (gitignored)
├── .claude/ ← Claude Code state: skills/agents MERGED in place (never wiped; newest wins). Other files reassembled each start.
├── .claudenius/ ← symlinks to tools inside the image (recreated each start)
├── CLAUDE.md ← assembled agent instructions (recreated each start)
├── WELCOME.md ← agent greeting (recreated each start)
└── .gitignore ← keeps auto-generated files out of git
.claudenius-setup/This is how you control the agent. Everything in this folder is checked into git and survives container restarts. It has up to four subdirectories:
| Folder | What goes here |
|---|---|
context/ | Markdown files with instructions for the agent (concatenated into CLAUDE.md at startup) |
skills/ | Custom or overridden skill definitions. Merged into .claude/skills/ at startup — existing files are never deleted, and on a name clash the newest copy wins. |
agents/ | Native Claude Code subagent files (<role>.md with YAML frontmatter). Merged into .claude/agents/ the same way (never wiped; newest wins). |
agent-team/ | Non-prompt team docs — workflow patterns, communication protocol, code patterns. Read by the lead agent on demand. |
You don't need to use all of them — most users only need context/.
.claudenius-data/One folder for everything — files the agent generates AND files you want the agent to use.
Example: cp sales-report.csv .claudenius-data/, then ask the agent to "create a bar chart from sales-report.csv" — it writes the PNG to .claudenius-data/images/, which you open from your IDE or File Browser.
The subdirectories (diagrams/, images/, media/, etc.) are created automatically at startup; you can add your own folders or drop files anywhere inside.
It also holds three runtime helpers (all gitignored): startup.log — a fresh per-boot record of which skills/agents were installed, updated, or kept, plus the CLAUDE.md assembly trace; backups/<timestamp>/files/ — a snapshot of .claude/ taken before each start's merge (only when changed; restore from here if a merge ever overwrites something); and drops/ — files you paste/drag-drop into the terminal (see below).
Note:
.claudenius-data/is not gitignored by default (your reference files might be valuable) — exceptdrops/andbackups/. If generated output gets large, add subdirs like.claudenius-data/media/to your.gitignore.
Most of these are reassembled every start — don't edit them directly. The exception is .claude/skills/ and .claude/agents/: they're merged in place, never wiped — existing/live-added files survive, and on a name clash the newest mtime wins. .claudenius-setup/.skip-default (shipped by every bundle) makes the entrypoint ignore baked context + agent defaults; skills always merge.
| File / Directory | Source (when no .skip-default) | Source (with .skip-default) |
|---|---|---|
.claude/skills/ | image defaults + your .claudenius-setup/skills/ — newest-wins merge; existing files never deleted | same (skills always merge) |
.claude/agents/ | image defaults + your .claudenius-setup/agents/ — newest-wins merge; existing files never deleted | your .claudenius-setup/agents/ only (newest-wins; never deletes existing) |
.claudenius/tools/ | symlink into the image | symlink into the image |
CLAUDE.md | image defaults + your .claudenius-setup/context/*.md (override by filename), sorted + concatenated | concatenation of your .claudenius-setup/context/*.md only |
WELCOME.md | image | image |
.claudenius/, CLAUDE.md, and WELCOME.md are safe to delete (they reappear next start). A skill/agent deleted from .claude/ only returns if it also exists in a source; live-only additions stay gone. Every decision is logged to .claudenius-data/startup.log.
The agent's instructions (CLAUDE.md) are assembled at startup by merging files from two sources:
/opt/claudenius/defaults/context/ — baked into the image so a bare docker run yields a working Java/Angular agent. Skipped if .claudenius-setup/.skip-default is present..claudenius-setup/context/ — overlays the defaults; same-named files replace the default; new files are inserted by sort order.Bundle ZIPs always ship .claudenius-setup/.skip-default, so when you unzip a bundle the image defaults are skipped entirely and CLAUDE.md is built only from the bundle's files. The bundle is hermetic: what you see in .claudenius-setup/context/ is exactly what the agent reads.
Baseline files (shipped in every bundle's .claudenius-setup/context/, also baked at the image's default-context path):
| File | What it controls |
|---|---|
00-core.md | Project overview, key conventions, freedom to build |
00-project.md | Placeholder for your own project-specific rules |
10-docker-security.md | Docker security guardrails |
20-system-changelog.md | System change log rules |
30-persistence.md | Git repo and persistent storage |
50-environment.md | Languages, runtimes, developer tools, database |
60-networking.md | Port configuration, HOST_PORT_BASE |
70-tools.md | Tool descriptions (Mermaid, Playwright, FFmpeg, etc.) |
80-prerequisites.md | Prerequisites |
How merging works:
.md file in .claudenius-setup/context/ is included.CLAUDE.md.45-my-rules.md), or delete the ones you don't want.Example: drop a 45-testing.md into .claudenius-setup/context/ with your rules and restart — the 45- prefix places it between 40-… and 50-environment.md in sort order.
The image's default 40-stack.md is the Quarkus + Angular ruleset. The java-angular bundle ships the same content. To replace it with your own stack, drop a 40-stack.md into .claudenius-setup/context/. Because every bundle ships .skip-default, your file is the only 40-stack.md the agent sees — no merging with the baked default.
To drop the stack altogether (let the agent pick freely per task), use the minimal bundle (which ships no 40-stack.md) — .skip-default ensures the image's default 40-stack.md is also ignored.
To write your own stack rules, put your mandatory tech choices (frameworks, build tools, conventions) into .claudenius-setup/context/40-stack.md.
Skills are slash-commands like /mermaid, /playwright, /ffmpeg. Each skill is a SKILL.md file that tells the agent how to use that tool. Unlike context, skills are baked into the image (they're tightly coupled with the binaries the image ships).
To override a built-in skill, recreate the same folder under .claudenius-setup/skills/ (e.g. .claudenius-setup/skills/mermaid/SKILL.md) with your own SKILL.md.
At startup your version is merged into .claude/skills/. Existing files in .claude/ are never deleted, and on a name clash the newest copy wins — so editing your setup skill takes effect on the next start, and a skill you create directly in .claude/skills/ survives restarts. Skills you don't override keep their defaults; every decision is logged to .claudenius-data/startup.log.
Bundles ship .claudenius-setup/.skip-default, so the unzipped tree is the complete truth (image defaults skipped). To upgrade: re-download the latest bundle and unzip into your project root — files you've customized are preserved; new baseline files are added in sort order.
| Tool | Skill | What It Does |
|---|---|---|
| Mermaid | /mermaid | Flowcharts, sequence diagrams, class diagrams, ER diagrams, Gantt charts, mindmaps, timelines |
| Playwright | /playwright | Screenshots, PDF generation, web scraping, browser automation (Chromium) |
| FFmpeg | /ffmpeg | Video/audio conversion, encoding, filtering, trimming, GIF creation |
| ImageMagick 7 | /imagemagick | Image resize, crop, annotate, watermark, composite, batch processing |
| python-pptx | /python-pptx | Native PowerPoint (.pptx) generation |
| TypeScript | /typescript | Run TypeScript scripts directly via tsx |
| Database | /database | SQL queries, schema inspection, Flyway migrations, ER diagrams |
| Language | Version | Tools available |
|---|---|---|
| Java | 21 (Eclipse Temurin) | Maven 3.9 (+ Quarkus CLI for the java-angular bundle) |
| Node.js | 24 | npm (+ Angular CLI for the java-angular bundle) |
| Python | 3 | pip, venv |
| Go | system | |
| TypeScript | via tsx | esbuild-based, zero-config |
| C/C++ | gcc/g++ | make, build-essential |
Framework CLIs (Quarkus, Angular CLI, etc.) are installed unconditionally so any bundle that opts into them works out of the box, but the image itself doesn't promote any specific framework.
Claude Code agent teams are enabled by default (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1). This lets you orchestrate multiple Claude Code instances working together — a lead agent coordinates teammates, each running in its own context window with shared task lists and direct messaging. No manual setup needed.
The Docker image itself ships no agent definitions — they come from the use-case bundle you unzip. The java-angular bundle ships a 5-agent team (lead, backend, frontend, reviewer, tester) as native Claude Code subagent files under .claudenius-setup/agents/, plus a workflow/protocol document at .claudenius-setup/agent-team/workflow.md. The lead orchestrates via Agent({subagent_type: 'backend'}) etc.; subagent prompts load automatically. To create your own roles, drop more <role>.md files into .claudenius-setup/agents/ (YAML frontmatter with name, description, optional tools and model).
You can paste (Ctrl+V) or drag-and-drop files directly onto the web terminal — images, PDFs, CSVs, logs, anything — and have the agent read them. The browser terminal is served through a small proxy that captures the file in the browser, saves it to .claudenius-data/drops/, and types a filedrop token into your prompt. A toast confirms where each file landed.
In a claude session, just paste or drop your file(s) and ask:
filedrop what does this screenshot show?
filedrop analyse the last 3 PDFs I dropped
A UserPromptSubmit hook (installed automatically) expands filedrop into a newest-first list of your recent drops and points Claude at the relevant file(s) — the Read tool renders images visually and reads text/PDF as content. Multiple files in one paste/drop are supported. Dropped files live in .claudenius-data/drops/ (gitignored).
GitHub CLI (gh), Gemini CLI, Docker CLI + Compose, git-lfs, shellcheck, pandoc, jq, yq, sqlite3, PostgreSQL/MySQL clients
The image bakes a Quarkus + Java + Angular default stack (the 5-agent dev team, the 9 baseline rules, the 40-stack ruleset). Run docker run hauschi86/claudenius-studio:latest and the agent is ready for full-stack Java/Angular work with no setup.
To use a different stack — or no stack at all — unzip a bundle ZIP. Every bundle ships .claudenius-setup/.skip-default, which tells the entrypoint to ignore image defaults entirely; the bundle's .claudenius-setup/ becomes the complete truth.
| Bundle | What it ships | Effective behavior |
|---|---|---|
minimal | Baseline rules only (security, networking, tools, persistence). No 40-stack.md. No agents. | The Java/Angular default is skipped; the agent has the 8 stack-agnostic rules and no opinionated stack — picks the right tech per task. |
java-angular | Same 9 baseline rules + 40-stack.md (Quarkus/Angular) + the 5-agent dev team. | Identical stack-policy outcome to the bare image, but the bundle also ships docker-compose.yml, .env, .gitignore, and agent-team/workflow.md — and you can edit any of the rules locally. |
Other bundles (python-fastapi, react-frontend, etc.) can be added by following the recipe in bundles/assembly/README.md in the source repo. They get the same .skip-default treatment automatically.
Skills are exempt from skipping — /mermaid, /playwright, /ffmpeg, etc. always merge from image defaults regardless of .skip-default, because they're tightly coupled to the binaries the image ships.
| Internal Port | Purpose |
|---|---|
| 14000 | Web terminal (ttyd) |
| 14001 | PostgreSQL (when using compose) |
| 14002 | File Browser (browse/download agent files) |
| 14003-14100 | Agent-launched applications (dev servers, APIs, previews) |
HOST_PORT_BASE)By default, the container's internal ports (14000-14100) are mapped 1:1 to the host. If you need a different host port range — for example, to run multiple instances or avoid conflicts — set HOST_PORT_BASE:
# Example: map to host ports 22000-22100
services:
claude-agent:
ports:
- "22000:14000"
- "22002-22100:14002-14100"
environment:
HOST_PORT_BASE: "22000"
The agent reads HOST_PORT_BASE and automatically adjusts the URLs it gives you. The File Browser at internal port 14002 becomes http://localhost:22002, and so on for all agent-launched services.
The agent can build Docker images and manage containers on the host when the Docker socket is mounted. It has the Docker CLI and Docker Compose plugin pre-installed.
Security guardrails are enforced via CLAUDE.md (Claude Code's context file). The agent is instructed to never use --privileged, --pid=host, --net=host, or mount sensitive host paths (/, /etc, /var/run/docker.sock). It is also restricted from stopping or removing containers it didn't start, and from running destructive commands like docker system prune. These are soft guardrails — they rely on the AI model respecting its instructions, not on kernel-level enforcement.
Provide GIT_REPO and GIT_TOKEN environment variables to give the agent a Git repository for persisting its work. The agent commits and pushes changes automatically.
java-angular bundle, or your own pick)filedrop — images, PDFs, CSVs, …)Browser
|
+-- http://localhost:14000 --> ttyd (web terminal)
+-- http://localhost:14002 --> File Browser (browse/download files)
|
v
bash (agent user, passwordless sudo)
|
v
Claude Code CLI / Gemini CLI
|
+-- 6 creative tools (Mermaid, Playwright, FFmpeg, ImageMagick, python-pptx, TypeScript)
+-- Language runtimes: Java 21 + Maven, Node.js 24 + npm, Python 3, Go, C/C++
+-- Framework CLIs (opt-in via bundles): Quarkus, Angular CLI
+-- Docker CLI (host engine)
+-- PostgreSQL (network)
+-- Git (persistent storage)
| Architecture | Use Case |
|---|---|
linux/amd64 | Standard x86_64 servers, desktops, cloud VMs |
linux/arm64 | Raspberry Pi 4/5, Apple Silicon (via Docker Desktop), AWS Graviton |
Docker automatically pulls the correct image for your platform.
node:24-bookworm (Debian 12)
MIT
Content type
Image
Digest
sha256:1dd93a9be…
Size
2.1 GB
Last updated
2 months ago
docker pull hauschi86/claudenius-studio