[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-protocol-labs-send-for-signature":3,"mdc-q56fex-key":35,"related-repo-protocol-labs-send-for-signature":2529,"related-org-protocol-labs-send-for-signature":2539},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":26,"topics":30,"repo":31,"sourceUrl":27,"mdContent":34},"send-for-signature","send Google Drive PDFs for e-signature","Signature Sleigh: route a finalized Google Drive PDF out for e-signature through DocuSign, driven through the browser — no DocuSign API key, JWT, or admin integration. The user gives a Drive PDF URL plus the internal signer and any counter-signers; counter-signers sign first by default (overridable to internal-first or simultaneous). Completion-copy recipients and other user-specific defaults come from the user's companion doc. Optionally drafts a Slack heads-up as a group DM so the signer's replies route back. Always preview and get explicit approval before sending. The skill is the generic how-to; each user's specifics (which DocuSign account, where 2FA codes go) live in their own companion doc. Trigger on 'Signature Sleigh', 'send X for signature', 'get this signed', 'DocuSign this', 'route the [doc] to [person]', or a Drive PDF URL plus a counterparty name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"protocol-labs","Protocol Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fprotocol-labs.png","protocol",[13,17,20,23],{"name":14,"slug":15,"type":16},"PDF","pdf","tag",{"name":18,"slug":19,"type":16},"Google Drive","google-drive",{"name":21,"slug":22,"type":16},"Documents","documents",{"name":24,"slug":25,"type":16},"E-Signature","e-signature",0,"https:\u002F\u002Fgithub.com\u002Fprotocol\u002Fsend-for-signature","2026-07-16T06:03:49.45841","MIT",[],{"repoUrl":27,"stars":26,"forks":26,"topics":32,"description":33},[],"Signature Sleigh routes finalized Drive PDFs through DocuSign for e-signature using the browser, with signer setup, field placement, preview, explicit send approval, and optional Slack heads-up\u002Ftracker logging.","---\nname: send-for-signature\ndescription: \"Signature Sleigh: route a finalized Google Drive PDF out for e-signature through DocuSign, driven through the browser — no DocuSign API key, JWT, or admin integration. The user gives a Drive PDF URL plus the internal signer and any counter-signers; counter-signers sign first by default (overridable to internal-first or simultaneous). Completion-copy recipients and other user-specific defaults come from the user's companion doc. Optionally drafts a Slack heads-up as a group DM so the signer's replies route back. Always preview and get explicit approval before sending. The skill is the generic how-to; each user's specifics (which DocuSign account, where 2FA codes go) live in their own companion doc. Trigger on 'Signature Sleigh', 'send X for signature', 'get this signed', 'DocuSign this', 'route the [doc] to [person]', or a Drive PDF URL plus a counterparty name.\"\nversion: 0.3.2\nauthor: Henry \u002F internal company Labs\nlicense: MIT\nplatforms: [linux]\nmetadata:\n  hermes:\n    tags: [signature-sleigh, docusign, google-drive, signature, contracts, legal-ops, browser-harness, gog]\n    related_skills:\n      - browser-harness\n      - google-workspace-gog\n      - henry-out\n---\n\n# Signature Sleigh (send for signature)\n\nRoute a finalized **Google Drive PDF** out for e-signature through **DocuSign**, using the browser the way a person would — log in, upload the PDF, add recipients, set the signing order, place each signer's fields so they just click, add any completion-copy recipients specified in the user's companion doc, send. **No DocuSign API key, JWT, or admin integration** — `gog` handles the Drive side, **browser-harness** drives DocuSign's web app, `henry-out` handles the optional Slack heads-up.\n\n> **Operate conservatively.** This workflow handles real signature envelopes. Don't guess your way through an irreversible send — when a screen doesn't match, look at it, adapt, and ask. Always stop at preview and require explicit approval before sending.\n\n## Naming and invocation\n\n**Signature Sleigh** is the human-facing and searchable workflow name. Keep the skill discoverable under that term in the title, description, and tags. The installed skill ID may remain `send-for-signature` for compatibility; do not rename the ID\u002Ffolder unless deliberately migrating references. Treat all of these as valid invocation phrases: “Signature Sleigh,” “send this for signature,” “DocuSign this,” “get this signed,” and “route this PDF for signature.”\n\nWhen the user asks for the generic\u002Fshareable Signature Sleigh link for other users, use `references\u002Fshareable-signature-sleigh-docs.md`: provide the generic End-to-End Workflow doc link, distinguish it from personal companion docs and the pre-rollout test plan, and check Drive permissions before calling the link share-ready or changing access.\n\nWhen the user asks for a GitHub\u002Frepository README or public explanation of the general Signature Sleigh skill, start from `templates\u002Fgithub-readme.md`. Keep it generic: explain the browser-operated DocuSign workflow, the no-DocuSign-API design, the mandatory preview\u002Fexplicit-approval checkpoint, and the companion-doc split. Do not include any user's companion doc ID, DocuSign account, 2FA routing, envelope tracker ID, Slack destinations, or real signer data.\n\n## How this skill works: generic base + the user's companion doc\n\n**Everyone gets this skill** — it's the generic how-to for routing a PDF through DocuSign in the browser. **Each user's specifics live in their own companion doc** — which DocuSign account\u002Flogin to use, where their 2FA codes go, any field-placement quirks for their templates, default channels or signers. The skill is the *mechanics*; the companion doc is *that user's preferences*. Keep them separate.\n\n**At the start of a run, get the user's companion doc — find an existing one, or guide the user through creating one.**\n\n**1. Find an existing companion.** Check your **memory for a recorded companion doc-id first** (fastest — when it's set up, the doc-id is pinned in your memory). Otherwise the user may point you to it, or run a **name-scoped** Drive search:\n```\ngog drive search \"name contains 'Send for Signature'\" --raw-query\n```\nUse the name-scoped query, NOT a plain full-text `gog drive search \"Send for Signature\"` — a full-text search drowns in legal\u002Ffinancing docs that all contain the word \"signature\" and will not surface the companion. Read the companion with `gog docs cat \u003Cdoc-id>` and follow it for the user-specific choices (account, 2FA mailbox, signing defaults, template notes). If you find it, record its doc-id to memory (step 4) and skip to the workflow.\n\n**2. No companion yet → run a guided setup (don't hand them a blank doc).** Ask the setup questions **once, in one structured message** (same style as Step 2 of the workflow — don't drip questions). Tell them you'll save their answers as a reusable preferences doc so they never repeat this:\n\n   > *Looks like this is your first signature run — let me set up your preferences once so future sends are one step. A few quick things:*\n   > - **DocuSign account\u002Flogin** to use — the email\u002Faccount the browser should sign in as (the work account, not a personal login):\n   > - **2FA mailbox I can read** — when DocuSign emails a verification code, which of *your own* inboxes should it go to? It must be a mailbox I can read via gog, not a shared one (DocuSign often defaults to a shared mailbox I can't open):\n   > - **Default signing order** (default = counter-signers first, internal last) — keep the default, or prefer *internal first* \u002F *simultaneous*?\n   > - **Usual internal signer(s)** — who on the internal-company side normally signs? (name + email):\n   > - **Completion-copy recipients** — anyone who should receive the completed\u002Fexecuted envelope by default, and whether they should receive only the completed copy (not the initial signing request):\n   > - **Slack heads-up channel\u002Fperson** — default person or channel for the optional signing notice (or \"none\"):\n   > - **Signature-block quirks** — anything unusual about where each party's Signature \u002F Date \u002F Name sit in your standard documents? (\"none\" is fine):\n\n**3. Create the companion doc PRE-FILLED with their answers** (not the blank template). Fill the template (bottom of this skill) with what they told you, write it to a local file, and convert it into a Google Doc:\n```\ngog drive upload \u002Fopt\u002Fdata\u002Fsend-for-signature-companion.md --convert-to doc --name \"Send for Signature — \u003Cuser>'s preferences\"\n```\n(Or create the doc from the template and `gog docs find-replace \u003Cdoc-id>` each `____` blank with their answer.) Then share it to the user as **writer** so they can tweak it later:\n```\ngog drive share \u003Cdoc-id> --to user --email \u003Ctheir-email> --role writer\n```\nConfirm back: *\"Saved your preferences here: \u003Cdoc link>. I'll use these going forward — edit that doc anytime. Now, on to your signature.\"* Leave any answer they skipped as a blank for them to fill in later.\n\n**4. Record the doc-id to memory** so the next run finds it instantly with no search: save `send-for-signature companion doc-id = \u003Cdoc-id>` to your durable memory. Then proceed straight into the actual send — don't make them wait on the setup.\n\n**Where to record what you learn — keep this straight:**\n- A **generic DocuSign mechanic** (a UI step, a field-placement trick, a screen that changed *for everyone*) → update **this skill**.\n- A **user-specific preference** (their account, their 2FA mailbox, their document's signature-block layout, completion-copy\u002FCC recipients such as Records, Slack destinations, default signer lists) → update **their companion doc** (`gog docs find-replace` \u002F edit it in place). Never bake one user's specifics into this skill.\n\n## The pieces — native tools, no API\n\n| Job | Tool | (was, in the Claude version) |\n|---|---|---|\n| Read + download the Drive PDF | `gog drive` | ~~get_file_metadata \u002F download_file_content~~ |\n| Everything inside DocuSign | **browser-harness** (drive the web app) | ~~DocuSign createEnvelope API \u002F JWT~~ |\n| Optional Slack heads-up (group DM) | `henry-out group` | ~~send_message_draft~~ |\n| The user's preferences | their **companion doc** (`gog docs cat`) | — |\n\n## When to use\nThe user shares a Google Drive PDF URL and wants it routed for signature (\"send this for signature: [url] — internal signer Chris, counterparty Jane\"; \"DocuSign this and have our side sign first\"; or just a Drive URL + a counterparty name — collect the rest).\n\n## Do not use for\n- Contract review \u002F redlines \u002F legal advice — a different job.\n- Searching Drive by document name — the user provides a direct URL.\n- Non-PDF source files — ask the user to export to PDF first.\n- Sending without a preview + explicit approval.\n\n## Watched test runs and pre-rollout QA\n\nIf the user wants to validate Signature Sleigh before broader rollout, use `references\u002Fpre-rollout-bug-bash-test-plan.md`: run the three-test matrix (internal-only preview+cleanup; counter-signer-first\u002Finternal-last with exact title fields; Slack heads-up + tracker logging) and patch any generic issues before sharing widely.\n\nIf the user wants to test this skill while watching in the Live Browser, keep the **instructions and approvals in chat** and use the Live Browser only as the shared visual surface where they watch DocuSign being operated. Do not tell the user to type a prompt into the Live Browser.\n\nOffer this copy-paste prompt for a watched test:\n\n```text\nHenry, run a watched test of the send-for-signature skill using my companion doc.\n\nDrive PDF: \u003Cpaste Google Drive PDF link>\nInternal signer: \u003Cname>, \u003Cemail>\nCounter-signer: \u003Cname>, \u003Cemail>  [or: internal-only test]\nSigning order: use my companion\u002Fdefault unless stated otherwise\nSlack heads-up: no for this test  [or specify channel\u002Fperson]\nTest mode: build the DocuSign envelope and stop at preview for my approval. Do not send until I explicitly approve.\n```\n\nThen drive DocuSign through `browser-harness` so the user can watch. Narrate only useful checkpoints in chat (PDF verified, DocuSign login\u002Fauth needed, preview ready, send verified), and still require the normal explicit approval before sending.\n\nIf the user says the run was **test-only** or explicitly says **do not proceed** after preview, treat that as a final stop: do **not** send the envelope, do **not** post any Slack heads-up, and do **not** log anything to the envelope tracker. Abandon\u002Fclose the unsent DocuSign builder or navigate away so there is no active send screen left open, then verify the browser is no longer on the envelope send screen before confirming. If they ask to delete\u002Fdiscard the test draft or log out, use `references\u002Fdocusign-test-cleanup-2026-06.md`: close Preview, Actions → Discard, confirm **Discard Draft**, verify the Agreements page, then profile → **Log Out** and verify the logged-out page before reporting completion.\n\n## Logging into DocuSign (browser-harness + autofill)\n\nOpen `https:\u002F\u002Faccount.docusign.com` (or `https:\u002F\u002Fapps.docusign.com\u002Fsend\u002Fhome`) with browser-harness. If you're already signed in, go straight to the workflow.\n\nAt the login screen, **sign in with the browser's saved credentials — never type, invent, or ask for a password:**\n\n1. **Email input with real typing.** Type the account email from the user's companion doc with real browser input (coordinate-click the field, then type).\n2. **Password autofill & 1Password Unlocking.** On the password page, click directly in the password field to reveal the autofill dropdown.\n   - **If the autofill\u002Fsaved-password dropdown does NOT appear:** It means 1Password is locked. Go to the 1Password browser bookmark (`https:\u002F\u002Fmy.1password.com\u002Fhome`), log in to 1Password itself using its saved autofill, then return to the DocuSign tab (or open a new tab to `https:\u002F\u002Faccount.docusign.com`) and click the password field again to reveal the autofill options.\n   - Choose the row for the DocuSign sender account named in the user's companion doc. Do not stop for user handoff just because a password field appears.\n3. Submit, then watch what DocuSign asks next. Verify the DocuSign Home page (`apps.docusign.com\u002Fsend\u002Fhome`) before continuing.\n4. Only ask for a user handoff if the autofill dropdown does not appear even after executing the 1Password unlock flow above, or if the saved credential is rejected.\n\n### If DocuSign asks for a verification code (2FA)\n\nDocuSign sometimes requires an emailed one-time code. **Handle it only when DocuSign actually asks — never pre-empt it, and don't repeatedly prompt the user for codes.**\n\n1. **Route the code to a mailbox you can read.** DocuSign shows where it will send the code as a masked address (`d***@…`, `t***@…`, `j***@…`). You can only read the **user's own** mailbox (via gog). If the offered destination's first letter does **not** match the user's own email, click **\"Select another method\" \u002F \"Try another way\"** and choose the email option whose first letter matches the **user's own email** — e.g. if the user's email is `alex.rivera@…`, pick the **`a***`** option. (You know the user's email from their gog account.) The companion doc lists which addresses to skip (the ones the agent can't read).\n2. **Trigger the send**, then read the code with gog from the user's mailbox:\n   ```\n   gog gmail search 'from:docusign.net is:unread newer_than:15m' --json\n   ```\n   Open the newest match and pull the 6-digit code (DocuSign codes come from `@docusign.net`).\n3. **Enter the code** in DocuSign.\n4. If no code arrives within ~1 minute, or there's no readable email option to route to, **ask the user for the code** — one ask, then wait; don't loop, and don't force 2FA when DocuSign didn't ask for it.\n\nOnce signed in, confirm you're on the correct DocuSign account before touching an envelope (screenshot if unsure).\n\n## Workflow\n\n**References:**\n- `references\u002Fsharing-and-rollout.md` captures the generic shareable Signature Sleigh workflow-doc link and how to distinguish it from user-specific companion\u002Fpreference docs.\n- `references\u002Fdocusign-web-ui-2026-06.md` captures real June 2026 DocuSign browser runs, including the current Home → Start submenu shape, hidden file-input upload, completion-copy recipient role selection, watched-test login\u002Fautofill pitfalls, field-placement coordinates\u002Fpitfalls, and final Sent-list verification.\n- `references\u002Fdocusign-login-controlled-input-2026-06.md` captures a DocuSign login pitfall where JS value injection into the controlled email field was discarded; use real browser-harness typing for the email step.\n- `references\u002Fdocusign-login-autofill-2026-06.md` captures the current DocuSign password-step playbook: click the visible password field, select the saved-password row matching the companion-doc sender account, verify DocuSign Home, and only hand off if visible autofill is unavailable or rejected.\n- `references\u002Fdocusign-prefilled-title-fields-2026-06.md` captures the watched-test workaround for exact pre-filled signer titles: replace standard editable Title tabs with read-only Text fields when the UI does not expose a reliable default-value control.\n- `references\u002Fdocusign-test-cleanup-2026-06.md` captures the post-test cleanup path: close Preview, Actions → Discard, confirm Discard Draft, verify the Agreements page, then profile → Log Out and verify the logged-out page.\n- `references\u002Fpre-rollout-bug-bash-test-plan.md` captures the three-test release gate before opening Signature Sleigh to a wider audience: internal-only preview+cleanup, counter-signer-first\u002Finternal-last with exact titles, and Slack heads-up + tracker logging.\n- `references\u002Fenvelope-tracker-status-refresh.md` covers companion-doc-driven Google Sheets envelope trackers: logging each sent envelope idempotently and refreshing pending signature status from DocuSign.\n\n### Step 1 — the Drive PDF (gog)\n1. Extract the file ID from the URL (`\u002Ffile\u002Fd\u002F{ID}\u002Fview`, `open?id={ID}`, `\u002Fd\u002F{ID}\u002F`).\n2. `gog drive get \u003CID>` → read the `name`, the **`type`** field (the MIME type), and the `modified` date. (`gog drive get` prints `type\tapplication\u002Fpdf` for a PDF.)\n3. The `type` **must be `application\u002Fpdf`**. If it's a Google Doc \u002F DOCX \u002F anything else, stop and ask for a PDF URL (offer to wait while they export). Backstop: the downloaded file in Step 5 must start with the bytes `%PDF`.\n4. Confirm back: *\"Found 'Acme MSA - Final.pdf', modified May 24 — use this one?\"* Stop if no.\n5. Download it: `gog drive download \u003CID> --out \u002Fopt\u002Fdata\u002F\u003Csafe-name>.pdf` — this local file is what you upload into DocuSign.\n\n### Step 2 — collect signer + recipient details\nAsk **once, in one structured message** (don't drip questions):\n- **Internal signer** (required): name + email — the signer explicitly labeled as the internal\u002Finternal-company-side signer by the user; their fields get pre-placed.\n- **Counter-signers**: name + email (title optional), one or many. Default: they sign first. If none, confirm internal-signer-only is intended.\n  - **Do not silently relabel signers based on email domain, the user's identity, or what seems more likely.** If the user says `Internal signer: Chris` and `Counter-signer: Jane`, treat Chris as the internal signer and Jane as the counter-signer for this run, even if Jane is the requester or has a internal company email. If the labels look inconsistent with the document or normal company roles, flag it in the preview\u002Fchecklist and ask for confirmation before sending; never invert the routing order on your own.\n  - If exact titles are needed but the user did not supply them, inspect the PDF signature blocks first. Clearly printed title values (for example `Title: CEO` or `Title: Head of Finance`) can be used as proposed defaults and should be verified in the preview; do not ask the user for titles that are already plainly present in the PDF unless there is ambiguity.\n  - If a provided signer email looks malformed or inconsistent with earlier known values (for example a last-name-only local part where prior runs used a first-name address), pause and confirm the exact email before building the DocuSign draft.\n- **Subject**: default = document name (no \"Please sign:\" prefix).\n- **Message**: optional body for the DocuSign email.\n- **Signing order** (only ask if not already stated): default = counter-signers first, internal last. Overrides: *internal first*, or *simultaneous*.\n- **Slack heads-up** (optional in the generic skill): want a draft heads-up to the signer? If yes, who. If the user's companion doc specifies a default Slack heads-up workflow, treat that as requested for that user and follow the companion's routing\u002Fapproval rule. Keep this distinction clear in generic\u002Fshareable materials: Slack drafting is optional generally, but may be a user's companion-doc default.\n- **Completion-copy recipients** (optional): use any defaults from the user's companion doc; only ask if no default exists and the user appears to need completion-copy recipients.\n\n### Step 3 — pre-send checklist\nSurface anything off (don't block — make the user confirm): file is a PDF; internal signer + every counter-signer has a valid-looking email; the name doesn't look like a draft (\"DRAFT\", \"v0.\", \"WIP\", \"redline\") — if it does, confirm it's final; PDF is under ~25 MB. **Cross-check the document's signatories against your signer list** — if the PDF text is readable, read the printed signature-block names; if the document names a signatory you have no signer for (or a provided signer has no block), flag it and confirm before sending (e.g. three signature lines but only two signers given — confirm whether to add or exclude the third). If the user explicitly says **internal signature only**, do not automatically add company\u002Fcounterparty signature-block names found in the PDF; instead, make the preview say those blocks exist and will be excluded, then require the usual explicit approval before sending.\n\n### Step 4 — preview + explicit approval (REQUIRED — never skip)\nShow a scannable preview and wait for an unambiguous **yes**. Never send on silence or a maybe.\n```\nReady to send:\n  Document: Acme MSA - Final.pdf (modified May 24)\n  Subject:  Acme MSA - Final\n  Execution order: Counter-signers first, then internal signer\n    1. Jane Smith \u003Cjane@acme.com>         (counter-signer)\n    2. Alex Internal \u003Calex.internal@example.org>  (internal signer — fields assigned)\n  Completion copies: per companion doc\n  Slack: group-DM heads-up to Chris  (only if requested)\n  Checklist: ✓ all passed\n```\n\n### Step 5 — build + send the envelope in DocuSign (browser-harness)\nOnly after approval. Drive the DocuSign web app step by step:\n1. **Start**: from DocuSign home, click **Start → Send an envelope**. In the June 2026 UI this was **Start → Agreements → Envelopes → Send an Envelope** (a nested submenu); see `references\u002Fdocusign-web-ui-2026-06.md` before improvising if the simple path is not visible.\n2. **Add the document**: in the upload area, **upload the PDF you downloaded in Step 1** (drag it in, or \"Upload\" → the local file `\u002Fopt\u002Fdata\u002F\u003Cname>.pdf`). With browser-harness, the hidden file input usually works directly: `upload_file('input[type=file]', '\u002Fopt\u002Fdata\u002F\u003Cname>.pdf')`; verify a document card\u002Fthumbnail and page count appear. DocuSign may also offer \"Get from Google Drive\" — either works; the downloaded file is the most reliable.\n3. **Add recipients** in the order matching Step 2:\n   - Turn **\"Set signing order\"** ON for sequential modes; for *simultaneous*, leave it off (or give everyone order 1).\n   - Add each counter-signer + the internal signer as **\"Needs to Sign\"**, numbered per the chosen order.\n   - If the user's companion doc specifies completion-copy recipients, add each as **\"Receives a Copy\" (CC)**, ordered last, so they get the executed copy after everyone signs. New recipients may default to \"Needs to Sign\" — open each recipient's role dropdown and explicitly choose **Receives a Copy**; verify the visible text changed before proceeding.\n4. **Subject + message** from Step 2. Click **Next** to open the field-placement view.\n5. **Place the signing fields so every party can just click to sign.** Select each recipient from the recipient dropdown in turn, and **drag or click-place their fields onto that person's signature block**: **Signature**, **Date Signed**, **Name** (+ **Initials** \u002F **Title** where the printed block has them). If the PDF already has the signer name and\u002For title visibly printed in the signature block, do **not** overlay duplicate DocuSign Name\u002FTitle fields in production; place only the fields the signer must complete, unless the user is running a test that specifically requires Name\u002FTitle field placement. If the user supplied exact title values that should already be completed (for example `Head of Finance`, `CEO`) and they are not printed in the PDF, use **Text** fields containing those exact values and mark them **Read Only** instead of using DocuSign's standard editable **Title** field. If drag-and-drop is fiddly in browser-harness, the current DocuSign builder supports a reliable click-to-place pattern: click the field type in the left sidebar (for example **Signature**), then click the target line in the document. Put each field on the correct line for that person — your signer goes on the internal-company block (\"Internal Company \u002F By: ___\"), each counter-signer on theirs. DocuSign often auto-tags from the document's signature lines — if it placed fields, just **verify they're on the right party's block**. At high zoom, signature fields can land too low and cover printed `Name:` text; select the field and nudge it with arrow keys (for example repeated `ArrowUp`) so it sits on the blank signature line. If the document has a pre-filled `Place and date` and no separate date-signed line, do not force a Date Signed field just to satisfy a generic checklist.\n6. **Preview before Send.** Use DocuSign's **Preview** button to simulate what the signer will see; click **Start** in preview to jump to the required field and verify it is visible, assigned to the intended signer, and not covering printed text. For exact names\u002Ftitles, preview each signer view and visually confirm the rendered full-name and read-only title values, not just that fields exist in the add-fields canvas. In watched\u002Ftest runs, this preview screen is the right place to stop and ask the user for explicit approval. Do **not** click DocuSign's **Send** button from the field-placement screen until the user has unambiguously approved.\n7. **Review → Send.** Watch for send completion. The app may redirect to **Agreements → Sent** rather than show a modal.\n8. **Verify in Sent**: the newest row should match the document, show `To:` with the signer(s) plus any completion-copy recipients from the companion doc, and have status like **Waiting for \u003Cfirst signer>** with a **Resend** button. This is stronger verification than assuming the button click succeeded.\n9. If any screen doesn't match these steps, **screenshot it, describe it to the user, and ask** — DocuSign's UI varies. Record a *generic* fix in this skill, or a *user\u002Ftemplate-specific* note in their companion doc (per the split above).\n\n### Step 6 — Slack heads-up (only if requested) — henry-out\nIf the user asked for a Slack notice, **draft it, show the user, and wait for explicit approval before anything is posted**.\n\n**Reference:** `references\u002Fslack-heads-up-routing.md` captures private-channel posting failures, `channel_not_found` interpretation, and personal\u002Fgroup-DM fallbacks.\n\n**Default Slack handling:** when the user requests a signer heads-up, draft the message in the current thread for approval first. After the user's explicit approval, post the approved copy **back in Slack to the user\u002Fcurrent thread for copy\u002Fpaste** into the appropriate channel or DM. Do **not** attempt to post directly into the requested Slack channel\u002FDM by default, because private channels and personal Slack spaces often reject bot\u002FAPI posts even when the user provides an archive URL. Only post directly to a channel\u002FDM if the user explicitly asks for direct posting and accepts the access-risk\u002Ffallback behavior. Do **not** attempt to create an unsent draft inside Slack's channel composer unless the user explicitly asks for a live-browser draft.\n\nA Slack channel URL, DM URL, or email alias does not grant posting permission. If direct posting is explicitly requested and `henry-out reply --channel \u003Cchannel_id>` returns `channel_not_found`, treat it as a Slack app membership\u002Faccess issue: report that the approved note was not posted and provide the approved text in the current thread for the user to copy\u002Fpaste, or ask the user to invite Henry\u002Fthe Slack app to the destination if they still want direct posting.\n\n1. Draft a short note: *\"Chris — DocuSign envelope `{envelope_title}` is ready for your signature. Please review and sign the document when you have a chance. Thank you.\"* Adjust the signer name and envelope title.\n2. Show the user the draft + intended destination context (person, group DM, or channel). **Wait for approval — never auto-send.**\n3. On approval, post the approved copy back to the user\u002Fcurrent Slack thread for copy\u002Fpaste into the appropriate channel or DM. Make clear that this is the copy\u002Fpaste version and that Henry is **not** posting it directly to the destination by default.\n4. Only if the user explicitly asks Henry to post directly to a destination, send to that approved destination:\n   - If the user requested a **channel**, post the approved message directly to that channel with `henry-out reply --channel \u003Cchannel_id>` (or the platform messaging tool if that is the current routing path). Do not post before approval.\n   - If the user requested a **group DM**, use:\n     ```\n     henry-out group --to \u003Csigner's workspace email or Slack handle>\n     ```\n     This opens a DM with you, the user, and the signer, posts the note, and **routes the signer's replies back to your container** so you can follow up.\n5. If the requested channel\u002Fperson cannot be resolved, provide the exact approved text and say why it was not posted.\n   - If they ask to **draft only** \u002F **do not send**, reply with the exact channel-targeted copy and explicitly say `Not sent.` Do not post to the channel and do not open a group DM.\n   - If they approve sending to the channel, use `henry-out reply --channel \u003Cchannel_id>` (and `--thread` only if they specified a thread). Keep the message short and focused on the envelope title and requested action.\n   - If the only address supplied is a Slack channel email alias, prefer the explicit Slack channel ID\u002Fmention (for example `\u003C#C...>`) over emailing the alias.\n   - A Slack archive link (`https:\u002F\u002F...\u002Farchives\u002FC...`) or channel mention confirms the channel ID but does **not** prove Henry can post there. If Slack returns `channel_not_found`, do not keep retrying the same ID; tell the user Henry\u002Fthe Slack app likely is not in that private channel or cannot access it, and offer a reachable fallback (current thread, group DM with the signer, or retry after the user invites Henry\u002Fthe app to the channel).\n   - If the user asks to post the draft “to me personally” after a channel post fails, be explicit: replying `--in-reply-to` posts into the same originating Slack thread, not a separate new personal DM. Only promise a separate DM if a distinct reachable DM target is available.\n\n### Step 7 — tracker logging (if companion doc specifies one)\nIf the user's companion doc specifies an envelope tracker, log the sent envelope after DocuSign send verification and before final reporting. Use `references\u002Fenvelope-tracker-status-refresh.md`.\n\nMinimum pattern:\n1. Read the tracker first and search for the DocuSign Envelope ID.\n2. If the Envelope ID already exists, update that row; otherwise append one row.\n3. Capture sent date, document name, subject\u002Fenvelope title, sender, signing order, signers, CC recipients, current DocuSign status, signed recipients, pending recipients, completed date if present, and the DocuSign details URL.\n4. Read the written row back before telling the user it was logged.\n\nWhen the user later asks what is outstanding, read pending rows from the tracker, open each DocuSign details URL in the Live Browser, and update the tracker from DocuSign as the source of truth.\n\n### Step 8 — confirm + report\nKeep it short: envelope sent (with the DocuSign envelope name\u002FID if shown); who gets the first invitation (routing-order-1 recipient); any completion-copy recipients from the companion doc get the executed copy on completion; whether the envelope was logged to the companion tracker; if any signer's fields couldn't be placed, say so; if a Slack heads-up was sent, that it's a group DM and their replies will come to you.\n\n## Defaults (fixed — don't ask)\n- **Sender** = the person running the skill, via their own DocuSign account. Never a signer unless they explicitly add themselves.\n- **Completion-copy recipients** = user-specific defaults from the companion doc. Do not hard-code organization- or user-specific CC recipients into this generalized skill; if a user wants a fixed Records\u002FLegal\u002FOps recipient, put that rule in their companion doc.\n- **Signing order** = counter-signers first, internal signer last (unless overridden).\n- **Slack** = drafted + approved before posting. For channel requests, post the approved text directly to the requested Slack channel; for group-DM requests, use a group DM so replies route back.\n\n## Guardrails\n- **Preview + explicit approval before every send** (Step 4).\n- PDF only; direct Drive URL only (no search-by-name).\n- Never auto-send the Slack notice — draft, approve, then `henry-out group`.\n- If DocuSign isn't logged in and neither autofill nor SSO works, **stop and ask** — never guess or request a password. If the user completes login and saves the credential in the shared Live Browser profile, note that future runs should try browser\u002F1Password autofill first before handing off again.\n- When the requested Slack heads-up destination is a private channel, `channel_not_found` after an approved `henry-out reply --channel \u003Cid>` attempt means the Slack app\u002FHenry lacks access; do not keep retrying the same post. Report not-posted status and offer invite, personal-thread, or group-DM fallback.\n- If the user asks to log out after a sent or watched run, do it before final confirmation and verify the logged-out page (`https:\u002F\u002Fwww.docusign.com\u002Flogged-out` \u002F `You’ve been securely logged out`) rather than assuming the profile-menu click worked. `references\u002Fdocusign-test-cleanup-2026-06.md` has the observed logout path; its discard steps apply only to unsent drafts.\n- When the DocuSign UI doesn't match this skill, adapt visually + ask — don't click blindly through an envelope.\n- Keep this skill generic. A user's specifics go in their companion doc, not here.\n\n## Companion-doc template (create one if the user has none)\n\nMake a Google Doc with this structure, share it with the user (writer), and ask them to fill the blanks. Then read it on each run via `gog docs cat \u003Cdoc-id>`.\n\n```\n# Send for Signature — \u003Cuser name>'s preferences\n\n## DocuSign login\n- Account \u002F saved login to use (if the browser offers more than one): ____\n- Verification-code (2FA) email I can read — the mailbox codes should go to (usually my own): ____\n  (If DocuSign defaults to a shared mailbox I can't read, switch to this one via \"Select another method\".)\n\n## Signing defaults\n- Default signing order (if not \"counter-signers first, internal last\"): ____\n- Usual internal signer(s): ____\n- Completion-copy recipients and timing (for example, only on completed\u002Fexecuted envelope): ____\n- Slack person\u002Fchannel for heads-ups: ____\n\n## Template \u002F field-placement notes\n- Quirks in our standard documents' signature blocks (where each party's Signature\u002FDate\u002FName go): ____\n```\n",{"data":36,"body":54},{"name":4,"description":6,"version":37,"author":38,"license":29,"platforms":39,"metadata":41},"0.3.2","Henry \u002F internal company Labs",[40],"linux",{"hermes":42},{"tags":43,"related_skills":51},[44,45,19,46,47,48,49,50],"signature-sleigh","docusign","signature","contracts","legal-ops","browser-harness","gog",[49,52,53],"google-workspace-gog","henry-out",{"type":55,"children":56},"root",[57,66,115,129,136,153,166,179,185,217,225,249,261,282,299,406,416,425,453,462,480,498,506,561,567,708,714,727,733,756,762,775,787,792,801,813,873,879,900,910,985,992,1002,1135,1140,1146,1154,1243,1249,1388,1394,1405,1543,1549,1568,1574,1586,1595,1601,1606,1994,2000,2011,2036,2065,2085,2291,2297,2308,2313,2336,2341,2347,2352,2358,2399,2405,2503,2509,2520],{"type":58,"tag":59,"props":60,"children":62},"element","h1",{"id":61},"signature-sleigh-send-for-signature",[63],{"type":64,"value":65},"text","Signature Sleigh (send for signature)",{"type":58,"tag":67,"props":68,"children":69},"p",{},[70,72,78,80,85,87,92,94,100,102,106,108,113],{"type":64,"value":71},"Route a finalized ",{"type":58,"tag":73,"props":74,"children":75},"strong",{},[76],{"type":64,"value":77},"Google Drive PDF",{"type":64,"value":79}," out for e-signature through ",{"type":58,"tag":73,"props":81,"children":82},{},[83],{"type":64,"value":84},"DocuSign",{"type":64,"value":86},", using the browser the way a person would — log in, upload the PDF, add recipients, set the signing order, place each signer's fields so they just click, add any completion-copy recipients specified in the user's companion doc, send. ",{"type":58,"tag":73,"props":88,"children":89},{},[90],{"type":64,"value":91},"No DocuSign API key, JWT, or admin integration",{"type":64,"value":93}," — ",{"type":58,"tag":95,"props":96,"children":98},"code",{"className":97},[],[99],{"type":64,"value":50},{"type":64,"value":101}," handles the Drive side, ",{"type":58,"tag":73,"props":103,"children":104},{},[105],{"type":64,"value":49},{"type":64,"value":107}," drives DocuSign's web app, ",{"type":58,"tag":95,"props":109,"children":111},{"className":110},[],[112],{"type":64,"value":53},{"type":64,"value":114}," handles the optional Slack heads-up.",{"type":58,"tag":116,"props":117,"children":118},"blockquote",{},[119],{"type":58,"tag":67,"props":120,"children":121},{},[122,127],{"type":58,"tag":73,"props":123,"children":124},{},[125],{"type":64,"value":126},"Operate conservatively.",{"type":64,"value":128}," This workflow handles real signature envelopes. Don't guess your way through an irreversible send — when a screen doesn't match, look at it, adapt, and ask. Always stop at preview and require explicit approval before sending.",{"type":58,"tag":130,"props":131,"children":133},"h2",{"id":132},"naming-and-invocation",[134],{"type":64,"value":135},"Naming and invocation",{"type":58,"tag":67,"props":137,"children":138},{},[139,144,146,151],{"type":58,"tag":73,"props":140,"children":141},{},[142],{"type":64,"value":143},"Signature Sleigh",{"type":64,"value":145}," is the human-facing and searchable workflow name. Keep the skill discoverable under that term in the title, description, and tags. The installed skill ID may remain ",{"type":58,"tag":95,"props":147,"children":149},{"className":148},[],[150],{"type":64,"value":4},{"type":64,"value":152}," for compatibility; do not rename the ID\u002Ffolder unless deliberately migrating references. Treat all of these as valid invocation phrases: “Signature Sleigh,” “send this for signature,” “DocuSign this,” “get this signed,” and “route this PDF for signature.”",{"type":58,"tag":67,"props":154,"children":155},{},[156,158,164],{"type":64,"value":157},"When the user asks for the generic\u002Fshareable Signature Sleigh link for other users, use ",{"type":58,"tag":95,"props":159,"children":161},{"className":160},[],[162],{"type":64,"value":163},"references\u002Fshareable-signature-sleigh-docs.md",{"type":64,"value":165},": provide the generic End-to-End Workflow doc link, distinguish it from personal companion docs and the pre-rollout test plan, and check Drive permissions before calling the link share-ready or changing access.",{"type":58,"tag":67,"props":167,"children":168},{},[169,171,177],{"type":64,"value":170},"When the user asks for a GitHub\u002Frepository README or public explanation of the general Signature Sleigh skill, start from ",{"type":58,"tag":95,"props":172,"children":174},{"className":173},[],[175],{"type":64,"value":176},"templates\u002Fgithub-readme.md",{"type":64,"value":178},". Keep it generic: explain the browser-operated DocuSign workflow, the no-DocuSign-API design, the mandatory preview\u002Fexplicit-approval checkpoint, and the companion-doc split. Do not include any user's companion doc ID, DocuSign account, 2FA routing, envelope tracker ID, Slack destinations, or real signer data.",{"type":58,"tag":130,"props":180,"children":182},{"id":181},"how-this-skill-works-generic-base-the-users-companion-doc",[183],{"type":64,"value":184},"How this skill works: generic base + the user's companion doc",{"type":58,"tag":67,"props":186,"children":187},{},[188,193,195,200,202,208,210,215],{"type":58,"tag":73,"props":189,"children":190},{},[191],{"type":64,"value":192},"Everyone gets this skill",{"type":64,"value":194}," — it's the generic how-to for routing a PDF through DocuSign in the browser. ",{"type":58,"tag":73,"props":196,"children":197},{},[198],{"type":64,"value":199},"Each user's specifics live in their own companion doc",{"type":64,"value":201}," — which DocuSign account\u002Flogin to use, where their 2FA codes go, any field-placement quirks for their templates, default channels or signers. The skill is the ",{"type":58,"tag":203,"props":204,"children":205},"em",{},[206],{"type":64,"value":207},"mechanics",{"type":64,"value":209},"; the companion doc is ",{"type":58,"tag":203,"props":211,"children":212},{},[213],{"type":64,"value":214},"that user's preferences",{"type":64,"value":216},". Keep them separate.",{"type":58,"tag":67,"props":218,"children":219},{},[220],{"type":58,"tag":73,"props":221,"children":222},{},[223],{"type":64,"value":224},"At the start of a run, get the user's companion doc — find an existing one, or guide the user through creating one.",{"type":58,"tag":67,"props":226,"children":227},{},[228,233,235,240,242,247],{"type":58,"tag":73,"props":229,"children":230},{},[231],{"type":64,"value":232},"1. Find an existing companion.",{"type":64,"value":234}," Check your ",{"type":58,"tag":73,"props":236,"children":237},{},[238],{"type":64,"value":239},"memory for a recorded companion doc-id first",{"type":64,"value":241}," (fastest — when it's set up, the doc-id is pinned in your memory). Otherwise the user may point you to it, or run a ",{"type":58,"tag":73,"props":243,"children":244},{},[245],{"type":64,"value":246},"name-scoped",{"type":64,"value":248}," Drive search:",{"type":58,"tag":250,"props":251,"children":255},"pre",{"className":252,"code":254,"language":64},[253],"language-text","gog drive search \"name contains 'Send for Signature'\" --raw-query\n",[256],{"type":58,"tag":95,"props":257,"children":259},{"__ignoreMap":258},"",[260],{"type":64,"value":254},{"type":58,"tag":67,"props":262,"children":263},{},[264,266,272,274,280],{"type":64,"value":265},"Use the name-scoped query, NOT a plain full-text ",{"type":58,"tag":95,"props":267,"children":269},{"className":268},[],[270],{"type":64,"value":271},"gog drive search \"Send for Signature\"",{"type":64,"value":273}," — a full-text search drowns in legal\u002Ffinancing docs that all contain the word \"signature\" and will not surface the companion. Read the companion with ",{"type":58,"tag":95,"props":275,"children":277},{"className":276},[],[278],{"type":64,"value":279},"gog docs cat \u003Cdoc-id>",{"type":64,"value":281}," and follow it for the user-specific choices (account, 2FA mailbox, signing defaults, template notes). If you find it, record its doc-id to memory (step 4) and skip to the workflow.",{"type":58,"tag":67,"props":283,"children":284},{},[285,290,292,297],{"type":58,"tag":73,"props":286,"children":287},{},[288],{"type":64,"value":289},"2. No companion yet → run a guided setup (don't hand them a blank doc).",{"type":64,"value":291}," Ask the setup questions ",{"type":58,"tag":73,"props":293,"children":294},{},[295],{"type":64,"value":296},"once, in one structured message",{"type":64,"value":298}," (same style as Step 2 of the workflow — don't drip questions). Tell them you'll save their answers as a reusable preferences doc so they never repeat this:",{"type":58,"tag":116,"props":300,"children":301},{},[302,310],{"type":58,"tag":67,"props":303,"children":304},{},[305],{"type":58,"tag":203,"props":306,"children":307},{},[308],{"type":64,"value":309},"Looks like this is your first signature run — let me set up your preferences once so future sends are one step. A few quick things:",{"type":58,"tag":311,"props":312,"children":313},"ul",{},[314,325,342,366,376,386,396],{"type":58,"tag":315,"props":316,"children":317},"li",{},[318,323],{"type":58,"tag":73,"props":319,"children":320},{},[321],{"type":64,"value":322},"DocuSign account\u002Flogin",{"type":64,"value":324}," to use — the email\u002Faccount the browser should sign in as (the work account, not a personal login):",{"type":58,"tag":315,"props":326,"children":327},{},[328,333,335,340],{"type":58,"tag":73,"props":329,"children":330},{},[331],{"type":64,"value":332},"2FA mailbox I can read",{"type":64,"value":334}," — when DocuSign emails a verification code, which of ",{"type":58,"tag":203,"props":336,"children":337},{},[338],{"type":64,"value":339},"your own",{"type":64,"value":341}," inboxes should it go to? It must be a mailbox I can read via gog, not a shared one (DocuSign often defaults to a shared mailbox I can't open):",{"type":58,"tag":315,"props":343,"children":344},{},[345,350,352,357,359,364],{"type":58,"tag":73,"props":346,"children":347},{},[348],{"type":64,"value":349},"Default signing order",{"type":64,"value":351}," (default = counter-signers first, internal last) — keep the default, or prefer ",{"type":58,"tag":203,"props":353,"children":354},{},[355],{"type":64,"value":356},"internal first",{"type":64,"value":358}," \u002F ",{"type":58,"tag":203,"props":360,"children":361},{},[362],{"type":64,"value":363},"simultaneous",{"type":64,"value":365},"?",{"type":58,"tag":315,"props":367,"children":368},{},[369,374],{"type":58,"tag":73,"props":370,"children":371},{},[372],{"type":64,"value":373},"Usual internal signer(s)",{"type":64,"value":375}," — who on the internal-company side normally signs? (name + email):",{"type":58,"tag":315,"props":377,"children":378},{},[379,384],{"type":58,"tag":73,"props":380,"children":381},{},[382],{"type":64,"value":383},"Completion-copy recipients",{"type":64,"value":385}," — anyone who should receive the completed\u002Fexecuted envelope by default, and whether they should receive only the completed copy (not the initial signing request):",{"type":58,"tag":315,"props":387,"children":388},{},[389,394],{"type":58,"tag":73,"props":390,"children":391},{},[392],{"type":64,"value":393},"Slack heads-up channel\u002Fperson",{"type":64,"value":395}," — default person or channel for the optional signing notice (or \"none\"):",{"type":58,"tag":315,"props":397,"children":398},{},[399,404],{"type":58,"tag":73,"props":400,"children":401},{},[402],{"type":64,"value":403},"Signature-block quirks",{"type":64,"value":405}," — anything unusual about where each party's Signature \u002F Date \u002F Name sit in your standard documents? (\"none\" is fine):",{"type":58,"tag":67,"props":407,"children":408},{},[409,414],{"type":58,"tag":73,"props":410,"children":411},{},[412],{"type":64,"value":413},"3. Create the companion doc PRE-FILLED with their answers",{"type":64,"value":415}," (not the blank template). Fill the template (bottom of this skill) with what they told you, write it to a local file, and convert it into a Google Doc:",{"type":58,"tag":250,"props":417,"children":420},{"className":418,"code":419,"language":64},[253],"gog drive upload \u002Fopt\u002Fdata\u002Fsend-for-signature-companion.md --convert-to doc --name \"Send for Signature — \u003Cuser>'s preferences\"\n",[421],{"type":58,"tag":95,"props":422,"children":423},{"__ignoreMap":258},[424],{"type":64,"value":419},{"type":58,"tag":67,"props":426,"children":427},{},[428,430,436,438,444,446,451],{"type":64,"value":429},"(Or create the doc from the template and ",{"type":58,"tag":95,"props":431,"children":433},{"className":432},[],[434],{"type":64,"value":435},"gog docs find-replace \u003Cdoc-id>",{"type":64,"value":437}," each ",{"type":58,"tag":95,"props":439,"children":441},{"className":440},[],[442],{"type":64,"value":443},"____",{"type":64,"value":445}," blank with their answer.) Then share it to the user as ",{"type":58,"tag":73,"props":447,"children":448},{},[449],{"type":64,"value":450},"writer",{"type":64,"value":452}," so they can tweak it later:",{"type":58,"tag":250,"props":454,"children":457},{"className":455,"code":456,"language":64},[253],"gog drive share \u003Cdoc-id> --to user --email \u003Ctheir-email> --role writer\n",[458],{"type":58,"tag":95,"props":459,"children":460},{"__ignoreMap":258},[461],{"type":64,"value":456},{"type":58,"tag":67,"props":463,"children":464},{},[465,467,478],{"type":64,"value":466},"Confirm back: ",{"type":58,"tag":203,"props":468,"children":469},{},[470,472],{"type":64,"value":471},"\"Saved your preferences here: ",{"type":58,"tag":473,"props":474,"children":475},"doc",{"link":258},[476],{"type":64,"value":477},". I'll use these going forward — edit that doc anytime. Now, on to your signature.\"",{"type":64,"value":479}," Leave any answer they skipped as a blank for them to fill in later.",{"type":58,"tag":67,"props":481,"children":482},{},[483,488,490,496],{"type":58,"tag":73,"props":484,"children":485},{},[486],{"type":64,"value":487},"4. Record the doc-id to memory",{"type":64,"value":489}," so the next run finds it instantly with no search: save ",{"type":58,"tag":95,"props":491,"children":493},{"className":492},[],[494],{"type":64,"value":495},"send-for-signature companion doc-id = \u003Cdoc-id>",{"type":64,"value":497}," to your durable memory. Then proceed straight into the actual send — don't make them wait on the setup.",{"type":58,"tag":67,"props":499,"children":500},{},[501],{"type":58,"tag":73,"props":502,"children":503},{},[504],{"type":64,"value":505},"Where to record what you learn — keep this straight:",{"type":58,"tag":311,"props":507,"children":508},{},[509,535],{"type":58,"tag":315,"props":510,"children":511},{},[512,514,519,521,526,528,533],{"type":64,"value":513},"A ",{"type":58,"tag":73,"props":515,"children":516},{},[517],{"type":64,"value":518},"generic DocuSign mechanic",{"type":64,"value":520}," (a UI step, a field-placement trick, a screen that changed ",{"type":58,"tag":203,"props":522,"children":523},{},[524],{"type":64,"value":525},"for everyone",{"type":64,"value":527},") → update ",{"type":58,"tag":73,"props":529,"children":530},{},[531],{"type":64,"value":532},"this skill",{"type":64,"value":534},".",{"type":58,"tag":315,"props":536,"children":537},{},[538,539,544,546,551,553,559],{"type":64,"value":513},{"type":58,"tag":73,"props":540,"children":541},{},[542],{"type":64,"value":543},"user-specific preference",{"type":64,"value":545}," (their account, their 2FA mailbox, their document's signature-block layout, completion-copy\u002FCC recipients such as Records, Slack destinations, default signer lists) → update ",{"type":58,"tag":73,"props":547,"children":548},{},[549],{"type":64,"value":550},"their companion doc",{"type":64,"value":552}," (",{"type":58,"tag":95,"props":554,"children":556},{"className":555},[],[557],{"type":64,"value":558},"gog docs find-replace",{"type":64,"value":560}," \u002F edit it in place). Never bake one user's specifics into this skill.",{"type":58,"tag":130,"props":562,"children":564},{"id":563},"the-pieces-native-tools-no-api",[565],{"type":64,"value":566},"The pieces — native tools, no API",{"type":58,"tag":568,"props":569,"children":570},"table",{},[571,595],{"type":58,"tag":572,"props":573,"children":574},"thead",{},[575],{"type":58,"tag":576,"props":577,"children":578},"tr",{},[579,585,590],{"type":58,"tag":580,"props":581,"children":582},"th",{},[583],{"type":64,"value":584},"Job",{"type":58,"tag":580,"props":586,"children":587},{},[588],{"type":64,"value":589},"Tool",{"type":58,"tag":580,"props":591,"children":592},{},[593],{"type":64,"value":594},"(was, in the Claude version)",{"type":58,"tag":596,"props":597,"children":598},"tbody",{},[599,626,651,676],{"type":58,"tag":576,"props":600,"children":601},{},[602,608,617],{"type":58,"tag":603,"props":604,"children":605},"td",{},[606],{"type":64,"value":607},"Read + download the Drive PDF",{"type":58,"tag":603,"props":609,"children":610},{},[611],{"type":58,"tag":95,"props":612,"children":614},{"className":613},[],[615],{"type":64,"value":616},"gog drive",{"type":58,"tag":603,"props":618,"children":619},{},[620],{"type":58,"tag":621,"props":622,"children":623},"del",{},[624],{"type":64,"value":625},"get_file_metadata \u002F download_file_content",{"type":58,"tag":576,"props":627,"children":628},{},[629,634,643],{"type":58,"tag":603,"props":630,"children":631},{},[632],{"type":64,"value":633},"Everything inside DocuSign",{"type":58,"tag":603,"props":635,"children":636},{},[637,641],{"type":58,"tag":73,"props":638,"children":639},{},[640],{"type":64,"value":49},{"type":64,"value":642}," (drive the web app)",{"type":58,"tag":603,"props":644,"children":645},{},[646],{"type":58,"tag":621,"props":647,"children":648},{},[649],{"type":64,"value":650},"DocuSign createEnvelope API \u002F JWT",{"type":58,"tag":576,"props":652,"children":653},{},[654,659,668],{"type":58,"tag":603,"props":655,"children":656},{},[657],{"type":64,"value":658},"Optional Slack heads-up (group DM)",{"type":58,"tag":603,"props":660,"children":661},{},[662],{"type":58,"tag":95,"props":663,"children":665},{"className":664},[],[666],{"type":64,"value":667},"henry-out group",{"type":58,"tag":603,"props":669,"children":670},{},[671],{"type":58,"tag":621,"props":672,"children":673},{},[674],{"type":64,"value":675},"send_message_draft",{"type":58,"tag":576,"props":677,"children":678},{},[679,684,703],{"type":58,"tag":603,"props":680,"children":681},{},[682],{"type":64,"value":683},"The user's preferences",{"type":58,"tag":603,"props":685,"children":686},{},[687,689,694,695,701],{"type":64,"value":688},"their ",{"type":58,"tag":73,"props":690,"children":691},{},[692],{"type":64,"value":693},"companion doc",{"type":64,"value":552},{"type":58,"tag":95,"props":696,"children":698},{"className":697},[],[699],{"type":64,"value":700},"gog docs cat",{"type":64,"value":702},")",{"type":58,"tag":603,"props":704,"children":705},{},[706],{"type":64,"value":707},"—",{"type":58,"tag":130,"props":709,"children":711},{"id":710},"when-to-use",[712],{"type":64,"value":713},"When to use",{"type":58,"tag":67,"props":715,"children":716},{},[717,719,725],{"type":64,"value":718},"The user shares a Google Drive PDF URL and wants it routed for signature (\"send this for signature: ",{"type":58,"tag":720,"props":721,"children":722},"span",{},[723],{"type":64,"value":724},"url",{"type":64,"value":726}," — internal signer Chris, counterparty Jane\"; \"DocuSign this and have our side sign first\"; or just a Drive URL + a counterparty name — collect the rest).",{"type":58,"tag":130,"props":728,"children":730},{"id":729},"do-not-use-for",[731],{"type":64,"value":732},"Do not use for",{"type":58,"tag":311,"props":734,"children":735},{},[736,741,746,751],{"type":58,"tag":315,"props":737,"children":738},{},[739],{"type":64,"value":740},"Contract review \u002F redlines \u002F legal advice — a different job.",{"type":58,"tag":315,"props":742,"children":743},{},[744],{"type":64,"value":745},"Searching Drive by document name — the user provides a direct URL.",{"type":58,"tag":315,"props":747,"children":748},{},[749],{"type":64,"value":750},"Non-PDF source files — ask the user to export to PDF first.",{"type":58,"tag":315,"props":752,"children":753},{},[754],{"type":64,"value":755},"Sending without a preview + explicit approval.",{"type":58,"tag":130,"props":757,"children":759},{"id":758},"watched-test-runs-and-pre-rollout-qa",[760],{"type":64,"value":761},"Watched test runs and pre-rollout QA",{"type":58,"tag":67,"props":763,"children":764},{},[765,767,773],{"type":64,"value":766},"If the user wants to validate Signature Sleigh before broader rollout, use ",{"type":58,"tag":95,"props":768,"children":770},{"className":769},[],[771],{"type":64,"value":772},"references\u002Fpre-rollout-bug-bash-test-plan.md",{"type":64,"value":774},": run the three-test matrix (internal-only preview+cleanup; counter-signer-first\u002Finternal-last with exact title fields; Slack heads-up + tracker logging) and patch any generic issues before sharing widely.",{"type":58,"tag":67,"props":776,"children":777},{},[778,780,785],{"type":64,"value":779},"If the user wants to test this skill while watching in the Live Browser, keep the ",{"type":58,"tag":73,"props":781,"children":782},{},[783],{"type":64,"value":784},"instructions and approvals in chat",{"type":64,"value":786}," and use the Live Browser only as the shared visual surface where they watch DocuSign being operated. Do not tell the user to type a prompt into the Live Browser.",{"type":58,"tag":67,"props":788,"children":789},{},[790],{"type":64,"value":791},"Offer this copy-paste prompt for a watched test:",{"type":58,"tag":250,"props":793,"children":796},{"className":794,"code":795,"language":64,"meta":258},[253],"Henry, run a watched test of the send-for-signature skill using my companion doc.\n\nDrive PDF: \u003Cpaste Google Drive PDF link>\nInternal signer: \u003Cname>, \u003Cemail>\nCounter-signer: \u003Cname>, \u003Cemail>  [or: internal-only test]\nSigning order: use my companion\u002Fdefault unless stated otherwise\nSlack heads-up: no for this test  [or specify channel\u002Fperson]\nTest mode: build the DocuSign envelope and stop at preview for my approval. Do not send until I explicitly approve.\n",[797],{"type":58,"tag":95,"props":798,"children":799},{"__ignoreMap":258},[800],{"type":64,"value":795},{"type":58,"tag":67,"props":802,"children":803},{},[804,806,811],{"type":64,"value":805},"Then drive DocuSign through ",{"type":58,"tag":95,"props":807,"children":809},{"className":808},[],[810],{"type":64,"value":49},{"type":64,"value":812}," so the user can watch. Narrate only useful checkpoints in chat (PDF verified, DocuSign login\u002Fauth needed, preview ready, send verified), and still require the normal explicit approval before sending.",{"type":58,"tag":67,"props":814,"children":815},{},[816,818,823,825,830,832,837,839,843,845,849,851,857,859,864,866,871],{"type":64,"value":817},"If the user says the run was ",{"type":58,"tag":73,"props":819,"children":820},{},[821],{"type":64,"value":822},"test-only",{"type":64,"value":824}," or explicitly says ",{"type":58,"tag":73,"props":826,"children":827},{},[828],{"type":64,"value":829},"do not proceed",{"type":64,"value":831}," after preview, treat that as a final stop: do ",{"type":58,"tag":73,"props":833,"children":834},{},[835],{"type":64,"value":836},"not",{"type":64,"value":838}," send the envelope, do ",{"type":58,"tag":73,"props":840,"children":841},{},[842],{"type":64,"value":836},{"type":64,"value":844}," post any Slack heads-up, and do ",{"type":58,"tag":73,"props":846,"children":847},{},[848],{"type":64,"value":836},{"type":64,"value":850}," log anything to the envelope tracker. Abandon\u002Fclose the unsent DocuSign builder or navigate away so there is no active send screen left open, then verify the browser is no longer on the envelope send screen before confirming. If they ask to delete\u002Fdiscard the test draft or log out, use ",{"type":58,"tag":95,"props":852,"children":854},{"className":853},[],[855],{"type":64,"value":856},"references\u002Fdocusign-test-cleanup-2026-06.md",{"type":64,"value":858},": close Preview, Actions → Discard, confirm ",{"type":58,"tag":73,"props":860,"children":861},{},[862],{"type":64,"value":863},"Discard Draft",{"type":64,"value":865},", verify the Agreements page, then profile → ",{"type":58,"tag":73,"props":867,"children":868},{},[869],{"type":64,"value":870},"Log Out",{"type":64,"value":872}," and verify the logged-out page before reporting completion.",{"type":58,"tag":130,"props":874,"children":876},{"id":875},"logging-into-docusign-browser-harness-autofill",[877],{"type":64,"value":878},"Logging into DocuSign (browser-harness + autofill)",{"type":58,"tag":67,"props":880,"children":881},{},[882,884,890,892,898],{"type":64,"value":883},"Open ",{"type":58,"tag":95,"props":885,"children":887},{"className":886},[],[888],{"type":64,"value":889},"https:\u002F\u002Faccount.docusign.com",{"type":64,"value":891}," (or ",{"type":58,"tag":95,"props":893,"children":895},{"className":894},[],[896],{"type":64,"value":897},"https:\u002F\u002Fapps.docusign.com\u002Fsend\u002Fhome",{"type":64,"value":899},") with browser-harness. If you're already signed in, go straight to the workflow.",{"type":58,"tag":67,"props":901,"children":902},{},[903,905],{"type":64,"value":904},"At the login screen, ",{"type":58,"tag":73,"props":906,"children":907},{},[908],{"type":64,"value":909},"sign in with the browser's saved credentials — never type, invent, or ask for a password:",{"type":58,"tag":911,"props":912,"children":913},"ol",{},[914,924,967,980],{"type":58,"tag":315,"props":915,"children":916},{},[917,922],{"type":58,"tag":73,"props":918,"children":919},{},[920],{"type":64,"value":921},"Email input with real typing.",{"type":64,"value":923}," Type the account email from the user's companion doc with real browser input (coordinate-click the field, then type).",{"type":58,"tag":315,"props":925,"children":926},{},[927,932,934],{"type":58,"tag":73,"props":928,"children":929},{},[930],{"type":64,"value":931},"Password autofill & 1Password Unlocking.",{"type":64,"value":933}," On the password page, click directly in the password field to reveal the autofill dropdown.\n",{"type":58,"tag":311,"props":935,"children":936},{},[937,962],{"type":58,"tag":315,"props":938,"children":939},{},[940,945,947,953,955,960],{"type":58,"tag":73,"props":941,"children":942},{},[943],{"type":64,"value":944},"If the autofill\u002Fsaved-password dropdown does NOT appear:",{"type":64,"value":946}," It means 1Password is locked. Go to the 1Password browser bookmark (",{"type":58,"tag":95,"props":948,"children":950},{"className":949},[],[951],{"type":64,"value":952},"https:\u002F\u002Fmy.1password.com\u002Fhome",{"type":64,"value":954},"), log in to 1Password itself using its saved autofill, then return to the DocuSign tab (or open a new tab to ",{"type":58,"tag":95,"props":956,"children":958},{"className":957},[],[959],{"type":64,"value":889},{"type":64,"value":961},") and click the password field again to reveal the autofill options.",{"type":58,"tag":315,"props":963,"children":964},{},[965],{"type":64,"value":966},"Choose the row for the DocuSign sender account named in the user's companion doc. Do not stop for user handoff just because a password field appears.",{"type":58,"tag":315,"props":968,"children":969},{},[970,972,978],{"type":64,"value":971},"Submit, then watch what DocuSign asks next. Verify the DocuSign Home page (",{"type":58,"tag":95,"props":973,"children":975},{"className":974},[],[976],{"type":64,"value":977},"apps.docusign.com\u002Fsend\u002Fhome",{"type":64,"value":979},") before continuing.",{"type":58,"tag":315,"props":981,"children":982},{},[983],{"type":64,"value":984},"Only ask for a user handoff if the autofill dropdown does not appear even after executing the 1Password unlock flow above, or if the saved credential is rejected.",{"type":58,"tag":986,"props":987,"children":989},"h3",{"id":988},"if-docusign-asks-for-a-verification-code-2fa",[990],{"type":64,"value":991},"If DocuSign asks for a verification code (2FA)",{"type":58,"tag":67,"props":993,"children":994},{},[995,997],{"type":64,"value":996},"DocuSign sometimes requires an emailed one-time code. ",{"type":58,"tag":73,"props":998,"children":999},{},[1000],{"type":64,"value":1001},"Handle it only when DocuSign actually asks — never pre-empt it, and don't repeatedly prompt the user for codes.",{"type":58,"tag":911,"props":1003,"children":1004},{},[1005,1084,1113,1123],{"type":58,"tag":315,"props":1006,"children":1007},{},[1008,1013,1015,1021,1023,1029,1030,1036,1038,1043,1045,1049,1051,1056,1058,1063,1065,1071,1073,1082],{"type":58,"tag":73,"props":1009,"children":1010},{},[1011],{"type":64,"value":1012},"Route the code to a mailbox you can read.",{"type":64,"value":1014}," DocuSign shows where it will send the code as a masked address (",{"type":58,"tag":95,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":64,"value":1020},"d***@…",{"type":64,"value":1022},", ",{"type":58,"tag":95,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":64,"value":1028},"t***@…",{"type":64,"value":1022},{"type":58,"tag":95,"props":1031,"children":1033},{"className":1032},[],[1034],{"type":64,"value":1035},"j***@…",{"type":64,"value":1037},"). You can only read the ",{"type":58,"tag":73,"props":1039,"children":1040},{},[1041],{"type":64,"value":1042},"user's own",{"type":64,"value":1044}," mailbox (via gog). If the offered destination's first letter does ",{"type":58,"tag":73,"props":1046,"children":1047},{},[1048],{"type":64,"value":836},{"type":64,"value":1050}," match the user's own email, click ",{"type":58,"tag":73,"props":1052,"children":1053},{},[1054],{"type":64,"value":1055},"\"Select another method\" \u002F \"Try another way\"",{"type":64,"value":1057}," and choose the email option whose first letter matches the ",{"type":58,"tag":73,"props":1059,"children":1060},{},[1061],{"type":64,"value":1062},"user's own email",{"type":64,"value":1064}," — e.g. if the user's email is ",{"type":58,"tag":95,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":64,"value":1070},"alex.rivera@…",{"type":64,"value":1072},", pick the ",{"type":58,"tag":73,"props":1074,"children":1075},{},[1076],{"type":58,"tag":95,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":64,"value":1081},"a***",{"type":64,"value":1083}," option. (You know the user's email from their gog account.) The companion doc lists which addresses to skip (the ones the agent can't read).",{"type":58,"tag":315,"props":1085,"children":1086},{},[1087,1092,1094,1103,1105,1111],{"type":58,"tag":73,"props":1088,"children":1089},{},[1090],{"type":64,"value":1091},"Trigger the send",{"type":64,"value":1093},", then read the code with gog from the user's mailbox:\n",{"type":58,"tag":250,"props":1095,"children":1098},{"className":1096,"code":1097,"language":64},[253],"gog gmail search 'from:docusign.net is:unread newer_than:15m' --json\n",[1099],{"type":58,"tag":95,"props":1100,"children":1101},{"__ignoreMap":258},[1102],{"type":64,"value":1097},{"type":64,"value":1104},"\nOpen the newest match and pull the 6-digit code (DocuSign codes come from ",{"type":58,"tag":95,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":64,"value":1110},"@docusign.net",{"type":64,"value":1112},").",{"type":58,"tag":315,"props":1114,"children":1115},{},[1116,1121],{"type":58,"tag":73,"props":1117,"children":1118},{},[1119],{"type":64,"value":1120},"Enter the code",{"type":64,"value":1122}," in DocuSign.",{"type":58,"tag":315,"props":1124,"children":1125},{},[1126,1128,1133],{"type":64,"value":1127},"If no code arrives within ~1 minute, or there's no readable email option to route to, ",{"type":58,"tag":73,"props":1129,"children":1130},{},[1131],{"type":64,"value":1132},"ask the user for the code",{"type":64,"value":1134}," — one ask, then wait; don't loop, and don't force 2FA when DocuSign didn't ask for it.",{"type":58,"tag":67,"props":1136,"children":1137},{},[1138],{"type":64,"value":1139},"Once signed in, confirm you're on the correct DocuSign account before touching an envelope (screenshot if unsure).",{"type":58,"tag":130,"props":1141,"children":1143},{"id":1142},"workflow",[1144],{"type":64,"value":1145},"Workflow",{"type":58,"tag":67,"props":1147,"children":1148},{},[1149],{"type":58,"tag":73,"props":1150,"children":1151},{},[1152],{"type":64,"value":1153},"References:",{"type":58,"tag":311,"props":1155,"children":1156},{},[1157,1168,1179,1190,1201,1212,1222,1232],{"type":58,"tag":315,"props":1158,"children":1159},{},[1160,1166],{"type":58,"tag":95,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":64,"value":1165},"references\u002Fsharing-and-rollout.md",{"type":64,"value":1167}," captures the generic shareable Signature Sleigh workflow-doc link and how to distinguish it from user-specific companion\u002Fpreference docs.",{"type":58,"tag":315,"props":1169,"children":1170},{},[1171,1177],{"type":58,"tag":95,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":64,"value":1176},"references\u002Fdocusign-web-ui-2026-06.md",{"type":64,"value":1178}," captures real June 2026 DocuSign browser runs, including the current Home → Start submenu shape, hidden file-input upload, completion-copy recipient role selection, watched-test login\u002Fautofill pitfalls, field-placement coordinates\u002Fpitfalls, and final Sent-list verification.",{"type":58,"tag":315,"props":1180,"children":1181},{},[1182,1188],{"type":58,"tag":95,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":64,"value":1187},"references\u002Fdocusign-login-controlled-input-2026-06.md",{"type":64,"value":1189}," captures a DocuSign login pitfall where JS value injection into the controlled email field was discarded; use real browser-harness typing for the email step.",{"type":58,"tag":315,"props":1191,"children":1192},{},[1193,1199],{"type":58,"tag":95,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":64,"value":1198},"references\u002Fdocusign-login-autofill-2026-06.md",{"type":64,"value":1200}," captures the current DocuSign password-step playbook: click the visible password field, select the saved-password row matching the companion-doc sender account, verify DocuSign Home, and only hand off if visible autofill is unavailable or rejected.",{"type":58,"tag":315,"props":1202,"children":1203},{},[1204,1210],{"type":58,"tag":95,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":64,"value":1209},"references\u002Fdocusign-prefilled-title-fields-2026-06.md",{"type":64,"value":1211}," captures the watched-test workaround for exact pre-filled signer titles: replace standard editable Title tabs with read-only Text fields when the UI does not expose a reliable default-value control.",{"type":58,"tag":315,"props":1213,"children":1214},{},[1215,1220],{"type":58,"tag":95,"props":1216,"children":1218},{"className":1217},[],[1219],{"type":64,"value":856},{"type":64,"value":1221}," captures the post-test cleanup path: close Preview, Actions → Discard, confirm Discard Draft, verify the Agreements page, then profile → Log Out and verify the logged-out page.",{"type":58,"tag":315,"props":1223,"children":1224},{},[1225,1230],{"type":58,"tag":95,"props":1226,"children":1228},{"className":1227},[],[1229],{"type":64,"value":772},{"type":64,"value":1231}," captures the three-test release gate before opening Signature Sleigh to a wider audience: internal-only preview+cleanup, counter-signer-first\u002Finternal-last with exact titles, and Slack heads-up + tracker logging.",{"type":58,"tag":315,"props":1233,"children":1234},{},[1235,1241],{"type":58,"tag":95,"props":1236,"children":1238},{"className":1237},[],[1239],{"type":64,"value":1240},"references\u002Fenvelope-tracker-status-refresh.md",{"type":64,"value":1242}," covers companion-doc-driven Google Sheets envelope trackers: logging each sent envelope idempotently and refreshing pending signature status from DocuSign.",{"type":58,"tag":986,"props":1244,"children":1246},{"id":1245},"step-1-the-drive-pdf-gog",[1247],{"type":64,"value":1248},"Step 1 — the Drive PDF (gog)",{"type":58,"tag":911,"props":1250,"children":1251},{},[1252,1278,1332,1364,1375],{"type":58,"tag":315,"props":1253,"children":1254},{},[1255,1257,1263,1264,1270,1271,1277],{"type":64,"value":1256},"Extract the file ID from the URL (",{"type":58,"tag":95,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":64,"value":1262},"\u002Ffile\u002Fd\u002F{ID}\u002Fview",{"type":64,"value":1022},{"type":58,"tag":95,"props":1265,"children":1267},{"className":1266},[],[1268],{"type":64,"value":1269},"open?id={ID}",{"type":64,"value":1022},{"type":58,"tag":95,"props":1272,"children":1274},{"className":1273},[],[1275],{"type":64,"value":1276},"\u002Fd\u002F{ID}\u002F",{"type":64,"value":1112},{"type":58,"tag":315,"props":1279,"children":1280},{},[1281,1287,1289,1295,1297,1306,1308,1314,1316,1322,1324,1330],{"type":58,"tag":95,"props":1282,"children":1284},{"className":1283},[],[1285],{"type":64,"value":1286},"gog drive get \u003CID>",{"type":64,"value":1288}," → read the ",{"type":58,"tag":95,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":64,"value":1294},"name",{"type":64,"value":1296},", the ",{"type":58,"tag":73,"props":1298,"children":1299},{},[1300],{"type":58,"tag":95,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":64,"value":1305},"type",{"type":64,"value":1307}," field (the MIME type), and the ",{"type":58,"tag":95,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":64,"value":1313},"modified",{"type":64,"value":1315}," date. (",{"type":58,"tag":95,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":64,"value":1321},"gog drive get",{"type":64,"value":1323}," prints ",{"type":58,"tag":95,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":64,"value":1329},"type\tapplication\u002Fpdf",{"type":64,"value":1331}," for a PDF.)",{"type":58,"tag":315,"props":1333,"children":1334},{},[1335,1337,1342,1344,1355,1357,1363],{"type":64,"value":1336},"The ",{"type":58,"tag":95,"props":1338,"children":1340},{"className":1339},[],[1341],{"type":64,"value":1305},{"type":64,"value":1343}," ",{"type":58,"tag":73,"props":1345,"children":1346},{},[1347,1349],{"type":64,"value":1348},"must be ",{"type":58,"tag":95,"props":1350,"children":1352},{"className":1351},[],[1353],{"type":64,"value":1354},"application\u002Fpdf",{"type":64,"value":1356},". If it's a Google Doc \u002F DOCX \u002F anything else, stop and ask for a PDF URL (offer to wait while they export). Backstop: the downloaded file in Step 5 must start with the bytes ",{"type":58,"tag":95,"props":1358,"children":1360},{"className":1359},[],[1361],{"type":64,"value":1362},"%PDF",{"type":64,"value":534},{"type":58,"tag":315,"props":1365,"children":1366},{},[1367,1368,1373],{"type":64,"value":466},{"type":58,"tag":203,"props":1369,"children":1370},{},[1371],{"type":64,"value":1372},"\"Found 'Acme MSA - Final.pdf', modified May 24 — use this one?\"",{"type":64,"value":1374}," Stop if no.",{"type":58,"tag":315,"props":1376,"children":1377},{},[1378,1380,1386],{"type":64,"value":1379},"Download it: ",{"type":58,"tag":95,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":64,"value":1385},"gog drive download \u003CID> --out \u002Fopt\u002Fdata\u002F\u003Csafe-name>.pdf",{"type":64,"value":1387}," — this local file is what you upload into DocuSign.",{"type":58,"tag":986,"props":1389,"children":1391},{"id":1390},"step-2-collect-signer-recipient-details",[1392],{"type":64,"value":1393},"Step 2 — collect signer + recipient details",{"type":58,"tag":67,"props":1395,"children":1396},{},[1397,1399,1403],{"type":64,"value":1398},"Ask ",{"type":58,"tag":73,"props":1400,"children":1401},{},[1402],{"type":64,"value":296},{"type":64,"value":1404}," (don't drip questions):",{"type":58,"tag":311,"props":1406,"children":1407},{},[1408,1418,1483,1493,1503,1524,1534],{"type":58,"tag":315,"props":1409,"children":1410},{},[1411,1416],{"type":58,"tag":73,"props":1412,"children":1413},{},[1414],{"type":64,"value":1415},"Internal signer",{"type":64,"value":1417}," (required): name + email — the signer explicitly labeled as the internal\u002Finternal-company-side signer by the user; their fields get pre-placed.",{"type":58,"tag":315,"props":1419,"children":1420},{},[1421,1426,1428],{"type":58,"tag":73,"props":1422,"children":1423},{},[1424],{"type":64,"value":1425},"Counter-signers",{"type":64,"value":1427},": name + email (title optional), one or many. Default: they sign first. If none, confirm internal-signer-only is intended.\n",{"type":58,"tag":311,"props":1429,"children":1430},{},[1431,1457,1478],{"type":58,"tag":315,"props":1432,"children":1433},{},[1434,1439,1441,1447,1449,1455],{"type":58,"tag":73,"props":1435,"children":1436},{},[1437],{"type":64,"value":1438},"Do not silently relabel signers based on email domain, the user's identity, or what seems more likely.",{"type":64,"value":1440}," If the user says ",{"type":58,"tag":95,"props":1442,"children":1444},{"className":1443},[],[1445],{"type":64,"value":1446},"Internal signer: Chris",{"type":64,"value":1448}," and ",{"type":58,"tag":95,"props":1450,"children":1452},{"className":1451},[],[1453],{"type":64,"value":1454},"Counter-signer: Jane",{"type":64,"value":1456},", treat Chris as the internal signer and Jane as the counter-signer for this run, even if Jane is the requester or has a internal company email. If the labels look inconsistent with the document or normal company roles, flag it in the preview\u002Fchecklist and ask for confirmation before sending; never invert the routing order on your own.",{"type":58,"tag":315,"props":1458,"children":1459},{},[1460,1462,1468,1470,1476],{"type":64,"value":1461},"If exact titles are needed but the user did not supply them, inspect the PDF signature blocks first. Clearly printed title values (for example ",{"type":58,"tag":95,"props":1463,"children":1465},{"className":1464},[],[1466],{"type":64,"value":1467},"Title: CEO",{"type":64,"value":1469}," or ",{"type":58,"tag":95,"props":1471,"children":1473},{"className":1472},[],[1474],{"type":64,"value":1475},"Title: Head of Finance",{"type":64,"value":1477},") can be used as proposed defaults and should be verified in the preview; do not ask the user for titles that are already plainly present in the PDF unless there is ambiguity.",{"type":58,"tag":315,"props":1479,"children":1480},{},[1481],{"type":64,"value":1482},"If a provided signer email looks malformed or inconsistent with earlier known values (for example a last-name-only local part where prior runs used a first-name address), pause and confirm the exact email before building the DocuSign draft.",{"type":58,"tag":315,"props":1484,"children":1485},{},[1486,1491],{"type":58,"tag":73,"props":1487,"children":1488},{},[1489],{"type":64,"value":1490},"Subject",{"type":64,"value":1492},": default = document name (no \"Please sign:\" prefix).",{"type":58,"tag":315,"props":1494,"children":1495},{},[1496,1501],{"type":58,"tag":73,"props":1497,"children":1498},{},[1499],{"type":64,"value":1500},"Message",{"type":64,"value":1502},": optional body for the DocuSign email.",{"type":58,"tag":315,"props":1504,"children":1505},{},[1506,1511,1513,1517,1519,1523],{"type":58,"tag":73,"props":1507,"children":1508},{},[1509],{"type":64,"value":1510},"Signing order",{"type":64,"value":1512}," (only ask if not already stated): default = counter-signers first, internal last. Overrides: ",{"type":58,"tag":203,"props":1514,"children":1515},{},[1516],{"type":64,"value":356},{"type":64,"value":1518},", or ",{"type":58,"tag":203,"props":1520,"children":1521},{},[1522],{"type":64,"value":363},{"type":64,"value":534},{"type":58,"tag":315,"props":1525,"children":1526},{},[1527,1532],{"type":58,"tag":73,"props":1528,"children":1529},{},[1530],{"type":64,"value":1531},"Slack heads-up",{"type":64,"value":1533}," (optional in the generic skill): want a draft heads-up to the signer? If yes, who. If the user's companion doc specifies a default Slack heads-up workflow, treat that as requested for that user and follow the companion's routing\u002Fapproval rule. Keep this distinction clear in generic\u002Fshareable materials: Slack drafting is optional generally, but may be a user's companion-doc default.",{"type":58,"tag":315,"props":1535,"children":1536},{},[1537,1541],{"type":58,"tag":73,"props":1538,"children":1539},{},[1540],{"type":64,"value":383},{"type":64,"value":1542}," (optional): use any defaults from the user's companion doc; only ask if no default exists and the user appears to need completion-copy recipients.",{"type":58,"tag":986,"props":1544,"children":1546},{"id":1545},"step-3-pre-send-checklist",[1547],{"type":64,"value":1548},"Step 3 — pre-send checklist",{"type":58,"tag":67,"props":1550,"children":1551},{},[1552,1554,1559,1561,1566],{"type":64,"value":1553},"Surface anything off (don't block — make the user confirm): file is a PDF; internal signer + every counter-signer has a valid-looking email; the name doesn't look like a draft (\"DRAFT\", \"v0.\", \"WIP\", \"redline\") — if it does, confirm it's final; PDF is under ~25 MB. ",{"type":58,"tag":73,"props":1555,"children":1556},{},[1557],{"type":64,"value":1558},"Cross-check the document's signatories against your signer list",{"type":64,"value":1560}," — if the PDF text is readable, read the printed signature-block names; if the document names a signatory you have no signer for (or a provided signer has no block), flag it and confirm before sending (e.g. three signature lines but only two signers given — confirm whether to add or exclude the third). If the user explicitly says ",{"type":58,"tag":73,"props":1562,"children":1563},{},[1564],{"type":64,"value":1565},"internal signature only",{"type":64,"value":1567},", do not automatically add company\u002Fcounterparty signature-block names found in the PDF; instead, make the preview say those blocks exist and will be excluded, then require the usual explicit approval before sending.",{"type":58,"tag":986,"props":1569,"children":1571},{"id":1570},"step-4-preview-explicit-approval-required-never-skip",[1572],{"type":64,"value":1573},"Step 4 — preview + explicit approval (REQUIRED — never skip)",{"type":58,"tag":67,"props":1575,"children":1576},{},[1577,1579,1584],{"type":64,"value":1578},"Show a scannable preview and wait for an unambiguous ",{"type":58,"tag":73,"props":1580,"children":1581},{},[1582],{"type":64,"value":1583},"yes",{"type":64,"value":1585},". Never send on silence or a maybe.",{"type":58,"tag":250,"props":1587,"children":1590},{"className":1588,"code":1589,"language":64},[253],"Ready to send:\n  Document: Acme MSA - Final.pdf (modified May 24)\n  Subject:  Acme MSA - Final\n  Execution order: Counter-signers first, then internal signer\n    1. Jane Smith \u003Cjane@acme.com>         (counter-signer)\n    2. Alex Internal \u003Calex.internal@example.org>  (internal signer — fields assigned)\n  Completion copies: per companion doc\n  Slack: group-DM heads-up to Chris  (only if requested)\n  Checklist: ✓ all passed\n",[1591],{"type":58,"tag":95,"props":1592,"children":1593},{"__ignoreMap":258},[1594],{"type":64,"value":1589},{"type":58,"tag":986,"props":1596,"children":1598},{"id":1597},"step-5-build-send-the-envelope-in-docusign-browser-harness",[1599],{"type":64,"value":1600},"Step 5 — build + send the envelope in DocuSign (browser-harness)",{"type":58,"tag":67,"props":1602,"children":1603},{},[1604],{"type":64,"value":1605},"Only after approval. Drive the DocuSign web app step by step:",{"type":58,"tag":911,"props":1607,"children":1608},{},[1609,1640,1673,1735,1752,1879,1915,1932,1968],{"type":58,"tag":315,"props":1610,"children":1611},{},[1612,1617,1619,1624,1626,1631,1633,1638],{"type":58,"tag":73,"props":1613,"children":1614},{},[1615],{"type":64,"value":1616},"Start",{"type":64,"value":1618},": from DocuSign home, click ",{"type":58,"tag":73,"props":1620,"children":1621},{},[1622],{"type":64,"value":1623},"Start → Send an envelope",{"type":64,"value":1625},". In the June 2026 UI this was ",{"type":58,"tag":73,"props":1627,"children":1628},{},[1629],{"type":64,"value":1630},"Start → Agreements → Envelopes → Send an Envelope",{"type":64,"value":1632}," (a nested submenu); see ",{"type":58,"tag":95,"props":1634,"children":1636},{"className":1635},[],[1637],{"type":64,"value":1176},{"type":64,"value":1639}," before improvising if the simple path is not visible.",{"type":58,"tag":315,"props":1641,"children":1642},{},[1643,1648,1650,1655,1657,1663,1665,1671],{"type":58,"tag":73,"props":1644,"children":1645},{},[1646],{"type":64,"value":1647},"Add the document",{"type":64,"value":1649},": in the upload area, ",{"type":58,"tag":73,"props":1651,"children":1652},{},[1653],{"type":64,"value":1654},"upload the PDF you downloaded in Step 1",{"type":64,"value":1656}," (drag it in, or \"Upload\" → the local file ",{"type":58,"tag":95,"props":1658,"children":1660},{"className":1659},[],[1661],{"type":64,"value":1662},"\u002Fopt\u002Fdata\u002F\u003Cname>.pdf",{"type":64,"value":1664},"). With browser-harness, the hidden file input usually works directly: ",{"type":58,"tag":95,"props":1666,"children":1668},{"className":1667},[],[1669],{"type":64,"value":1670},"upload_file('input[type=file]', '\u002Fopt\u002Fdata\u002F\u003Cname>.pdf')",{"type":64,"value":1672},"; verify a document card\u002Fthumbnail and page count appear. DocuSign may also offer \"Get from Google Drive\" — either works; the downloaded file is the most reliable.",{"type":58,"tag":315,"props":1674,"children":1675},{},[1676,1681,1683],{"type":58,"tag":73,"props":1677,"children":1678},{},[1679],{"type":64,"value":1680},"Add recipients",{"type":64,"value":1682}," in the order matching Step 2:\n",{"type":58,"tag":311,"props":1684,"children":1685},{},[1686,1704,1716],{"type":58,"tag":315,"props":1687,"children":1688},{},[1689,1691,1696,1698,1702],{"type":64,"value":1690},"Turn ",{"type":58,"tag":73,"props":1692,"children":1693},{},[1694],{"type":64,"value":1695},"\"Set signing order\"",{"type":64,"value":1697}," ON for sequential modes; for ",{"type":58,"tag":203,"props":1699,"children":1700},{},[1701],{"type":64,"value":363},{"type":64,"value":1703},", leave it off (or give everyone order 1).",{"type":58,"tag":315,"props":1705,"children":1706},{},[1707,1709,1714],{"type":64,"value":1708},"Add each counter-signer + the internal signer as ",{"type":58,"tag":73,"props":1710,"children":1711},{},[1712],{"type":64,"value":1713},"\"Needs to Sign\"",{"type":64,"value":1715},", numbered per the chosen order.",{"type":58,"tag":315,"props":1717,"children":1718},{},[1719,1721,1726,1728,1733],{"type":64,"value":1720},"If the user's companion doc specifies completion-copy recipients, add each as ",{"type":58,"tag":73,"props":1722,"children":1723},{},[1724],{"type":64,"value":1725},"\"Receives a Copy\" (CC)",{"type":64,"value":1727},", ordered last, so they get the executed copy after everyone signs. New recipients may default to \"Needs to Sign\" — open each recipient's role dropdown and explicitly choose ",{"type":58,"tag":73,"props":1729,"children":1730},{},[1731],{"type":64,"value":1732},"Receives a Copy",{"type":64,"value":1734},"; verify the visible text changed before proceeding.",{"type":58,"tag":315,"props":1736,"children":1737},{},[1738,1743,1745,1750],{"type":58,"tag":73,"props":1739,"children":1740},{},[1741],{"type":64,"value":1742},"Subject + message",{"type":64,"value":1744}," from Step 2. Click ",{"type":58,"tag":73,"props":1746,"children":1747},{},[1748],{"type":64,"value":1749},"Next",{"type":64,"value":1751}," to open the field-placement view.",{"type":58,"tag":315,"props":1753,"children":1754},{},[1755,1760,1762,1767,1769,1774,1775,1780,1781,1786,1788,1793,1794,1799,1801,1805,1807,1813,1814,1820,1822,1827,1829,1834,1836,1840,1842,1846,1848,1853,1855,1861,1863,1869,1871,1877],{"type":58,"tag":73,"props":1756,"children":1757},{},[1758],{"type":64,"value":1759},"Place the signing fields so every party can just click to sign.",{"type":64,"value":1761}," Select each recipient from the recipient dropdown in turn, and ",{"type":58,"tag":73,"props":1763,"children":1764},{},[1765],{"type":64,"value":1766},"drag or click-place their fields onto that person's signature block",{"type":64,"value":1768},": ",{"type":58,"tag":73,"props":1770,"children":1771},{},[1772],{"type":64,"value":1773},"Signature",{"type":64,"value":1022},{"type":58,"tag":73,"props":1776,"children":1777},{},[1778],{"type":64,"value":1779},"Date Signed",{"type":64,"value":1022},{"type":58,"tag":73,"props":1782,"children":1783},{},[1784],{"type":64,"value":1785},"Name",{"type":64,"value":1787}," (+ ",{"type":58,"tag":73,"props":1789,"children":1790},{},[1791],{"type":64,"value":1792},"Initials",{"type":64,"value":358},{"type":58,"tag":73,"props":1795,"children":1796},{},[1797],{"type":64,"value":1798},"Title",{"type":64,"value":1800}," where the printed block has them). If the PDF already has the signer name and\u002For title visibly printed in the signature block, do ",{"type":58,"tag":73,"props":1802,"children":1803},{},[1804],{"type":64,"value":836},{"type":64,"value":1806}," overlay duplicate DocuSign Name\u002FTitle fields in production; place only the fields the signer must complete, unless the user is running a test that specifically requires Name\u002FTitle field placement. If the user supplied exact title values that should already be completed (for example ",{"type":58,"tag":95,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":64,"value":1812},"Head of Finance",{"type":64,"value":1022},{"type":58,"tag":95,"props":1815,"children":1817},{"className":1816},[],[1818],{"type":64,"value":1819},"CEO",{"type":64,"value":1821},") and they are not printed in the PDF, use ",{"type":58,"tag":73,"props":1823,"children":1824},{},[1825],{"type":64,"value":1826},"Text",{"type":64,"value":1828}," fields containing those exact values and mark them ",{"type":58,"tag":73,"props":1830,"children":1831},{},[1832],{"type":64,"value":1833},"Read Only",{"type":64,"value":1835}," instead of using DocuSign's standard editable ",{"type":58,"tag":73,"props":1837,"children":1838},{},[1839],{"type":64,"value":1798},{"type":64,"value":1841}," field. If drag-and-drop is fiddly in browser-harness, the current DocuSign builder supports a reliable click-to-place pattern: click the field type in the left sidebar (for example ",{"type":58,"tag":73,"props":1843,"children":1844},{},[1845],{"type":64,"value":1773},{"type":64,"value":1847},"), then click the target line in the document. Put each field on the correct line for that person — your signer goes on the internal-company block (\"Internal Company \u002F By: ___\"), each counter-signer on theirs. DocuSign often auto-tags from the document's signature lines — if it placed fields, just ",{"type":58,"tag":73,"props":1849,"children":1850},{},[1851],{"type":64,"value":1852},"verify they're on the right party's block",{"type":64,"value":1854},". At high zoom, signature fields can land too low and cover printed ",{"type":58,"tag":95,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":64,"value":1860},"Name:",{"type":64,"value":1862}," text; select the field and nudge it with arrow keys (for example repeated ",{"type":58,"tag":95,"props":1864,"children":1866},{"className":1865},[],[1867],{"type":64,"value":1868},"ArrowUp",{"type":64,"value":1870},") so it sits on the blank signature line. If the document has a pre-filled ",{"type":58,"tag":95,"props":1872,"children":1874},{"className":1873},[],[1875],{"type":64,"value":1876},"Place and date",{"type":64,"value":1878}," and no separate date-signed line, do not force a Date Signed field just to satisfy a generic checklist.",{"type":58,"tag":315,"props":1880,"children":1881},{},[1882,1887,1889,1894,1896,1900,1902,1906,1908,1913],{"type":58,"tag":73,"props":1883,"children":1884},{},[1885],{"type":64,"value":1886},"Preview before Send.",{"type":64,"value":1888}," Use DocuSign's ",{"type":58,"tag":73,"props":1890,"children":1891},{},[1892],{"type":64,"value":1893},"Preview",{"type":64,"value":1895}," button to simulate what the signer will see; click ",{"type":58,"tag":73,"props":1897,"children":1898},{},[1899],{"type":64,"value":1616},{"type":64,"value":1901}," in preview to jump to the required field and verify it is visible, assigned to the intended signer, and not covering printed text. For exact names\u002Ftitles, preview each signer view and visually confirm the rendered full-name and read-only title values, not just that fields exist in the add-fields canvas. In watched\u002Ftest runs, this preview screen is the right place to stop and ask the user for explicit approval. Do ",{"type":58,"tag":73,"props":1903,"children":1904},{},[1905],{"type":64,"value":836},{"type":64,"value":1907}," click DocuSign's ",{"type":58,"tag":73,"props":1909,"children":1910},{},[1911],{"type":64,"value":1912},"Send",{"type":64,"value":1914}," button from the field-placement screen until the user has unambiguously approved.",{"type":58,"tag":315,"props":1916,"children":1917},{},[1918,1923,1925,1930],{"type":58,"tag":73,"props":1919,"children":1920},{},[1921],{"type":64,"value":1922},"Review → Send.",{"type":64,"value":1924}," Watch for send completion. The app may redirect to ",{"type":58,"tag":73,"props":1926,"children":1927},{},[1928],{"type":64,"value":1929},"Agreements → Sent",{"type":64,"value":1931}," rather than show a modal.",{"type":58,"tag":315,"props":1933,"children":1934},{},[1935,1940,1942,1948,1950,1959,1961,1966],{"type":58,"tag":73,"props":1936,"children":1937},{},[1938],{"type":64,"value":1939},"Verify in Sent",{"type":64,"value":1941},": the newest row should match the document, show ",{"type":58,"tag":95,"props":1943,"children":1945},{"className":1944},[],[1946],{"type":64,"value":1947},"To:",{"type":64,"value":1949}," with the signer(s) plus any completion-copy recipients from the companion doc, and have status like ",{"type":58,"tag":73,"props":1951,"children":1952},{},[1953,1955],{"type":64,"value":1954},"Waiting for ",{"type":58,"tag":1956,"props":1957,"children":1958},"first",{"signer":258},[],{"type":64,"value":1960}," with a ",{"type":58,"tag":73,"props":1962,"children":1963},{},[1964],{"type":64,"value":1965},"Resend",{"type":64,"value":1967}," button. This is stronger verification than assuming the button click succeeded.",{"type":58,"tag":315,"props":1969,"children":1970},{},[1971,1973,1978,1980,1985,1987,1992],{"type":64,"value":1972},"If any screen doesn't match these steps, ",{"type":58,"tag":73,"props":1974,"children":1975},{},[1976],{"type":64,"value":1977},"screenshot it, describe it to the user, and ask",{"type":64,"value":1979}," — DocuSign's UI varies. Record a ",{"type":58,"tag":203,"props":1981,"children":1982},{},[1983],{"type":64,"value":1984},"generic",{"type":64,"value":1986}," fix in this skill, or a ",{"type":58,"tag":203,"props":1988,"children":1989},{},[1990],{"type":64,"value":1991},"user\u002Ftemplate-specific",{"type":64,"value":1993}," note in their companion doc (per the split above).",{"type":58,"tag":986,"props":1995,"children":1997},{"id":1996},"step-6-slack-heads-up-only-if-requested-henry-out",[1998],{"type":64,"value":1999},"Step 6 — Slack heads-up (only if requested) — henry-out",{"type":58,"tag":67,"props":2001,"children":2002},{},[2003,2005,2010],{"type":64,"value":2004},"If the user asked for a Slack notice, ",{"type":58,"tag":73,"props":2006,"children":2007},{},[2008],{"type":64,"value":2009},"draft it, show the user, and wait for explicit approval before anything is posted",{"type":64,"value":534},{"type":58,"tag":67,"props":2012,"children":2013},{},[2014,2019,2020,2026,2028,2034],{"type":58,"tag":73,"props":2015,"children":2016},{},[2017],{"type":64,"value":2018},"Reference:",{"type":64,"value":1343},{"type":58,"tag":95,"props":2021,"children":2023},{"className":2022},[],[2024],{"type":64,"value":2025},"references\u002Fslack-heads-up-routing.md",{"type":64,"value":2027}," captures private-channel posting failures, ",{"type":58,"tag":95,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":64,"value":2033},"channel_not_found",{"type":64,"value":2035}," interpretation, and personal\u002Fgroup-DM fallbacks.",{"type":58,"tag":67,"props":2037,"children":2038},{},[2039,2044,2046,2051,2053,2057,2059,2063],{"type":58,"tag":73,"props":2040,"children":2041},{},[2042],{"type":64,"value":2043},"Default Slack handling:",{"type":64,"value":2045}," when the user requests a signer heads-up, draft the message in the current thread for approval first. After the user's explicit approval, post the approved copy ",{"type":58,"tag":73,"props":2047,"children":2048},{},[2049],{"type":64,"value":2050},"back in Slack to the user\u002Fcurrent thread for copy\u002Fpaste",{"type":64,"value":2052}," into the appropriate channel or DM. Do ",{"type":58,"tag":73,"props":2054,"children":2055},{},[2056],{"type":64,"value":836},{"type":64,"value":2058}," attempt to post directly into the requested Slack channel\u002FDM by default, because private channels and personal Slack spaces often reject bot\u002FAPI posts even when the user provides an archive URL. Only post directly to a channel\u002FDM if the user explicitly asks for direct posting and accepts the access-risk\u002Ffallback behavior. Do ",{"type":58,"tag":73,"props":2060,"children":2061},{},[2062],{"type":64,"value":836},{"type":64,"value":2064}," attempt to create an unsent draft inside Slack's channel composer unless the user explicitly asks for a live-browser draft.",{"type":58,"tag":67,"props":2066,"children":2067},{},[2068,2070,2076,2078,2083],{"type":64,"value":2069},"A Slack channel URL, DM URL, or email alias does not grant posting permission. If direct posting is explicitly requested and ",{"type":58,"tag":95,"props":2071,"children":2073},{"className":2072},[],[2074],{"type":64,"value":2075},"henry-out reply --channel \u003Cchannel_id>",{"type":64,"value":2077}," returns ",{"type":58,"tag":95,"props":2079,"children":2081},{"className":2080},[],[2082],{"type":64,"value":2033},{"type":64,"value":2084},", treat it as a Slack app membership\u002Faccess issue: report that the approved note was not posted and provide the approved text in the current thread for the user to copy\u002Fpaste, or ask the user to invite Henry\u002Fthe Slack app to the destination if they still want direct posting.",{"type":58,"tag":911,"props":2086,"children":2087},{},[2088,2108,2118,2129,2185],{"type":58,"tag":315,"props":2089,"children":2090},{},[2091,2093,2106],{"type":64,"value":2092},"Draft a short note: ",{"type":58,"tag":203,"props":2094,"children":2095},{},[2096,2098,2104],{"type":64,"value":2097},"\"Chris — DocuSign envelope ",{"type":58,"tag":95,"props":2099,"children":2101},{"className":2100},[],[2102],{"type":64,"value":2103},"{envelope_title}",{"type":64,"value":2105}," is ready for your signature. Please review and sign the document when you have a chance. Thank you.\"",{"type":64,"value":2107}," Adjust the signer name and envelope title.",{"type":58,"tag":315,"props":2109,"children":2110},{},[2111,2113],{"type":64,"value":2112},"Show the user the draft + intended destination context (person, group DM, or channel). ",{"type":58,"tag":73,"props":2114,"children":2115},{},[2116],{"type":64,"value":2117},"Wait for approval — never auto-send.",{"type":58,"tag":315,"props":2119,"children":2120},{},[2121,2123,2127],{"type":64,"value":2122},"On approval, post the approved copy back to the user\u002Fcurrent Slack thread for copy\u002Fpaste into the appropriate channel or DM. Make clear that this is the copy\u002Fpaste version and that Henry is ",{"type":58,"tag":73,"props":2124,"children":2125},{},[2126],{"type":64,"value":836},{"type":64,"value":2128}," posting it directly to the destination by default.",{"type":58,"tag":315,"props":2130,"children":2131},{},[2132,2134],{"type":64,"value":2133},"Only if the user explicitly asks Henry to post directly to a destination, send to that approved destination:\n",{"type":58,"tag":311,"props":2135,"children":2136},{},[2137,2156],{"type":58,"tag":315,"props":2138,"children":2139},{},[2140,2142,2147,2149,2154],{"type":64,"value":2141},"If the user requested a ",{"type":58,"tag":73,"props":2143,"children":2144},{},[2145],{"type":64,"value":2146},"channel",{"type":64,"value":2148},", post the approved message directly to that channel with ",{"type":58,"tag":95,"props":2150,"children":2152},{"className":2151},[],[2153],{"type":64,"value":2075},{"type":64,"value":2155}," (or the platform messaging tool if that is the current routing path). Do not post before approval.",{"type":58,"tag":315,"props":2157,"children":2158},{},[2159,2160,2165,2167,2176,2178,2183],{"type":64,"value":2141},{"type":58,"tag":73,"props":2161,"children":2162},{},[2163],{"type":64,"value":2164},"group DM",{"type":64,"value":2166},", use:\n",{"type":58,"tag":250,"props":2168,"children":2171},{"className":2169,"code":2170,"language":64},[253],"henry-out group --to \u003Csigner's workspace email or Slack handle>\n",[2172],{"type":58,"tag":95,"props":2173,"children":2174},{"__ignoreMap":258},[2175],{"type":64,"value":2170},{"type":64,"value":2177},"\nThis opens a DM with you, the user, and the signer, posts the note, and ",{"type":58,"tag":73,"props":2179,"children":2180},{},[2181],{"type":64,"value":2182},"routes the signer's replies back to your container",{"type":64,"value":2184}," so you can follow up.",{"type":58,"tag":315,"props":2186,"children":2187},{},[2188,2190],{"type":64,"value":2189},"If the requested channel\u002Fperson cannot be resolved, provide the exact approved text and say why it was not posted.\n",{"type":58,"tag":311,"props":2191,"children":2192},{},[2193,2219,2239,2252,2278],{"type":58,"tag":315,"props":2194,"children":2195},{},[2196,2198,2203,2204,2209,2211,2217],{"type":64,"value":2197},"If they ask to ",{"type":58,"tag":73,"props":2199,"children":2200},{},[2201],{"type":64,"value":2202},"draft only",{"type":64,"value":358},{"type":58,"tag":73,"props":2205,"children":2206},{},[2207],{"type":64,"value":2208},"do not send",{"type":64,"value":2210},", reply with the exact channel-targeted copy and explicitly say ",{"type":58,"tag":95,"props":2212,"children":2214},{"className":2213},[],[2215],{"type":64,"value":2216},"Not sent.",{"type":64,"value":2218}," Do not post to the channel and do not open a group DM.",{"type":58,"tag":315,"props":2220,"children":2221},{},[2222,2224,2229,2231,2237],{"type":64,"value":2223},"If they approve sending to the channel, use ",{"type":58,"tag":95,"props":2225,"children":2227},{"className":2226},[],[2228],{"type":64,"value":2075},{"type":64,"value":2230}," (and ",{"type":58,"tag":95,"props":2232,"children":2234},{"className":2233},[],[2235],{"type":64,"value":2236},"--thread",{"type":64,"value":2238}," only if they specified a thread). Keep the message short and focused on the envelope title and requested action.",{"type":58,"tag":315,"props":2240,"children":2241},{},[2242,2244,2250],{"type":64,"value":2243},"If the only address supplied is a Slack channel email alias, prefer the explicit Slack channel ID\u002Fmention (for example ",{"type":58,"tag":95,"props":2245,"children":2247},{"className":2246},[],[2248],{"type":64,"value":2249},"\u003C#C...>",{"type":64,"value":2251},") over emailing the alias.",{"type":58,"tag":315,"props":2253,"children":2254},{},[2255,2257,2263,2265,2269,2271,2276],{"type":64,"value":2256},"A Slack archive link (",{"type":58,"tag":95,"props":2258,"children":2260},{"className":2259},[],[2261],{"type":64,"value":2262},"https:\u002F\u002F...\u002Farchives\u002FC...",{"type":64,"value":2264},") or channel mention confirms the channel ID but does ",{"type":58,"tag":73,"props":2266,"children":2267},{},[2268],{"type":64,"value":836},{"type":64,"value":2270}," prove Henry can post there. If Slack returns ",{"type":58,"tag":95,"props":2272,"children":2274},{"className":2273},[],[2275],{"type":64,"value":2033},{"type":64,"value":2277},", do not keep retrying the same ID; tell the user Henry\u002Fthe Slack app likely is not in that private channel or cannot access it, and offer a reachable fallback (current thread, group DM with the signer, or retry after the user invites Henry\u002Fthe app to the channel).",{"type":58,"tag":315,"props":2279,"children":2280},{},[2281,2283,2289],{"type":64,"value":2282},"If the user asks to post the draft “to me personally” after a channel post fails, be explicit: replying ",{"type":58,"tag":95,"props":2284,"children":2286},{"className":2285},[],[2287],{"type":64,"value":2288},"--in-reply-to",{"type":64,"value":2290}," posts into the same originating Slack thread, not a separate new personal DM. Only promise a separate DM if a distinct reachable DM target is available.",{"type":58,"tag":986,"props":2292,"children":2294},{"id":2293},"step-7-tracker-logging-if-companion-doc-specifies-one",[2295],{"type":64,"value":2296},"Step 7 — tracker logging (if companion doc specifies one)",{"type":58,"tag":67,"props":2298,"children":2299},{},[2300,2302,2307],{"type":64,"value":2301},"If the user's companion doc specifies an envelope tracker, log the sent envelope after DocuSign send verification and before final reporting. Use ",{"type":58,"tag":95,"props":2303,"children":2305},{"className":2304},[],[2306],{"type":64,"value":1240},{"type":64,"value":534},{"type":58,"tag":67,"props":2309,"children":2310},{},[2311],{"type":64,"value":2312},"Minimum pattern:",{"type":58,"tag":911,"props":2314,"children":2315},{},[2316,2321,2326,2331],{"type":58,"tag":315,"props":2317,"children":2318},{},[2319],{"type":64,"value":2320},"Read the tracker first and search for the DocuSign Envelope ID.",{"type":58,"tag":315,"props":2322,"children":2323},{},[2324],{"type":64,"value":2325},"If the Envelope ID already exists, update that row; otherwise append one row.",{"type":58,"tag":315,"props":2327,"children":2328},{},[2329],{"type":64,"value":2330},"Capture sent date, document name, subject\u002Fenvelope title, sender, signing order, signers, CC recipients, current DocuSign status, signed recipients, pending recipients, completed date if present, and the DocuSign details URL.",{"type":58,"tag":315,"props":2332,"children":2333},{},[2334],{"type":64,"value":2335},"Read the written row back before telling the user it was logged.",{"type":58,"tag":67,"props":2337,"children":2338},{},[2339],{"type":64,"value":2340},"When the user later asks what is outstanding, read pending rows from the tracker, open each DocuSign details URL in the Live Browser, and update the tracker from DocuSign as the source of truth.",{"type":58,"tag":986,"props":2342,"children":2344},{"id":2343},"step-8-confirm-report",[2345],{"type":64,"value":2346},"Step 8 — confirm + report",{"type":58,"tag":67,"props":2348,"children":2349},{},[2350],{"type":64,"value":2351},"Keep it short: envelope sent (with the DocuSign envelope name\u002FID if shown); who gets the first invitation (routing-order-1 recipient); any completion-copy recipients from the companion doc get the executed copy on completion; whether the envelope was logged to the companion tracker; if any signer's fields couldn't be placed, say so; if a Slack heads-up was sent, that it's a group DM and their replies will come to you.",{"type":58,"tag":130,"props":2353,"children":2355},{"id":2354},"defaults-fixed-dont-ask",[2356],{"type":64,"value":2357},"Defaults (fixed — don't ask)",{"type":58,"tag":311,"props":2359,"children":2360},{},[2361,2371,2380,2389],{"type":58,"tag":315,"props":2362,"children":2363},{},[2364,2369],{"type":58,"tag":73,"props":2365,"children":2366},{},[2367],{"type":64,"value":2368},"Sender",{"type":64,"value":2370}," = the person running the skill, via their own DocuSign account. Never a signer unless they explicitly add themselves.",{"type":58,"tag":315,"props":2372,"children":2373},{},[2374,2378],{"type":58,"tag":73,"props":2375,"children":2376},{},[2377],{"type":64,"value":383},{"type":64,"value":2379}," = user-specific defaults from the companion doc. Do not hard-code organization- or user-specific CC recipients into this generalized skill; if a user wants a fixed Records\u002FLegal\u002FOps recipient, put that rule in their companion doc.",{"type":58,"tag":315,"props":2381,"children":2382},{},[2383,2387],{"type":58,"tag":73,"props":2384,"children":2385},{},[2386],{"type":64,"value":1510},{"type":64,"value":2388}," = counter-signers first, internal signer last (unless overridden).",{"type":58,"tag":315,"props":2390,"children":2391},{},[2392,2397],{"type":58,"tag":73,"props":2393,"children":2394},{},[2395],{"type":64,"value":2396},"Slack",{"type":64,"value":2398}," = drafted + approved before posting. For channel requests, post the approved text directly to the requested Slack channel; for group-DM requests, use a group DM so replies route back.",{"type":58,"tag":130,"props":2400,"children":2402},{"id":2401},"guardrails",[2403],{"type":64,"value":2404},"Guardrails",{"type":58,"tag":311,"props":2406,"children":2407},{},[2408,2418,2423,2434,2446,2466,2493,2498],{"type":58,"tag":315,"props":2409,"children":2410},{},[2411,2416],{"type":58,"tag":73,"props":2412,"children":2413},{},[2414],{"type":64,"value":2415},"Preview + explicit approval before every send",{"type":64,"value":2417}," (Step 4).",{"type":58,"tag":315,"props":2419,"children":2420},{},[2421],{"type":64,"value":2422},"PDF only; direct Drive URL only (no search-by-name).",{"type":58,"tag":315,"props":2424,"children":2425},{},[2426,2428,2433],{"type":64,"value":2427},"Never auto-send the Slack notice — draft, approve, then ",{"type":58,"tag":95,"props":2429,"children":2431},{"className":2430},[],[2432],{"type":64,"value":667},{"type":64,"value":534},{"type":58,"tag":315,"props":2435,"children":2436},{},[2437,2439,2444],{"type":64,"value":2438},"If DocuSign isn't logged in and neither autofill nor SSO works, ",{"type":58,"tag":73,"props":2440,"children":2441},{},[2442],{"type":64,"value":2443},"stop and ask",{"type":64,"value":2445}," — never guess or request a password. If the user completes login and saves the credential in the shared Live Browser profile, note that future runs should try browser\u002F1Password autofill first before handing off again.",{"type":58,"tag":315,"props":2447,"children":2448},{},[2449,2451,2456,2458,2464],{"type":64,"value":2450},"When the requested Slack heads-up destination is a private channel, ",{"type":58,"tag":95,"props":2452,"children":2454},{"className":2453},[],[2455],{"type":64,"value":2033},{"type":64,"value":2457}," after an approved ",{"type":58,"tag":95,"props":2459,"children":2461},{"className":2460},[],[2462],{"type":64,"value":2463},"henry-out reply --channel \u003Cid>",{"type":64,"value":2465}," attempt means the Slack app\u002FHenry lacks access; do not keep retrying the same post. Report not-posted status and offer invite, personal-thread, or group-DM fallback.",{"type":58,"tag":315,"props":2467,"children":2468},{},[2469,2471,2477,2478,2484,2486,2491],{"type":64,"value":2470},"If the user asks to log out after a sent or watched run, do it before final confirmation and verify the logged-out page (",{"type":58,"tag":95,"props":2472,"children":2474},{"className":2473},[],[2475],{"type":64,"value":2476},"https:\u002F\u002Fwww.docusign.com\u002Flogged-out",{"type":64,"value":358},{"type":58,"tag":95,"props":2479,"children":2481},{"className":2480},[],[2482],{"type":64,"value":2483},"You’ve been securely logged out",{"type":64,"value":2485},") rather than assuming the profile-menu click worked. ",{"type":58,"tag":95,"props":2487,"children":2489},{"className":2488},[],[2490],{"type":64,"value":856},{"type":64,"value":2492}," has the observed logout path; its discard steps apply only to unsent drafts.",{"type":58,"tag":315,"props":2494,"children":2495},{},[2496],{"type":64,"value":2497},"When the DocuSign UI doesn't match this skill, adapt visually + ask — don't click blindly through an envelope.",{"type":58,"tag":315,"props":2499,"children":2500},{},[2501],{"type":64,"value":2502},"Keep this skill generic. A user's specifics go in their companion doc, not here.",{"type":58,"tag":130,"props":2504,"children":2506},{"id":2505},"companion-doc-template-create-one-if-the-user-has-none",[2507],{"type":64,"value":2508},"Companion-doc template (create one if the user has none)",{"type":58,"tag":67,"props":2510,"children":2511},{},[2512,2514,2519],{"type":64,"value":2513},"Make a Google Doc with this structure, share it with the user (writer), and ask them to fill the blanks. Then read it on each run via ",{"type":58,"tag":95,"props":2515,"children":2517},{"className":2516},[],[2518],{"type":64,"value":279},{"type":64,"value":534},{"type":58,"tag":250,"props":2521,"children":2524},{"className":2522,"code":2523,"language":64},[253],"# Send for Signature — \u003Cuser name>'s preferences\n\n## DocuSign login\n- Account \u002F saved login to use (if the browser offers more than one): ____\n- Verification-code (2FA) email I can read — the mailbox codes should go to (usually my own): ____\n  (If DocuSign defaults to a shared mailbox I can't read, switch to this one via \"Select another method\".)\n\n## Signing defaults\n- Default signing order (if not \"counter-signers first, internal last\"): ____\n- Usual internal signer(s): ____\n- Completion-copy recipients and timing (for example, only on completed\u002Fexecuted envelope): ____\n- Slack person\u002Fchannel for heads-ups: ____\n\n## Template \u002F field-placement notes\n- Quirks in our standard documents' signature blocks (where each party's Signature\u002FDate\u002FName go): ____\n",[2525],{"type":58,"tag":95,"props":2526,"children":2527},{"__ignoreMap":258},[2528],{"type":64,"value":2523},{"items":2530,"total":2538},[2531],{"slug":4,"name":4,"fn":5,"description":6,"org":2532,"tags":2533,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2534,2535,2536,2537],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},1,{"items":2540,"total":2565},[2541,2548],{"slug":4,"name":4,"fn":5,"description":6,"org":2542,"tags":2543,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2544,2545,2546,2547],{"name":21,"slug":22,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"slug":2549,"name":2549,"fn":2550,"description":2551,"org":2552,"tags":2553,"stars":26,"repoUrl":2563,"updatedAt":2564},"update-kit","generate recurring status and sprint updates","Drafts recurring updates (status reports, weekly summaries, sprint recaps, leadership briefings, research roundups — anything cyclical) from a user-defined config. The user supplies a YAML config describing the sections, sources, status convention (or none), tone, and output format their update should follow; this skill draws the latest cycle's content from the configured sources and renders the draft accordingly. Use this skill whenever someone asks to draft a recurring update, status report, weekly\u002Fbiweekly\u002Fmonthly summary, sprint recap, or any cyclical write-up — and there is (or should be) a config file like YOUR-CONFIG.yaml describing the format.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2554,2557,2560],{"name":2555,"slug":2556,"type":16},"Productivity","productivity",{"name":2558,"slug":2559,"type":16},"Reporting","reporting",{"name":2561,"slug":2562,"type":16},"YAML","yaml","https:\u002F\u002Fgithub.com\u002Fprotocol\u002Fstatus-update-kit","2026-07-16T06:01:30.713609",2]