agents/reports/ltx-leadership-weekly-report/SKILL.md
Generate the LTX weekly leadership Slack post covering Open Source (HuggingFace LTX-2 family), API (revenue, endpoints, leads, industries), and Studio Enterprise (contracts, pilots, LTX-model consumption share). Runs every Monday via n8n: BigQuery → JSON parse → Slack render → LLM TL;DR → Slack webhook. Use when: weekly exec update, leadership Slack channel automation, or when asked for 'last week's LTX numbers'.
npx skillsauth add lightricks/ltx-analytics-agents ltx-leadership-weekly-reportInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Weekly snapshot of LTX across all three product surfaces, posted every Monday morning to a leadership Slack channel:
The post leads with an LLM-generated 2-3 sentence TL;DR that follows strict materiality and "no filler" rules — see n8n/tldr_system_prompt.md.
Schedule Trigger (Mon 09:00 UTC)
↓
Run BigQuery ← queries/weekly_report_combined.sql (10 rows: section, data_json)
↓ (10 items)
Parse Sections ← n8n/parse_sections.js (1 item: { sections: {...} })
↓
Render Body ← n8n/render_body.js (1 item: { header, body, ... })
↓
Generate TLDR ← n8n/tldr_system_prompt.md (Anthropic / OpenAI node)
↓
Combine ← n8n/combine.js (1 item: { final_message, ... })
↓
Slack Message (HTTP Request → incoming webhook)
Critical detail: the BigQuery script returns a single result set of 10 rows, each carrying one report block as a JSON-encoded string in data_json. n8n's native BigQuery node (jobs.query) only surfaces the last statement's output, so the original multi-statement script in dwh-data-model-transforms was rewritten into one SELECT ... UNION ALL ... here. KPI logic is unchanged; only the wrapping is different.
ltx-leadership-weekly-report/
├── SKILL.md ← this file
├── queries/
│ └── weekly_report_combined.sql ← single-output SQL for n8n's BQ node
├── n8n/
│ ├── parse_sections.js ← Code node #1 (parse 10 JSON rows → object)
│ ├── render_body.js ← Code node #2 (render Slack body)
│ ├── tldr_system_prompt.md ← System prompt for the LLM node
│ └── combine.js ← Code node #3 (TL;DR + body → Slack post)
└── references/
└── report-template.md ← visual reference for the rendered post
bigquery.jobs.create and read on ltx-dwh-prod-processed.*. Set the credential's default project to ltx-dwh-explore (where the query bills against, no required dataset).api.slack.com/apps → your bot → Incoming Webhooks. The webhook is bound to a specific channel; switching channels means a different webhook URL.Create the 7 nodes in this exact order, matching the names below (the names matter — combine.js references $('Render Body').first().json by name):
| # | Node name | Type | Configuration |
|---|------------------|---------------------------------------------------|---------------|
| 1 | Schedule Trigger | n8n Schedule trigger | Mondays, 09:00 UTC |
| 2 | Run BigQuery | Google BigQuery → "Execute a SQL query" | Paste queries/weekly_report_combined.sql. Use Standard SQL. |
| 3 | Parse Sections | Code (JavaScript) | Paste n8n/parse_sections.js. |
| 4 | Render Body | Code (JavaScript) | Paste n8n/render_body.js. |
| 5 | Generate TLDR | Anthropic → "Message a model" | Model claude-sonnet-4-5, temperature 0.2, max tokens 300. System message: paste content between the BEGIN/END markers in n8n/tldr_system_prompt.md. User message: ={{ $json.body }}. |
| 6 | Combine | Code (JavaScript) | Paste n8n/combine.js. |
| 7 | Slack Message | HTTP Request | POST to your Slack webhook URL. Body type JSON: { "text": "{{ $json.final_message }}" }. |
Execute manually (Monday morning is fine, or any time — the SQL is parameterized off current_date). Inspect each node:
{ section, data_json }.sections keyed by A_oss_summary … J_studio_summary.header, body, week_start, week_end. Body should look like references/report-template.md.*bold*, no em-dashes, no banned filler.final_message ready to post.If you switch LLM provider, the TL;DR field path may change — combine.js already tries the common Anthropic / OpenAI / LangChain shapes, but verify in the run log.
| Knob | Where | Current value | Why |
|---|---|---|---|
| Schedule | Schedule Trigger node | Mon 09:00 UTC | Reflects ISO-week ending the previous Sunday |
| Materiality threshold (general) | tldr_system_prompt.md | \|WoW%\| ≥ 25% | Below this is exec-noise |
| Materiality threshold (totals) | tldr_system_prompt.md | \|WoW%\| ≥ 15% | Total revenue / total tokens move slowly |
| PEL volatility | tldr_system_prompt.md | Always skip | Marketing PEL swings are noisy |
| Section coverage | tldr_system_prompt.md | TL;DR may omit quiet sections | Don't pad with "OSS was steady" |
| Bold rule (body) | render_body.js | Bold headline numbers only | Not WoW%, not "was X%" context |
| Direction arrow | render_body.js | ↑ ↓ 0% | Visual scanning, no +/- chars |
| Em-dash policy | both | Banned everywhere | Avoids "AI slop" appearance |
weekly_report_combined.sql from dwh-data-model-transforms through n8n's BQ node — only the last block (J_studio_summary) will come out. Use queries/weekly_report_combined.sql here.combine.js.references/report-template.md.—) or en-dashes (–) anywhere in the body or TL;DR. Use commas / parentheses / colons.combine.js. Pass it via the Slack Message node only.references/report-template.md whenever render_body.js layout changes — the template is the visual contract.Reference TL;DR block in tldr_system_prompt.md after every prompt change so we have a regression anchor.queries/weekly_report_combined.sql in lockstep with dwh-data-model-transforms/queries/weekly_report_combined.sql. KPI changes there must be ported here.dwh-data-model-transforms/queries/weekly_report_combined.sqldwh-data-model-transforms/queries/weekly_report_combined.mddevelopment
Adds the analyst layer (segmentation framing, filter/KPI surfacing, LTX-specific definitions, contextual follow-ups) on top of any Data MasterMind data interaction for LTX stakeholders (PMs, marketers, design, leadership). Wraps `get-data` / `validate-data` / `understand-data` / `visualize-data` — dialing intensity from a full guided session (for "look into X", "investigate Y", "do an analysis of …") down to a compressed wrap (for "what's MRR?", "is this number right?"). Output mode (chat-only or HTML artifact) is chosen up front for session-style asks. Always asks about Enterprise / paid non-Enterprise / Free segmentation and Studio-feature tier-gating when relevant. Do NOT use only when the user explicitly opts out ("just give me the number, no extras") or for templated feature dashboards (that's the Hex-based `dashboard-builder`).
testing
Generate LTX Studio sales opportunities report and credit limit alerts. Covers pipeline by rep/product (yesterday + QTD), new PELs/PQLs, future meetings, and enterprise orgs at 80%+ token usage. Use when: sales standup, pipeline review, account health check, or when asked for 'sales numbers' or 'credit alerts'.
data-ai
Generate LTX Studio product daily report with revenue, usage by segment (Enterprise, Pilot, Paying Non-Enterprise, Free), and DoD/DOW-avg comparisons. Use when: daily product standup, executive reporting, or when asked for 'yesterday's product numbers'.
data-ai
Generate LTX Studio marketing & sales daily report with lead gen, spend, PELs/PQLs, sales metrics, and top org usage vs 7-day averages. Use when: daily marketing standup, GTM review, or when asked for 'marketing numbers' or 'lead performance'.