Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/MANIFEST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Manifest

## Skills authored by this package (exactly 3)

- `skills/planner/SKILL.md`
- `skills/executor/SKILL.md`
- `skills/verifier/SKILL.md`

## Upstream skills/capabilities installed by `install.sh` / `install.ps1`

- `ui-ux-pro-max` — nextlevelbuilder/ui-ux-pro-max-skill
- `impeccable` — pbakaus/impeccable
- `graphify` — Graphify-Labs/graphify
- `archify` — tt-a1i/archify

Schemas, profiles, policies, and scripts are support files, not skills.
82 changes: 82 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Agent Stack v5 Minimal

## Why this shape

The stack is deliberately small. We do not maintain our own copies of debugging, regression, UI, architecture, or repo-search methodologies as separate skills. Those rules live inside the three role wrappers, while specialized capability is delegated to upstream tools.

### Owned skills

1. **planner** — evidence-first plan, architecture/UI impact, acceptance and verification contract.
2. **executor** — plan adherence, coherent implementation, root-cause-first failure handling, hard anti-loop stop.
3. **verifier** — independent requirement/regression/architecture/rendered-UI verification.

### Upstream capabilities

- **Graphify**: persistent local code graph. The official Python package is `graphifyy`; CLI command is `graphify`.
- **Archify**: source-backed architecture/workflow/data-flow diagrams and validation.
- **UI UX Pro Max**: real design datasets/templates/search tooling installed under `.agents/skills/`.
- **Impeccable**: one UI design skill, rendered/live workflows, deterministic detector suite and Codex hook.

## Target layout after installation

```text
repo/
├── AGENTS.md
├── .omp/RULES.md
├── .agents/skills/
│ ├── planner/ # ours
│ ├── executor/ # ours
│ ├── verifier/ # ours
│ ├── graphify/ # upstream
│ ├── archify/ # upstream
│ ├── ui-ux-pro-max/ # upstream
│ └── impeccable/ # upstream
├── .agent-stack/
│ ├── profile
│ ├── schemas/
│ └── chatgpt-work/
├── .codex/hooks.json # installed by Impeccable for Codex
└── graphify-out/ # graph data
```

OMP natively discovers `.agents/skills/`, so the same skill library works for OMP and Codex without duplicate authored skills.

## Usage

You normally do not invoke every capability manually. Give the task as normal. The role wrappers decide when Graphify/Archify/UI UX Pro Max/Impeccable are needed.

Manual phase testing is still possible:
- `$planner`, `$executor`, `$verifier` in Codex-style skill invocation;
- `/skill:planner`, `/skill:executor`, `/skill:verifier` in OMP.

### UI flow

`planner -> UI UX Pro Max -> UI contract -> executor -> rendered UI -> Impeccable -> verifier`

### Anti-loop flow

First unexpected regression: reproduce and prove root cause before another edit.
Second unexpected regression: stop and replan.

## ChatGPT Work

The installer builds one ZIP per installed skill under:

`.agent-stack/chatgpt-work/upload-ready/`

ChatGPT supports uploaded Skills. Upload the skills you want in ChatGPT's Skills UI. The repository also gets `.agent-stack/chatgpt-work/PROJECT_INSTRUCTIONS.md`, which can be pasted into project instructions or used as the workflow reference when Work operates on a local folder.

## Updating upstream capabilities

Re-run the installer, or update individually:

```bash
npx -y ui-ux-pro-max-cli@latest init --ai universal --force
npx -y impeccable update
npx -y skills add tt-a1i/archify --skill archify --agent codex --copy --yes
uv tool install --upgrade graphifyy
graphify install --project --platform agents
graphify hook install
```

After an Impeccable update, Codex may ask you to approve the updated hook again.
54 changes: 54 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/README_FIRST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Agent Stack v5 Minimal — start here

This is the corrected minimal version: **3 skills we own + 4 upstream capabilities**.

We own only:
- `planner`
- `executor`
- `verifier`

Installed upstream:
- Graphify — repo graph / dependency grounding
- Archify — architecture and flow modeling
- UI UX Pro Max — UI/UX design intelligence and templates
- Impeccable — rendered UI review, deterministic detectors, design workflow

Nothing else is authored as a skill. Schemas, policies, profile files and installer scripts are not skills.

## Install

From the target repository:

```bash
/path/to/agent-stack-v5-minimal/install.sh .
```

Windows PowerShell:

```powershell
& "C:\path\to\agent-stack-v5-minimal\install.ps1" -Target .
```

The installer is project-local where possible so OMP and Codex see the same `.agents/skills/` library.

## After install

For Impeccable, initialize the product/design context once inside your harness. In Codex use `$impeccable init`; in OMP invoke the Impeccable skill and run its `init` flow. In Codex, approve the project hook once via `/hooks`.

Then use your coding agent normally. For non-trivial changes, `AGENTS.md` enforces:

`planner -> executor -> verifier`

## Syntaro mode

Same skills, stricter policy:

```bash
python3 .agent-stack/bin/select_profile.py syntaro
```

Switch back:

```bash
python3 .agent-stack/bin/select_profile.py coding
```
11 changes: 11 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/docs/SOURCES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Upstream install references

Verified against upstream documentation on 2026-09-28.

- UI UX Pro Max: https://github.com/nextlevelbuilder/ui-ux-pro-max-skill
- Impeccable: https://github.com/pbakaus/impeccable
- Graphify: https://github.com/Graphify-Labs/graphify
- Archify: https://github.com/tt-a1i/archify
- OMP skills discovery: https://github.com/can1357/oh-my-pi/blob/main/docs/skills.md
- ChatGPT Skills: https://help.openai.com/en/articles/20001066-skills-in-chatgpt
- ChatGPT Work and Codex: https://help.openai.com/en/articles/20001275-chatgpt-work-and-codex
64 changes: 64 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/install.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
param(
[string]$Target = ".",
[ValidateSet("coding","syntaro")][string]$Profile = "coding"
)
$ErrorActionPreference = "Stop"
$Root = Split-Path -Parent $MyInvocation.MyCommand.Path
$Target = (Resolve-Path $Target).Path

function Need($cmd) {
if (-not (Get-Command $cmd -ErrorAction SilentlyContinue)) { throw "Missing required command: $cmd" }
}
Need python
Need node
Need npx

Write-Host "`n[1/7] Installing minimal owned control plane..."
python "$Root\scripts\install_core.py" --target "$Target" --profile "$Profile"
Set-Location $Target

Write-Host "`n[2/7] Installing UI UX Pro Max..."
npx -y ui-ux-pro-max-cli@latest init --ai universal --force

Write-Host "`n[3/7] Installing Impeccable..."
npx -y impeccable install --providers=codex --scope=project

Write-Host "`n[4/7] Installing Archify..."
npx -y skills add tt-a1i/archify --skill archify --agent codex --copy --yes

Write-Host "`n[5/7] Installing Graphify..."
if (Get-Command uv -ErrorAction SilentlyContinue) {
uv tool install --upgrade graphifyy | Out-Host
} elseif (Get-Command pipx -ErrorAction SilentlyContinue) {
pipx install graphifyy | Out-Host
} else {
throw "Install uv first (recommended: winget install astral-sh.uv) or install pipx, then rerun."
}
if (-not (Get-Command graphify -ErrorAction SilentlyContinue)) {
throw "graphify is not on PATH yet. Open a new PowerShell (or update PATH) and rerun."
}
graphify install --project --platform agents

Write-Host "`n[6/7] Building repository graph + hook..."
graphify .
graphify hook install

Write-Host "`n[7/7] Building ChatGPT Work bundles + doctor..."
python "$Root\scripts\build_work_bundles.py" --target "$Target"
python "$Root\scripts\doctor.py" --target "$Target"

Write-Host @"

DONE.

One-time UI setup:
OMP: invoke impeccable and run init
Codex: `$impeccable init
Codex: open /hooks once and approve the Impeccable project hook.

Switch Syntaro profile:
python .agent-stack/bin/select_profile.py syntaro

ChatGPT Work bundles:
.agent-stack/chatgpt-work/upload-ready/
"@
74 changes: 74 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/usr/bin/env bash
set -euo pipefail

TARGET="${1:-.}"
PROFILE="${PROFILE:-coding}"
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET="$(cd "$TARGET" && pwd)"

need() { command -v "$1" >/dev/null 2>&1 || { echo "Missing required command: $1" >&2; exit 1; }; }
need python3
need node
need npx

printf '\n[1/7] Installing minimal owned control plane...\n'
python3 "$ROOT/scripts/install_core.py" --target "$TARGET" --profile "$PROFILE"

cd "$TARGET"

printf '\n[2/7] Installing UI UX Pro Max into .agents/skills...\n'
npx -y ui-ux-pro-max-cli@latest init --ai universal --force

printf '\n[3/7] Installing Impeccable for Codex-compatible .agents/skills + Codex hook...\n'
npx -y impeccable install --providers=codex --scope=project

printf '\n[4/7] Installing Archify project skill...\n'
npx -y skills add tt-a1i/archify --skill archify --agent codex --copy --yes

printf '\n[5/7] Installing Graphify CLI + project Agent Skill...\n'
if command -v uv >/dev/null 2>&1; then
uv tool install --upgrade graphifyy >/dev/null
elif command -v pipx >/dev/null 2>&1; then
if pipx list 2>/dev/null | grep -q 'graphifyy'; then pipx upgrade graphifyy >/dev/null; else pipx install graphifyy >/dev/null; fi
else
echo "Neither uv nor pipx found. Install one, then rerun:" >&2
echo " uv: https://docs.astral.sh/uv/getting-started/installation/" >&2
echo " pipx: python3 -m pip install --user pipx && python3 -m pipx ensurepath" >&2
exit 1
fi

if ! command -v graphify >/dev/null 2>&1; then
echo "graphify was installed but is not yet on PATH. Open a new shell or run 'uv tool update-shell', then rerun install.sh." >&2
exit 1
fi
graphify install --project --platform agents

printf '\n[6/7] Building initial repository graph and installing update hook...\n'
graphify .
graphify hook install

printf '\n[7/7] Building ChatGPT Work upload bundles and running doctor...\n'
python3 "$ROOT/scripts/build_work_bundles.py" --target "$TARGET"
python3 "$ROOT/scripts/doctor.py" --target "$TARGET" || true

cat <<'TXT'

DONE.

One-time UI setup inside your coding harness:
OMP: /skill:impeccable init (or invoke the impeccable skill and ask it to init)
Codex: $impeccable init

Codex only: open /hooks once and approve the project Impeccable hook.

Normal workflow: give the coding task normally. AGENTS.md tells the agent to use
planner -> executor -> verifier for non-trivial work.

Switch Syntaro profile:
python3 .agent-stack/bin/select_profile.py syntaro

ChatGPT Work upload bundles:
.agent-stack/chatgpt-work/upload-ready/
Project instructions:
.agent-stack/chatgpt-work/PROJECT_INSTRUCTIONS.md
TXT
2 changes: 2 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/profiles/coding.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# coding
Default profile for normal software delivery. Plan enough to avoid rework, execute tightly, and independently verify before completion.
2 changes: 2 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/profiles/syntaro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# syntaro
Planning/verification-heavy profile. Explicitly surface missing evidence and human decisions; require requirement-to-evidence mapping and architecture/verification readiness before completion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "ImplementationArtifact",
"type": "object",
"required": ["requirements_implemented", "changed_files", "checks", "deviations", "status"],
"properties": {
"requirements_implemented": {"type": "array", "items": {"type": "string"}},
"changed_files": {"type": "array", "items": {"type": "string"}},
"checks": {"type": "array", "items": {"type": "object", "properties": {"command": {"type": "string"}, "result": {"type": "string"}}}},
"deviations": {"type": "array", "items": {"type": "string"}},
"unexpected_failures": {"type": "array", "items": {"type": "object", "properties": {"failure": {"type": "string"}, "cause": {"type": "string"}, "evidence": {"type": "string"}}}},
"known_limitations": {"type": "array", "items": {"type": "string"}},
"verifier_evidence": {"type": "array", "items": {"type": "string"}},
"status": {"enum": ["IMPLEMENTED_FOR_VERIFICATION", "REPLAN", "HUMAN_DECISION"]}
}
}
24 changes: 24 additions & 0 deletions .agents/skills/agent-stack-v5-minimal/schemas/plan.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "PlanArtifact",
"type": "object",
"required": ["goal", "requirements", "affected_components", "invariants", "implementation_steps", "acceptance_criteria", "verification_plan", "regression_surface", "status"],
"properties": {
"goal": {"type": "string"},
"requirements": {"type": "array", "items": {"type": "object", "required": ["id", "text"], "properties": {"id": {"type": "string"}, "text": {"type": "string"}}}},
"evidence_consulted": {"type": "array", "items": {"type": "string"}},
"affected_components": {"type": "array", "items": {"type": "string"}},
"invariants": {"type": "array", "items": {"type": "string"}},
"assumptions": {"type": "array", "items": {"type": "object", "properties": {"assumption": {"type": "string"}, "validation": {"type": "string"}}}},
"architecture_impact": {"type": "string"},
"implementation_steps": {"type": "array", "items": {"type": "string"}},
"acceptance_criteria": {"type": "array", "items": {"type": "object", "required": ["id", "requirement_id", "criterion"], "properties": {"id": {"type": "string"}, "requirement_id": {"type": "string"}, "criterion": {"type": "string"}}}},
"verification_plan": {"type": "array", "items": {"type": "string"}},
"regression_surface": {"type": "array", "items": {"type": "string"}},
"ui_contract": {"type": ["object", "null"]},
"open_decisions": {"type": "array", "items": {"type": "string"}},
"missing_evidence": {"type": "array", "items": {"type": "string"}},
"non_goals": {"type": "array", "items": {"type": "string"}},
"status": {"enum": ["PLAN_READY", "NEEDS_EVIDENCE", "HUMAN_DECISION"]}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "VerificationArtifact",
"type": "object",
"required": ["criteria", "regressions", "scope_review", "status"],
"properties": {
"criteria": {"type": "array", "items": {"type": "object", "required": ["id", "status", "evidence"], "properties": {"id": {"type": "string"}, "status": {"enum": ["PASS", "FAIL", "UNPROVEN"]}, "evidence": {"type": "array", "items": {"type": "string"}}}}},
"regressions": {"type": "array", "items": {"type": "string"}},
"architecture_compliance": {"type": "string"},
"scope_review": {"type": "array", "items": {"type": "string"}},
"ui_evidence": {"type": "array", "items": {"type": "string"}},
"missing_evidence": {"type": "array", "items": {"type": "string"}},
"open_decisions": {"type": "array", "items": {"type": "string"}},
"status": {"enum": ["READY", "FIX_LOCAL", "REPLAN", "HUMAN_DECISION"]},
"next_action": {"type": "string"}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env python3
from __future__ import annotations
import argparse, zipfile
from pathlib import Path

def zip_skill(src: Path, dest: Path):
with zipfile.ZipFile(dest,'w',zipfile.ZIP_DEFLATED) as z:
for p in sorted(src.rglob('*')):
if p.is_file(): z.write(p,p.relative_to(src))

def main():
ap=argparse.ArgumentParser(); ap.add_argument('--target',default='.')
a=ap.parse_args(); root=Path(a.target).resolve(); skills=root/'.agents'/'skills'; out=root/'.agent-stack'/'chatgpt-work'/'upload-ready'; out.mkdir(parents=True,exist_ok=True)
made=[]
if skills.exists():
for d in sorted(skills.iterdir()):
if d.is_dir() and (d/'SKILL.md').exists():
dest=out/f'{d.name}.zip'; zip_skill(d,dest); made.append(dest)
print(f'Created {len(made)} ChatGPT skill bundles in {out}')
for p in made: print(' -',p.name)
if __name__=='__main__': main()
Loading
Loading