Truist commercial credit memo methodology. Section structure, ratio definitions, NAICS-aggregated peer analysis, covenant compliance framework, Truist-branded HTML/PDF output. Use whenever drafting, refreshing, or auditing a commercial credit memo for a C&I borrower at Truist Bank — covers C&I working capital lines, term loans, revolvers, and middle-market deals up to roughly $250M facility size. Trigger on phrases like "draft a credit memo", "refresh the memo", "covenant compliance", "risk rating writeup", or any request to produce or update a commercial loan underwriting document.
How this skill is triggered — by the user, by Claude, or both
Slash command
/truist-credit-memo-agent:commercial-credit-memoThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
How to structure, populate, and render a Truist commercial credit memo. Deep mechanics are split across references — load only what you need:
How to structure, populate, and render a Truist commercial credit memo. Deep mechanics are split across references — load only what you need:
| Reference | When to load |
|---|---|
references/memo-sections.md | When writing the memo body — what each of the 13 sections must contain |
references/ncino-data-inventory.md | When querying Salesforce/nCino — every object + field the agent reads |
references/ratio-definitions.md | When computing ratios from the spread |
references/peer-aggregation.md | When building the peer comp set from EDGAR |
references/covenant-checks.md | When testing covenants and flagging compliance |
Not in scope: capital markets memos, syndicated loan offering memos, leveraged finance IC memos, or CRE underwriting (cap-rate-driven, separate framework).
Related: the deal-summary-widget skill is the lightweight precursor — it renders an inline one-screen widget summarizing the same borrower. Use the widget when the user wants a "quick look"; use this skill when they want the full underwriting workspace.
memo-sections.md for the section specncino-data-inventory.md and pull all the borrower/loan/covenant/collateral/guarantor/rating records from Salesforceratio-definitions.md and compute the full ratio setpeer-aggregation.md and build the comp set from EDGARcovenant-checks.md and run the compliance frameworknode assets/assemble-memo.mjs "<Event Type>" output/<borrower-slug>-skeleton.html
This emits a pruned copy of the template containing only the sections/subsections that event type renders, in config order. Read the assembled skeleton (NOT the raw assets/memo-template.html), apply the content framing for that event type per the table below, fill the {{slots}}, and render to the Cowork artifact panel.pdf skill for exportThe memo is assembled from one annotated template (assets/memo-template.html, sections wrapped in <!-- BEGIN id --> / <!-- END id --> markers) plus assets/memo-config.json. Do not read or fill the raw template — run assets/assemble-memo.mjs for the resolved event type and fill the pruned skeleton it emits.
Config shape (memo-config.json): one entry per section, keyed by block id. Each carries an order (emit sequence), an include list (the event types that render it), and a subsections map (nested blocks, each with their own include). A block renders for an event type iff that type is in its include list; a subsection with no entry stays. The assembler keeps included sections, drops the rest, orders by order, toggles subsections, and renumbers the Section/Exhibit labels so they stay contiguous. Structure and order are config-driven — to change what an event type renders, edit memo-config.json (and add a matching BEGIN/END marker pair in the template for any new toggle). Never fork the template.
Content framing is NOT in the config — it's your job when filling the kept blocks. Apply per event type:
| Event type | Framing of the blocks that remain |
|---|---|
| New Money | New facility — no rating on file. Covenants are proposed (no historical compliance). Full borrower / industry / peer workup. |
| Annual Review | Use-of-proceeds minimal ("annual review only, no change in terms"). Covenants foreground historical compliance. Rating compared to file. |
| Modification | Existing-vs-proposed comparison is the focus. Covenants show pro-forma impact of the change. Borrower abbreviated (ownership / customers / management only). Collateral only if the package is changing. Industry / Peer dropped, so mark the Financial Analysis "Peer Median" column N/A. |
Compute the full set every memo. Display leverage / coverage / liquidity / growth on the Executive Summary; full set in the Financial Analysis ratio dashboard.
| Category | Ratios |
|---|---|
| Leverage | Total Leverage, Funded Debt/EBITDA, Net Leverage, Senior Secured Leverage |
| Coverage | DSCR, FCCR, Interest Coverage |
| Liquidity | Current Ratio, Quick Ratio, Liquidity ($) |
| Profitability | Gross Margin, Operating Margin, EBITDA Margin, Net Margin, ROA, ROE |
| Efficiency | DSO, DPO, DIO, Cash Conversion Cycle |
| Growth | Revenue YoY, Revenue 3-Yr CAGR, EBITDA YoY |
Two synchronized formats: live HTML artifact in Cowork's right panel (uses assets/memo-template.html), then PDF via the pdf skill (saves to output/<borrower-slug>-credit-memo-<YYYY-MM-DD>.pdf). Same document. HTML is the working draft; PDF is the deliverable uploaded to nCino.
Tokens live in ../../assets/brand-tokens.css. The classification banner TRUIST — INTERNAL — DRAFT, PENDING CREDIT COMMITTEE REVIEW appears on every page in primary purple (#2D1A47). Logo inlined from ../../assets/truist-wordmark.svg. See ../../assets/brand-notes.md for what's official Truist vs. derived.
Before opening the full memo workspace, render a brief intake form via show_widget so the user can confirm / tune key parameters. The form is a context-rich confirmation step, NOT an interrogation. Pre-fill every field that can be derived from data already retrieved. Only ask for inputs the agent genuinely doesn't know.
Default behavior: when the user explicitly says "use defaults", "skip the form", or "just open it", bypass the form entirely and proceed straight to the workspace with auto-detected values. The form exists for when the user wants to inspect or change something before kicking off the heavy work.
Credit action (event type) — the three canonical event types are New Money, Annual Review, and Modification; this choice drives section selection via assets/memo-config.json. Auto-detect from the Product Package data:
LLC_BI__New_Money__c > 0 (a new facility, or a renewal that adds commitment) → New MoneyFinancials as-of date — default to the latest fiscal year-end available (typically the date on the most recent completed Boom spread, or Account.LLC_BI__Last_FYE__c if present). User can pick a different date.
Financials source — show three things together:
/companies/external-id/{salesforceAccountId} to get fileIds, then list the most recent 3-5 files with: filename, period covered (endDate of statements), status (Completed / Processing / Pending / Failed), upload date. If a file is Completed, give it a "Use this" radio button. Pre-select the most recent completed file.Peer set scope (NAICS) — provide a curated set of quick-pick chips derived from the borrower's NAICS code, PLUS a searchable typeahead input that lets the user enter any 2022 NAICS code or industry name. For NAICS 332710 (Machine Shops), the quick picks should look like:
| Option | NAICS | Description |
|---|---|---|
| Exact (default) | 332710 | Machine Shops — closest comp set |
| Broader sub-sector | 3327 | Metalworking Machinery Manufacturing |
| Sector | 332 | Fabricated Metal Product Manufacturing |
| Adjacent — Machine Tool Mfg | 333517 | Machine Tool Manufacturing — upstream peers |
| Adjacent — Industrial Distribution | 423830 | Industrial Machinery Wholesalers — downstream peers |
| Custom | (searchable typeahead) | Type any code or industry name |
The exact mapping varies by borrower's NAICS — use the borrower's NAICS hierarchy:
Custom NAICS — searchable typeahead implementation:
The "Custom NAICS" option must be a typeahead, NOT a plain text input. Use a native HTML5 <input list> + <datalist> element populated from truist-credit-memo-agent/skills/commercial-credit-memo/assets/naics-codes.json (the full 2022 Census list, 1,012 six-digit codes). Each <option> value follows the format {code} — {title} so the browser's built-in matcher hits BOTH the numeric code AND the industry name:
<input list="naics-codes" name="custom-naics"
placeholder="Type a code (e.g. 332710) or industry name (e.g. machine shops)..."
autocomplete="off">
<datalist id="naics-codes">
<option value="111110 — Soybean Farming"></option>
<option value="111120 — Oilseed (except Soybean) Farming"></option>
...
<option value="332710 — Machine Shops"></option>
...
</datalist>
How to populate the <datalist>: read assets/naics-codes.json (an array of {code, title} objects) and emit one <option> per entry. The full file is ~66 KB inlined; acceptable for a show_widget payload. Do NOT try to fetch the JSON at render time — inline the options directly so the widget is self-contained.
Parsing the user's selection: on form submit, take everything before the first — separator as the NAICS code. If the user typed a raw code without selecting from the list, the value will just be the 6 digits — accept either form.
Include this helper text below the section: "This NAICS choice controls which public companies the agent fetches from EDGAR for peer comparisons. Broader sets give more comps but less precise matches. Adjacent codes are useful when the exact set is thin or when cross-industry context matters. The Custom search is the full 2022 Census NAICS list (1,012 six-digit codes)."
Anything else to flag — free-text optional. For things like "sponsor exit anticipated mid-2026" or "client requested a covenant relaxation we should preview". Leave blank if nothing.
Two buttons:
Keep the form compact — one screen, no scrolling on a standard laptop display. If a section would push it over the fold, collapse less-critical sections (peer set scope, "anything else to flag") behind a "More options" disclosure.
Ask when: multiple Account candidates match the borrower; multiple loans on the Account; Boom spread fails or hangs; a covenant computes to a breach (confirm whether to flag in Executive Summary or escalate to RM first); peer set has fewer than 3 clean public peers (broaden NAICS or accept smaller).
Proceed when: data is unambiguous; the methodology specifies a single answer; the user has already disambiguated; the user said "use defaults" or "skip the form".
These are the mistakes that make memos fail committee review. Avoid each:
[not in source system; flagged for RM] — don't guess.Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
npx claudepluginhub kwaw-danflo/test-plugin --plugin truist-credit-memo-agent