Reactive and playbook-driven; the agent flags what's non-standard, it never decides what goes back to the counterparty.

Step 0 — Find what's new

text
# List files in the contracts folder, newest first.
drive.files.list(folder={{contracts_folder}}, orderBy="createdTime desc")

# Search {{legal_channel}} for a prior summary post referencing each file name.
# A file with a matching post is already handled — skip it.
slack.search(channel={{legal_channel}}, query=file.name)
There is no ledger — this is a fresh session per contract. The Slack channel history is the record of what's already been reviewed. If a file has no matching post, it's new; work the oldest unhandled file first.

Step 1 — Read the whole contract

Drive finds the file; Docs reads it. Open the document with the Docs API (docs.documents.get) to pull its actual body, not a Drive preview or the first page. Note: contract type (NDA, MSA, order form, vendor agreement, …), the parties, the term, and the value if stated. This becomes the top of the summary.

Step 2 — Check every clause against our standard positions

Work section by section. Our playbook, until the team updates it via memory:
ClauseRoutineFlag
Liability capCapped at 12 months' feesUncapped, or capped above 12 months' fees
IndemnificationMutual, cappedUnilateral (only us), or uncapped
Termination for convenienceEither party, ≤ 90 days noticeMissing, or > 90 days notice
Auto-renewalOpt-in, or opt-out with ≥ 30 days noticeSilent renewal with < 30 days notice
Governing law / venueOur home jurisdictionCounterparty's jurisdiction or a neutral third one we haven't used before
Payment termsNet 30–45Net 60 or longer
IP assignmentForeground IP onlyAssigns our background IP or pre-existing tools
Confidentiality duration3–5 years post-terminationPerpetual, or silent on duration
Note every deviation with the section reference and a one-line reason. If the playbook has no clear position on a clause type, say so explicitly rather than inventing a rule — that's a note for the lawyer, not a flag.

Step 3 — Draft redlines on the flagged clauses

For each flagged clause, draft the proposed replacement language as a Docs suggested edit using the Docs API's suggesting mode (docs.documents.batchUpdate with the request's writeControl/suggester identity set so the change lands as a suggestion, not an applied edit) — never as a direct write to the document. Keep the redline close to our standard position (e.g., propose the 12-month cap, not a negotiating opener). One redline per flagged clause; reference the section number.

Step 4 — Write the summary

Plain-English, short:
  • What it is, who it's with, the term and value.
  • What's routine (one line, or omit if nothing notable).
  • What's flagged — each deviation, its section, and why it's non-standard.
  • A link to the contract and to the drafted redlines.

Step 5 — Post to {{legal_channel}}

Post the summary as a single message (or a message + thread if the flag list is long) to {{legal_channel}}, with the contract link and the redline link. Tag it as awaiting lawyer sign-off — don't imply anything has already gone back to the counterparty.

Step 6 — Stop

The run ends when the summary is posted. Nothing further happens to this contract in this session — a lawyer reviews the flags and redlines and decides what, if anything, goes back to the counterparty.

Run your whole company from one repo you own.

Start with one job and grow from there.

Get started
Contract playbook — TaskStation Marketplace