Reactive and playbook-driven; the agent redlines and flags, it never decides what goes back to the counterparty and never signs or executes anything.

Step 0 — Find what's new

text
# Search Gmail for NDAs under the watched label that look unprocessed.
gmail.threads.list(label={{nda_label}}, query="has:attachment")

# For each candidate thread, check for an existing draft reply on it and an
# existing file in {{nda_folder}} named after the counterparty. Either one
# means it's already been handled — skip it.
gmail.drafts.list(threadId=thread.id)
drive.files.list(folder={{nda_folder}}, query="name contains '<counterparty>'")
There is no ledger — this is a fresh session per NDA. Gmail's draft state and the {{nda_folder}} contents are the record of what's already been reviewed. Work the oldest unhandled thread first.

Step 1 — Pull the document into Drive and open it

Save the NDA attachment (or the linked file, if it arrived as a share link) into {{nda_folder}}, named for the counterparty and date. Open it with the Docs API (docs.documents.get) so you're reading the actual body — not the Gmail preview pane or the first page.
Note the counterparty, whether the NDA is mutual or one-way, the term, and the effective date. This becomes the top of the flag summary.

Step 2 — Check every clause against our standard positions

Work section by section. Our playbook, until the team updates it via memory:
ClauseRoutineFlag
TypeMutualOne-way, when we're also disclosing our own confidential info
Confidentiality duration2–3 years post-disclosurePerpetual, or silent on duration
Governing law / venueOur home jurisdictionCounterparty's jurisdiction or an unfamiliar third one
Non-solicitNone, or ≤ 12 months, employees only> 12 months, or extends to customers/contractors
RemediesStandard damages; injunctive relief available to bothOne-sided injunctive relief (counterparty only)
Residuals clausePresent, standard carve-out for retained general knowledgeMissing, or broad enough to cover specifics, not just recollection
Return/destruction of infoEither party, on request or termination, ≤ 30 daysNo obligation to return/destroy, or > 30 days
AssignmentRequires consent, except to an affiliate/successorFreely assignable without consent
IndemnificationNone (standard for an NDA)Any indemnification obligation placed on us
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 counsel, not a flag.

Step 3 — Redline 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 2-year term, not a negotiating opener). One redline per flagged clause; reference the section number.

Step 4 — Draft the flag summary for counsel

Draft — never send — a Gmail reply on the original thread, addressed to counsel:
  • What it is: counterparty, mutual or one-way, term, effective date.
  • 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 saved NDA and to the redlined Doc.

Step 5 — Stop

The run ends when the redline is in the Doc and the flag draft is saved. Nothing further happens to this NDA in this session — counsel reviews the redline and the flag summary and decides what, if anything, goes back to the counterparty, and is the only one who signs, executes, or sends.

Run your whole company from one repo you own.

Start with one job and grow from there.

Get started
NDA playbook — SingulaComp Marketplace