Creating an Agent
Overview
Section titled “Overview”Creating a custom agent lets you define a specialized environment for a specific type of work. A Rust agent includes the Rust toolchain. A Python data science agent includes Jupyter, pandas, and scipy. You define the tools — jackin’ handles the rest.
Step by step
Section titled “Step by step”-
Create a GitHub repository
Name it
jackin-{your-agent-name}. For example,jackin-rustaceanfor a Rust-focused agent. -
Create the manifest file
jackin.agent.toml dockerfile = "Dockerfile"[claude]plugins = [][identity]name = "Rustacean" -
Create the Dockerfile
Dockerfile FROM projectjackin/construct:trixie# Install Rust via miseRUN mise install rust@stable && mise use --global rust@stable# Install additional Rust toolsRUN cargo install cargo-nextest cargo-watch -
Push to GitHub
Terminal window git add -A && git commit -m "Initial agent setup"git push origin main -
Load your agent
Terminal window jackin load rustacean
Dockerfile guidelines
Section titled “Dockerfile guidelines”The construct base is required
Section titled “The construct base is required”Your final stage must start from the construct image:
FROM projectjackin/construct:trixieMulti-stage builds are supported
Section titled “Multi-stage builds are supported”Use earlier stages for compilation or asset preparation:
# Build stage — use any base imageFROM rust:1.87-slim AS builderWORKDIR /buildCOPY tools/ .RUN cargo build --release
# Final stage — must use the constructFROM projectjackin/construct:trixieCOPY --from=builder /build/target/release/my-tool /usr/local/bin/Use mise for language management
Section titled “Use mise for language management”The construct ships with mise — a polyglot version manager. Use it to install languages:
RUN mise install node@22 && mise use --global node@22
# PythonRUN mise install python@3.12 && mise use --global python@3.12
# GoRUN mise install go@1.23 && mise use --global go@1.23
# Multiple languagesRUN mise install node@22 python@3.12 go@1.23 && \ mise use --global node@22 python@3.12 go@1.23Install packages as the claude user
Section titled “Install packages as the claude user”The construct switches to the claude user. Your Dockerfile commands run as that user. If you need root access:
USER rootRUN apt-get update && apt-get install -y some-packageUSER claudeClaude plugins
Section titled “Claude plugins”Agent repos can declare Claude Code plugins to install. Add them to the [claude] section in your manifest:
dockerfile = "Dockerfile"
[claude]plugins = ["code-review@claude-plugins-official"]
[identity]name = "My Agent"These plugin IDs are written into the agent’s runtime state and installed automatically when the container starts.
Testing your agent
Section titled “Testing your agent”The fastest way to test is to load it:
jackin load your-agent-name --rebuildThe --rebuild flag forces a fresh image build, picking up any Dockerfile changes.
Use --debug to see raw Docker output if something goes wrong:
jackin load your-agent-name --rebuild --debugExample agents
Section titled “Example agents”| Agent | Purpose | Repository |
|---|---|---|
| Agent Smith | Default general-purpose agent | donbeave/jackin-agent-smith |
| The Architect | Rust development (used for jackin’ itself) | donbeave/jackin-the-architect |
These repos are good starting points when creating your own agent. Agent Smith is intentionally minimal, while The Architect shows a more involved setup with Rust tooling and build dependencies.