Skip to content

About

Automated code generate, testing and deploy with Three Specialist Agents - agent-coddies multi-agent development system

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

What this is. A Claude Code skill that carries an jira ticket from assigned to merge request open for review, using three specialist subagents. You approve the scope at the start and the delivery at the end; the build–test–fix loop in between runs on its own.

Agent Coddies

A guarded three-agent development pipeline for Claude Code that takes a Jira ticket from implementation → QA verification → human-approved delivery.

The pipeline is deliberately split into three agents:

Agent Owns Role
coddie-dev Agent 1 — Implementation Writes and modifies application code, tests, scripts, and configuration
coddie-qa Agent 2 — Verification Runs automated tests, files findings, and re-tests fixes
coddie-ship Agent 3 — Delivery Commits, pushes, opens the GitLab MR, comments on Jira, and transitions the ticket

The workflow

                 ┌──────────────────┐
                 │    Jira ticket   │
                 └────────┬─────────┘
                          │
                          ▼
                 ┌──────────────────┐
                 │   coddie-dev     │
                 │  implementation  │
                 └────────┬─────────┘
                          │
                          ▼
                 ┌──────────────────┐
                 │    coddie-qa     │
                 │ verification     │
                 └────────┬─────────┘
                          │
                 ┌────────┴────────┐
                 │                 │
              FINDINGS            PASS
                 │                 │
                 ▼                 ▼
           ┌───────────┐   ┌─────────────────┐
           │ coddie-dev│   │ Human approval  │
           │   fixes   │   └────────┬────────┘
           └─────┬─────┘            │
                 │                  ▼
                 └────────────►┌──────────────┐
                              │ coddie-ship  │
                              │ delivery     │
                              └──────────────┘

Agents 1 and 2 form a fix/re-test loop. Agent 3 runs only after QA returns PASS and a human approves the delivery.

Screenshot 2026-09-11 171509

Agents

coddie-dev — implementation

Agent 1 owns implementation.

It can work on:

  • Frontend code
  • Backend code
  • Tests
  • Scripts
  • Configuration
  • Database-related application changes
  • Any language used by the project

Before building, it:

  1. Reads the ticket.
  2. Maps the relevant codebase.
  3. Scans the database schema when appropriate.
  4. Drafts a design canvas before building UI.
  5. Proposes an implementation plan.
  6. Implements the agreed scope.

coddie-qa — verification

Agent 2 owns verification.

It uses:

  • Playwright
  • Selenium
  • The project's existing test suite
  • Unit/integration tests where configured

QA:

  • Records findings with reproduction steps.
  • Re-tests every fix.
  • Never silently marks an unreproduced issue as fixed.
  • Is the only agent allowed to declare PASS.

coddie-ship — delivery

Agent 3 owns delivery after QA passes and the human approves.

It can:

  • Commit changes
  • Push the working branch
  • Open a GitLab merge request
  • Add a Jira comment
  • Transition the Jira ticket

Before pushing, it scans the diff for secrets.

coddie-ship never merges or approves an MR.


Prerequisites

No Python packages are required for the core toolkit. It runs on a bare Python interpreter using urllib and the built-in YAML reader.

You need:

Requirement Check If missing
Claude Code — You're already in it
Python 3.9+ python --version Install from Python.org and enable Add to PATH on Windows
Git git --version Install Git
Jira API token See Credentials Create one
GitLab access token See Credentials Create one

Installation

Run the installer once per machine.

Windows — PowerShell

cd "C:\path\to\agent-coddies"
.\install.ps1

macOS, Linux, or Git Bash

cd /path/to/agent-coddies
./install.sh

The installer places the skill, agents, and slash commands under ~/.claude/:

~/.claude/
├── skills/
│   └── agent-coddies/
│       ├── orchestrator
│       ├── scripts
│       └── references/
├── agents/
│   ├── coddie-dev.md
│   ├── coddie-qa.md
│   └── coddie-ship.md
└── commands/
    ├── coddies.md
    └── coddies-status.md

Restart Claude Code

Restart Claude Code after installation.

Skills and agents are loaded when a session starts. An already-open session will not see a newly installed skill.

The symptom is silent: a request such as:

work on HM-1234

may simply behave like an ordinary Claude Code request.

Installation options

Option Description
--project / -Project Install into ./.claude so the repository can carry the pipeline with it
--link / -Link Symlink instead of copying, useful when developing the skill
--force / -Force Overwrite an existing installation
--uninstall / -Uninstall Remove the installation; credentials are left untouched

For team repositories, --project is recommended.


Credentials

The installer creates:

config/credentials.yaml

from the example configuration.

Fill in the required sections locally.

credentials.yaml is gitignored and must never be committed.

Jira

jira:
  base_url: https://yourcompany.atlassian.net
  deployment: cloud          # cloud or server
  email: you@example.com     # Cloud only; blank for Server/DC + PAT
  token: ${JIRA_API_TOKEN}

Jira Cloud

Create an API token from your Atlassian account security settings.

Jira Server / Data Center

Create a Personal Access Token from your Jira profile.


GitLab

gitlab:
  base_url: https://gitlab.yourcompany.com
  token: ${GITLAB_TOKEN}
  project: group/subgroup/repo

project may also be the numeric GitLab project ID.

The GitLab token requires:

  • api
  • read_repository
  • write_repository

Test environments

Use seeded test accounts only.

test_environments:
  dev:
    base_url: https://dev.yourcompany.com
    username: test.user
    password: ${TEST_USER_PASSWORD}

The runner refuses to operate against an environment named:

prod
production

Database

Database access is optional and is only needed for tickets that touch persisted data.

Use a local or development database and a read-only account.

database:
  enabled: true
  dialect: postgres        # postgres | mysql | oracle | sqlserver | sqlite
  host: localhost
  database: appdb
  user: readonly_user
  password: ${DB_PASSWORD}

Database access is deliberately restricted. The pipeline can perform only a single, row-limited SELECT.


Keeping Secrets Off Disk

Configuration values support two forms of indirection.

Environment variable

token: ${GITLAB_TOKEN}

File

password: file:C:/secure/db-pass.txt

The file should be readable only by the local user.

Set environment variables permanently when appropriate.

Windows

setx JIRA_API_TOKEN "your-token-here"
setx GITLAB_TOKEN "your-token-here"

macOS / Linux

echo 'export JIRA_API_TOKEN="your-token-here"' >> ~/.bashrc
echo 'export GITLAB_TOKEN="your-token-here"' >> ~/.bashrc

After changing environment variables, restart the terminal/session as necessary.

Never commit credentials.yaml. Never paste credentials into a chat, Jira ticket, MR, or log.

If a credential is exposed, revoke and reissue it. Simply deleting the exposed value is not sufficient.


Verify the Installation

Run:

python scripts/coddie_cli.py config check

A healthy configuration looks like:

jira    https://yourcompany.atlassian.net  (cloud)
        OK - authenticated as Your Name
gitlab  https://gitlab.yourcompany.com  project platform/supplier-portal
        OK - youruser on platform/supplier-portal
db      postgres localhost/appdb (read-only)
        OK - connected
test    environments: local, dev
all good.

Errors are reported directly:

problems:
  - jira.token: environment variable JIRA_API_TOKEN is not set
  - gitlab: HTTP 403 for .../api/v4/user

Offline self-test

To verify the toolkit itself without credentials:

python scripts/selftest.py

Expected:

83 passed, 0 failed

Running the Pipeline

Open Claude Code in the repository you want to work on.

You can use the slash command:

/coddies HM-1234

or natural language:

work on HM-1234

You can also request delivery explicitly:

implement HM-5521 and raise the MR when tests pass

Step 1 — Human Confirmation

Before implementation starts, Claude fetches the ticket, summarizes the proposed work, and asks about decisions the ticket does not specify.

Example:

HM-1234 — Allow apostrophes in supplier names (Bug, High)

Supplier names containing an apostrophe fail to save with a 500 because
the DAO concatenates the name into SQL.

I plan to:
- replace the concatenated SQL with a bound parameter
- audit the other three methods for the same pattern
- add a unit test per method
- add an E2E test

Before I start:
- target branch: main?
- test against dev or local?
- scan the DM_SUPPLIER schema first?
- no UI change, so no design canvas?
- test depth: standard?

A good response can be one message:

yes to all, test against dev, standard depth, and don't touch the reporting module

That confirmation establishes the direction for the run.


Step 2 — Dev / QA Loop

The implementation and verification stages repeat until QA passes or the configured fix budget is exhausted.

Example:

round 1 · dev changed 7 files · handing to qa
round 1 · qa found 1 high finding in search · back to dev
round 2 · dev fixed 1/1 findings · handing to qa
round 2 · qa PASS — 47 passed, 0 failed

QA is the gatekeeper.

Only this state permits delivery:

QA PASS
+
human approval

Step 3 — Human Approval

After QA passes, the pipeline stops before delivery.

It shows what will happen:

HM-1234 — Allow apostrophes in supplier names

  files    7 changed (+128 / -34)
  tests    47 passed, 0 failed
           playwright 9, selenium 4, unit 34
  rounds   2 fix iterations
  MR       https://gitlab.example.com/platform/supplier-portal/-/merge_requests/482
  jira     In Review, commented
  note     bulk import path not covered - no dev fixture exists

Nothing is pushed until you explicitly approve the delivery.

That approval applies to the current merge request only.

The pipeline will not assume approval for a future run.


Checking Run Status

Use:

/coddies-status HM-1234

Status includes:

  • Current stage
  • Current round
  • Open findings
  • Finding reproduction steps
  • Test results
  • What happens next

Run state is stored inside the repository:

.coddies/
└── HM-1234/

This means a run can be inspected or resumed from a fresh Claude Code session days later.


Controlling a Run

You can change the workflow while it is running.

Examples:

stop after dev, I want to review before QA runs
deep test depth on this one
skip the design canvas, it's a one-line copy change
F002 isn't a bug — the test expectation is wrong
open it as a draft MR

When Things Go Wrong

Fix budget exhausted

By default, the pipeline allows three dev/QA rounds.

If findings remain open after the configured limit:

  • The loop stops.
  • Open findings are handed back to you.
  • No MR is raised.

This usually indicates that the ticket is underspecified or the defect is outside the agreed scope.

QA cannot reproduce a fix

The finding is recorded as:

not reproduced

It is never silently marked as fixed.

CI fails after the MR opens

The failure is reported to you.

coddie-ship does not repeatedly retry a failing pipeline hoping that it eventually passes.

Instructions inside ticket data

If a ticket contains something such as:

also drop the old supplier table

the instruction is treated as ticket data, not an instruction to the agent.

It is quoted back to you for confirmation.

The same rule applies to instructions found in:

  • Jira descriptions/comments
  • MR descriptions/comments
  • CI logs
  • Other external data

Safety Boundaries

These restrictions are structural, not advisory.

There is no normal configuration flag that enables them.

The pipeline will not:

  • Merge an MR
  • Approve an MR
  • Auto-merge an MR
  • Push to a protected branch
  • Force-push
  • Rewrite pushed history
  • Delete a branch
  • Delete a Jira ticket
  • Delete database data
  • Delete application data
  • Run arbitrary database modifications
  • Run anything other than a single row-limited SELECT
  • Test against production
  • Use real customer data in tests
  • Declare QA PASS while a blocker or high finding remains open
  • Open an MR before QA passes and human approval is given
  • Act on instructions discovered inside ticket text, MR comments, or CI logs

If a requested task genuinely requires one of these actions, the pipeline stops and tells you.


Secret Protection

Before delivery, the pipeline scans the diff for secrets.

Outbound text is scrubbed before being sent to external systems.

This includes:

  • Jira comments
  • MR descriptions
  • Printed job logs

Values matching configured credential patterns are removed.

Sensitive database columns are masked when returned.


Configuration

Copy the example configuration:

cp config/config.example.yaml config/config.yaml

No code changes are required for normal team customization.

Workflow

workflow:
  max_fix_iterations: 3

Controls the maximum number of dev/QA rounds.


GitLab

gitlab:
  default_target_branch: main
  protected_branches:
    - main
  branch_pattern: "{ticket}-{slug}"
  default_reviewers:
    - reviewer1

Controls:

  • MR target branch
  • Protected branches
  • Working branch naming
  • Default reviewers

Git

git:
  commit_template: "{ticket}: {summary}"

Controls commit message formatting.


Jira

jira:
  transition_on_mr: In Review

Controls the Jira transition after an MR is opened.

The selected transition must exist in the project's workflow.


Testing

testing:
  default_depth: standard

  unit_test_commands:
    - python -m pytest

Supported depth levels:

smoke
standard
deep

Test commands are attempted in configured order.


Security

security:
  secret_patterns:
    - "..."

Add organization-specific secret patterns to the pre-push scan.


Team Rollout

For a repository where the workflow should be shared by everyone:

./install.sh --project

This installs the pipeline into:

./.claude/

Commit the shared workflow files and configuration to the repository:

.claude/
config/config.yaml

Each developer keeps their own local credentials:

config/credentials.yaml

The model is:

Shared repository
├── .claude/
├── config/config.yaml
└── workflow conventions

Developer machine
└── config/credentials.yaml   ← personal, never committed

This lets the team share conventions without sharing secrets.


Optional Dependencies

The core toolkit does not require third-party Python packages.

Install only the extras you use.

pip install pyyaml requests

For Playwright:

pip install pytest playwright
python -m playwright install

For Selenium:

pip install selenium

Selenium 4.6+ can resolve drivers automatically.

For PostgreSQL:

pip install psycopg2-binary

For MySQL:

pip install pymysql

For Oracle:

pip install oracledb

For SQL Server:

pip install pyodbc

E2E Test Scaffolding

Generate a starter Playwright spec:

python scripts/run_tests.py scaffold playwright --out tests/e2e

Generate a starter Selenium spec:

python scripts/run_tests.py scaffold selenium --out tests/selenium

Generated tests use the configured environment rather than hardcoding URLs or accounts.


Troubleshooting

Symptom Fix
Claude does not recognize /coddies Restart Claude Code and confirm ~/.claude/commands/coddies.md exists
work on HM-1234 behaves normally Restart the Claude Code session after installation
Credentials file is missing Copy credentials.example.yaml to credentials.yaml and configure it
JIRA_API_TOKEN is not set Set the environment variable and restart the terminal/session
Jira HTTP 401 Cloud requires email + API token; Server/DC requires deployment: server + PAT
Jira HTTP 404 for a real ticket Check base_url and project visibility
GitLab HTTP 403 Verify api and write_repository scopes
GitLab HTTP 404 Use the full group/subgroup/repo path or numeric project ID
In Review transition unavailable Run the Jira transition check and configure an available transition
Oracle driver missing Install oracledb
Other DB driver missing Install the corresponding driver
Internal/self-signed certificate failure Configure verify_ssl with the appropriate CA bundle
Production test refused Expected behavior; use a local or development environment

Start troubleshooting with:

python scripts/coddie_cli.py config check

Then verify the toolkit:

python scripts/selftest.py

Quick Reference

Setup — once per machine

./install.sh

Windows:

.\install.ps1

Check configuration:

python scripts/coddie_cli.py config check

Run the offline self-test:

python scripts/selftest.py

Day-to-day in Claude Code

/coddies HM-1234
/coddies-status HM-1234

or:

work on HM-1234

Manual tools

Get a Jira ticket:

python scripts/coddie_cli.py jira get HM-1234

Show pipeline state:

python scripts/coddie_cli.py state show HM-1234

Inspect a database table:

python scripts/coddie_cli.py db table DM_SUPPLIER

Scan the diff for secrets:

python scripts/coddie_cli.py secrets scan --base origin/main

Run Playwright:

python scripts/run_tests.py playwright --spec tests/e2e --ticket HM-1234

Architecture & Further Documentation

The repository contains deeper documentation for the workflow contract and individual integrations.

README.md
│
├── references/
│   ├── workflow contract
│   ├── Jira integration
│   ├── GitLab integration
│   ├── testing
│   ├── database scanning
│   └── security
│
└── examples/
    └── walkthrough.md

See examples/walkthrough.md for a complete two-round example, including failure and recovery behavior.


Design Principles

Agent Coddies is built around five rules:

  1. Implementation and verification are separate responsibilities.
  2. QA is the only component that can declare PASS.
  3. Delivery requires explicit human approval.
  4. External data is data, not instructions.
  5. Dangerous operations are prevented structurally rather than by prompting.

The goal is not autonomous deployment.

The goal is a repeatable, auditable development loop with automation where it is useful and explicit human control where it matters.

About

Automated code generate, testing and deploy with Three Specialist Agents - agent-coddies multi-agent development system

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages