Scope, schedule, and close
Cut a deal to a budget, read its schedule, see where capacity and revenue land, and move a deal through approval.
Cut a deal to a number
The customer has a budget. deal scope says where the money is, one breakdown in
full and every other one named in a line, so you can see whether the weight sits in
the work, in a role, in a stream, or in recurring cost. Then take the group out and
read the deal back.
estii deal scope nd_abc123
estii deal scope nd_abc123 --by role,stream --json
estii deal descope nd_abc123 ft_7 --dry-run
estii deal descope nd_abc123 ft_7 --yes
estii deal show nd_abc123
estii deal rescope nd_abc123 ft_7 --yesEach group reports what it is worth and what the phase's current scope holds of it,
so a group already partly out reads as partial. Descoping takes the line items
under an item with it and clears any exclusion they held on their own, which is what
makes rescope put back exactly what came out. Where a group id is in more than one
phase, name the phase with --phase, or act on all of them at once with
--phase all.
Read the delivery side
estii deal schedule nd_abc123The dates each phase sits on, its duration, how many resources it calls for, and how each role and overhead is allocated across it. The dates are the computed ones, so a phase that starts after a gap or is pinned to its own date reports where it really is rather than where chaining the durations would put it.
See where capacity and revenue land
deal list says where each deal stands. pipeline says what all of them add up to
over a window: demand in full-time equivalents, and revenue recognition from the
milestones on each deal.
estii pipeline summary
estii pipeline capacity
estii pipeline capacity --group role
estii pipeline capacity --group deal --from 2026-03-02 --months 3
estii pipeline revenue --months 12 -o json
estii pipeline revenue --group deal --variant "Mobile App (Phase 1 only)"The summary, capacity and revenue count an opportunity once, as its primary variant:
the others add nothing, as on the pipeline page. --variant forecasts an opportunity
as another of its open variants for that read alone. --group deal names each series
by the deal's label, such as Mobile App (Full scope).
Every series carries three nested bands: confirmed is won work, forecast adds
your open deals weighted by probability, and exposure adds them all at full weight.
Each reports its own peak, the period the peak falls in, and its total, so a caller
and the forecasts page cannot disagree about where the peak sits.
The window resolves rather than refusing. --from snaps back to that week's Monday,
--months clamps to 3–12, and the period defaults to weekly at six months or under
and monthly above. Every result states the window it actually covered, the rule it
bucketed by, when the forecast was built, and whether a deal has changed since.
--deals, --roles, --tags and --status narrow the picture to what they name;
--deals also matches an opportunity name or a label. There is no exclusion form of
any of them.
Capacity here is demand. Estii holds no headcount, so a peak is a concentration of scheduled work rather than a shortfall against a roster.
Pipeline forecasting is a Self-serve feature. With limited access these commands refuse with the plan required and where to upgrade.
Move a deal
Once you know which deal drives a peak:
estii deal reschedule nd_abc123 +2w --dry-run
estii deal reschedule nd_abc123 +2w --yes
estii pipeline capacity --group dealreschedule takes a signed offset (+2w, -1m, +10d) or an absolute
YYYY-MM-DD date, and resolves either to a Monday. It is not deal set start=: a
deal past draft is saved as a version before its dates change, and phases pinned to a
fixed date move by the same offset. It reports the new start, whether a version was
saved, and which phases moved. An archived or closed deal is refused; restore or
redraft it first.
Check a deal before you send it up
estii deal audit nd_abc123
estii deal audit nd_abc123 --all --jsonWhat the deal's own numbers imply, ranked by how likely each finding is to be asked about at approval: cost running ahead of billing and the day the gap peaks, a phase running longer than its work needs and the recurring cost sitting in that window, risk classified onto the thinnest-margin scope, a final payment large enough to fund a dispute. Each finding carries the figures it rests on and the part of the deal to open.
Most deals produce nothing, and that is the point rather than a failure: a review that always finds something is not worth reading by the fourth deal. A quiet deal says so and exits 0, as does one carrying too little to review.
The report always says how many checks passed; --all lists them with the value
each outcome rests on. Seeing what passed is what makes what failed worth acting
on. The JSON carries every check either way.
See what has moved since you last shared it
estii deal versions nd_abc123
estii deal compare nd_abc123 v_xyz789
estii deal compare nd_abc123 v_xyz789 --detaileddeal compare reports the deal against a save point the way the app's Compare tab
does: what the price, margin and duration did, then the rules that explain them — a
phase that arrived, work added inside the phases already there, the same work priced
differently, a discount that moved, the dates sliding under a length that did not
change. A move against an automatic snapshot says so, because that is the rate card
arriving rather than anyone touching the deal.
--detailed prints the detailed comparison the app keeps for that version, the same
markdown the app copies: the price walked from the version to now, scope by phase,
team and payments, and what has moved since it ran. Where none is kept it runs one
first, which needs the editor role and counts as AI usage; deal versions says which
versions already have one.
estii deal audit nd_abc123@v_xyz789 is the other question: the deal as it stood at
that save point, audited on its own terms.
Nothing here is stored or scheduled. The findings are recomputed from the deal each time you ask, so they move when it moves, and the app's review panel answers with the same figures in the same order.
Move a deal through approval
estii deal request-approval nd_abc123 --to sam@acme.com --yes
estii deal approve nd_abc123 --probability 80% --yes
estii deal progress nd_abc123 --yes
estii deal close nd_abc123 won --reason "signed SOW" --yesThese are one-way. Re-running a step the deal has already taken is an error rather
than a no-op, and amending a close means redraft then closing again. Closing a
variant won or lost also abandons its open sibling variants and names them, and a
redraft does not bring them back; --all-variants abandons them all. Each step
runs your automations as it would in the app. estii deal --help prints the legal
transitions from every state.