Seren Bucks
Review-first growth skill for one default Seren Bucks affiliate campaign.
For Claude: How to Use This Skill
Skill instructions are preloaded in context when this skill is active. Do not perform filesystem searches or tool-driven exploration to rediscover them; use the guidance below directly.
Default V1 Contract
- The skill operates exactly one default affiliate campaign in v1.
- The skill uses exactly one default tracked link in every draft and digest unless the operator explicitly overrides it.
seren-affiliates is the sole source of truth for affiliate performance and conversion reporting.
- Candidate discovery is limited to Gmail sent mail, Outlook sent mail, Gmail address books, and Outlook address books.
- Every discovered candidate is persisted immediately into the skill-owned SerenDB before ranking or drafting.
- The skill-owned database is the CRM and memory source of truth for candidate state, proposal history, approvals, replies, DNC, and digests.
- The daily operator surface is
manual + daily digest.
- The operator receives an editable top-10 proposal set.
- New outbound messages are batch-prepared only after approval.
- Reply drafts also require approval.
- The v1 cap is
10 brand-new outbound messages per day.
- Replies do not count against the
10 new-outbound cap.
- Negative reply signals, unsubscribe requests, and hostile-negative responses create a hard DNC block immediately.
- Partial provider failure degrades gracefully only after auth, database, and affiliate bootstrap succeed.
Bootstrap Order (Mandatory)
This rule overrides all other instructions and runs before any candidate sync, ranking, or drafting:
- Resolve auth in this order:
- Seren Desktop injected auth (
API_KEY)
SEREN_API_KEY
- fail with a setup message pointing to
https://docs.serendb.com/skills.md
- Resolve or create the Seren project
affiliates.
- Resolve or create the Seren database
seren_bucks.
- Bootstrap the default campaign context from
seren-affiliates.
- Retry affiliate bootstrap up to 3 immediate attempts.
- If affiliate bootstrap still fails, fail closed and do not continue.
- Only after bootstrap succeeds may the skill read candidate sources, rank candidates, or draft outreach.
Capability Verification Rule
Before claiming any tool, connector, or publisher exists or does not exist, attempt to verify it by calling the relevant tool or connector.
- If the verification succeeds, proceed and say what was found.
- If it fails, say:
I checked and [tool/integration] is not available in this session.
- Never claim Gmail, Outlook, or
seren-affiliates availability from memory or assumption.
When to Use
- grow Seren Bucks affiliate signups
- draft Seren Bucks affiliate outreach
- review the daily affiliate digest
- sync affiliate candidates from Gmail or Outlook
- reconcile affiliate replies and unsubscribe events
Candidate Sources (V1 Only)
Use only these sources in v1:
- Gmail sent folder
- Outlook sent folder
- Gmail address books
- Outlook address books
Do not expand to LinkedIn, Apollo, web scraping, or purchased lists in v1.
Persistence Rule
Whenever a candidate is discovered or updated:
- Normalize the person into a candidate profile.
- Upsert the candidate into the skill-owned SerenDB immediately.
- Record the source event that produced or refreshed the candidate.
- Preserve DNC status across future syncs.
- Treat the skill-owned database as the CRM source of truth afterward, even if the original source is temporarily unavailable.
Failure to persist newly discovered candidates before ranking is a P0 defect.
Proposal and Drafting Loop
After bootstrap passes:
- Load active non-DNC candidates from the skill-owned CRM.
- Score and rank the candidate universe.
- Produce an editable top-10 proposal set.
- Draft:
- a batch of new outbound messages capped at
10 per day
- a batch of reply drafts for candidates who responded
- Mark both new outbound and replies as
approval_required.
- Do not send anything automatically in v1.
Reply and DNC Handling
- Any reply classified as
unsubscribe, do_not_contact, or hostile_negative must:
- create a DNC event immediately
- update the candidate to hard-blocked
- exclude that candidate from future proposals and drafts
- Replies always require approval before sending.
- Replies do not count against the new-outbound daily cap.
Partial Failure Rule
After auth, database, and affiliate bootstrap succeed:
- If Gmail fails but Outlook works, continue with Outlook and mark provider health as degraded.
- If Outlook fails but Gmail works, continue with Gmail and mark provider health as degraded.
- If one address-book source fails but sent-mail history still works, continue and note the degraded source.
- If all candidate sources fail after bootstrap, return a blocked digest with clear remediation steps.
Daily Operator Surface
Return one manual digest per run with:
- campaign identity
- tracked link in use
- affiliate feed health
- auth path used
- candidate sync counts by source
- editable top-10 summary
- pending approval queues
- DNC changes
- reply queue summary
- daily cap usage for new outbound
- next recommended operator actions
Workflow Summary
normalize_request uses transform.normalize_request
bootstrap_auth_and_db uses transform.bootstrap_auth_and_db
bootstrap_affiliate_context uses connector.affiliates.get
sync_candidates_from_sent_history uses transform.sync_candidates_from_sent_history
sync_candidates_from_address_books uses transform.sync_candidates_from_address_books
persist_candidates uses connector.storage.upsert
rank_candidate_universe uses transform.rank_candidate_universe
build_editable_top10 uses transform.build_editable_top10
draft_batches uses transform.draft_review_batches
reconcile_signals uses transform.reconcile_affiliate_and_reply_signals
persist_run_state uses connector.storage.upsert
render_digest uses transform.render_manual_daily_digest
Output Expectations
Every run should return:
- campaign id and tracked link
- auth path used
- affiliate bootstrap/feed status
- database/bootstrap status
- provider health by source
- candidate sync counts
- proposal top-10 summary
- pending approvals for new outbound and replies
- DNC events raised in the run
- new-outbound cap usage with replies explicitly excluded
- operator-facing daily digest
Acceptance Criteria
- The skill always resolves exactly one default campaign and one tracked link in v1.
- Affiliate bootstrap happens before any candidate sync or drafting.
- Affiliate bootstrap retries up to 3 immediate attempts, then fails closed.
- Candidate discovery is restricted to Gmail/Outlook sent history and address books.
- Discovered candidates are persisted before ranking.
- The skill-owned database remains the CRM source of truth.
- The proposal surface is an editable top-10.
- New outbound requires approval.
- Replies require approval.
- New outbound is capped at 10 per day.
- Replies do not count against the new-outbound cap.
- DNC is a hard stop on unsubscribe, do-not-contact, and hostile-negative signals.
- Partial source failure degrades gracefully after prerequisites pass.
Rollout Order
- Bootstrap only: auth, DB, affiliate campaign resolution.
- Candidate sync only: sent mail and address books into CRM.
- Ranking only: editable top-10 without draft sending.
- Drafting only: approval queues for new outbound and replies.
- Reconciliation only: DNC and affiliate conversion updates.
- Manual daily digest tying all steps together.
Workflow Summary
normalize_request uses transform.normalize_request
bootstrap_auth_and_db uses transform.bootstrap_auth_and_db
bootstrap_affiliate_context uses connector.affiliates.get
sync_candidates_from_sent_history uses transform.sync_candidates_from_sent_history
sync_candidates_from_address_books uses transform.sync_candidates_from_address_books
persist_candidates uses connector.storage.upsert
rank_candidate_universe uses transform.rank_candidate_universe
build_editable_top10 uses transform.build_editable_top10
draft_batches uses transform.draft_review_batches
reconcile_signals uses transform.reconcile_affiliate_and_reply_signals
persist_run_state uses connector.storage.upsert
render_digest uses transform.render_manual_daily_digest