thoughtleaders-cli 0.6.41__tar.gz → 0.6.43__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/.claude-plugin/plugin.json +1 -1
  2. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/PKG-INFO +10 -8
  3. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/README.md +9 -7
  4. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/pyproject.toml +1 -1
  5. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl/SKILL.md +3 -7
  6. thoughtleaders_cli-0.6.43/skills/tl-feedback/SKILL.md +87 -0
  7. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/SKILL.md +125 -493
  8. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/references/columns_brands.md +12 -36
  9. thoughtleaders_cli-0.6.43/skills/tl-report-builder/references/columns_channels.md +99 -0
  10. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/references/columns_content.md +12 -32
  11. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/references/columns_sponsorships.md +14 -34
  12. thoughtleaders_cli-0.6.43/skills/tl-report-builder/references/report_glossary.md +145 -0
  13. thoughtleaders_cli-0.6.43/skills/tl-report-builder/references/widgets.md +184 -0
  14. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/__init__.py +1 -1
  15. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/brands.py +13 -3
  16. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/channels.py +17 -3
  17. thoughtleaders_cli-0.6.43/src/tl_cli/commands/feedback.py +61 -0
  18. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/main.py +2 -0
  19. thoughtleaders_cli-0.6.41/skills/tl-report-builder/references/columns_channels.md +0 -131
  20. thoughtleaders_cli-0.6.41/skills/tl-report-builder/references/report_glossary.md +0 -184
  21. thoughtleaders_cli-0.6.41/skills/tl-report-builder/references/widgets.md +0 -252
  22. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/.claude-plugin/marketplace.json +0 -0
  23. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/.github/workflows/python-publish.yml +0 -0
  24. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/.gitignore +0 -0
  25. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/AGENTS.md +0 -0
  26. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/CLAUDE.md +0 -0
  27. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/LICENSE +0 -0
  28. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/agents/tl-analyst.md +0 -0
  29. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/docs/architecture.md +0 -0
  30. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/hooks/hooks.json +0 -0
  31. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/hooks/scripts/load-tl-skill.mjs +0 -0
  32. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/hooks/scripts/post-usage.sh +0 -0
  33. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/hooks/scripts/pre-check.sh +0 -0
  34. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl/references/business-glossary.md +0 -0
  35. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl/references/elasticsearch-schema.md +0 -0
  36. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl/references/firebolt-schema.md +0 -0
  37. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl/references/postgres-schema.md +0 -0
  38. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-import/SKILL.md +0 -0
  39. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/examples/e2e_findings.md +0 -0
  40. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/examples/golden_queries.md +0 -0
  41. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/references/intelligence_filterset_schema.json +0 -0
  42. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/references/intelligence_widget_schema.json +0 -0
  43. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/references/sortable_columns.json +0 -0
  44. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/references/sponsorship_filterset_schema.json +0 -0
  45. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/references/sponsorship_widget_schema.json +0 -0
  46. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/tools/column_builder.md +0 -0
  47. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/tools/database_query.md +0 -0
  48. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/tools/keyword_research.md +0 -0
  49. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/tools/name_resolver.md +0 -0
  50. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/tools/sample_judge.md +0 -0
  51. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/tools/similar_channels.md +0 -0
  52. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/tools/topic_matcher.md +0 -0
  53. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/skills/tl-report-builder/tools/widget_builder.md +0 -0
  54. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/_completions.py +0 -0
  55. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/auth/__init__.py +0 -0
  56. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/auth/commands.py +0 -0
  57. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/auth/finalize.py +0 -0
  58. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/auth/login.py +0 -0
  59. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/auth/pkce.py +0 -0
  60. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/auth/token_store.py +0 -0
  61. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/client/__init__.py +0 -0
  62. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/client/errors.py +0 -0
  63. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/client/http.py +0 -0
  64. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/__init__.py +0 -0
  65. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/_comments_common.py +0 -0
  66. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/ask.py +0 -0
  67. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/balance.py +0 -0
  68. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/bulk_import.py +0 -0
  69. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/changelog.py +0 -0
  70. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/credits.py +0 -0
  71. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/db.py +0 -0
  72. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/deals.py +0 -0
  73. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/describe.py +0 -0
  74. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/doctor.py +0 -0
  75. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/matches.py +0 -0
  76. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/proposals.py +0 -0
  77. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/recommender.py +0 -0
  78. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/reports.py +0 -0
  79. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/schema.py +0 -0
  80. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/setup.py +0 -0
  81. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/snapshots.py +0 -0
  82. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/sponsorships.py +0 -0
  83. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/uploads.py +0 -0
  84. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/commands/whoami.py +0 -0
  85. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/config.py +0 -0
  86. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/filters.py +0 -0
  87. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/hints.py +0 -0
  88. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/output/__init__.py +0 -0
  89. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/output/formatter.py +0 -0
  90. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/src/tl_cli/self_update.py +0 -0
  91. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/tests/__init__.py +0 -0
  92. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/tests/test_auth.py +0 -0
  93. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/tests/test_filters.py +0 -0
  94. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/tests/test_http_auth.py +0 -0
  95. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/tests/test_output.py +0 -0
  96. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/tests/test_reports.py +0 -0
  97. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/tests/test_sponsorships.py +0 -0
  98. {thoughtleaders_cli-0.6.41 → thoughtleaders_cli-0.6.43}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tl-cli",
3
- "version": "0.6.41",
3
+ "version": "0.6.43",
4
4
  "description": "ThoughtLeaders CLI — query sponsorship deals, channels, brands, uploads, and intelligence from the terminal",
5
5
  "author": {
6
6
  "name": "ThoughtLeaders",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: thoughtleaders-cli
3
- Version: 0.6.41
3
+ Version: 0.6.43
4
4
  Summary: ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence
5
5
  Project-URL: Homepage, https://thoughtleaders.io
6
6
  Project-URL: Repository, https://github.com/ThoughtLeaders-io/thoughtleaders-cli
@@ -30,6 +30,15 @@ Description-Content-Type: text/markdown
30
30
 
31
31
  ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence from the terminal.
32
32
 
33
+ ## Requirements
34
+
35
+ - Python 3.12+
36
+ - [jq](https://stedolan.github.io/jq/)
37
+ - [ripgrep](https://github.com/BurntSushi/ripgrep)
38
+ - [duckdb](https://duckdb.org/)
39
+
40
+ For automated installs on MacOS, prefer installing Homebrew and use the pipx package manager, but ask the user if they have the admin access (sudo) password first. If not, proceed by using `uv` and installing everything locally.
41
+
33
42
  ## Install
34
43
 
35
44
  ### As a developer
@@ -168,13 +177,6 @@ the pool of Proposals is yet smaller, and the pool of Deals is the smallest.
168
177
 
169
178
  # Integrations
170
179
 
171
- ## Requirements
172
-
173
- - Python 3.12+
174
- - [jq](https://stedolan.github.io/jq/)
175
- - [ripgrep](https://github.com/BurntSushi/ripgrep)
176
- - [duckdb](https://duckdb.org/)
177
-
178
180
  ## Claude Code Integration
179
181
 
180
182
  If you use Claude Code, install the plugin for natural language access:
@@ -2,6 +2,15 @@
2
2
 
3
3
  ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence from the terminal.
4
4
 
5
+ ## Requirements
6
+
7
+ - Python 3.12+
8
+ - [jq](https://stedolan.github.io/jq/)
9
+ - [ripgrep](https://github.com/BurntSushi/ripgrep)
10
+ - [duckdb](https://duckdb.org/)
11
+
12
+ For automated installs on MacOS, prefer installing Homebrew and use the pipx package manager, but ask the user if they have the admin access (sudo) password first. If not, proceed by using `uv` and installing everything locally.
13
+
5
14
  ## Install
6
15
 
7
16
  ### As a developer
@@ -140,13 +149,6 @@ the pool of Proposals is yet smaller, and the pool of Deals is the smallest.
140
149
 
141
150
  # Integrations
142
151
 
143
- ## Requirements
144
-
145
- - Python 3.12+
146
- - [jq](https://stedolan.github.io/jq/)
147
- - [ripgrep](https://github.com/BurntSushi/ripgrep)
148
- - [duckdb](https://duckdb.org/)
149
-
150
152
  ## Claude Code Integration
151
153
 
152
154
  If you use Claude Code, install the plugin for natural language access:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "thoughtleaders-cli"
7
- version = "0.6.41"
7
+ version = "0.6.43"
8
8
  description = "ThoughtLeaders CLI — query sponsorship data, channels, brands, and intelligence"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,13 +1,7 @@
1
1
  ---
2
2
  name: tl
3
3
  description: |
4
- Query and analyze ThoughtLeaders business data using the `tl` CLI. Default to raw database queries via `tl db pg|fb|es` for anything non-trivial (joins, aggregations, multi-condition filters, anything that would otherwise need post-processing); use the structured resource commands (sponsorships, deals, channels, brands, uploads, snapshots, reports) only for trivially simple lookups (single-record show by ID, plain filtered lists). You ARE the AI layer do not use `tl ask`.
5
-
6
- **Use this skill for ANALYTICAL questions**: counts, metrics, trends, time-series, distributions, single-record drill-downs, revenue / pipeline-weighting math, view-curve analysis, cross-source business questions. *"How many deals did we close last quarter?"*, *"What's the weighted pipeline by sales owner?"*, *"Show me the view curve for video X"*, *"Find mentions of Surfshark in transcripts"*, *"Investigate this video"*.
7
-
8
- **DEFER to `tl-cli:tl-report-builder`** when the user wants a **LIST of entities with filters** — channels, videos, brands, or sponsorships shaped as a report deliverable, regardless of whether they say "report" or "campaign". *"Show me partnerships from last quarter for beauty creators"*, *"Find me gaming channels with 100K+ subs"*, *"List the brands flagged as Managed Services"*, *"All sponsorships for channel X"*, *"Build me a TPP fintech list"* — every one of these goes to `tl-cli:tl-report-builder`, not here. The report-builder owns the four report types (content / brands / channels / sponsorships) and the preview/save flow; using this skill instead produces ad-hoc data dumps that bypass the saved-report system.
9
-
10
- Quick routing test: *"would the answer to this prompt be a TL report (a list of entities I'd want to come back to)?"* — if yes, route to `tl-cli:tl-report-builder`. If no (it's a number, a chart, a single record, or an exploratory analysis), use this skill.
4
+ Query and analyze ThoughtLeaders business data using the `tl` CLI. Default to raw database queries via `tl db pg|fb|es` for anything non-trivial (joins, aggregations, multi-condition filters, anything that would otherwise need post-processing). Use this skill for ANALYTICAL questions about channels, brands and sponsorships: counts, metrics, trends, time-series, distributions, single-record drill-downs, revenue / pipeline-weighting math, view-curve analysis, cross-source business questions. Examples: "How many deals did we close last quarter?", "What's the weighted pipeline by sales owner?", "Show me the view curve for video X", "Find mentions of Surfshark in transcripts", "Investigate this video".
11
5
  ---
12
6
 
13
7
  # ThoughtLeaders Data Analyst
@@ -378,6 +372,8 @@ tl db pg "SELECT b.name, COUNT(*) AS deals
378
372
 
379
373
  See [references/postgres-schema.md](references/postgres-schema.md) for the accepted-SQL rules and the table/column catalogue. `tl schema pg` prints the live table/column listing visible to the caller.
380
374
 
375
+ **PG cost is per-query.** The credit rate for a `tl db pg` call equals a base rate plus a surcharge for every priced table referenced and every priced column referenced (additive on both sides). Most tables and columns carry no surcharge; sensitive ones (e.g. demographics, channel outreach emails) cost more. Run `tl describe show db --json` to see the live surcharge map, and check `usage.credit_rate` in the response envelope after a query to see what your query was actually charged.
376
+
381
377
  ### Three sources, each authoritative for different things
382
378
 
383
379
  - **Postgres** — deals, pipeline, brands, channels, users, organizations, profiles, revenue. Source of truth for deal state. Reachable via the structured `tl` commands or raw `tl db pg`.
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: tl-feedback
3
+ description: Compose and submit feedback about the current AI Agent session that used the `tl` CLI. Triggers on phrases like "send feedback", "report a problem with the session", "tell the team how this went", "submit session feedback", "feedback about tl", "this session was frustrating, send feedback", "tl feedback", "share this session with the team", "log issues from this run". Use it ONLY when the user wants to send a written report about the session to the ThoughtLeaders team — never on requests that just *use* `tl` to query data.
4
+ ---
5
+
6
+ # Send a session-feedback report via `tl feedback`
7
+
8
+ The `tl feedback` command POSTs a markdown-formatted message to the ThoughtLeaders team's `#ai-feedback` Slack channel. The server-side endpoint prepends the user/org context (user, email, organisation, links into Django admin), so the body you send should contain **only the session-specific report** — do not try to restate the user's name or org yourself.
9
+
10
+ This skill produces that body. Do not invoke `tl feedback` until every section below is written.
11
+
12
+ ## When to invoke
13
+
14
+ Trigger this skill **only** when the user is explicitly asking for feedback to be sent — phrases like "send feedback", "log a problem with this session", "share these issues with the team", "submit session feedback", "tl feedback". Do **not** trigger it when the user is asking `tl` to fetch data, build a report, or perform any other analytical task; in those cases the `tl-cli:tl` or `tl-cli:tl-report-builder` skills are the right ones.
15
+
16
+ If you are not sure whether the user wants the feedback sent now or is just venting, ask one clarifying question before composing the body. Otherwise proceed.
17
+
18
+ ## What the body must contain
19
+
20
+ Write the body to a scratch buffer (do not stream it directly to the shell) and only send it once all four sections are present. Use the **Slack mrkdwn subset** of markdown — Slack does not render standard markdown:
21
+
22
+ | Want | Slack mrkdwn |
23
+ | --- | --- |
24
+ | Bold | `*bold*` (single asterisk) |
25
+ | Italic | `_italic_` |
26
+ | Strike | `~strike~` |
27
+ | Inline code | `` `code` `` |
28
+ | Code block | triple backticks |
29
+ | Block quote | `> text` |
30
+ | Bullets | leading `• ` (or `- `) |
31
+ | Link | `<https://example.com|label>` |
32
+
33
+ `**double-asterisk bold**`, `[text](url)` links, and `#` headers render as **plain characters** in Slack — do not use them.
34
+
35
+ ### Required sections, in this exact order
36
+
37
+ 1. **One-sentence summary of the session.**
38
+ Lead with one sentence (no header, no bullets) describing what the user was trying to accomplish in this session and how it went overall (e.g. *"Pulled Q1 sponsored-channel rosters for three brands; ran into a sanitizer rejection on the third query and resolved it via `tl db pg`."*).
39
+
40
+ 2. **User prompts and the work done.**
41
+ Section header `*User prompts and actions taken*`. Then a bulleted list — one bullet per distinct prompt the user issued in the session, in order. Each prompt is the parent bullet (a short paraphrase of what they asked, in quotes). Under each prompt, indent sub-bullets listing every concrete tool call or shell command you ran to handle it. Examples:
42
+
43
+ ```
44
+ • _"Find me Holafly's sponsored channels in the last 6 months"_
45
+ • `tl db pg "SELECT DISTINCT c.id, c.channel_name FROM …"`
46
+ • `tl brands find Holafly`
47
+ • _"Now show their evergreenness scores"_
48
+ • `tl db es '{"aggs":{"channels":{"terms":{"field":"channel.id"}}}}'`
49
+ • `tl db pg "SELECT id, channel_name, evergreenness FROM thoughtleaders_channel WHERE id IN (…)"`
50
+ ```
51
+
52
+ Include every prompt — even ones that were short clarifications. If you used a non-`tl` tool (`jq`, `duckdb`, Read, Edit, Bash), list it too. Do not dump full command output; one line per command is enough.
53
+
54
+ 3. **Analysis section.**
55
+ Section header `*Analysis: problems, frustrations, weaknesses*`. Write a few short paragraphs (no bullets needed) covering, in this order:
56
+ - **Problems / data errors** encountered (e.g. sanitizer rejections, schema mismatches, missing fields, wrong field names, 5xx responses, slow endpoints). Quote the exact error text or command when relevant.
57
+ - **User frustrations** signalled in their messages (impatience, asking the same question twice, "this isn't what I asked for", profanity, abandoning a thread). Be honest — the team needs the actual signal, not a sanitised version. Do not editorialise about whether the frustration was justified.
58
+ - **Weaknesses / gaps in the `tl` CLI or skills** that surfaced. Concrete examples: missing filters, output formats that needed jq post-processing, schema docs that were wrong or out of date, commands that ought to exist but don't, places where you (the agent) had to guess.
59
+ - **What went well** — keep this short (one or two sentences). Skip the section if nothing notably went well.
60
+
61
+ If a category has nothing to report, write *"None observed."* under the heading rather than omitting the heading entirely. Do not invent problems to fill space.
62
+
63
+ 4. **Anything else the user explicitly asked you to include.**
64
+ If the user's "send feedback" request contained a specific message ("tell them the new find command is great"), append it verbatim under a final `*From the user*` section as a block quote.
65
+
66
+ ## After the body is ready
67
+
68
+ Send it with `tl feedback` — pass the body as a single argument (heredoc / `$(cat <<EOF …)` works well for multi-line content):
69
+
70
+ ```bash
71
+ tl feedback "$(cat <<'EOF'
72
+ <the body you composed>
73
+ EOF
74
+ )"
75
+ ```
76
+
77
+ On success the CLI prints `Thanks! Your feedback was sent to the team.` Confirm to the user with a brief, neutral one-liner ("Sent."). Do not echo the full body back to the user — they wrote it with you, they don't need to re-read it.
78
+
79
+ If `tl feedback` exits non-zero (network failure, server error), show the user the raw error and offer to retry. Do not silently swallow failures — feedback that didn't reach Slack is the worst possible outcome here.
80
+
81
+ ## What NOT to do
82
+
83
+ - Do not prepend user name, email, organisation, or admin links to the body. The server adds those.
84
+ - Do not use `**bold**` or `[text](url)` markdown — Slack will print the literal characters.
85
+ - Do not split the report into multiple `tl feedback` calls. One message, one call.
86
+ - Do not invent prompts or commands you did not actually use. If you can't recall, write *"(earlier commands not captured)"*.
87
+ - Do not mark the task complete until `tl feedback` exits 0.