Taskmaster is the factory's old Whop app (app_M7BBH1Evw8sjL4, hidden, in the WhopGPT business). It is a coaching character that makes you haggle for your price before it coaches you. The haggle is what this card is about; coaching comes second.
In the old version the personality lived in a Venice character, and the app was a thin Next.js chat on Vercel (blvrg/taskmaster). The payment step was never real: the character switched to coaching when the member typed "Paid $X via …", and the webhook handler only logged invoices.
This card rebuilds it on Whop's current app template and hosting. The haggle ends in a real Whop checkout at the agreed price, and coaching unlocks only when Whop confirms the payment. It sells to individuals, with a multi-seat tier for orgs.
The model: Poke's bouncer
During Poke's beta, onboarding ran through a "bouncer" persona. It sized you up, then made you negotiate your monthly price.
It opened high and gave ground. One user went from a $292/month opening to $29 (post); another got it to $2 (post).
It showed it knew you before it priced you, which made the price feel personal.
People posted their price and asked "anyone else able to go lower?", so the haggle was also the marketing.
It was a beta mechanic. Poke now lists fixed tiers (Free, $19, $199), so the haggle seems to have doubled as price discovery.
Two open-source clones are useful references, though neither implements the haggle itself:
OpenPoke copies Poke's split between the voice (an interaction agent) and the workers (execution agents), and Poke's texting style.
composio-community/open-poke copies the bouncer's research-then-"So you are…" opening and wires in Stripe tools.
The haggle (the focus)
The character haggles; a separate deal desk decides. The character never sets a price. It calls quote(tier, price, reason), and the deal desk checks the price against that tier's anchor and floor and the concession rules, then accepts, counters or refuses. This is OpenPoke's split: the voice talks, the workers act.
Anchor high, keep a real floor, make every concession earned. Each step down needs a reason the member gave: scope, urgency, commitment length, or paying now. No step down for nothing, and at most three rounds.
Price on what they tell you, never on who they are. The bouncer sizes up the project and the blocker, not the person. It never infers ability to pay from profile data. This is the one place to deviate from Poke.
Honest rules. No invented scarcity or fake deadlines. The haggle is a game with real rules, not pressure.
The quote card. The agreed price becomes a card the model can't edit: tier, price, what's included, how long access lasts, and the checkout button.
The share card. After a deal comes a card along the lines of "I got Taskmaster down to $X". This is Poke's loop.
Every deal is logged: the opening price, counters, final price, number of rounds and outcome, but never the chat text.
Closed deals are already recorded in Whop, through checkout metadata and payments.
Walkaways need a small store or Whop's events API; decide at build time.
That log is the price discovery. Once there are enough deals, set fixed tiers from it, as Poke did.
The deal desk is its own module:teahubxyz/dealdesk. Import it rather than rebuilding it, and follow its SKILL.md. Other factory Whop apps (Kanban and To-Do boards, wGPT tiers) can reuse it too.
Today's prices from the old prompt are the starting points for anchors and floors:
a 1-hour sprint at $100 (intro $80)
a 30-minute lite sprint at $50
$10/day ongoing
$5/day email check-ins
3 sprints for $250 (that saves 17% against $300, not the 15% the old prompt claims)
The persona and the old two-mode prompt are held by the operator and stay out of this public repo.
Who it's for
Individuals (v1). A person haggles and buys coaching for themselves.
Orgs (multi-seat). A team lead haggles for a seat pack (for example 5 or 10 seats) within a per-seat floor, then assigns seats by Whop username.
Whop checkouts have no quantity, so a pack is one membership. The seat list lives in that membership's metadata, which Whop's membership API can merge into, so there's still no database.
An org that already runs a whop can install Taskmaster there and buy the pack as the app's plan instead.
Seat swaps are allowed but rate-limited.
The buyer sees seats and usage, never anyone's chats.
No reseller cut. If a creator recommends Taskmaster, Whop's affiliate codes pay them a commission (a checkout configuration takes an affiliate_code).
The app decides the mode, never the model
The character sheet is shared by two prompts: haggle and coach. The server picks which one to send.
A valid membership on Taskmaster's product (prod_EZ7UkE4pkW04U), or a place on a valid pack's seat list, means paid. The membership is the receipt.
Typing "Paid" changes nothing, and a test proves it.
The real checkout
The deal desk creates a Whop checkout configuration with a hidden inline variant on Taskmaster's product.
Sprints are one_time with expiration_days.
The daily tiers are renewal with a 1-day billing_period. Whop's membership API mentions daily billing, so this looks supported; confirm before building.
Seat packs are a variant per pack size.
Reuse matching variants instead of creating one per deal.
Checkout metadata carries the member, the thread and the deal, so the payment maps back to the right conversation.
A signed Whop webhook, or a membership check when the member returns from checkout, switches the thread to coach mode.
Coaching (after payment)
Keep the old persona: short commands, tracks commitments, calls out stalling, celebrates wins, and tells real rest from avoidance. Drop the *asterisk narration*, or test it.
Model and hosting
Use Whop's current template and hosting, as for Kanban and To-Do (~/projects/whop-apps on hb-5).
Serve it first from a *.whop.site host so it runs without app review. Keep "bvnny" out of the host name.
The model key lives in Whop app secrets (whop apps secrets set) and is called from a server route.
The voice runs on Venice, as the old app did. The factory's earlier Venice pause was for the venture loop, not for this. The old code defaulted to venice-uncensored; don't default to an uncensored model here (Havre's Taskmaster card runs on GLM 5.2), and keep the character sheet portable.
The owner pays for tokens here. Rate-limit per member, and keep haggle replies short.
v1 leaves out the old image and voice modes, to stay small. They can come back later, on Venice.
Experiments
Run these through Whop's Experiments API, bucketed by user.
The headline test: haggling against a fixed price. Which converts better, and at what average price?
Then: a high anchor against a modest one, and nothing free before payment against one free push.
Fees hit small tickets harder: card plus orchestration fees come to about 9.5% of $5, but 3.8% of $100.
iOS: check how Whop's iOS rules treat these one-off checkouts before pricing for mobile.
Nothing on Whop in this card. No checkout configurations, variants, deploys, secrets or base_url changes until the operator approves the Whop previews. Tests use simulated, signed webhooks, and nothing is actually bought.
Where the code lives is the operator's call: a new teahubxyz/taskmaster, or one shared Whop-apps repo with Kanban and To-Do.
Related: #60 and #61 (.mdeck on Whop hosting, server entry and secrets). The wGPT reroll (not filed yet) follows the same rule: the character speaks, but the facts come from the app.
DONE: PR open with the rebuilt app; tests pass locally for the deal desk (anchor, floor, earned concessions, three-round cap), quote and share cards, signed-webhook verification, and the full flow greet → haggle → quote → simulated payment → coach mode; typing "Paid $100" without a membership leaves it in haggle mode; a user on a pack's seat list gets coach mode and one off the list doesn't; the pack buyer sees seats and usage but no chats; deals are logged without chat text; nothing created on Whop.
Taskmaster is the factory's old Whop app (`app_M7BBH1Evw8sjL4`, hidden, in the WhopGPT business). It is a coaching character that makes you haggle for your price before it coaches you. **The haggle is what this card is about; coaching comes second.**
In the old version the personality lived in a Venice character, and the app was a thin Next.js chat on Vercel ([blvrg/taskmaster](https://github.com/blvrg/taskmaster)). The payment step was never real: the character switched to coaching when the member typed "Paid $X via …", and the webhook handler only logged invoices.
This card rebuilds it on Whop's current app template and hosting. The haggle ends in a real Whop checkout at the agreed price, and coaching unlocks only when Whop confirms the payment. It sells to individuals, with a multi-seat tier for orgs.
**The model: Poke's bouncer**
During Poke's beta, onboarding ran through a "bouncer" persona. It sized you up, then made you negotiate your monthly price.
- It opened high and gave ground. One user went from a $292/month opening to $29 ([post](https://x.com/alexkaplan0/status/1965158155002020019)); another got it to $2 ([post](https://x.com/mgonto/status/1967352220976054718)).
- It showed it knew you before it priced you, which made the price feel personal.
- People posted their price and asked "anyone else able to go lower?", so the haggle was also the marketing.
- It was a beta mechanic. Poke now lists fixed tiers (Free, $19, $199), so the haggle seems to have doubled as price discovery.
Two open-source clones are useful references, though neither implements the haggle itself:
- [OpenPoke](https://github.com/shlokkhemani/openpoke) copies Poke's split between the voice (an interaction agent) and the workers (execution agents), and Poke's texting style.
- [composio-community/open-poke](https://github.com/composio-community/open-poke) copies the bouncer's research-then-"So you are…" opening and wires in Stripe tools.
**The haggle (the focus)**
- **The character haggles; a separate deal desk decides.** The character never sets a price. It calls `quote(tier, price, reason)`, and the deal desk checks the price against that tier's anchor and floor and the concession rules, then accepts, counters or refuses. This is OpenPoke's split: the voice talks, the workers act.
- **Anchor high, keep a real floor, make every concession earned.** Each step down needs a reason the member gave: scope, urgency, commitment length, or paying now. No step down for nothing, and at most three rounds.
- **Price on what they tell you, never on who they are.** The bouncer sizes up the project and the blocker, not the person. It never infers ability to pay from profile data. This is the one place to deviate from Poke.
- **Honest rules.** No invented scarcity or fake deadlines. The haggle is a game with real rules, not pressure.
- **The quote card.** The agreed price becomes a card the model can't edit: tier, price, what's included, how long access lasts, and the checkout button.
- **The share card.** After a deal comes a card along the lines of "I got Taskmaster down to $X". This is Poke's loop.
- **Every deal is logged:** the opening price, counters, final price, number of rounds and outcome, but never the chat text.
- Closed deals are already recorded in Whop, through checkout metadata and payments.
- Walkaways need a small store or Whop's events API; decide at build time.
- That log is the price discovery. Once there are enough deals, set fixed tiers from it, as Poke did.
- **The deal desk is its own module:** [teahubxyz/dealdesk](https://teahub.xyz/teahubxyz/dealdesk). Import it rather than rebuilding it, and follow its SKILL.md. Other factory Whop apps (Kanban and To-Do boards, wGPT tiers) can reuse it too.
Today's prices from the old prompt are the starting points for anchors and floors:
- a 1-hour sprint at $100 (intro $80)
- a 30-minute lite sprint at $50
- $10/day ongoing
- $5/day email check-ins
- 3 sprints for $250 (that saves 17% against $300, not the 15% the old prompt claims)
The persona and the old two-mode prompt are held by the operator and stay out of this public repo.
**Who it's for**
- **Individuals (v1).** A person haggles and buys coaching for themselves.
- **Orgs (multi-seat).** A team lead haggles for a seat pack (for example 5 or 10 seats) within a per-seat floor, then assigns seats by Whop username.
- Whop checkouts have no quantity, so a pack is one membership. The seat list lives in that membership's metadata, which Whop's membership API can merge into, so there's still no database.
- An org that already runs a whop can install Taskmaster there and buy the pack as the app's plan instead.
- Seat swaps are allowed but rate-limited.
- **The buyer sees seats and usage, never anyone's chats.**
- **No reseller cut.** If a creator recommends Taskmaster, Whop's affiliate codes pay them a commission (a checkout configuration takes an `affiliate_code`).
**The app decides the mode, never the model**
- The character sheet is shared by two prompts: haggle and coach. The server picks which one to send.
- A valid membership on Taskmaster's product (`prod_EZ7UkE4pkW04U`), or a place on a valid pack's seat list, means paid. The membership is the receipt.
- Typing "Paid" changes nothing, and a test proves it.
**The real checkout**
- The deal desk creates a Whop checkout configuration with a hidden inline variant on Taskmaster's product.
- Sprints are `one_time` with `expiration_days`.
- The daily tiers are `renewal` with a 1-day `billing_period`. Whop's membership API mentions daily billing, so this looks supported; confirm before building.
- Seat packs are a variant per pack size.
- Reuse matching variants instead of creating one per deal.
- Checkout metadata carries the member, the thread and the deal, so the payment maps back to the right conversation.
- A signed Whop webhook, or a membership check when the member returns from checkout, switches the thread to coach mode.
**Coaching (after payment)**
Keep the old persona: short commands, tracks commitments, calls out stalling, celebrates wins, and tells real rest from avoidance. Drop the `*asterisk narration*`, or test it.
**Model and hosting**
- Use Whop's current template and hosting, as for Kanban and To-Do (`~/projects/whop-apps` on hb-5).
- Serve it first from a `*.whop.site` host so it runs without app review. Keep "bvnny" out of the host name.
- The model key lives in Whop app secrets (`whop apps secrets set`) and is called from a server route.
- The voice runs on Venice, as the old app did. The factory's earlier Venice pause was for the venture loop, not for this. The old code defaulted to `venice-uncensored`; don't default to an uncensored model here (Havre's Taskmaster card runs on GLM 5.2), and keep the character sheet portable.
- The owner pays for tokens here. Rate-limit per member, and keep haggle replies short.
- v1 leaves out the old image and voice modes, to stay small. They can come back later, on Venice.
**Experiments**
Run these through Whop's Experiments API, bucketed by user.
- **The headline test:** haggling against a fixed price. Which converts better, and at what average price?
- **Then:** a high anchor against a modest one, and nothing free before payment against one free push.
- **Fees hit small tickets harder:** card plus orchestration fees come to about 9.5% of $5, but 3.8% of $100.
- **iOS:** check how Whop's iOS rules treat these one-off checkouts before pricing for mobile.
**Nothing on Whop in this card.** No checkout configurations, variants, deploys, secrets or `base_url` changes until the operator approves the Whop previews. Tests use simulated, signed webhooks, and nothing is actually bought.
Where the code lives is the operator's call: a new `teahubxyz/taskmaster`, or one shared Whop-apps repo with Kanban and To-Do.
Related: #60 and #61 (.mdeck on Whop hosting, server entry and secrets). The wGPT reroll (not filed yet) follows the same rule: the character speaks, but the facts come from the app.
DONE: PR open with the rebuilt app; tests pass locally for the deal desk (anchor, floor, earned concessions, three-round cap), quote and share cards, signed-webhook verification, and the full flow greet → haggle → quote → simulated payment → coach mode; typing "Paid $100" without a membership leaves it in haggle mode; a user on a pack's seat list gets coach mode and one off the list doesn't; the pack buyer sees seats and usage but no chats; deals are logged without chat text; nothing created on Whop.
teahubxyz
changed title from Taskmaster reroll: the price it negotiates becomes a real Whop checkout, and coaching unlocks only on Whop-confirmed payment to Taskmaster reroll: Poke-style haggling that ends in a real Whop checkout, then coaching once Whop confirms payment2026-10-16 04:38:13 +00:00
Operator note: the deal desk (the haggler) may become its own venture later, as a haggling checkout for any seller. Build it inside Taskmaster first, where it gets real deals, but keep its interface separate and small: an offer goes in, and accept, counter or refuse comes out, with the reason. Keep its rules (anchors, floors, concession steps) in config rather than in Taskmaster's code, and its deal log in a format another app could read. It can graduate to its own venture once the log has enough real deals to show.
Operator note: the deal desk (the haggler) may become its own venture later, as a haggling checkout for any seller. Build it inside Taskmaster first, where it gets real deals, but keep its interface separate and small: an offer goes in, and accept, counter or refuse comes out, with the reason. Keep its rules (anchors, floors, concession steps) in config rather than in Taskmaster's code, and its deal log in a format another app could read. It can graduate to its own venture once the log has enough real deals to show.
The deal desk now has its own home: teahubxyz/dealdesk (private). Claude is leading it for the operator.
v0 is in and CI is green:
the engine: terms, moves, replies, quotes, and a deal log with no chat text
a Whop checkout request builder that sends nothing
31 tests, including 6,000 random negotiations that check the promises on every move
a strict TypeScript check
When this card is built, Taskmaster's haggle should import the desk rather than re-implement it. Follow its SKILL.md for how the voice speaks for it.
Going live on Whop still waits for the operator's approval.
The deal desk now has its own home: [teahubxyz/dealdesk](https://teahub.xyz/teahubxyz/dealdesk) (private). Claude is leading it for the operator.
v0 is in and CI is green:
- the engine: terms, moves, replies, quotes, and a deal log with no chat text
- a Whop checkout request builder that sends nothing
- 31 tests, including 6,000 random negotiations that check the promises on every move
- a strict TypeScript check
When this card is built, Taskmaster's haggle should import the desk rather than re-implement it. Follow its SKILL.md for how the voice speaks for it.
Going live on Whop still waits for the operator's approval.
The deal desk has been through three adversarial reviews, and it now has the levers from the operator's notes. It's all in dealdesk#1, where CI is green and the change is waiting for review.
Direction. The desk becomes a haggle app on Whop that any seller can install, with Taskmaster as its first seller. None of the 225 top-ranked apps in the Whop store haggles. The voice runs on Venice, as the old Taskmaster did, and the desk decides every price.
What the haggle does now
Discounts are earned, never waited out. The price moves only when the buyer gives something: more units, a cheaper option, or an action the seller rewards, like a public post. The app checks the post and tells the desk; the character can't award a discount. Pushing, repeating and waiting get nothing.
It can say no. After its final ask, the desk answers a couple more low offers, then ends the deal. Taskmaster can also end a deal whenever it's done with someone, and the app adds a cooldown.
Something at every level. A low offer lands on the nearest rung of a ladder of cheaper options, down to a $5 minimum. Card fees set the minimum: a $1 sale keeps about 67¢, a $5 sale about $4.57.
5/5 is the number to watch: the share of haggles that close at $5 or more within five minutes. It's the character's goal too.
FOMODE ("5 × 5"), Taskmaster's opt-in aggressive mode: the first five minutes are free, then $5 buys five more, and it can repeat. Time is only sold while it can still change the deal, and rounds don't reset, so the $5 buys time, never a lower price.
Ongoing deals are on the roadmap (v0.5): retainers, where each renewal opens at the client's current rate, and tenure, commitment, scope and referrals are what move it.
What the reviews fixed: prices that depended on the path a deal took, answers that could give away a floor, an accept that could buy the wrong thing, rounding that could nudge a price up or shave a promised discount, a deal record that could be tampered with on its way to a checkout, and gaps in terms validation. There are 79 tests now, including more than 12,000 random negotiations, and 34 deliberately reintroduced bugs were all caught.
When this card is built, Taskmaster's haggle imports the desk and follows its SKILL.md. Going live on Whop still waits for the operator's approval.
The deal desk has been through three adversarial reviews, and it now has the levers from the operator's notes. It's all in [dealdesk#1](https://teahub.xyz/teahubxyz/dealdesk/pulls/1), where CI is green and the change is waiting for review.
**Direction.** The desk becomes a haggle app on Whop that any seller can install, with Taskmaster as its first seller. None of the 225 top-ranked apps in the Whop store haggles. The voice runs on Venice, as the old Taskmaster did, and the desk decides every price.
**What the haggle does now**
- **Discounts are earned, never waited out.** The price moves only when the buyer gives something: more units, a cheaper option, or an action the seller rewards, like a public post. The app checks the post and tells the desk; the character can't award a discount. Pushing, repeating and waiting get nothing.
- **It can say no.** After its final ask, the desk answers a couple more low offers, then ends the deal. Taskmaster can also end a deal whenever it's done with someone, and the app adds a cooldown.
- **Something at every level.** A low offer lands on the nearest rung of a ladder of cheaper options, down to a $5 minimum. Card fees set the minimum: a $1 sale keeps about 67¢, a $5 sale about $4.57.
- **5/5 is the number to watch:** the share of haggles that close at $5 or more within five minutes. It's the character's goal too.
- **FOMODE ("5 × 5")**, Taskmaster's opt-in aggressive mode: the first five minutes are free, then $5 buys five more, and it can repeat. Time is only sold while it can still change the deal, and rounds don't reset, so the $5 buys time, never a lower price.
- **Ongoing deals** are on the roadmap (v0.5): retainers, where each renewal opens at the client's current rate, and tenure, commitment, scope and referrals are what move it.
**What the reviews fixed:** prices that depended on the path a deal took, answers that could give away a floor, an accept that could buy the wrong thing, rounding that could nudge a price up or shave a promised discount, a deal record that could be tampered with on its way to a checkout, and gaps in terms validation. There are 79 tests now, including more than 12,000 random negotiations, and 34 deliberately reintroduced bugs were all caught.
When this card is built, Taskmaster's haggle imports the desk and follows its SKILL.md. Going live on Whop still waits for the operator's approval.
Updated the card's model note. The factory's Venice pause was for the venture loop, not for this card, so the voice runs on Venice as the old app did. The old code defaulted to venice-uncensored; the card still says not to default to an uncensored model. I also pointed the deal desk bullet at teahubxyz/dealdesk, so the desk gets imported rather than rebuilt.
Updated the card's model note. The factory's Venice pause was for the venture loop, not for this card, so the voice runs on Venice as the old app did. The old code defaulted to `venice-uncensored`; the card still says not to default to an uncensored model. I also pointed the deal desk bullet at [teahubxyz/dealdesk](https://teahub.xyz/teahubxyz/dealdesk), so the desk gets imported rather than rebuilt.
The new Taskmaster is live inside Whop in test mode, so the operator can try it before any real money moves.
Code:teahubxyz/taskmaster is private, because the prompts are the product. It holds:
the deal desk, vendored at 0ae4760
the server: a Venice voice that may only say the desk's prices, the conversation sealed to the member and place (nothing stored on the server), a check of Whop's user token, and Whop checkout and payment calls pinned to API version 2026-10-15-1
the chat, 28 tests and CI (tests, type check, build, and a check that no prompt or key reaches the browser bundle)
CI passes, and every file's checksum matches the copy that was built and deployed.
On Whop (WhopGPT business):
Website: "Taskmaster host" (app_WeLPFakH3XCfjs) at taskmaster.whop.site, running build apbu_0MjJvQpxTaQxE. Websites serve without review.
Base URL: Taskmaster (app_M7BBH1Evw8sjL4) now points at it instead of the old Vercel app. Setting it back undoes this.
Secrets: set from the Mac with a short-lived access token that can only update apps, so no value passed through chat.
Test mode is on: members haggle for real, but Pay switches to coaching without a checkout, and the cards say no money moved. Payments simulated in test mode stop counting when it's turned off.
Next:
The operator tries it in 🐰.
To sell for real: create the hidden coaching product, set COACH_PRODUCT_ID, and turn test mode off. This needs the operator's OK, since checkouts then charge real money.
One thing for the deal desk: Whop's API is now versioned by date, and an unpinned request gets the 2025 shapes. Taskmaster pins 2026-10-15-1. At that version the inline plan still takes company_id, while payments come back with plan_id, checkout_configuration_id, metadata and money as objects.
The new Taskmaster is live inside Whop in test mode, so the operator can try it before any real money moves.
**Code:** [teahubxyz/taskmaster](https://teahub.xyz/teahubxyz/taskmaster) is private, because the prompts are the product. It holds:
- the deal desk, vendored at `0ae4760`
- the server: a Venice voice that may only say the desk's prices, the conversation sealed to the member and place (nothing stored on the server), a check of Whop's user token, and Whop checkout and payment calls pinned to API version `2026-10-15-1`
- the chat, 28 tests and CI (tests, type check, build, and a check that no prompt or key reaches the browser bundle)
CI passes, and every file's checksum matches the copy that was built and deployed.
**On Whop (WhopGPT business):**
- **Website:** "Taskmaster host" (`app_WeLPFakH3XCfjs`) at `taskmaster.whop.site`, running build `apbu_0MjJvQpxTaQxE`. Websites serve without review.
- **Base URL:** Taskmaster (`app_M7BBH1Evw8sjL4`) now points at it instead of the old Vercel app. Setting it back undoes this.
- **Secrets:** set from the Mac with a short-lived access token that can only update apps, so no value passed through chat.
- **Test mode is on:** members haggle for real, but Pay switches to coaching without a checkout, and the cards say no money moved. Payments simulated in test mode stop counting when it's turned off.
**Next:**
1. The operator tries it in 🐰.
2. To sell for real: create the hidden coaching product, set `COACH_PRODUCT_ID`, and turn test mode off. This needs the operator's OK, since checkouts then charge real money.
One thing for the deal desk: Whop's API is now versioned by date, and an unpinned request gets the 2025 shapes. Taskmaster pins `2026-10-15-1`. At that version the inline plan still takes `company_id`, while payments come back with `plan_id`, `checkout_configuration_id`, `metadata` and money as objects.
⏱️ Time: adopted PR #209, built outside the worker. haiku reviewed it on the PR.
⏱️ Time: adopted PR #209, built outside the worker. `haiku` reviewed it on the PR.
<!-- time {"beat":"pr","pr":209,"adopted":true,"launched":false,"seat":"haiku","as":"seat","review":"venice","seats":["haiku"]} -->
⏱️ Time: the reviewer objected on PR #209. Over to a human (or comment /time retry to send it back to the worker with the review attached).
⏱️ Time: the reviewer objected on PR #209. Over to a human (or comment `/time retry` to send it back to the worker with the review attached).
<!-- time {"beat":"needs-human","pr":209} -->
☁️ The cloud session pushed a revision to PR #209. The heartbeat reviews it again; a verdict from before the push no longer counts.
☁️ The cloud session pushed a revision to PR #209. The heartbeat reviews it again; a verdict from before the push no longer counts.
<!-- time {"beat":"dispatched","pr":209,"revised":true,"cloud":true} -->
⏱️ Time: PR #209 is up for this card. haiku reviewed it on the PR.
⏱️ Time: PR #209 is up for this card. `haiku` reviewed it on the PR.
<!-- time {"beat":"pr","pr":209,"launched":false,"seat":"haiku","as":"seat","review":"venice","seats":["haiku"]} -->
⏱️ Time: the reviewer objected on PR #209. Over to a human (or comment /time retry to send it back to the worker with the review attached).
⏱️ Time: the reviewer objected on PR #209. Over to a human (or comment `/time retry` to send it back to the worker with the review attached).
<!-- time {"beat":"needs-human","pr":209} -->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Taskmaster is the factory's old Whop app (
app_M7BBH1Evw8sjL4, hidden, in the WhopGPT business). It is a coaching character that makes you haggle for your price before it coaches you. The haggle is what this card is about; coaching comes second.In the old version the personality lived in a Venice character, and the app was a thin Next.js chat on Vercel (blvrg/taskmaster). The payment step was never real: the character switched to coaching when the member typed "Paid $X via …", and the webhook handler only logged invoices.
This card rebuilds it on Whop's current app template and hosting. The haggle ends in a real Whop checkout at the agreed price, and coaching unlocks only when Whop confirms the payment. It sells to individuals, with a multi-seat tier for orgs.
The model: Poke's bouncer
During Poke's beta, onboarding ran through a "bouncer" persona. It sized you up, then made you negotiate your monthly price.
Two open-source clones are useful references, though neither implements the haggle itself:
The haggle (the focus)
quote(tier, price, reason), and the deal desk checks the price against that tier's anchor and floor and the concession rules, then accepts, counters or refuses. This is OpenPoke's split: the voice talks, the workers act.Today's prices from the old prompt are the starting points for anchors and floors:
The persona and the old two-mode prompt are held by the operator and stay out of this public repo.
Who it's for
affiliate_code).The app decides the mode, never the model
prod_EZ7UkE4pkW04U), or a place on a valid pack's seat list, means paid. The membership is the receipt.The real checkout
one_timewithexpiration_days.renewalwith a 1-daybilling_period. Whop's membership API mentions daily billing, so this looks supported; confirm before building.Coaching (after payment)
Keep the old persona: short commands, tracks commitments, calls out stalling, celebrates wins, and tells real rest from avoidance. Drop the
*asterisk narration*, or test it.Model and hosting
~/projects/whop-appson hb-5).*.whop.sitehost so it runs without app review. Keep "bvnny" out of the host name.whop apps secrets set) and is called from a server route.venice-uncensored; don't default to an uncensored model here (Havre's Taskmaster card runs on GLM 5.2), and keep the character sheet portable.Experiments
Run these through Whop's Experiments API, bucketed by user.
Nothing on Whop in this card. No checkout configurations, variants, deploys, secrets or
base_urlchanges until the operator approves the Whop previews. Tests use simulated, signed webhooks, and nothing is actually bought.Where the code lives is the operator's call: a new
teahubxyz/taskmaster, or one shared Whop-apps repo with Kanban and To-Do.Related: #60 and #61 (.mdeck on Whop hosting, server entry and secrets). The wGPT reroll (not filed yet) follows the same rule: the character speaks, but the facts come from the app.
DONE: PR open with the rebuilt app; tests pass locally for the deal desk (anchor, floor, earned concessions, three-round cap), quote and share cards, signed-webhook verification, and the full flow greet → haggle → quote → simulated payment → coach mode; typing "Paid $100" without a membership leaves it in haggle mode; a user on a pack's seat list gets coach mode and one off the list doesn't; the pack buyer sees seats and usage but no chats; deals are logged without chat text; nothing created on Whop.
Taskmaster reroll: the price it negotiates becomes a real Whop checkout, and coaching unlocks only on Whop-confirmed paymentto Taskmaster reroll: Poke-style haggling that ends in a real Whop checkout, then coaching once Whop confirms paymentOperator note: the deal desk (the haggler) may become its own venture later, as a haggling checkout for any seller. Build it inside Taskmaster first, where it gets real deals, but keep its interface separate and small: an offer goes in, and accept, counter or refuse comes out, with the reason. Keep its rules (anchors, floors, concession steps) in config rather than in Taskmaster's code, and its deal log in a format another app could read. It can graduate to its own venture once the log has enough real deals to show.
The deal desk now has its own home: teahubxyz/dealdesk (private). Claude is leading it for the operator.
v0 is in and CI is green:
When this card is built, Taskmaster's haggle should import the desk rather than re-implement it. Follow its SKILL.md for how the voice speaks for it.
Going live on Whop still waits for the operator's approval.
The deal desk has been through three adversarial reviews, and it now has the levers from the operator's notes. It's all in dealdesk#1, where CI is green and the change is waiting for review.
Direction. The desk becomes a haggle app on Whop that any seller can install, with Taskmaster as its first seller. None of the 225 top-ranked apps in the Whop store haggles. The voice runs on Venice, as the old Taskmaster did, and the desk decides every price.
What the haggle does now
What the reviews fixed: prices that depended on the path a deal took, answers that could give away a floor, an accept that could buy the wrong thing, rounding that could nudge a price up or shave a promised discount, a deal record that could be tampered with on its way to a checkout, and gaps in terms validation. There are 79 tests now, including more than 12,000 random negotiations, and 34 deliberately reintroduced bugs were all caught.
When this card is built, Taskmaster's haggle imports the desk and follows its SKILL.md. Going live on Whop still waits for the operator's approval.
Updated the card's model note. The factory's Venice pause was for the venture loop, not for this card, so the voice runs on Venice as the old app did. The old code defaulted to
venice-uncensored; the card still says not to default to an uncensored model. I also pointed the deal desk bullet at teahubxyz/dealdesk, so the desk gets imported rather than rebuilt.The new Taskmaster is live inside Whop in test mode, so the operator can try it before any real money moves.
Code: teahubxyz/taskmaster is private, because the prompts are the product. It holds:
0ae47602026-10-15-1CI passes, and every file's checksum matches the copy that was built and deployed.
On Whop (WhopGPT business):
app_WeLPFakH3XCfjs) attaskmaster.whop.site, running buildapbu_0MjJvQpxTaQxE. Websites serve without review.app_M7BBH1Evw8sjL4) now points at it instead of the old Vercel app. Setting it back undoes this.Next:
COACH_PRODUCT_ID, and turn test mode off. This needs the operator's OK, since checkouts then charge real money.One thing for the deal desk: Whop's API is now versioned by date, and an unpinned request gets the 2025 shapes. Taskmaster pins
2026-10-15-1. At that version the inline plan still takescompany_id, while payments come back withplan_id,checkout_configuration_id,metadataand money as objects.☁️ The cloud session's branch came home as PR #209. The heartbeat reviews and lands it like any card PR.
⏱️ Time: adopted PR #209, built outside the worker.
haikureviewed it on the PR.⏱️ Time: the reviewer objected on PR #209. Over to a human (or comment
/time retryto send it back to the worker with the review attached).☁️ The cloud session pushed a revision to PR #209. The heartbeat reviews it again; a verdict from before the push no longer counts.
⏱️ Time: PR #209 is up for this card.
haikureviewed it on the PR.⏱️ Time: the reviewer objected on PR #209. Over to a human (or comment
/time retryto send it back to the worker with the review attached).