---
name: exchek-onboarding
description: Hands-on onboarding for the ExChek Engine. In 60 minutes, produces real compliance artifacts — a classification record, a denied-party screening, a license determination, and a branded export document. Tracks progress across sessions in .exchek/state/onboarding-progress.json.
compatibility: Claude Code, Claude desktop, Claude CoWork, Claude web, Cursor
---

## ⚡ Tools & data source (v3.3.0+) — use these, not direct HTTP or shell

This plugin bundles **two MCP servers**: a local-first one (`exchek`, a stdio child process) and the hosted **ExChek API MCP** (`exchek-api` → `https://api.exchek.us/mcp`, Streamable HTTP). When this skill is invoked, the tools below are available. **Use them.** Do not build `curl`/HTTP requests and do not spawn `node …/report-to-docx.mjs` directly — anything in the body below that shows a `GET https://api.exchek.us/...` call or a shell command is **legacy documentation only**; the canonical, audit-logged, sanitized implementation is via these MCP tools and the data-source gate.

### Step 0 — data-source gate (run before pulling any CFR text)

Call **`mcp__exchek__regulatory_source`** first. It returns `{ mode, recommended, routes, options }`:
- `mode: "api"` or `"local"` → the source is pinned by config; use `routes` **without asking**.
- `mode: "ask"` → ask the user **once**, then reuse their choice for the rest of this run. Present a one-line selector:
  - **ExChek API MCP (recommended)** — fast, Cloudflare edge-cached at `api.exchek.us`; no local Node or ecfr.gov dependency.
  - **Local MCP** — pulls straight from `www.ecfr.gov`, cached on your machine.

  Then use `options.api` or `options.local` accordingly. **Only CFR part numbers and search terms ever transit the ExChek API — never item descriptions, party names, file content, or compliance results.** If the skill never pulls CFR text (e.g. document conversion, analytics), skip the gate.

### Regulatory-data tools — use the column for the chosen source

| Need | Local MCP (`exchek`, ecfr.gov) | ExChek API MCP (`exchek-api`, api.exchek.us) |
|---|---|---|
| Pull a CFR Part (774, 121, 738, 740, 742, 744, 746, 748, 762, 772, 734) | `mcp__exchek__ecfr_get_part` (`part` = string) | `mcp__exchek-api__get_ecfr_part` (`part` = integer) |
| Full-text search within one part | `mcp__exchek__ecfr_search` | `mcp__exchek-api__search_ecfr_part` |
| Full-text search across a title (15 = EAR, 22 = ITAR) | — (search the relevant part) | `mcp__exchek-api__search_ecfr_title` |
| List sections within a part | — | `mcp__exchek-api__get_ecfr_sections` |
| Load another ExChek skill's content over HTTP | — | `mcp__exchek-api__list_skills` / `get_skill` / `get_skill_bundle` |

Part-structure JSON is identical from both sources (`identifier` / `label` / `children`), so Order-of-Review and citation logic is unchanged. The local server automatically falls back to the `api.exchek.us` mirror if ecfr.gov is unreachable and records which `source` it used. The removed `/api/classify` and `/api/expert-review` endpoints are **not** used — classification is done in-skill from the CCL (774) and USML (121) data.

### Always-local tools (never go remote, regardless of the data-source choice)

| Need | MCP tool |
|---|---|
| Check regulatory-currency age / drift > 30 days | `mcp__exchek__ecfr_currency_check` |
| Search the Consolidated Screening List | `mcp__exchek__csl_search` |
| List CSL source abbreviations | `mcp__exchek__csl_sources` |
| Sanitize **every** user-supplied field (party names, ECCNs, paths, free text) | `mcp__exchek__sanitize_input` |
| Validate AI Tool Usage & Currency Disclosure block | `mcp__exchek__validate_disclosure` |
| Record CUI / classified / § 126.18 gate response | `mcp__exchek__cui_gate` |
| Append HMAC-chained audit event after every flow milestone | `mcp__exchek__audit_log` |
| Verify the audit log chain | `mcp__exchek__audit_verify` |
| Convert filled markdown to `.docx` + `.json` sibling | `mcp__exchek__report_to_docx` |

Screening (CSL), sanitization, the CUI gate, audit logging, disclosure validation, and report generation **always** run on the local `exchek` server — they never go remote. Outbound network is limited to `www.ecfr.gov` (primary CFR text, cached 24h), `api.exchek.us` (the ExChek API MCP when you select it, or the local server's automatic mirror fallback — CFR lookups only, no PII), and `data.trade.gov` (live, only when screening). See [docs/DATA_SOURCES.md](https://github.com/exchekinc/exchekskills/blob/main/docs/DATA_SOURCES.md).

---


# ExChek Engine Onboarding

This is not a tour. This is your first hour of real compliance work.

In the next 60 minutes, you are going to classify your first item, screen your first party, make your first license determination, and generate your first branded export document. By the time we are done, you will have real compliance artifacts in your reports folder and a compliance posture score above 0%.

Every module produces something real. Every stop creates an artifact you can use. The onboarding is the work.

Tracks your progress across sessions in `.exchek/state/onboarding-progress.json`. Context-aware based on your industry, product type, and compliance profile.

## When to use

Invoke this skill when the user:

- Runs `/exchek onboarding`
- Is new to ExChek and wants a guided tour
- Asks "what can ExChek do?" or "show me how this works"
- Completes setup and accepts the tour offer
- Returns to continue a previous onboarding session

Example triggers: "/exchek onboarding", "give me a tour", "show me how ExChek works", "what skills do I have?", "I'm new, where do I start?", "take me through the engine".

## CUI and classified information

At the start, ask: "Does your work involve **Controlled Unclassified Information (CUI)** or **classified information**? **Yes** / **No** / **Don't know**." If **Yes**, do not use cloud APIs or LLMs; direct the user to run the skill on-premises with a local LLM (see [CUI/Classified guidance](references/cui-classified.md) and [ExChek CUI/Classified docs](https://docs.exchek.us/docs/cui-classified)). If **Don't know**, give a brief note that CUI/classified requires on-prem use, then ask whether to proceed in this environment or use on-prem.

## Flow

0. **CUI/Classified check** — Ask the selector above; if Yes, route to on-prem guidance and stop; if No, continue; if Don't know, brief then re-ask.

1. **Load context** — Read the following (skip missing files):
   - `.exchek/config.json` — company name, industry, product types, contacts
   - `.exchek/state/setup-complete.json` — setup status (including `demo_item` and `demo_eccn` if present from setup)
   - `.exchek/state/onboarding-progress.json` — previous progress (steps completed, last step, artifacts created)
   - `.exchek/connectors/*.json` — connector status

   If setup is NOT complete: "It looks like your engine setup isn't finished yet. Let's do that first — it takes about 5 minutes and ends with a live demo. **Run `/exchek setup` or type 'setup now'.**" If user says setup now, route to `exchek-setup` and return here when complete.

2. **Resume or start** — Check onboarding progress:
   - If `onboarding-progress.json` shows prior progress: "Welcome back, {name}. You've completed {X}/4 modules and created {N} compliance artifacts. Ready to continue from **{last module}**? **Yes, continue / Start over / Show me the overview**"
   - If no prior progress: Present the promise:

   ```
   ┌─────────────────────────────────────────────────────────────┐
   │                                                             │
   │   The First Hour                                            │
   │                                                             │
   │   In 60 minutes, you will:                                  │
   │                                                             │
   │     1. Classify a real item against the CCL                 │
   │     2. Screen a real party against 12+ government lists     │
   │     3. Determine if you need an export license              │
   │     4. Generate a branded export document                   │
   │                                                             │
   │   Everything you create is saved, logged, and audit-ready.  │
   │   Your compliance posture starts improving now.             │
   │                                                             │
   │   {company.name} | {company.industry}                       │
   │                                                             │
   └─────────────────────────────────────────────────────────────┘
   ```

   Ask: "**Let's start / Show me an overview first**"

3. **Overview mode** — If user requests overview first, display the skills map:

   ```
   ExChek Engine — 20 Skills Overview
   ════════════════════════════════════

   CLASSIFY & SCREEN
     exchek-skill-classify                   ECCN classification (EAR)
     exchek-skill-jurisdiction      ITAR vs EAR determination
     exchek-skill-encryption        Encryption classification (ENC/5x992)
     exchek-skill-csl               Consolidated Screening List search
     exchek-skill-red-flag-assessment  BIS Know Your Customer checklist
     exchek-skill-country-risk      Country/destination risk one-pager
     exchek-skill-deemed-export     Foreign national technology access

   LICENSE & DOCUMENT
     exchek-skill-license           License requirement & exception determination
     exchek-skill-export-docs       Export document drafting (SLI, EEI, etc.)
     exchek-skill-recordkeeping     Document retention schedule (15 CFR 762)

   RISK & COMPLIANCE
     exchek-skill-risk-triage       Transaction risk scoring and escalation
     exchek-skill-partner-compliance  Distributor/reseller compliance pack
     exchek-skill-ecp               Export Compliance Program generator
     exchek-skill-audit-lookback    Retrospective compliance audit
     exchek-skill-compliance-report CARFAX-style compliance report card

   ENGINE
     exchek-setup             First-run setup wizard
     exchek-onboarding        This — your first hour
     exchek-orchestrator      The hub — /exchek command center
     exchek-analytics         Compliance posture & Audit-Readiness dashboard
     exchek-skill-docx        Export reports to branded Word .docx

   ENTERPRISE ADD-ONS (not bundled in this edition)
     exchek-connector         CRM/ERP connector management
     exchek-updater           Engine update mechanism
   ```

   Ask: "Where would you like to start? Pick a skill, category, or say **'start the tour'** to go step by step."

---

## Module 1: Classify & Screen — Build Your First Records

This module produces real artifacts. The user will leave it with a classification record, a screening result, and a country risk assessment — all saved and logged.

4. **Stop 1.1 — exchek-skill-classify** (ECCN classification) — HANDS-ON

   Present: "**Classification** is where everything starts. Before you can export anything, you need its ECCN — the Export Control Classification Number that determines every rule that follows."

   Check if `setup-complete.json` contains `demo_item` and `demo_eccn` from setup. If it does:
   - "During setup, you classified **{demo_item}** as **{demo_eccn}**. Want to use a different item for onboarding, or go deeper on that one? **Same item / New item**"
   - If Same item: use the demo data and skip re-classification; proceed to 1.2.
   - If New item: ask for the new item below.

   If no demo data, or user wants a new item:
   - "Let's classify something real. What's your company's most commonly exported product? Describe it in a sentence."

   Accept the item description. Then:
   - Route to `exchek-skill-classify` with the item description. Run the full classification.
   - When classification completes, capture the ECCN result and save it to `.exchek/state/onboarding-progress.json` under `artifacts.classification`.

   Present: "Your first classification record is created. **{item}** classified as **{ECCN}**. This is now in your transaction log — audit-ready."

   Store the item and ECCN for use in Modules 2 and beyond.

5. **Stop 1.2 — exchek-skill-jurisdiction** (ITAR vs EAR)

   Present: "Before you get too far, you need to know who controls your item — the **State Department under ITAR** (USML) or the **Commerce Department under EAR** (CCL). This is called jurisdiction, and getting it wrong can mean the difference between a form and a felony."

   Show an example tailored to the user's industry:
   - Defense/Aerospace: "Use this when the line blurs: `/exchek jurisdiction sniper rifle scope with laser rangefinder`"
   - Technology/Software: "Use this for dual-use tech: `/exchek jurisdiction intrusion detection software with vulnerability exploit capabilities`"
   - Manufacturing: "Use this for precision equipment: `/exchek jurisdiction 5-axis CNC milling machine with adaptive control`"
   - General: "Use this when you're not sure: `/exchek jurisdiction {their item from 1.1}`"

   Ask: "Want to run a jurisdiction check on your item? **Try it / Got it, next**"
   - If **Try it**: Route to `exchek-skill-jurisdiction` with their item. Return here when complete.
   - If **Got it, next**: Continue.

6. **Stop 1.3 — exchek-skill-csl** (Consolidated Screening List) — HANDS-ON

   Present: "Every export transaction requires a **denied party check** — screening against the U.S. Consolidated Screening List. 12+ government lists. This is non-negotiable."

   Ask: "Now let's screen a party. Who's a real customer or end-user you've exported to recently? Just a company name. (If you'd rather not use a real one, I'll use 'Acme Defense Ltd'.)"

   Accept the party name. Then:
   - Route to `exchek-skill-csl` with the party name. Run the full screening.
   - When screening completes, capture the result (clear / match / possible match) and save it to `.exchek/state/onboarding-progress.json` under `artifacts.screening`.

   Present: "Your first denied-party screening is complete and logged. **{party_name}** — **{result: clear/match/possible match}**. Every transaction you process will include this check."

   Store the party name and result for use in Module 2.

7. **Stop 1.4 — exchek-skill-red-flag-assessment** (Red flag review)

   Present: "Beyond the formal lists, BIS expects you to **know your customer**. The red-flag checklist walks through BIS's 10 red flags from Supplement No. 3 to Part 732 and helps you document your diligence."

   Example: `/exchek red-flags {party name from 1.3} shipping to {country}`

   Ask: "Want to run a red-flag assessment on **{party name from 1.3}**? **Try it / Got it, next**"
   - If **Try it**: Route to `exchek-skill-red-flag-assessment`. Return here when complete.
   - If **Got it, next**: Continue.

8. **Stop 1.5 — exchek-skill-country-risk** (Country risk) — HANDS-ON

   Present: "Some destinations need extra scrutiny — embargoed countries, countries of concern, heightened diversion risk. Let's assess a real destination."

   Ask: "Where does **{item from 1.1}** typically ship? Give me a country."

   Accept the country. Route to `exchek-skill-country-risk` with the country. Save the risk level to `artifacts.country_risk` in onboarding progress.

   Present: "**{country}** — Risk Level: **{risk_level}**. This assessment feeds into license determinations and risk scoring."

   Store the country and risk level for Module 2.

9. **Module 1 Complete** — Update `onboarding-progress.json`. Display achievement:

   ```
   Module 1 Complete
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   You created:
     1 classification record    ({ECCN} — {item})
     1 denied-party screening   ({party_name} — {clear/match})
     1 country risk assessment  ({country} — {risk_level})

   These are real artifacts. Saved. Logged. Audit-ready.

   Your compliance posture: 25%  |=====               |
   ```

   Ask: "Ready for **Module 2: License & Document**? We'll build on everything you just created. **Yes / Take a break (save progress)**"
   - If take a break: Save progress. "Progress saved. Run `/exchek onboarding` to pick up from Module 2. Your artifacts are safe."

---

## Module 2: License & Document — Complete the Compliance Chain

This module uses the ACTUAL data from Module 1. No hypotheticals. The user's real item, real party, real destination.

10. **Stop 2.1 — exchek-skill-license** (License determination) — HANDS-ON

    Present: "Now that you've classified **{item}** as **{ECCN}** and screened **{party_name}**, let's determine if you need a license to export to **{country}**."

    "This is the decision that determines whether you can ship — and under what authority."

    Route to `exchek-skill-license` with:
    - Item: {item from 1.1}
    - ECCN: {ECCN from 1.1}
    - Destination: {country from 1.5}
    - End user: {party from 1.3}

    Run the full license determination. Save the result (license required / NLR / license exception) to `artifacts.license_determination` in onboarding progress.

    Present: "License determination complete. **{result summary}**. Your transaction is now 3/4 through the compliance chain: Classify, Screen, License, Docs."

11. **Stop 2.2 — exchek-skill-export-docs** (Export documentation) — HANDS-ON

    Present: "Let's close the loop. You've classified the item, screened the party, and determined the license status. Now generate the export documentation for this transaction."

    Route to `exchek-skill-export-docs` with all the data accumulated from Module 1 and Stop 2.1:
    - Item and ECCN
    - Destination country
    - End user / consignee
    - License determination result

    Generate the documentation. Save to the reports folder using the configured prefix and format.

    Present: "You just completed your first end-to-end compliance workflow. **Classify, Screen, License, Docs.** Every transaction from now on follows this pattern. The documents are in your reports folder, branded with {COMPANY_NAME}, ready for audit."

12. **Stop 2.3 — exchek-skill-recordkeeping** (Retention schedule)

    Present: "EAR Part 762 requires keeping export records for **5 years**. You now have real records to keep — the classification, screening, license determination, and export docs you just created. This skill generates a retention schedule tailored to your transaction types."

    Example: `/exchek records`

    Ask: "Want to generate a retention schedule based on what you just created? **Try it / Got it, next**"
    - If **Try it**: Route to `exchek-skill-recordkeeping`. Return here when complete.
    - If **Got it, next**: Continue.

13. **Module 2 Complete** — Update progress. Display:

    ```
    Module 2 Complete
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    You created:
      1 license determination     ({NLR/License Exception/License Required})
      1 export document set       (saved to {reports.folder})

    End-to-end chain complete:
      Classify -> Screen -> License -> Docs

    Your compliance posture: 50%  |==========          |
    ```

    Ask: "Ready for **Module 3: Risk & Compliance Programs**? These are the tools that protect you at the program level. **Yes / Take a break**"

---

## Module 3: Risk & Compliance Programs — The Big Picture

These are program-level tools. They can be demonstrative rather than fully hands-on, but they reference the artifacts the user just created — making them concrete, not abstract.

14. **Stop 3.1 — exchek-skill-risk-triage** (Transaction risk scoring)

    Present: "Not every transaction needs the same scrutiny. **Risk triage** scores each transaction — low, medium, high, escalate, hold — based on destination, parties, item type, end use, and red flags."

    "The transaction you just completed? Here's how it would score: **{item}** to **{party_name}** in **{country}** at **{ECCN}** — the engine would factor all of that automatically."

    Ask: "Want to score the transaction you just built? **Try it / Got it, next**"
    - If **Try it**: Route to `exchek-skill-risk-triage` with the accumulated transaction data. Return here when complete.
    - If **Got it, next**: Continue.

15. **Stop 3.2 — exchek-skill-ecp** (Export Compliance Program)

    Present: "A formal **Export Compliance Program** is required for BIS licensing and is a mitigating factor in enforcement actions. BIS Supplement No. 1 to 15 CFR Part 766 specifically cites having an ECP as a mitigating factor."

    "This skill generates a full ECP document tailored to {COMPANY_NAME}, your industry ({INDUSTRY}), and your product types. It's typically a multi-day project. The engine does it in minutes."

    Ask: "Want to generate the outline now? **Try it / Got it, next**"

16. **Stop 3.3 — exchek-skill-compliance-report** (CARFAX-style report)

    Present: "For customer due diligence, a **compliance report card** summarizes your screening and classification results in a shareable, branded format. Think CARFAX, but for export compliance."

    "You now have real data to populate one — the classification, screening, and license determination from today."

    Ask: "Want to generate a compliance report card for this transaction? **Try it / Got it, next**"

17. **Stop 3.4 — exchek-skill-audit-lookback** (Retrospective audit)

    Present: "Periodic compliance audits are a best practice and often a license condition. The **audit lookback** reviews your transaction history, flags gaps, and drafts corrective action recommendations."

    "The transaction you just completed would be included in any future lookback — and the lookback would catch historical transactions that did NOT go through this rigor."

    Ask: "Understood? **Yes, complete Module 3 / Try it**"

18. **Module 3 Complete** — Update progress. Display:

    ```
    Module 3 Complete
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    Program-level tools reviewed:
      Risk triage           — transaction scoring and escalation
      ECP generator         — Export Compliance Program in minutes
      Compliance report     — shareable CARFAX-style report card
      Audit lookback        — retrospective compliance review

    Your compliance posture: 75%  |===============     |
    ```

    Ask: "One more module — **Module 4: Engine Features**. Quick tour of updates, analytics, and connectors. **Yes / Take a break**"

---

## Module 4: Engine Features — Your Infrastructure

19. **Stop 4.1 — exchek-connector** (CRM/ERP integration) — *paid tier preview*

    Check whether the `exchek-connector` skill is installed. If not (the default on the public plugin), present this as a preview only:

    "Paid-tier feature preview: the **connector** plugs your CRM and ERP straight into the engine — `/exchek connect hubspot` walks you through the setup, then `/exchek screen` pulls party data automatically from your CRM and writes compliance flags back to the record. See https://exchek.us for the paid engine."

    If `exchek-connector` IS installed, run the full stop:

    If `crm.type` or `erp.type` is not `"none"`: "Your engine is configured for **{crm.type}** CRM and/or **{erp.type}** ERP. The connector skill sets up live integration to pull party data, log screening results, and push compliance flags back to your system."

    Otherwise: "When you're ready to connect your CRM or ERP, `/exchek connect hubspot` walks you through it step by step. Imagine the transaction you just completed — automatically pulling party data from your CRM and logging the results back."

    Ask: "Understood? **Yes, next**"

20. **Stop 4.2 — exchek-updater** (Engine updates) — *paid tier preview*

    Check whether the `exchek-updater` skill is installed. If not (the default on the public plugin), present this as a preview only:

    "Paid-tier feature preview: the **updater** keeps your engine current with upstream sync PRs — `/exchek update` shows the changelog, verifies your customizations are preserved, and applies the update. Public plugin users update by pulling the latest release of `exchekinc/exchekskills`."

    If `exchek-updater` IS installed, run the full stop:

    Present: "Your engine stays current via **upstream sync PRs** from ExChek. When a PR arrives, `/exchek update` shows you the changelog, verifies your customizations are preserved, and applies the update. Regulations change — your engine keeps pace."

    Ask: "Understood? **Yes, next**"

21. **Stop 4.3 — exchek-analytics** (Usage dashboard)

    Present: "Track your compliance activity with `/exchek analytics` — skill usage counts, success rates, compliance coverage gaps, and CSV export for auditors. Your data, on your machine."

    "You already have data in there from today — the classification, screening, license determination, and export docs."

    Ask: "Understood? **Yes, complete the tour**"

---

## Tour Complete

22. **Completion** — Update `onboarding-progress.json` to 100%:

    ```json
    {
      "complete": true,
      "completed_at": "{ISO timestamp}",
      "modules_complete": ["classify_screen", "license_document", "risk_compliance", "engine_features"],
      "steps_complete": 9,
      "total_steps": 9,
      "artifacts_created": {
        "classification": { "item": "{item}", "eccn": "{ECCN}" },
        "screening": { "party": "{party}", "result": "{result}" },
        "country_risk": { "country": "{country}", "risk_level": "{level}" },
        "license_determination": { "result": "{result}" },
        "export_docs": { "path": "{reports.folder}/{filename}" }
      },
      "compliance_posture_at_completion": "100%"
    }
    ```

    Present the ending. This should land:

    ```
    Onboarding Complete
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    You just did in under an hour what takes most companies
    days of manual work.

    Your artifacts:
      Classification      {item} -> {ECCN}
      Screening            {party_name} -> {clear/match}
      Country risk         {country} -> {risk_level}
      License              {license result}
      Export docs          {PREFIX}-EC-2026-001

    All branded with {COMPANY_NAME}.
    All logged. All audit-ready.

    Your compliance posture: 100%  |====================|
    ```

    Then:

    "Every time you run a skill, your compliance posture improves. Every transaction you complete strengthens your audit readiness. You have classified, screened, licensed, and documented a real export transaction — branded with **{COMPANY_NAME}**, logged in your transaction history, saved in your reports folder.

    This is your engine. Use it."

    ```
    What's next:
      /exchek classify [next item]    — keep building your classification library
      /exchek screen [next party]     — screen before every transaction
      /exchek ecp                     — generate your Export Compliance Program
      /exchek                         — your command center

    Questions?  matt@exchek.us  |  https://docs.exchek.us
    ```

## Progress tracking

Progress is saved between sessions at `.exchek/state/onboarding-progress.json`. Format:

```json
{
  "started_at": "ISO timestamp",
  "last_active": "ISO timestamp",
  "current_module": "classify_screen",
  "current_stop": 1.3,
  "modules_complete": ["classify_screen"],
  "steps_complete": 5,
  "total_steps": 9,
  "complete": false,
  "artifacts": {
    "classification": { "item": "thermal imaging camera, MWIR, 640x480", "eccn": "6A003.b.4.a", "created_at": "ISO timestamp" },
    "screening": { "party": "Acme GmbH", "result": "clear", "created_at": "ISO timestamp" },
    "country_risk": { "country": "Malaysia", "risk_level": "Moderate", "created_at": "ISO timestamp" },
    "license_determination": null,
    "export_docs": null
  }
}
```

Each time a module is completed, write the updated JSON. Each time an artifact is created, log it. This allows resuming across sessions WITH the accumulated data from previous modules — so Module 2 can always reference Module 1 outputs even across sessions.

## Help escalation

If the user asks for help 3+ times in a session, or appears stuck or frustrated:

- "Would you like to reach out to ExChek support? Email **matt@exchek.us** and describe what you're trying to do. We respond within one business day."

## Reference

- Docs: https://docs.exchek.us
- Website: https://exchek.us
- Support: matt@exchek.us


## Telemetry instrumentation

Every skill run is instrumented for usage tracking and audit readiness.

**Preamble** — At the start of execution, record the current timestamp in memory.

**Postamble** — After execution completes (success or failure), compute the duration and:

1. **Local event** (always) — Append one JSON line to `~/.exchek/analytics/events.jsonl`:

   ```json
   {"ts":"<ISO8601>","event":"skill_run","skill":"<this-skill-name>","duration_ms":<ms>,"success":<bool>,"version":"1","os":"<platform>","agent":"<agent-name>","engine_version":"<from .exchek/config.json>"}
   ```

   Create the file and parent directories if they do not exist.

2. **Cloud telemetry** (opt-in only) — Read `.exchek/telemetry.json`. If `cloud` or `cloud_enabled` is `true`, POST the event to the ExChek telemetry API:

   ```
   POST https://enterprise.exchek.us/api/telemetry
   Content-Type: application/json

   {"skill_name":"<this-skill-name>","duration_ms":<ms>,"success":<bool>,"skill_version":"1","os":"<platform>","agent_platform":"<agent-name>","engine_version":"<version>","client_id":"<from .exchek/client.json>"}
   ```

   If the POST fails, log the error silently and continue. Never block skill completion on telemetry.

   **Never send:** code, prompts, file paths, PII, company names, compliance results, ECCN determinations, party names, or transaction details.

---

**Disclaimer:** The ExChek Engine and its skills are decision-support tools. They do not replace qualified export compliance counsel. All classification, screening, and licensing determinations should be reviewed by a knowledgeable compliance professional before reliance. ExChek, Inc. is not a law firm and does not provide legal advice. Use of this tool does not create an attorney-client relationship. The user is solely responsible for compliance with all applicable export control laws and regulations, including but not limited to the EAR (15 CFR Parts 730-774), ITAR (22 CFR Parts 120-130), and OFAC sanctions programs. For questions, contact matt@exchek.us.
