feat(lfg-beta): add beta variant with Codex delegation and provider hints#14
Open
davidalee wants to merge 2 commits into
Open
feat(lfg-beta): add beta variant with Codex delegation and provider hints#14davidalee wants to merge 2 commits into
davidalee wants to merge 2 commits into
Conversation
…ints
Introduce `lfg-beta` as a parallel beta of `/lfg`, mirroring how
`ce-work-beta` parallels `ce-work`. Stable `lfg` is untouched.
What's new in the beta:
- `delegate:codex` / `delegate:local` argument tokens (and `lfg_beta_delegate`
config) route the work phase through `ce-work-beta delegate:codex`.
- `providers:<list>` argument token (and `lfg_beta_providers` config) accepts
arbitrary provider names. lfg-beta auto-detects each name across three
surfaces (`mcp__<name>__*` tools, CLI on PATH, installed skill) and
surfaces what's available to `ce-plan` and the work skill via a
`providers_hint:` line. No registry of per-provider behaviors — codex and
perplexity have inline wiring at specific phases; everything else flows
through the generic hint path.
- Parallel codex-MCP adversarial review lane runs alongside ce-code-review
in step 3 when adversarial_review_active and the codex MCP is loaded.
Findings flow through the standard residual handoff with synthesized
owner/autofix_class fields.
- Residual handoff gains an inline `[needs human review]` marker for
not-autofixed judgment-required findings, plus an "Items applied with
low confidence" subsection for autofixed-but-uncertain items.
Files:
- New skill: plugins/compound-engineering/skills/lfg-beta/{SKILL.md,
references/codex-adversarial-prompt.md, references/tracker-defer.md}
- Example config documents the three new lfg_beta_* keys.
- README adds the /lfg-beta row to the Beta / Experimental table.
- ce- prefix test exempts `lfg-beta` (matches existing `lfg` exemption).
5 tasks
…and providers_hint
- Validate provider names against [a-z0-9_-]{2,32}; quote command -v args defense-in-depth
- providers:none overrides config entirely (no union); document explicitly
- Add adversarial:on|off per-run token; resolve config-vs-arg precedence
- Fuzzy phrases: explicit tokens always win; negation beats activation on conflict
- Disambiguate codex CLI probe with --version match (yes | collision | no)
- Frame providers_hint as advisory annotation appended AFTER feature_description (and as a follow-up message to ce-work-beta) so plan titles and plan-path detection stay clean. Document that ce-plan/ce-work do not yet parse it.
- Serialize step-3 lanes: codex first against a frozen diff snapshot, then ce-code-review autofix. Skip codex autofix on files ce-code-review touched (stale anchor). Gate autofix on confidence:high AND not requires_human_judgment.
- Resolve diff base SHA via gh/merge-base/HEAD~1 before composing codex prompt
- Dedup codex-unavailable / codex-unparseable residuals by fingerprint against existing PR body
- Preserve manual content in Residual Review Findings section under a Manual notes subsection
- Clarify codex MCP lane gating: adversarial_review_active AND codex_mcp_available; providers:codex does NOT gate it
- Document promotion-path coupling: providers_hint consumers must land in stable ce-plan/ce-work simultaneously
- Add parity test asserting lfg-beta/references/tracker-defer.md is byte-identical to lfg/'s
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Introduce
lfg-betaas a parallel beta of/lfg, mirroring howce-work-betaparallelsce-work. Stable/lfgis unchanged.What's new in the beta:
delegate:codex/delegate:localtokens (andlfg_beta_delegateconfig) route the work phase throughce-work-beta delegate:codex.providers:<list>token (andlfg_beta_providersconfig) accepts arbitrary provider names. lfg-beta auto-detects each name across three surfaces —mcp__<name>__*tools, CLIs on PATH (command -v), installed skills — and passes aproviders_hint:line toce-planand the work skill so they can prefer those helpers. No registry of per-provider behaviors;codexandperplexityhave inline wiring at specific phases, everything else flows through the generic hint path.ce-code-reviewin step 3 whenadversarial_review_activeis true and the codex MCP is loaded. Findings flow through the standard residual handoff with synthesizedowner: downstream-resolver/source: codex-adversarialfields.[needs human review]marker for not-autofixed judgment-required findings, plus anItems applied with low confidencesubsection for autofixed-but-uncertain items, so anything you might want to redirect is easy to spot.Files
plugins/compound-engineering/skills/lfg-beta/SKILL.md+references/codex-adversarial-prompt.md+references/tracker-defer.md(the last copied fromlfg/since each skill is self-contained perAGENTS.md)..compound-engineering/config.local.example.yamldocuments the three newlfg_beta_*keys.plugins/compound-engineering/README.mdadds the/lfg-betarow to the Beta / Experimental table.tests/skill-agent-ce-prefix.test.tsexemptslfg-betafrom thece-prefix rule (matches the existinglfgexemption with the same justification).Why beta and not in-place
Same reasoning as
ce-work-beta: feature involves a new external dependency (codex CLI/MCP) and a new config surface. Beta lets users opt in via/lfg-betawhile stable/lfgkeeps its current orchestration.Promotion path is the standard one: drop the
-betasuffix, dropdisable-model-invocation: true, drop the[BETA]description prefix, swap the README rows, remove the test exemption.Test plan
bun test(1250 pass, 0 fail)bun run release:validate(sync clean — 39 skills now)tests/skill-shell-safety.test.tsandtests/frontmatter.test.tspass for the two new pre-resolution blocksplugins/compound-engineering/AGENTS.md, skill prose changes need skill-creator evals. Recommend running before public exposure on at least: token parsing (delegate, providers, normalization edge cases), delegation routing branch, parallel adversarial dispatch.Items needing your judgment
Token name
providers:vs separatemcp:/cli:. The original ask usedmcp:perplexity. I generalized to a unifiedproviders:since names commonly span surfaces (codexis both CLI and MCP) and the skill auto-detects which surface(s) a name resolves to. Tradeoff: less precise than letting the user say "I specifically want the MCP variant of foo". Easy to addmcp:/cli:precision later if needed./lfg-betacannibalizing/lfg. README places both rows side-by-side. There's no auto-routing — model invocation is disabled on both, so the user picks. If you'd like/lfgto nudge users toward/lfg-beta(or vice versa), that's a separate change.Closing PR #13 (the in-place
lfgmodification approach) — superseded by this beta path.