pointsgpt-support
Triages the PointsGPT #pointsgpt-support Slack alerts.
Skill by ptrandev
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/ptrandev-pointsgpt-support
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/pointsgpt-support
What's inside
- Skill name
pointsgpt-support- Description
- Triages the PointsGPT #pointsgpt-support Slack alerts. For each member who asked for a person, finds out whether a product problem made them want to cancel, says how to resolve it, and replies in the alert thread. Also re-checks open threads and marks resolved ones. Use for "check the support channel", "triage support alerts", or "diagnose the cancel requests".
- License
- MIT
- Instructions
- 127 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (6)
- SKILL.md
- diagnosis.md · references/
- env.mjs · scripts/
- q.mjs · scripts/
- stripe.mjs · scripts/
- user.mjs · scripts/
SKILL.md (first lines)
# pointsgpt-support The channel is `#pointsgpt-support` (`C0C4PLFUP1P`). The bot `B0C4UCECPA8` posts one alert per money or cancel message a member types in chat. An alert reads: ``` :raising_hand: *Needs a person within 24 hours* · <name> (<tier>) · <phone> > <what they typed> Earlier: _<q1>_ / _<q2>_ / _<q3>_ user <uuid> ``` ## Input - **Empty**: triage every alert with no reply in its thread, then run the sweep (Phase 5). - **A Slack permalink or message ts**: triage that alert only. Skip the sweep. - `--no-post`: write the replies in the final message. Post nothing. ## Hard rules - **Never** cancel a subscription, refund a charge, or change an entitlement. A person decides each one. Write the exact Stripe id and deadline so that the person can act in one step. - **Never** contact a member (text, email, or chat). The team replies to members. - **Never** write to production. SQL runs with `read_only: true`, and Stripe calls are GET only. - **Never** store or print the Stripe key. The scripts fetch it from Vault for each process. - **Stripe is the authority** for trial and subscription state. The database misses cancels made in the Stripe dashboard. Read every deadline from Stripe `trial_end`, never from `entitlement.expires_at`, which runs a day late. ## Setup Run from a pointsgpt checkout whose `.env` has `SUPABASE_ACCESS_TOKEN`, `SUPABASE_URL`, `SUPABASE_SERVICE_KEY`, and `LINEAR_API_KEY`. The scripts fall back to `~/Git/pointsgpt/.env`. Set `S=<this skill dir>/scripts`. | Script | Does | |---|---| | `node $S/user.mjs <uuid> [--since YYYY-MM-DD]` | One member: account, billing in the database, every Stripe subscription and charge, a timeline of turns, refusals, slow flags, searches and app events, and the full chat: every question, every answer, and every board row with stops, taxes, and seats | | `node $S/q.mjs "<sql>"` | One read-only statement. Only the last statement's rows come back | | `node $S/stripe.mjs "<path>"` | One Stripe GET, for example `subscriptions/sub_123` | ## Phase 1: Collect the alerts 1. Read the channel with `slack_read_channel(channel_id=C0C4PLFUP1P, limit=100)`. 2. Keep bot alerts whose thread has no reply. Skip people's messages and join notices. 3. Group the alerts by `user <uuid>`. One member gets one diagnosis. 4. Read any thread that a teammate replied to before you diagnose its member. Do not repeat a diagnosis that is already posted. With more than 3 members, spawn one `sonnet` subagent per member for Phase 2. Give it this skill's path and the uuid. Ask for the complete raw `user.mjs` output plus the facts it picked. Read the output yourself before you write a verdict. ## Phase 2: Gather the facts 1. Run `node $S/user.mjs <uuid> --since <7 days before the alert>`. 2. Read the timeline in order: trial start, each question, each answer, the cancel request. 3. Note what the member asked for (route, dates, cabin, passengers, points) and what they got. 4. Read every board row before you describe a board. Count the rows by cabin, stops, and leg. A claim such as "the board showed only 1-stop fares" must hold for every row. 5. Do not shorten the dump with `head`, `cut`, or a subagent summary. A shortened answer or board leads to a wrong diagnosis. **Read [references/diagnosis.md](references/diagnosis.md) when the dump shows a deleted account, an empty chat, a refusal, an empty board, or a payment the database does not show.** It owns the extra queries and the known causes. ## Phase 3: Decide Answer two questions for each member: 1. **Did a problem with the product make them want to cancel?** Pick one cause from the table in [references/diagnosis.md](references/diagnosis.md). Name a bug only when the data shows it. If the product worked and the trip did not exist, say so. 2. **What resolves it?** Name the customer action and the product fix separately. | Billing state in Stripe | Customer action | |---|---| | Trial live (`trialing`, not cancelled) | Cancel `<sub id>` before `<trial_end ET>`. Under 24 hours: urgent | | Trial or subscription cancelled | None. Say who cancelled and when, and that they paid nothing | | Paid and active, and our bug caused the complaint | A refund decision. State the amount and the charge id | | Paid and active, and no bug | Cancel at period end. Refund is the team's call | | No Stripe or App Store record | Nothing to cancel. Ask for a receipt if they say they paid | When the cause is a new bug, search Linear for a ticket first. File one in Backlog when none exists, and link it in the reply. Linear is the GraphQL API at `https://api.linear.app/graphql` with `LINEAR_API_KEY` in the `Authorization` header and no `Bearer` prefix. The team key is `POI`. ## Phase 4: Reply Post urgent replies first: a live trial that converts within 24 hours. Do not mention anyone in a reply. Post the evidence, and leave pinging to the person who runs the skill. Post with `slack_send_message(channel_id=C0C4PLFUP1P, thread_ts=<alert ts>, message=...)`. The connector adds the "Sent using Claude" footer. Keep the reply under 120 words: ``` *Diagnosis: <the cause in one line>.* <2 to 4 sentences of facts with ET times: what they asked, what they got, when they asked to cancel.> *Action:* <one step with the Stripe id and the deadline>. or *No action needed.* ``` - Write plain English for a reader outside engineering. Name the member by first name. - Use the exact Stripe ids and ET times. - For a second alert from the same member, post one line with the permalink of the first reply. ## Phase 5: Sweep the open threads For every alert thread whose last reply names an open action (a trial to cancel, a refund): 1. Check the Stripe state with `user.mjs` or `stripe.mjs`. 2. If the action is done, post `_Resolved._` and the fact that closes it. 3. If the action is open and a deadline falls within 48 hours, post `_Still open, due <day>._` with the id and the time. 4. Do not repost an open item without a deadline that was restated in the last 24 hours. When a bug fix from an earlier diagnosis is live in production, post `_Resolved._` with the PR
From ptrandev/agent-skills, MIT.
More from ptrandev/agent-skills
- 0.587score
ui-walkthrough
ptrandev
Walks a PR's UI changes and demonstrates its behavior changes in a real browser, judges what it sees, and posts the screenshots and video to GitHub as the…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
review-pr
ptrandev
Reviews GitHub PRs where you are the requested reviewer, applying Phillip's engineering bar.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
babysit-prs
ptrandev
Triages unresolved review threads on open PRs that you authored, fixes the safe ones, replies with the fixing commit, and leaves anything ambiguous open with…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
full-send
ptrandev
End-to-end feature workflow: take a Linear ticket or a raw idea, implement it, self-review, open a PR, address every bot review thread, then capture UI and…
SkillAFreshness: A★ 1Claude Code +9 - 0.583score
launch-summary
ptrandev
Summarizes what shipped across the Atllas repos over a daily or weekly window, written for non-developers.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
phillip
ptrandev
Self-review of the current uncommitted change against Phillip's engineering bar, before it becomes a PR.
SkillAFreshness: A★ 1Claude Code +9 - 0.579score
delegate
ptrandev
Tells the agent to hand work to subagents and stay the orchestrator.
SkillAFreshness: A★ 1Claude Code +9 - 0.552score
plain-english
ptrandev
Extracts the signal from bloated or evasive text: the bottom line, every claim with its strength marked, what it does not say, and what it implies without…
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
mockup
ptrandev
Builds one self-contained HTML file that looks like the real product and walks a proposed change through every state, interactively, before the change is built.
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
claude
ptrandev
Calls the Claude Code CLI for an independent review, adversarial challenge, or codebase consultation.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
debrief
ptrandev
End-of-session confidence audit.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
skill-edit
ptrandev
Rewrites one skill file in this repository to the house style in AGENTS.md, without losing an instruction.
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 16, 2026 (13 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/ptrandev/agent-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ptrandev
- 0.587score
review-pr
ptrandev
Reviews GitHub PRs where you are the requested reviewer, applying Phillip's engineering bar.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
ui-walkthrough
ptrandev
Walks a PR's UI changes and demonstrates its behavior changes in a real browser, judges what it sees, and posts the screenshots and video to GitHub as the…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
babysit-prs
ptrandev
Triages unresolved review threads on open PRs that you authored, fixes the safe ones, replies with the fixing commit, and leaves anything ambiguous open with…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
full-send
ptrandev
End-to-end feature workflow: take a Linear ticket or a raw idea, implement it, self-review, open a PR, address every bot review thread, then capture UI and…
SkillAFreshness: A★ 1Claude Code +9 - 0.583score
launch-summary
ptrandev
Summarizes what shipped across the Atllas repos over a daily or weekly window, written for non-developers.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
phillip
ptrandev
Self-review of the current uncommitted change against Phillip's engineering bar, before it becomes a PR.
SkillAFreshness: A★ 1Claude Code +9
Cite this page
pointsgpt-support skill. Agent Mart. https://agentmart.dev/skills/ptrandev-pointsgpt-support (last updated 2026-10-24)