@jaimevalasek/aioson 1.36.0 → 1.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/docs/en/1-understand/ecosystem-map.md +1 -1
- package/docs/en/1-understand/glossary.md +1 -1
- package/docs/en/2-start/first-project.md +1 -1
- package/docs/en/2-start/initial-decisions.md +4 -2
- package/docs/en/3-recipes/from-idea-to-prd-via-briefing.md +8 -1
- package/docs/en/3-recipes/full-feature-with-sheldon.md +3 -1
- package/docs/en/4-agents/README.md +6 -3
- package/docs/en/4-agents/briefing-refiner.md +146 -0
- package/docs/en/5-reference/README.md +1 -0
- package/docs/en/5-reference/autopilot-handoff.md +286 -0
- package/docs/en/5-reference/cli-reference.md +6 -0
- package/docs/pt/1-entender/glossario.md +1 -1
- package/docs/pt/1-entender/mapa-do-ecossistema.md +1 -1
- package/docs/pt/2-comecar/decisoes-iniciais.md +4 -2
- package/docs/pt/2-comecar/primeiro-projeto.md +1 -1
- package/docs/pt/3-receitas/da-ideia-ao-prd-via-briefing.md +8 -1
- package/docs/pt/3-receitas/feature-completa-com-sheldon.md +3 -1
- package/docs/pt/4-agentes/README.md +13 -11
- package/docs/pt/4-agentes/briefing-refiner.md +64 -40
- package/docs/pt/4-agentes/briefing.md +6 -1
- package/docs/pt/4-agentes/dev.md +19 -1
- package/docs/pt/4-agentes/deyvin.md +4 -0
- package/docs/pt/4-agentes/discover.md +4 -0
- package/docs/pt/4-agentes/neo.md +4 -0
- package/docs/pt/4-agentes/orache.md +6 -0
- package/docs/pt/4-agentes/orchestrator.md +12 -0
- package/docs/pt/4-agentes/pentester.md +6 -0
- package/docs/pt/4-agentes/product.md +19 -1
- package/docs/pt/4-agentes/qa.md +10 -2
- package/docs/pt/4-agentes/setup.md +3 -1
- package/docs/pt/4-agentes/sheldon.md +12 -0
- package/docs/pt/4-agentes/tester.md +6 -0
- package/docs/pt/4-agentes/ux-ui.md +2 -1
- package/docs/pt/5-referencia/README.md +1 -1
- package/docs/pt/5-referencia/agent-chain-continuity.md +1 -1
- package/docs/pt/5-referencia/autopilot-handoff.md +191 -74
- package/docs/pt/5-referencia/comandos-cli.md +16 -7
- package/docs/pt/5-referencia/skills.md +2 -0
- package/docs/pt/agentes.md +3 -1
- package/package.json +1 -1
- package/src/agents.js +1 -1
- package/src/artifact-kinds.js +2 -1
- package/src/autopilot-signal.js +71 -0
- package/src/cli.js +9 -1
- package/src/commands/agents.js +18 -2
- package/src/commands/briefing.js +337 -1
- package/src/commands/feature-close.js +136 -43
- package/src/commands/live.js +47 -11
- package/src/commands/update.js +5 -1
- package/src/commands/verification-plan.js +28 -1
- package/src/commands/verify-artifact.js +64 -1
- package/src/commands/workflow-execute.js +149 -31
- package/src/commands/workflow-next.js +60 -16
- package/src/doctor.js +4 -2
- package/src/i18n/messages/en.js +2 -1
- package/src/i18n/messages/es.js +2 -1
- package/src/i18n/messages/fr.js +2 -1
- package/src/i18n/messages/pt-BR.js +2 -1
- package/src/lib/briefing-refiner/apply-feedback.js +18 -4
- package/src/lib/briefing-refiner/feedback-schema.js +73 -4
- package/src/lib/briefing-refiner/refinement-report.js +11 -0
- package/src/lib/briefing-refiner/review-html.js +388 -68
- package/src/parser.js +6 -0
- package/template/.aioson/agents/briefing-refiner.md +87 -47
- package/template/.aioson/agents/briefing.md +4 -0
- package/template/.aioson/agents/dev.md +9 -2
- package/template/.aioson/agents/deyvin.md +4 -0
- package/template/.aioson/agents/discover.md +4 -0
- package/template/.aioson/agents/neo.md +4 -0
- package/template/.aioson/agents/orache.md +4 -0
- package/template/.aioson/agents/orchestrator.md +16 -0
- package/template/.aioson/agents/pentester.md +4 -0
- package/template/.aioson/agents/product.md +25 -1
- package/template/.aioson/agents/qa.md +5 -1
- package/template/.aioson/agents/sheldon.md +9 -1
- package/template/.aioson/agents/tester.md +4 -0
- package/template/.aioson/agents/ux-ui.md +1 -1
- package/template/.aioson/docs/agent-help.md +126 -0
- package/template/.aioson/docs/autopilot-handoff.md +26 -16
- package/template/.aioson/docs/dev/phase-loop.md +8 -5
- package/template/.aioson/docs/play/llm-data-and-bindings.md +70 -7
- package/template/.aioson/skills/design/interface-design/SKILL.md +17 -0
- package/template/AGENTS.md +36 -36
- package/template/CLAUDE.md +1 -1
|
@@ -4,28 +4,38 @@ task_types: [handoff, autopilot]
|
|
|
4
4
|
triggers: [auto handoff, autopilot, next agent]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Autopilot handoff (
|
|
7
|
+
# Autopilot handoff (feature start → dev → review cycle)
|
|
8
8
|
|
|
9
|
-
Opt-in protocol that removes
|
|
9
|
+
Opt-in protocol that removes the **mechanical** handoff confirmations across the whole feature workflow — the "type /sheldon", "type /dev", "run phase 2", "run qa" stops. Genuine human decisions (product scope, sizing/enrichment) still happen interactively inside their agents; autopilot only removes the mechanical "run the next thing" step once an agent's own work is settled. Two segments:
|
|
10
10
|
|
|
11
|
-
1. **
|
|
12
|
-
2. **Post-dev review cycle (`@dev` → `@qa` → `@tester`/`@pentester` → `@validator`):**
|
|
11
|
+
1. **Spec → dev chain (`@product → @sheldon`/`@orchestrator` → `@dev`):** when autopilot is on, each spec agent — once its own decisions are resolved (no open `AskUserQuestion`, the gates it owns approved) — seeds the agentic scheme and auto-invokes the next stage instead of stopping. It crosses the pre-dev boundary via the `dev-state.md` cold-start packet, not by carrying raw upstream chat forward. `@analyst`, `@architect`, `@pm`, `@scope-check`, and `@discovery-design-doc` chain automatically only when an opt-in detour adds them to the active sequence.
|
|
12
|
+
2. **Post-dev review cycle (`@dev` → `@qa` → `@tester`/`@pentester` → `@validator`):** the implementation and review agents chain automatically until the feature is ready to close. `@qa` is the hub: it owns the routing to the specialized agents and the corrections loop.
|
|
13
|
+
|
|
14
|
+
Both segments stop only at the human close/publish gate (`feature:close`) and at the hard stop conditions below. Historically Segment 1 stayed manual (upstream agents end on human decisions); autopilot now crosses it too, but only mechanically — a real product/sizing decision still pauses for the human before any auto-invoke.
|
|
13
15
|
|
|
14
16
|
## Activation
|
|
15
17
|
|
|
16
|
-
Autopilot is active
|
|
18
|
+
Autopilot is active when BOTH of the first two hold, gated by the third:
|
|
19
|
+
|
|
20
|
+
1. Either `project.context.md` frontmatter has `auto_handoff: true`, OR `.aioson/context/workflow-execute.json` exists with `agentic_policy.enabled: true` **and `feature` matching the current slug** (the seeded scheme — a scheme left by a different/closed feature does NOT count, for any agent in the chain). **Per-feature disarm wins over the flag:** a scheme for the current slug with `agentic_policy.enabled: false` (written by `aioson workflow:execute . --feature={slug} --seed --step`) turns autopilot OFF for that feature even when `auto_handoff: true` — an explicit per-feature choice always beats the project default.
|
|
21
|
+
|
|
22
|
+
**Inline run-mode tokens (highest precedence, human entry points only):** a standalone `--auto` or `--step` in the activation arguments of `@product` (kickoff) or `@dev` (late entry/override) IS the run-mode decision — the agent strips it from the task text and never asks. `--auto` seeds the scheme (arming the whole chain from that point); `--step` writes the disarmed scheme. Downstream agents (`@qa`/`@tester`/`@pentester`/`@validator`) do not parse tokens — they read the flag/scheme. Absent both, the run mode is not yet chosen: **`@product` asks it on screen at feature kickoff** (Autopilot / Step by step / Always autopilot — see product.md "Run mode"). Picking Autopilot seeds the scheme (activating this segment); "Always autopilot" also writes `auto_handoff: true`; Step by step leaves both unset = manual handoffs. Only `@product` asks — downstream agents read the flag/scheme and never re-prompt.
|
|
23
|
+
2. A feature workflow is active (feature slug known).
|
|
24
|
+
3. The current agent's own gate/verdict passed AND no genuine human decision is open (see stop conditions).
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
2. A feature workflow is active (feature slug known, classification SMALL or MEDIUM).
|
|
20
|
-
3. The current agent's own gate/verdict passed (see stop conditions).
|
|
26
|
+
## Seeding the agentic scheme
|
|
21
27
|
|
|
22
|
-
|
|
28
|
+
The first spec agent to finish under autopilot seeds the run's contract — this is the "scheme" the whole chain follows, and it is what makes a feature built the normal way (`@product → @sheldon`/`@orchestrator` → …) run to `feature:close` without the user launching anything:
|
|
23
29
|
|
|
24
30
|
```bash
|
|
25
|
-
aioson workflow:execute . --feature={slug} --tool=<tool>
|
|
31
|
+
aioson workflow:execute . --feature={slug} --seed --tool=<tool>
|
|
26
32
|
```
|
|
27
33
|
|
|
28
|
-
`
|
|
34
|
+
`--seed` writes `.aioson/context/workflow-execute.json` (with `agentic_policy.enabled: true` — review-loop caps, `feature_close: human_gate`, and the stop conditions) plus `.aioson/context/workflow.state.json`. It is **seed-only**: it records the policy the interactive agents follow but does NOT drive stage transitions itself (the agents do, via `Skill(aioson:agent:<next>)` + `aioson workflow:next . --complete=<agent>`). Re-seeding the same slug is idempotent, and a stale `workflow.state.json` left by a feature that is no longer active in `features.md` is discarded and reseeded. Once the scheme exists with `agentic_policy.enabled`, autopilot is on for the whole feature even if `auto_handoff` was never written to frontmatter.
|
|
35
|
+
|
|
36
|
+
**Seed failure is a stop condition.** The seeding agent must check the command result: a `different_active_feature` failure means another feature is genuinely active in `workflow.state.json` — surface it to the user (close/pause it, or `aioson feature:sweep .`) and stop with the manual handoff. Never continue the chain as if autopilot were armed when the seed failed.
|
|
37
|
+
|
|
38
|
+
The headless/tracked runner `aioson workflow:execute . --feature={slug} --tool=<tool> --agentic` (without `--seed`) is the same contract but also advances checkpoints from the CLI — use it for non-interactive runs. Prompt-level `Skill(...)` chaining is how interactive Claude Code / codex sessions consume the scheme.
|
|
29
39
|
|
|
30
40
|
## Routing — deterministic, never LLM-chosen
|
|
31
41
|
|
|
@@ -45,13 +55,13 @@ When autopilot is active and no stop condition applies:
|
|
|
45
55
|
3. If no runtime gateway is available, emit a one-line transition notice: `Autopilot: @<current> done → invoking @<next> (Ctrl+C to interrupt)`.
|
|
46
56
|
4. Invoke `Skill(aioson:agent:<next>)` with the task `"continue feature {slug} — autopilot handoff from @<current>"`. No user prompt — Ctrl+C interrupts.
|
|
47
57
|
|
|
48
|
-
## Segment 1 —
|
|
58
|
+
## Segment 1 — spec → dev chain
|
|
49
59
|
|
|
50
|
-
SMALL feature (lean default): `@product` → `@sheldon` → `@dev
|
|
60
|
+
SMALL feature (lean default): `@product` → `@sheldon` → `@dev`. Under autopilot: `@product`, once the PRD is settled, seeds the scheme and invokes `@sheldon`; `@sheldon`, once sizing/enrichment is confirmed and its lean-lane artifacts + `dev-state.md` are written, completes its own stage (`aioson workflow:next . --complete=sheldon`) and invokes `@dev`. The full-merged SMALL detour auto-chains `@analyst` → `@architect` → `@dev` when opted in (with `@scope-check`/`@discovery-design-doc` only if the sequence adds them).
|
|
51
61
|
|
|
52
|
-
MEDIUM feature (maestro default): `@product` → `@orchestrator` → `@dev
|
|
62
|
+
MEDIUM feature (maestro default): `@product` → `@orchestrator` → `@dev`. Under autopilot: `@product` seeds + invokes `@orchestrator`; `@orchestrator`, once its gated spec package (Gates A/B/C approved, readiness ready) + `dev-state.md` are written, invokes `@dev`. The maestro fans out to `@analyst`/`@architect`/`@pm` as sub-agents, not as workflow stages; those chain as stages only under an opt-in full-chain detour.
|
|
53
63
|
|
|
54
|
-
|
|
64
|
+
Crossing into `@dev` goes through the `dev-state.md` cold-start packet the spec agent writes — `@dev`'s session-start protocol loads only that minimal package, so `@dev` does not inherit the heavy upstream chat; transparent auto-compact trims the rest. That is why the crossing is safe without a manual `/compact`. The spec agent still stops with the normal manual `/dev` recommendation if it has an open product/scope/sizing decision or a gate it owns is not approved. Recommend `/clear` only when the user needs a hard reset, a feature switch, polluted context, or a security-sensitive reset.
|
|
55
65
|
|
|
56
66
|
## Segment 2 — post-dev review cycle (hub = `@qa`)
|
|
57
67
|
|
|
@@ -84,7 +94,7 @@ Routing table (each row is followed only when autopilot is active and no stop co
|
|
|
84
94
|
## Stop conditions — break the chain and emit the normal manual handoff
|
|
85
95
|
|
|
86
96
|
1. **`feature:close` / publish** — ALWAYS the human gate. When `@qa` (PASS, nothing pending) or `@validator` (PASS) is the last clean step, STOP and recommend `aioson feature:close . --feature={slug}`. Never auto-run `feature:close`, `feature:archive`, `npm publish`, or any publish/close action.
|
|
87
|
-
2. **
|
|
97
|
+
2. **Genuine human decision open** — a spec agent with an unresolved product/scope/sizing question (an open `AskUserQuestion`, or a gate it owns not yet approved) finishes that decision with the human before any auto-invoke, and stops with the normal manual handoff. Autopilot removes mechanical stops, never real decisions. (This replaces the old "always stop before the first `@dev`" rule: the crossing is now automatic once the spec agent's own decisions are settled and `dev-state.md` is written.)
|
|
88
98
|
3. **Corrections cap reached** — review cycles are bounded by `agentic_policy.review_cycle` (default 3); when `review-cycle:advance` returns `stop_cycle_limit`, stop and escalate to the human.
|
|
89
99
|
4. **Critical security finding** — the `@qa` corrections security gate (auth/secret/credential/session/password/token/PII/encryption keywords) blocks the auto-loop; stop and require human intervention.
|
|
90
100
|
5. **Verdict not clean / gate or readiness blocked** — the `@orchestrator` maestro spec package not gate-approved (Gates A/B/C) or its readiness `blocked`, `@validator` FAIL with no safe corrections path (and, when present as detours, `@architect` Gate B / merged-mode readiness `blocked`, `@pm` Gate C blocked, `@scope-check` not `approved`/`patched`, or `@discovery-design-doc` readiness `blocked`): stop and route to the owner manually.
|
|
@@ -11,7 +11,7 @@ On-demand detail for @dev's `## Phase loop` kernel section. Applies when a phase
|
|
|
11
11
|
|
|
12
12
|
## The loop
|
|
13
13
|
|
|
14
|
-
**Auto-continue is the default —
|
|
14
|
+
**Auto-continue is the default and it is imperative — a phased plan runs to the END OF THE FEATURE in one continuous drive, not one phase per turn** (`phase_loop.auto_continue` in `.aioson/config/verification.json`). After a phase's gate is clean you will feel the pull to stop and report "Phase N done — continue?"; that pull is the exact bug this loop exists to defeat. Do NOT stop, do NOT ask, do NOT summarize-and-end between phases — proceed straight into the next phase. The per-phase verification report is the checkpoint that replaces the human "continue?": a clean report advances automatically; a failing one (after in-phase fix retries) is the only thing that halts the loop mid-feature. The run otherwise halts only at the end-of-feature gate or at a genuine hard stop (real ambiguity, a blocked gate, or a context ceiling on a host without transparent auto-compact). Set `auto_continue: false` only if you deliberately want to pause for confirmation between phases.
|
|
15
15
|
|
|
16
16
|
After finishing each phase:
|
|
17
17
|
|
|
@@ -21,15 +21,18 @@ After finishing each phase:
|
|
|
21
21
|
```bash
|
|
22
22
|
aioson verification:plan . --feature={slug} --trigger=per-phase --json
|
|
23
23
|
```
|
|
24
|
-
For every agent with `run: true`, dispatch it as a sub-agent on the
|
|
24
|
+
For every agent with `run: true`, dispatch it as a sub-agent on the plan's top-level `host` plus that agent's `mode` / `model`, scoped to this phase's changed files:
|
|
25
25
|
- `mode: native` → an in-harness sub-agent. On Claude Code use the Task tool with that `model` tier (e.g. `sonnet-4.6`); on codex/opencode use their own configured model. The sub-agent writes its `report` file (e.g. `qa-report-{slug}.md`) and returns it to @dev.
|
|
26
26
|
- `mode: external` → only the explicitly configured cross-vendor auditor (`cross_check`); never spawn one otherwise.
|
|
27
27
|
Read the report: **PASS** → continue. **Bugs** → fix them within this phase, re-run `harness:check`, and re-dispatch — up to `phase_loop.max_fix_retries_per_phase` times, then stop and surface the failure instead of advancing.
|
|
28
|
-
4. **
|
|
28
|
+
4. **Checkpoint, then keep going — do NOT end the turn.** Write the cold-start packet as a crash/interrupt safety net:
|
|
29
29
|
```bash
|
|
30
30
|
aioson dev:state:write # slug, completed phase, next phase, manifest path, required context, decisions
|
|
31
31
|
```
|
|
32
|
-
|
|
32
|
+
Then continue **immediately** into the next phase in the SAME turn. Context management is the host's job, never a reason to stop:
|
|
33
|
+
- **Claude Code (and any host with transparent auto-compact):** never self-issue `/compact` and never end your turn between phases. Auto-compact shrinks context in place when it fills — you just keep implementing. With `compact_between_phases: true`, "compact" means *write the checkpoint above*, NOT *stop for a manual compaction*.
|
|
34
|
+
- **codex / opencode (no transparent auto-compact):** the host wrapper re-enters on a fresh context and reloads via `aioson dev:resume-data .`. Only these hosts break the turn, and only their wrapper — never a bare prompt — restarts the loop.
|
|
35
|
+
The checkpoint exists so an interrupted run resumes cheaply, not so you pause. A phase boundary with a clean gate is a checkpoint, never a stopping point.
|
|
33
36
|
5. **End-of-feature gate (after the last phase only).** Hand off to `@qa`, which runs the full runtime smoke (build + migrate + boot + Core happy-path) plus `@tester`/`@pentester`/`@validator` per:
|
|
34
37
|
```bash
|
|
35
38
|
aioson verification:plan . --feature={slug} --trigger=end-of-feature
|
|
@@ -40,7 +43,7 @@ After finishing each phase:
|
|
|
40
43
|
- The per-phase check is **light**: one cheap-tier sub-agent, changed-files scope, capped by `budget.max_subagents_per_phase`.
|
|
41
44
|
- It is **suppressed on MICRO** (`budget.skip_on_micro`) — MICRO phases just auto-continue with no sub-agent.
|
|
42
45
|
- The **expensive full runtime smoke runs once**, at end-of-feature only (`budget.full_smoke = end-of-feature-only`) — never per phase.
|
|
43
|
-
-
|
|
46
|
+
- Context stays small without stopping: on Claude Code transparent auto-compact shrinks it in place as it fills, and the between-phase `dev:state:write` checkpoint lets any compaction (auto or a host-driven fresh context) resume the next phase cheaply. You get the small-context savings without ever ending the turn.
|
|
44
47
|
|
|
45
48
|
## Configuration
|
|
46
49
|
|
|
@@ -29,14 +29,56 @@ Play manages global LLM connections in Settings:
|
|
|
29
29
|
|
|
30
30
|
Apps should not store Play LLM secrets in repository files or frontend code.
|
|
31
31
|
|
|
32
|
+
Env vars Play injects at spawn (one per configured connection, since 2026-07-02):
|
|
33
|
+
|
|
34
|
+
| Play LLM connection | Injected env var |
|
|
35
|
+
|---|---|
|
|
36
|
+
| OpenAI | `OPENAI_API_KEY` |
|
|
37
|
+
| Claude (Anthropic) | `ANTHROPIC_API_KEY` |
|
|
38
|
+
| OpenRouter | `OPENROUTER_API_KEY` |
|
|
39
|
+
| Google Gemini | `GEMINI_API_KEY` |
|
|
40
|
+
| DeepSeek | `DEEPSEEK_API_KEY` |
|
|
41
|
+
| xAI | `XAI_API_KEY` |
|
|
42
|
+
|
|
43
|
+
Alongside the keys, Play injects **`AIOSON_LLM_CHAIN`** (since 2026-07-02): a
|
|
44
|
+
JSON string WITHOUT keys carrying the validated model per operation and the
|
|
45
|
+
fallback order the user arranged in Play Settings:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"exportedAt": "2026-07-02T18:00:00.000Z",
|
|
50
|
+
"appScope": null,
|
|
51
|
+
"configs": [
|
|
52
|
+
{
|
|
53
|
+
"provider": "openrouter",
|
|
54
|
+
"operation": "text_generation",
|
|
55
|
+
"model": "deepseek/deepseek-chat",
|
|
56
|
+
"baseUrl": "https://openrouter.ai/api/v1",
|
|
57
|
+
"priority": 1
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
32
63
|
Expected app behavior:
|
|
33
64
|
|
|
34
65
|
- Prefer app-local explicit config only when the app intentionally lets the user override provider settings.
|
|
35
|
-
- Otherwise read provider API keys injected by Play during spawn
|
|
66
|
+
- Otherwise read the provider API keys injected by Play during spawn (table above).
|
|
67
|
+
- **Do not hardcode models.** For each operation the app needs (`text_generation`, `image_understanding`, `speech_to_text`, ...), pick the first `configs[]` entry for that operation (sorted by `priority`) whose provider has its `*_API_KEY` present, and use that entry's `model` and `baseUrl`. Fall back to app defaults only when `AIOSON_LLM_CHAIN` is absent or has no entry for the operation.
|
|
68
|
+
- Gemini, DeepSeek and xAI are OpenAI-compatible — reuse an OpenAI-compatible client pointed at the entry's `baseUrl`.
|
|
36
69
|
- Lazy-initialize LLM clients. Do not instantiate SDK clients at module load, because missing keys can crash the backend before the app can render a degraded state.
|
|
37
|
-
- Treat `
|
|
70
|
+
- Treat `AIOSON_LLM_CHAIN` as metadata/order only. It never contains API keys.
|
|
38
71
|
- Treat `aioson-models.json` or `llm-chain.json` in the app cwd as optional/legacy for installed apps, not the primary credential contract.
|
|
39
72
|
|
|
73
|
+
Injection lifecycle — env vars only exist at spawn time:
|
|
74
|
+
|
|
75
|
+
- Play injects on UI-driven spawn of an installed app AND on draft preview (`spawn_draft`), so an app under development tests with the same contract it will have once installed.
|
|
76
|
+
- Supervisor auto-respawn preserves the keys from the original spawn.
|
|
77
|
+
- A process that is already running does NOT pick up a key configured afterwards. After adding or changing a Play LLM connection, stop and reopen the app (or the draft preview).
|
|
78
|
+
- A backend started by hand outside Play (`npm run dev` in a terminal or agent session) receives nothing — set the key in that shell env or use app-local config for that scenario.
|
|
79
|
+
|
|
80
|
+
Troubleshooting "provider not configured" in the app UI while the Play connection exists: (1) the app process started before the key was configured — close and reopen the app; (2) the backend is running outside Play; (3) the app expects a provider the user did not configure — Play injects only the keys that exist, one env var per provider.
|
|
81
|
+
|
|
40
82
|
Recommended lazy pattern:
|
|
41
83
|
|
|
42
84
|
```ts
|
|
@@ -178,7 +220,9 @@ await fetch(`${PLAY_BASE}/api/bindings/${APP_SLUG}`, {
|
|
|
178
220
|
|
|
179
221
|
## Executing connectors
|
|
180
222
|
|
|
181
|
-
After binding, execute through ProductBridge by alias
|
|
223
|
+
After binding, execute through ProductBridge by alias. The SAME endpoint runs
|
|
224
|
+
all three connector types (`mcpi`, `api`, `mcp`) — Play routes by the
|
|
225
|
+
connector's type (since 2026-07-02):
|
|
182
226
|
|
|
183
227
|
```http
|
|
184
228
|
POST http://localhost:5180/api/mcp/execute
|
|
@@ -188,14 +232,33 @@ Content-Type: application/json
|
|
|
188
232
|
"alias": "busca-produtos",
|
|
189
233
|
"params": {
|
|
190
234
|
"search": "dipirona"
|
|
191
|
-
}
|
|
235
|
+
},
|
|
236
|
+
"tool": "tool-name"
|
|
192
237
|
}
|
|
193
238
|
```
|
|
194
239
|
|
|
195
|
-
|
|
240
|
+
`tool` is optional and only used for `mcp` connectors that expose more than
|
|
241
|
+
one tool (a server with exactly one tool needs no `tool` field).
|
|
242
|
+
|
|
243
|
+
Response shape is the same for all types:
|
|
244
|
+
`{ "data": <json>, "error": null | "message", "duration_ms": <n> }`.
|
|
245
|
+
|
|
246
|
+
What each type does:
|
|
247
|
+
|
|
248
|
+
- `mcpi` — runs the query template on the TARGET database of the Play
|
|
249
|
+
Database Connection (credentials from Play's keyring), `{{param}}` becomes a
|
|
250
|
+
prepared-statement bind. Drivers: postgresql, mysql, sqlite.
|
|
251
|
+
- `api` — HTTP request to the connector URL: `{{param}}` interpolated into the
|
|
252
|
+
URL (percent-encoded); leftover params become query string (GET/DELETE) or a
|
|
253
|
+
JSON body (POST/PUT); auth headers from Play's keyring are applied.
|
|
254
|
+
- `mcp` — LOCAL stdio MCP server: Play spawns the connector command, performs
|
|
255
|
+
the JSON-RPC handshake (initialize → tools/list → tools/call) and returns
|
|
256
|
+
the tool result. Spawn per call, 60s timeout.
|
|
196
257
|
|
|
197
|
-
|
|
198
|
-
|
|
258
|
+
MCP scope today: local stdio servers only (auth via the command's own
|
|
259
|
+
env/args — no OAuth involved). REMOTE MCP servers over HTTP, which use OAuth
|
|
260
|
+
2.1 per the MCP spec, are NOT supported yet — do not fake them with manual
|
|
261
|
+
headers; treat that binding as unavailable and degrade.
|
|
199
262
|
|
|
200
263
|
## Degraded state
|
|
201
264
|
|
|
@@ -28,6 +28,23 @@ It helps the agent make strong decisions when the user wants a deliberate, high-
|
|
|
28
28
|
- Do not combine it with any other design skill.
|
|
29
29
|
- Use it when the user wants strong design craft but has not asked for a very specific visual system.
|
|
30
30
|
|
|
31
|
+
## Identity resolution (run FIRST, before any visual decision)
|
|
32
|
+
|
|
33
|
+
Resolve an `identity.md` in this order: `.aioson/briefings/{slug}/identity.md` (feature scope) →
|
|
34
|
+
`.aioson/context/identity.md` (project brand) → none.
|
|
35
|
+
|
|
36
|
+
- **If one exists, it is the identity source of truth this engine APPLIES**: take palette,
|
|
37
|
+
typography, spacing/layout, radius & depth, motion, design pillars, and signature moves from it as
|
|
38
|
+
the token layer, and feed its `## Component structure notes` into component/screen decisions. It is
|
|
39
|
+
extracted **data** (from the user's reference images via `reference-identity-extract`) that
|
|
40
|
+
parameterizes this one engine — never a second design skill, and never a license to skip the
|
|
41
|
+
quality gates below.
|
|
42
|
+
- **If none exists**, run intent-first: choose the surface type, domain palette, and signature move
|
|
43
|
+
yourself per the references. Do not fabricate an `identity.md`.
|
|
44
|
+
|
|
45
|
+
Every consumer of this package (ux-ui, prototype-forge, dev builds) inherits this step by loading
|
|
46
|
+
this SKILL — see `.aioson/docs/reference-identity.md`.
|
|
47
|
+
|
|
31
48
|
## Loading guide
|
|
32
49
|
|
|
33
50
|
| Task | Load |
|
package/template/AGENTS.md
CHANGED
|
@@ -7,15 +7,15 @@ You operate as AIOSON — an AI development squad with specialized agents.
|
|
|
7
7
|
- If missing: activate @setup agent immediately
|
|
8
8
|
- If present: read it before any action
|
|
9
9
|
2. Read `.aioson/config.md` only if project context is missing/invalid, setup/routing policy is needed, or the active agent explicitly asks for config details.
|
|
10
|
-
3. If `.aioson/rules/` contains `.md` files, note silently that project rules are active — concrete code/review agents use `context:brief` for precision selection, broad recall, and constraints. Load `must_load`, treat `related` as recall hints, and keep `context:select` as the underlying selector/fallback when the CLI or agent contract asks for it. Do not alarm if the directory is absent or empty.
|
|
10
|
+
3. If `.aioson/rules/` contains `.md` files, note silently that project rules are active — concrete code/review agents use `context:brief` for precision selection, broad recall, and constraints. Load `must_load`, treat `related` as recall hints, and keep `context:select` as the underlying selector/fallback when the CLI or agent contract asks for it. Do not alarm if the directory is absent or empty.
|
|
11
11
|
|
|
12
|
-
## Project knowledge
|
|
13
|
-
|
|
14
|
-
Read `.aioson/learnings/INDEX.md` if it exists. Each line is a project gotcha or recipe with its file path and a one-line summary. Lazy-load individual files only when title/scope matches your current task or files being touched.
|
|
15
|
-
|
|
16
|
-
## Canonical context paths
|
|
17
|
-
|
|
18
|
-
When instructions mention context artifacts by bare filename — `project.context.md`, `project-pulse.md`, `features.md`, `dev-state.md`, `workflow.state.json`, `last-handoff.json`, or `handoff-protocol.json` — resolve them to `.aioson/context/<filename>`. Never probe the project root or `.aioson/` root for these files.
|
|
12
|
+
## Project knowledge
|
|
13
|
+
|
|
14
|
+
Read `.aioson/learnings/INDEX.md` if it exists. Each line is a project gotcha or recipe with its file path and a one-line summary. Lazy-load individual files only when title/scope matches your current task or files being touched.
|
|
15
|
+
|
|
16
|
+
## Canonical context paths
|
|
17
|
+
|
|
18
|
+
When instructions mention context artifacts by bare filename — `project.context.md`, `project-pulse.md`, `features.md`, `dev-state.md`, `workflow.state.json`, `last-handoff.json`, or `handoff-protocol.json` — resolve them to `.aioson/context/<filename>`. Never probe the project root or `.aioson/` root for these files.
|
|
19
19
|
|
|
20
20
|
## No agent selected
|
|
21
21
|
|
|
@@ -107,8 +107,8 @@ When running Codex directly (without `aioson workflow:next`), these rules apply:
|
|
|
107
107
|
- For implementation requests (code changes, feature build, refactor, bugfix), default to workflow routing and execute via the next workflow stage agent (typically `@dev` after required upstream stages).
|
|
108
108
|
- Exception: if the user explicitly activates `@deyvin` (or the compatibility alias `@pair`), it may work directly only as a continuity / pair-programming agent for existing known context and a small validated slice. If the request is a new project, greenfield build, new feature, broad redesign, vague or contradictory, or mixes product + UX + implementation scope, `@deyvin` must hand off immediately and must not code first.
|
|
109
109
|
- Official workflow agents (`@setup`, `@product`, `@analyst`, `@scope-check`, `@architect`, `@ux-ui`, `@pm`, `@orchestrator`, `@dev`, `@qa`) must stay inside the workflow. Do not answer requests outside the current agent's scope.
|
|
110
|
-
- Between agent handoffs, your ONLY valid output is: which agent is next and why. Do not continue into that agent's work. Single exception: when `auto_handoff: true` is set in `.aioson/context/project.context.md
|
|
111
|
-
- If `.aioson/context/project.context.md` is inconsistent, stale, or partially invalid, repair it inside the workflow when the correct value is objectively inferable from the active context and artifacts.
|
|
110
|
+
- Between agent handoffs, your ONLY valid output is: which agent is next and why. Do not continue into that agent's work. Single exception: when `auto_handoff: true` is set in `.aioson/context/project.context.md` (or a seeded `.aioson/context/workflow-execute.json` with `agentic_policy.enabled` is present), the agents covered by `.aioson/docs/autopilot-handoff.md` auto-invoke the next agent's skill instead of stopping. That chain runs the whole feature — the spec authority (`@sheldon`/`@orchestrator`) seeds the agentic scheme and crosses into `@dev` via the `dev-state.md` cold-start packet, `@dev` runs all phases in one continuous drive, and the post-dev review cycle (`@dev` → `@qa` → `@tester`/`@pentester` when their `@qa` triggers fire → `@validator`) follows automatically. It stops only for a genuine human decision (product scope/sizing still open) and never auto-runs `feature:close`/publish — those require explicit human approval.
|
|
111
|
+
- If `.aioson/context/project.context.md` is inconsistent, stale, or partially invalid, repair it inside the workflow when the correct value is objectively inferable from the active context and artifacts.
|
|
112
112
|
- If a context field is still uncertain, route back to `@setup` inside the workflow instead of offering direct execution as a workaround.
|
|
113
113
|
- Never silently bypass workflow after `@setup` or after collecting requirements.
|
|
114
114
|
|
|
@@ -161,7 +161,7 @@ AIOSON uses the `aioson-spec-driven` process skill to enforce specification-firs
|
|
|
161
161
|
|
|
162
162
|
### Core artifacts
|
|
163
163
|
- `constitution.md` — governs all agents with 6 articles
|
|
164
|
-
- `.aioson/context/project-pulse.md` — global heartbeat, max 30 lines, updated by every agent at session end
|
|
164
|
+
- `.aioson/context/project-pulse.md` — global heartbeat, max 30 lines, updated by every agent at session end
|
|
165
165
|
- `spec-{slug}.md` — feature memory with `phase_gates`, `spec_version`, and `last_checkpoint`
|
|
166
166
|
- `conformance-{slug}.yaml` — machine-readable AC definitions (MEDIUM projects only)
|
|
167
167
|
|
|
@@ -177,7 +177,7 @@ Gates are blocking in MEDIUM, informational in MICRO/SMALL.
|
|
|
177
177
|
For concrete spec/workflow work, the active agent checks for `aioson-spec-driven` in `.aioson/installed-skills/` or `.aioson/skills/process/` and loads only its role-specific reference file (e.g., `references/dev.md`, `references/qa.md`). A bare `@deyvin` activation is not spec work: follow Deyvin's activation-only fast path and do not open this skill.
|
|
178
178
|
|
|
179
179
|
### Project pulse convention
|
|
180
|
-
Every agent updates `.aioson/context/project-pulse.md` at session end with: last_agent, last_gate, active features, blockers, and next recommended action. This enables crash recovery — any agent can read `.aioson/context/project-pulse.md` and know where to resume.
|
|
180
|
+
Every agent updates `.aioson/context/project-pulse.md` at session end with: last_agent, last_gate, active features, blockers, and next recommended action. This enables crash recovery — any agent can read `.aioson/context/project-pulse.md` and know where to resume.
|
|
181
181
|
|
|
182
182
|
## Process skill: aioson-spec-driven
|
|
183
183
|
|
|
@@ -199,29 +199,29 @@ Activated by: @design-hybrid-forge
|
|
|
199
199
|
Default output: `.aioson/installed-skills/{hybrid-name}/`
|
|
200
200
|
What to load: `SKILL.md` first, then only the `references/` file relevant to the current phase
|
|
201
201
|
|
|
202
|
-
## Process skill: prompt-sharpener
|
|
203
|
-
|
|
204
|
-
Located at: `.aioson/skills/process/prompt-sharpener/SKILL.md`
|
|
205
|
-
|
|
206
|
-
This is a first-party process skill for improving agents, skills, PRDs, plans, handoffs, and instruction-heavy markdown by turning vague guidance into evidence-driven decision behavior.
|
|
207
|
-
|
|
208
|
-
Use when: improving AIOSON prompts/skills, reducing dead context without losing contracts, or sharpening artifacts before downstream handoff.
|
|
209
|
-
What to load: `SKILL.md` first; load `references/prompt-diagnostics.md` only for multi-prompt audits or adoption planning.
|
|
210
|
-
|
|
211
|
-
## Process skills: feature expansion
|
|
212
|
-
|
|
213
|
-
Located at:
|
|
214
|
-
- `.aioson/skills/process/briefing-expansion-scout/SKILL.md`
|
|
215
|
-
- `.aioson/skills/process/product-scope-expansion/SKILL.md`
|
|
216
|
-
- `.aioson/skills/process/sheldon-expansion-audit/SKILL.md`
|
|
217
|
-
|
|
218
|
-
These are first-party process skills for richer feature thinking without uncontrolled MVP inflation.
|
|
219
|
-
|
|
220
|
-
Agents that load them: @briefing, @briefing-refiner, @product, @sheldon
|
|
221
|
-
When to load: only when the active idea/PRD has a rich surface, a prior expansion artifact exists, or the user asks for richer options.
|
|
222
|
-
Shared taxonomy: `.aioson/docs/feature-expansion-taxonomy.md`
|
|
223
|
-
|
|
224
|
-
## Shared research cache: researchs/
|
|
202
|
+
## Process skill: prompt-sharpener
|
|
203
|
+
|
|
204
|
+
Located at: `.aioson/skills/process/prompt-sharpener/SKILL.md`
|
|
205
|
+
|
|
206
|
+
This is a first-party process skill for improving agents, skills, PRDs, plans, handoffs, and instruction-heavy markdown by turning vague guidance into evidence-driven decision behavior.
|
|
207
|
+
|
|
208
|
+
Use when: improving AIOSON prompts/skills, reducing dead context without losing contracts, or sharpening artifacts before downstream handoff.
|
|
209
|
+
What to load: `SKILL.md` first; load `references/prompt-diagnostics.md` only for multi-prompt audits or adoption planning.
|
|
210
|
+
|
|
211
|
+
## Process skills: feature expansion
|
|
212
|
+
|
|
213
|
+
Located at:
|
|
214
|
+
- `.aioson/skills/process/briefing-expansion-scout/SKILL.md`
|
|
215
|
+
- `.aioson/skills/process/product-scope-expansion/SKILL.md`
|
|
216
|
+
- `.aioson/skills/process/sheldon-expansion-audit/SKILL.md`
|
|
217
|
+
|
|
218
|
+
These are first-party process skills for richer feature thinking without uncontrolled MVP inflation.
|
|
219
|
+
|
|
220
|
+
Agents that load them: @briefing, @briefing-refiner, @product, @sheldon
|
|
221
|
+
When to load: only when the active idea/PRD has a rich surface, a prior expansion artifact exists, or the user asks for richer options.
|
|
222
|
+
Shared taxonomy: `.aioson/docs/feature-expansion-taxonomy.md`
|
|
223
|
+
|
|
224
|
+
## Shared research cache: researchs/
|
|
225
225
|
|
|
226
226
|
Located at: `researchs/` (project root)
|
|
227
227
|
|
|
@@ -245,7 +245,7 @@ Primary recurring writers here: @product, @sheldon, and @squad
|
|
|
245
245
|
All agents may read from here to avoid redundant searches.
|
|
246
246
|
|
|
247
247
|
## Session protocol
|
|
248
|
-
Do not read `.aioson/context/spec.md` globally at session start. Agents load `spec*.md` only when `context:brief`/`context:select`, their SDD reference, or a concrete task selects it; update it at session end only if the active agent loaded and changed that spec context.
|
|
248
|
+
Do not read `.aioson/context/spec.md` globally at session start. Agents load `spec*.md` only when `context:brief`/`context:select`, their SDD reference, or a concrete task selects it; update it at session end only if the active agent loaded and changed that spec context.
|
|
249
249
|
|
|
250
250
|
## Golden rule
|
|
251
251
|
Small project, small solution.
|
package/template/CLAUDE.md
CHANGED
|
@@ -112,7 +112,7 @@ When running Claude Code directly (without `aioson workflow:next`), these rules
|
|
|
112
112
|
**Hard constraints — no exceptions:**
|
|
113
113
|
- You MUST NEVER implement code, produce UI specs, write PRDs, or answer technical tasks outside an activated agent.
|
|
114
114
|
- If the user explicitly activates `/deyvin` or `/pair`, it may act directly only for continuity on existing known context and a small validated slice. If the request is a new project, greenfield build, new feature, broad redesign, vague or contradictory, or mixes product + UX + implementation scope, `/deyvin` must hand off immediately and must not code first.
|
|
115
|
-
- Between agent handoffs, your ONLY valid output is: which agent is next and why. Do not continue into that agent's work. Single exception: when `auto_handoff: true` is set in `.aioson/context/project.context.md
|
|
115
|
+
- Between agent handoffs, your ONLY valid output is: which agent is next and why. Do not continue into that agent's work. Single exception: when `auto_handoff: true` is set in `.aioson/context/project.context.md` (or a seeded `.aioson/context/workflow-execute.json` with `agentic_policy.enabled` is present), the agents covered by `.aioson/docs/autopilot-handoff.md` auto-invoke the next agent's skill instead of stopping. That chain runs the whole feature — the spec authority (`@sheldon`/`@orchestrator`) seeds the agentic scheme and crosses into `@dev` via the `dev-state.md` cold-start packet, `@dev` runs all phases in one continuous drive, and the post-dev review cycle (`@dev` → `@qa` → `@tester`/`@pentester` when their `@qa` triggers fire → `@validator`) follows automatically. It stops only for a genuine human decision (product scope/sizing still open) and never auto-runs `feature:close`/publish — those require explicit human approval.
|
|
116
116
|
- If the user sends an implementation request before setup is complete: do not implement. Tell them to activate `/setup` first.
|
|
117
117
|
- If the user insists on bypassing an agent stage: refuse and redirect. Urgency or complexity do not override this rule.
|
|
118
118
|
|