Skip to content

Creating an Agent

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.

  1. Create a GitHub repository

    Name it jackin-{your-agent-name}. For example, jackin-rustacean for a Rust-focused agent.

  2. Create the manifest file

    jackin.agent.toml
    dockerfile = "Dockerfile"
    [claude]
    plugins = []
    [identity]
    name = "Rustacean"
  3. Create the Dockerfile

    Dockerfile
    FROM projectjackin/construct:trixie
    # Install Rust via mise
    RUN mise install rust@stable && mise use --global rust@stable
    # Install additional Rust tools
    RUN cargo install cargo-nextest cargo-watch
  4. Push to GitHub

    Terminal window
    git add -A && git commit -m "Initial agent setup"
    git push origin main
  5. Load your agent

    Terminal window
    jackin load rustacean

Your final stage must start from the construct image:

FROM projectjackin/construct:trixie

Use earlier stages for compilation or asset preparation:

# Build stage — use any base image
FROM rust:1.87-slim AS builder
WORKDIR /build
COPY tools/ .
RUN cargo build --release
# Final stage — must use the construct
FROM projectjackin/construct:trixie
COPY --from=builder /build/target/release/my-tool /usr/local/bin/

The construct ships with mise — a polyglot version manager. Use it to install languages:

Node.js
RUN mise install node@22 && mise use --global node@22
# Python
RUN mise install python@3.12 && mise use --global python@3.12
# Go
RUN mise install go@1.23 && mise use --global go@1.23
# Multiple languages
RUN mise install node@22 python@3.12 go@1.23 && \
mise use --global node@22 python@3.12 go@1.23

The construct switches to the claude user. Your Dockerfile commands run as that user. If you need root access:

USER root
RUN apt-get update && apt-get install -y some-package
USER claude

Agent repos can declare Claude Code plugins to install. Add them to the [claude] section in your manifest:

jackin.agent.toml
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.

The fastest way to test is to load it:

Terminal window
jackin load your-agent-name --rebuild

The --rebuild flag forces a fresh image build, picking up any Dockerfile changes.

Use --debug to see raw Docker output if something goes wrong:

Terminal window
jackin load your-agent-name --rebuild --debug
AgentPurposeRepository
Agent SmithDefault general-purpose agentdonbeave/jackin-agent-smith
The ArchitectRust 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.