Turns a short intent, often around 20 words, into a brief that can run unattended. The brief has the user's words verbatim, an outcome owner, an observable done-when, a feedback loop, constraints and neighbors, a budget, an autonomy level, an absence window, stop conditions and a report contract. Runs only on `/lever brief`, when another lever skill delegates, or on an explicit request to write a brief or hand work off ("kick off", "spin up", "hand this to", "while I'm asleep", "I'll be away"). It files issues, so it never runs just because work is happening in parallel.
npx skills add https://github.com/github/lever --skill brief
The person with the intent should write a short sentence, and the agent should do the structuring. Experts type short kickoffs. What makes their delegation work is the brief compiled from that sentence. It says what done looks like, how the worker will know it is working, what it must not touch, how long it has, who lands the result and what to do while nobody is watching. This skill compiles that brief into templates/brief.md. It explores the repo to fill fields instead of asking the human.
Do not use it for a quick interactive edit you will watch, or when a brief for this work already exists. Amend the existing brief instead of writing a second one.
## Ask (verbatim). Keep typos and casing. Never paraphrase the only copy. When briefs pass through several agents, the quote is what stops intent from drifting.find-the-loop and link or summarize its Loop Card. If there is no baseline, the worker's first step is to measure one.(source: operator, expires: end of task). A constraint with no source isn't real, so drop it. For neighbors, list other lanes, PRs, sessions or people touching the same files, so the worker coordinates instead of colliding.budgets:), and which steps get a premium model. Set a timebox, a maximum number of iterations or attempts, a maximum PR size, and API and compute limits. For polling, use the minimum poll interval and API budget from .github/lever.yml budgets: when present. Also set the budget stop: what to do at 80% of the budget, which is to report and then finish or park.autonomy-dial. Record the level, the ceiling and where the level came from. If the prompt doesn't say who lands the work, ask the one kickoff question from docs/autonomy.md once. Skip it if the ask already answers it ("then merge", "hand off to the owning team").Human-only questions are surfaced once, with a recommended answer, in the next report. Delivery beats planning: do not produce status or plans in place of work.
10. Stop conditions. Write all three:
11. Report contract. Name who receives reports, the cadence, and the format, following progress-contract and templates/status-digest.md. The default is silent unless something changed.
12. Fan-out ("1 of N"). When there are several workers, write N sibling briefs that share the same Ask, rules, budget and report contract. Each brief adds a line You are 1 of N. Your slice: <area | model | hypothesis>. Siblings: <slices>. Slices must not overlap in the files they write. When comparing arms, every arm uses the same Loop Card.
13. File it. The brief lives on a GitHub issue in the target repo, so any session can resume it (docs/tracking.md). Title it with the outcome. The body is the brief, then an empty ## Status section and the <!-- lever: … --> marker. Assign it to the outcome owner (usually the user) and label it lever, creating the label if it's missing. More than one lane: one sub-issue per lane with its "1 of N" brief, also labelled lever, linked to the parent with gh api repos/{o}/{r}/issues/{n}/sub_issues -F sub_issue_id=$(gh api repos/{o}/{r}/issues/{child} --jq .id) (the child's id, not its number). Search label:lever first and amend an existing brief for the same outcome instead of filing a second one. No triage permission, or someone else's repo the user hasn't said to file in: keep the brief in the session and say so.
14. Pick the runner. Use brief.runner from ~/.copilot/lever.yml if set. Otherwise end with one choice: here (this session coordinates now), cloud (assign each lane sub-issue to Copilot) or later (filed, nobody runs it yet). Then:
/lever deliver #<issue> and keep it alive across turns: in the CLI, /goal <done-when> and /every 30m /lever deliver #<issue>; in the app, /goal and a session automation that runs /lever deliver #<issue> every 30 min. Each tick is a deliver sweep; /lever status stays read-only. Write runner=here and the coordinator into the marker./lever automate for a paused Copilot Automation that shepherds the resulting PRs at the resolved autonomy level./lever deliver #<issue> as the command to run when ready.In interactive mode, show the brief once before filing. In autopilot, file it and go.
> Ask (verbatim): "ci on the app is way too slow. make it faster, I'm offline till morning. measured by wall clock"
The brief this produces:
find-the-loop (CI row), with a baseline as the first step.permissions: (source: repo policy).release/** (source: operator, expires: end of task).| Dial | Default | Options |
|---|---|---|
| Question budget | 0. Explore, then ask one batched question only if blocked | 1–3 questions; full interview |
| Brief length | Full template | Terse: Ask, done-when, autonomy, stop |
| Autonomy level | Resolved by autonomy-dial | L0–L5 |
| Blocked policy | decide-and-log | park-and-next; ask-parent; ask-human (only when present) |
| Absence window | Asked once if the user signals absence | None; fixed hours; "until done" |
| Stuck threshold | 2 h without meaningful progress → re-plan | 30 min – 8 h |
| Budget stop | Report at 80%, then finish or park | 50–100% |
| Fan-out | 1 | N copies sliced by area, model or hypothesis |
| Report target and cadence | Back to the delegator, on change | Hourly; milestones; daily digest; issue comment |
| Approval | Interactive: show before filing. Autopilot: file and go | Always show; never show |
| Where it lives | An issue assigned to the owner, label lever; sub-issues per lane | Session only (no issue) |
| Runner | brief.runner, else ask once | here; cloud; later |
An issue labelled lever and assigned to the owner, with a filled templates/brief.md in its body and one sub-issue per lane. Sibling briefs share one Ask, and each carries its own "1 of N" line. A one-line summary goes back to the user: #<issue> · <N> lane(s) · <outcome> · done when <check> · L<n> · runner <here|cloud|later>.
Take github/brief from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.