Skip to content
Draft
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
70 changes: 70 additions & 0 deletions .cento/api_workers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
openai:
enabled: true
budget_usd_default: 10.00
budget_usd_max: 20.00
max_parallel_requests: 5
timeout_seconds: 90
retry_attempts: 1
cost_usd_estimate_per_request: 0.20
minimum_cost_usd_estimate_per_request: 0.05
max_input_chars: 20000
max_output_tokens: 2000
notification_policy: muted

profiles:
api-planner:
provider: openai
endpoint: responses
model: "${CENTO_OPENAI_PLANNER_MODEL}"
output_schema: workset_plan.v1
cost_usd_estimate: 0.10
max_input_chars: 16000
max_output_tokens: 1500

api-section-worker:
provider: openai
endpoint: responses
model: "${CENTO_OPENAI_WORKER_MODEL}"
output_schema: docs_section.v1
cost_usd_estimate: 0.20
max_input_chars: 20000
max_output_tokens: 2000

api-reviewer:
provider: openai
endpoint: responses
model: "${CENTO_OPENAI_REVIEWER_MODEL}"
output_schema: validation_review.v1
cost_usd_estimate: 0.10
max_input_chars: 12000
max_output_tokens: 1200

api-mini-integrator:
provider: openai
endpoint: responses
model: "gpt-4.1-mini"
output_schema: validation_review.v1
cost_usd_estimate: 0.08
max_input_chars: 12000
max_output_tokens: 1200

api-patch-proposal:
provider: openai
endpoint: responses
model: "gpt-4.1-mini"
output_schema: patch_proposal.v1
cost_usd_estimate: 0.0125
max_input_chars: 8000
max_output_tokens: 900
pricing:
input_usd_per_1m: 0.80
output_usd_per_1m: 3.20

api-proreq-planner:
provider: openai
endpoint: responses
model: "${CENTO_OPENAI_PRO_MODEL}"
output_schema: hard_proreq_plan.v1
cost_usd_estimate: 2.00
max_input_chars: 50000
max_output_tokens: 5000
1 change: 1 addition & 0 deletions .cento/builds/.gitkeep
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

73 changes: 73 additions & 0 deletions .cento/compute-policy.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{
"schema_version": "cento.compute_policy.v1",
"profile": "codex-first",
"providers": {
"codex": {
"share": 85,
"kind": "agent",
"runtime": "codex",
"model": "gpt-5.3-codex-spark",
"cost_mode": "subscription_or_limit",
"enabled": true,
"notes": "Prefer Codex when interactive/agent limit is available."
},
"claude": {
"share": 15,
"kind": "agent",
"runtime": "claude-code",
"model": "claude-sonnet-4-6",
"cost_mode": "subscription_or_limit",
"enabled": true,
"notes": "Fallback for agent work when Codex is unavailable or weighted routing selects it."
},
"openai_api": {
"share": 0,
"kind": "api",
"runtime": "api-openai",
"model": "${CENTO_OPENAI_WORKER_MODEL}",
"cost_mode": "metered",
"enabled": false,
"notes": "Use only when a pipeline explicitly needs API-only behavior such as structured Responses or image generation."
}
},
"updated_at": "2026-05-05T06:08:59Z",
"agent_runtime_weights": {
"codex": 85,
"claude-code": 15
},
"metered_api_policy": {
"openai_api_share": 0,
"prefer_agent_when_possible": true,
"requires_explicit_api_runtime": true,
"agent_preference_policy": {
"codex_claude_utilization_threshold_percent": 30,
"eligible_work_agent_preference_percent_range": [
70,
80
],
"eligible_work_agent_preference_target_percent": 75,
"metered_openai_api_reserved_for": [
"structured Responses API work",
"image generation",
"ProReq planning",
"other API-only behavior"
],
"notes": "When Codex/Claude weekly utilization is above 30% and capacity remains usable, prefer agent lanes for roughly 70-80% of eligible non-API-only work."
}
},
"agent_preference_policy": {
"codex_claude_utilization_threshold_percent": 30,
"eligible_work_agent_preference_percent_range": [
70,
80
],
"eligible_work_agent_preference_target_percent": 75,
"metered_openai_api_reserved_for": [
"structured Responses API work",
"image generation",
"ProReq planning",
"other API-only behavior"
],
"notes": "When Codex/Claude weekly utilization is above 30% and capacity remains usable, prefer agent lanes for roughly 70-80% of eligible non-API-only work."
}
}
49 changes: 49 additions & 0 deletions .cento/modes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
modes:
fast:
time_budget_minutes: 5
validation_tier: smoke
info_policy: infer
ask_policy: blockers_only
commit_policy: none
push_policy: none
max_workers: 0
max_files_changed: 3
repair_attempts: 0
risk_acceptance: medium
behavior:
- Patch the visible issue only.
- Infer missing details when the choice is reversible.
- Skip broad cleanup, refactors, PRs, and full regression.

standard:
time_budget_minutes: 15
validation_tier: focused
info_policy: ask_if_blocked
ask_policy: one_batch_if_material
commit_policy: local_commit
push_policy: optional
max_workers: 2
max_files_changed: 8
repair_attempts: 1
risk_acceptance: low_medium
behavior:
- Make a scoped product-quality patch.
- Ask only if the wrong choice would waste work.
- Run targeted validation and commit owned paths when clean.

thorough:
time_budget_minutes: 30
validation_tier: product
info_policy: ask_first
ask_policy: requirements_or_options_first
commit_policy: local_commit
push_policy: branch
pr_policy: draft
max_workers: 4
max_files_changed: null
repair_attempts: 3
risk_acceptance: low
behavior:
- Plan first with options and budget.
- Use explicit manifests, workers, and validation evidence.
- Push a branch and prepare PR/taskstream evidence when requested.
65 changes: 65 additions & 0 deletions .cento/runtimes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
runtimes:
codex-fast:
type: command
argv:
- codex
- exec
- -C
- "{worktree}"
- --sandbox
- workspace-write
- "-"
stdin_file: "{prompt}"
timeout_seconds: 180
cwd: "{worktree}"
env_allowlist:
- PATH
- HOME
- LANG
- LC_ALL
- TERM
max_changed_files: 3
max_patch_lines: 600
allow_network: false

claude-code-fast:
type: command
argv:
- claude
- -p
- --output-format
- text
stdin_file: "{prompt}"
timeout_seconds: 180
cwd: "{worktree}"
env_allowlist:
- PATH
- HOME
- LANG
- LC_ALL
- TERM
max_changed_files: 3
max_patch_lines: 600
allow_network: false

fixture-valid:
type: fixture
fixture_case: valid
timeout_seconds: 180
max_changed_files: 3
max_patch_lines: 600

python-fixture:
type: command
argv:
- python3
- -c
- "import json, os; from pathlib import Path; p=Path(json.loads(os.environ['CENTO_ALLOWED_WRITE_PATHS'])[0]); s=p.read_text(); p.write_text(s.replace('are now', 'remain', 1) if 'are now' in s else s.rstrip() + '\\n<!-- cento runtime profile touched -->\\n')"
timeout_seconds: 180
cwd: "{worktree}"
env_allowlist:
- PATH
- HOME
max_changed_files: 3
max_patch_lines: 600
allow_network: false
Empty file added .cento/worksets/.gitkeep
Empty file.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,18 @@ workspace/factory-integration-worktrees/*
workspace/tmp/*
!workspace/tmp/.gitkeep

.cento/builds/*
!.cento/builds/.gitkeep
.cento/worksets/*
!.cento/worksets/.gitkeep

logs/*

experimental/redmine-career-consulting/data/postgres/
experimental/redmine-career-consulting/themes/

.env
.env.*
!.env.example
!.env.mcp.example
.env.mcp
7 changes: 7 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,10 @@ Repo guidance for AI agents working in `cento`:

- Keep `data/cento-cli.json` aligned with `scripts/cento.sh` when the root CLI built-ins change.
- For Zsh, Oh My Zsh, or tmux integration changes, read `docs/terminal-integration.md` and run `make terminal-e2e`.

## ChatGPT Pro prompt bridge

- When the operator asks to create a prompt for ChatGPT Pro or "smart bro" and copy it to the clipboard, use the stable bridge command exactly as `cento temp run`.
- Do not add an ID, suffix, postfix, or alternate wrapper for this workflow. Do not tell the operator to run `cento temp run <id>` for the ChatGPT Pro prompt bridge.
- Write or update the prompt Markdown under `workspace/runs/temp/chatgpt-pro/`, point the default temp command entry `cento-dev-scale-pro-prompt` at that Markdown file, run `cento temp run` automatically, and visibly report that the prompt was copied to the clipboard.
- `cento temp run <id>` is only for advanced one-off temp commands, not for the ChatGPT Pro prompt bridge.
24 changes: 12 additions & 12 deletions CLUSTER_NOTICE.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Cluster Notice: Cheap Spark Worker Pool
# Cluster Notice: Claude Worker Pool

Updated: 2026-04-30
Updated: 2026-05-05

Cheap Spark/Codex workers are now an explicit coordination option.
Claude Code workers are the active coordination option while Codex weekly limit is reserved for interactive coordination.

Use this when there is queued work that is simple, bounded, validator-like, docs/evidence-oriented, or otherwise safe to delegate while the main agent keeps working.

Expand All @@ -11,29 +11,29 @@ Use this when there is queued work that is simple, bounded, validator-like, docs
Plan candidate work without mutating Redmine or starting agents:

```bash
cento agent-work dispatch-pool --limit 3
cento agent-work dispatch-pool --limit 5 --json
cento agent-pool-kick --dry-run
cento agent-pool-kick --dry-run --max-launch 5
```

Defaults:
Current defaults:

- runtime: `codex`
- model: `gpt-5.3-codex-spark`
- mode: plan-only
- runtime: `claude-code`
- model: `claude-sonnet-4-6`
- mode: plan-only (`--dry-run`)
- skips epics and non-dispatchable nodes unless explicitly overridden

## Start Workers

Only start workers when the plan looks reasonable:

```bash
cento agent-work dispatch-pool --limit 2 --execute
cento agent-pool-kick --max-launch 2
```

For a specific package:

```bash
cento agent-work dispatch-pool --package industrial-panels-v1 --limit 2 --execute
cento agent-pool-kick --package industrial-panels-v1 --max-launch 2
```

## Encouraged Work Creation
Expand All @@ -52,7 +52,7 @@ Keep tasks scoped and independently verifiable. Prefer `story.json`, `validation

## Guardrails

- `dispatch-pool` is safe by default; it does not launch anything without `--execute`.
- `agent-pool-kick` is safe by default (`--dry-run`); it does not launch anything unless `--dry-run` is omitted.
- Use `cento agent-work runs --json --active` to see active workers.
- Cross-node Linux runs are reconciled from Mac before being called stale.
- Do not overwrite dirty node work. Sync through git or use temporary worktrees for validation.
Loading