An AβZ, human-gated ticket pipeline for the UNIOSS team.
A GitLab ticket in β an investigated, planned, coded, reviewed, tested, ship-ready change out.
An AI Agent plugin by ttncode.
- Agents miss deep context β misread the ask, ship the wrong thing.
- Passive agents, verbose replies, hard to act on.
- Every run means re-writing the same detailed brief from scratch.
- Feature checks still done by hand in the browser.
- Agent thinks before it acts β unclear ask gets clarified, never spec'd blind.
- One ticket URL in β a ship-ready, high-quality change out.
- Every stage automated: Investigate β Spec β Plan β Code β Review β Scope β Verify (test cases + evidence) β Ship.
Sub-agents
- Investigator β reads the ticket in depth (title, description, related tickets, comments), the codebase, and production DB.
- Planner β brainstorms to clarify the ask, writes the spec + plan (line-by-line real changes β no placeholders, no "TBD").
- Coder β writes clean code, 100% spec-compliant, backed by passing unit tests.
- Reviewer β checks the diff against UNIOSS's own review checklist.
- Scope β maps the blast radius of the change.
- Verify β writes test cases, drives the feature end-to-end, captures evidence screenshots.
- Shipper β pushes the branch and opens the merge request.
Quality & safety
- Human-gated β stops at 4 gates (clarify, spec, plan, review).
- Protected branches β direct pushes to
master,v3-master,v3-develop, etc. are blocked. - Read-only GitLab token β API scope can't write, so nothing gets touched by accident.
8 stages, 4 human gates. Gates stop for approval β nothing runs until you confirm:
sequenceDiagram
autonumber
actor You as You (PM)
participant Main as Main Agent
participant Inv as Investigator (opus)
participant Spec as Spec Writer (sonnet)
participant Plan as Planner (opus)
participant Rev as Reviewer (opus)
participant Scope as Scope (sonnet)
participant Ver as Verify (sonnet)
You->>Main: /unioss-pipeline <gitlab-url>
Main->>Inv: dispatch β read ticket + codebase + DB
Inv->>Main: INVESTIGATION.md + REPORT.md
Main->>You: GATE 0 β clarify (only if unclear)
You->>Main: confirm
Main->>Spec: dispatch β write spec
Spec->>Main: SPEC.md
Main->>You: GATE 1 β approve spec / edit
You->>Main: approve
Main->>Plan: dispatch β write plan
Plan->>Main: IMPLEMENTATION_V1.md
Main->>You: GATE 2 β approve plan / edit
You->>Main: approve
Main->>Main: Code β CHANGES.md + fast tests
Main->>Rev: dispatch β review diff
Rev->>Main: REVIEW.md
Main->>You: GATE 3 β fix / accept
You->>Main: accept
Main->>Scope: dispatch β map blast radius
Scope->>Main: SCOPE.md
Main->>Ver: dispatch β black-box verify (DB+UI)
Ver->>Main: TEST_RESULTS.md
note over Main,You: Finalize β branch + commit (no push/MR)
From Claude Code:
/plugin marketplace add https://github.com/ttncode/unioss-plugins
/plugin install unioss-pipelineagy plugin install https://github.com/ttncode/unioss-plugins
# If the plugin hasn't been loaded yet -> Ask the agent to load itcodex marketplace add https://github.com/ttncode/unioss-plugins
codex plugin install unioss-pipelineAfter installation, run /unioss-doctor to verify the environment.
Pipeline (unioss-pipeline plugin)
| Command | What |
|---|---|
/unioss-doctor |
Check dependencies |
/unioss-pipeline <gitlab-url> |
New ticket β e.g. /unioss-pipeline https://gitlab.unioss.jp/unioss/AdminPage/-/work_items/1834 |
/unioss-ship staging |
Create a new merge request into v3-develop-tps branch |
/unioss-ship customer |
Create a new merge request into v3-develop branch (sync with the v3-master branch & re-run tests) |
/unioss-mr-feedback <merge-url> [...] |
Reviewer feedback β e.g. /unioss-mr-feedback https://gitlab.unioss.jp/unioss/AdminPage/-/merge_requests/3818 |
/unioss-feedback <gitlab-url> |
Customer feedback β e.g. /unioss-feedback https://gitlab.unioss.jp/unioss/AdminPage/-/work_items/1834 |
/unioss-task "<description>" |
Specific task β e.g. /unioss-task "Add a CSV export button to the product detail screen" |
/unioss-api-spec <endpoint|controller> |
Write the API spec for a new/changed endpoint |
Commonly used:
Something broke? β run /unioss-doctor first.
New ticket, start to ship
/unioss-pipeline <gitlab-url>β full AβZ run, approve at each gate/unioss-ship stagingβ ship to staging/unioss-mr-feedback <merge-url>β improve based on the reviewer's feedback (if any)/unioss-ship customerβ ship to customer
Customer feedback on a shipped ticket
/unioss-feedback <gitlab-url>β improve based on the customer's feedback/unioss-ship stagingβ re-ship to staging/unioss-ship customerβ ship to customer
Everything lives in one file: .walkthrough/.config/unioss.config.json. You can change it if needed.
- Setup: run
/unioss-doctorβ scaffolds the file, checks it, and offers fixes. - Module keys:
admin-page,front-end,common-helper,common-modelsβ each has a disk path (source.modules.<key>) and a GitLab project id (gitlab.projects.<key>). - Secrets (env only):
GITLAB_TOKEN(required).
| Dependency | Required | Notes |
|---|---|---|
| Node.js | β | Hooks and scripts |
| jq | β | JSON processing |
Docker + mysql-unioss3 + php-unioss3 |
β | DB + PHP runtime |
GITLAB_TOKEN env var |
β | GitLab API access |
| Google Chrome | β | Tester UI verification (Playwright MCP) |
Run /unioss-doctor to check and auto-fix them all.
