fix(lfg): allow agent invocation for the autonomous brainstorm handoff (#1116)

This commit is contained in:
Trevin Chow
2026-07-12 22:46:07 -07:00
committed by GitHub
parent 556816aab0
commit a7d8505550
5 changed files with 10 additions and 11 deletions
+2 -2
View File
@@ -23,13 +23,13 @@ From a clone of this repository:
The script creates symlinks so Cline reads the live skill directories from your checkout. Re-run it after `git pull` to refresh links when skill folder names change. It only ever creates or replaces CE-owned symlinks (links whose target resolves under this checkout's `skills/` tree); an existing `~/.cline/skills/<name>` pointing at your own skill, a fork, or another checkout is left untouched. Default installs also remove only manual-only symlinks that are CE-owned.
Skills marked `disable-model-invocation: true` (for example `lfg`, `ce-dogfood`, `ce-polish`) are **not** linked by default — Cline auto-activates from description matching and has no manual-only gate, so linking them would let them fire unintentionally. Those slash commands are unavailable until you opt in:
Skills marked `disable-model-invocation: true` (for example `ce-dogfood`, `ce-polish`, `ce-setup`) are **not** linked by default — Cline auto-activates from description matching and has no manual-only gate, so linking them would let them fire unintentionally. Those slash commands are unavailable until you opt in:
```bash
./compound-engineering-plugin/.cline/scripts/install-skills.sh --global --include-manual
```
`--include-manual` links manual-only skills so `/lfg` and similar commands work, with a warning that Cline may still auto-activate them when descriptions match. Omit the flag if you do not need those workflows on Cline.
`--include-manual` links manual-only skills so `/ce-polish` and similar commands work, with a warning that Cline may still auto-activate them when descriptions match. Omit the flag if you do not need those workflows on Cline.
## Pin a release
+1 -1
View File
@@ -59,7 +59,7 @@ Project-scoped skills from a checkout:
/path/to/compound-engineering-plugin/.cline/scripts/install-skills.sh --project
```
Manual-only skills (for example `lfg`, `ce-polish`) require the opt-in flag:
Manual-only skills (for example `ce-polish`, `ce-setup`) require the opt-in flag:
```bash
/path/to/compound-engineering-plugin/.cline/scripts/install-skills.sh --global --include-manual
+1 -2
View File
@@ -1,7 +1,6 @@
---
name: lfg
description: Run the full hands-off engineering pipeline from planning through a green PR.
disable-model-invocation: true
description: "Run the full autonomous shipping pipeline end-to-end, hands-off with no check-ins: plan, implement, review and fix, commit, push a branch, open a PR, and watch CI to green. Use only when the user explicitly asks to build or ship something autonomously all the way to an open PR, or invokes lfg directly — it pushes and opens a PR without stopping. Not for in-the-loop work where the user reviews each step: use ce-plan to plan, ce-work to implement a plan, ce-debug to fix a bug, or ce-commit-push-pr to commit and open a PR for existing changes."
argument-hint: "[feature description]"
---
+5 -5
View File
@@ -25,7 +25,7 @@ const installScript = path.join(
"install-skills.sh",
)
const manualSkill = "lfg"
const manualSkill = "ce-setup"
const invocableSkill = "ce-plan"
type RunResult = {
@@ -66,8 +66,8 @@ async function pathExists(filePath: string): Promise<boolean> {
describe("cline install-skills.sh", () => {
test("does not remove unrelated manual-only skill symlinks", async () => {
const dest = await makeTempDir("cline-skills-dest-")
const userSkill = await makeTempDir("cline-user-lfg-")
await fs.writeFile(path.join(userSkill, "SKILL.md"), "# user lfg\n")
const userSkill = await makeTempDir(`cline-user-${manualSkill}-`)
await fs.writeFile(path.join(userSkill, "SKILL.md"), `# user ${manualSkill}\n`)
await fs.symlink(userSkill, path.join(dest, manualSkill))
@@ -77,7 +77,7 @@ describe("cline install-skills.sh", () => {
expect(result.exitCode).toBe(0)
expect(await pathExists(path.join(dest, manualSkill))).toBe(true)
expect(result.stderr).not.toContain("removed lfg")
expect(result.stderr).not.toContain(`removed ${manualSkill}`)
})
test("does not overwrite an existing user-managed symlink for an invocable skill", async () => {
@@ -112,6 +112,6 @@ describe("cline install-skills.sh", () => {
expect(result.exitCode).toBe(0)
expect(await pathExists(path.join(dest, manualSkill))).toBe(false)
expect(result.stderr).toContain("removed lfg: stale CE manual-only symlink")
expect(result.stderr).toContain(`removed ${manualSkill}: stale CE manual-only symlink`)
})
})
+1 -1
View File
@@ -150,7 +150,6 @@ const EXPECTED_USER_INVOKED_SKILLS = new Set([
"ce-setup",
"ce-sweep",
"ce-test-xcode",
"lfg",
])
const REQUIRED_MODEL_INVOKED_CALLEES = new Set([
@@ -173,6 +172,7 @@ const REQUIRED_MODEL_INVOKED_CALLEES = new Set([
"ce-test-browser",
"ce-work",
"ce-worktree",
"lfg",
])
// ---------------------------------------------------------------------------