Conflict-Safe Connect
You want to reach a slate of creators for a campaign, but only the ones who
aren't already working with the competitor brands you care about. This skill
runs conflict-check's screen across the whole slate, partitions it into
CLEAN / FLAGGED / UNSCREENABLE, and then reaches only the CLEAN set via
Creatorland's matchmaker — after a mandatory credit-confirmed pre-flight.
FLAGGED and UNSCREENABLE creators are never reached automatically; they're
listed for your manual call. For brand-side casting directors and managers who
want the conflict gate and the reach in one safe pass.
Read first: ${CLAUDE_PLUGIN_ROOT}/shared/conventions.md (tool schemas, credit
prices, the nine conventions) and ${CLAUDE_PLUGIN_ROOT}/shared/connection-flow.md
(THE connection contract — schemas, mandatory pre-flight, graceful degradation,
privacy invariants). This skill honors thrifty/thorough credit modes
(${CLAUDE_PLUGIN_ROOT}/shared/credit-modes.md) and the Freshness Gate
(${CLAUDE_PLUGIN_ROOT}/shared/freshness-gate.md).
This skill composes conflict-check by reference: run that skill's screen
first (its honesty framing is mandatory — a clean result is "no conflicts
found in our corpus", never a guarantee), then act on the result. It does NOT
re-implement the screen or edit conflict-check.
Siblings: conflict-check screens but never reaches. cast-and-connect
reaches without a conflict gate. This skill is the gated reach — screen, then
reach only the clean ones.
Inputs to collect
- Creator(s) / slate (required) — one creator or a slate, in any format
(handles, a sheet, a prior shortlist in-session). Map each to one identifier
type.
- Competitor brands (required) — the brands a conflict would be against.
If the user hasn't named any, ask once: "Which brands should I screen
against?" Without them there is nothing to gate on; do not reach blind.
- Opportunity —
campaign_type is required (the matchmaker pitch needs
it). Collect optional deliverables, comp_tags, timeline,
brief_context, and a brand-authored personal_message if offered —
never invent quotes. budget_band is filled from a corpus rate band in the
pre-flight (step 4), not asked. For a promo/gifting/event/collab (not a plain casting), also collect the structured brief — archetype (casting|product_gift|partner_promo|event_invite|paid_collab), an offer ({what, value, expiry, redemption}), and the on-behalf-of brand ({name, represented_by}) — per the schema and required-field rules in connection-flow.md (the new archetypes require brand + offer.what; don't restate the schema here, reference it).
- Credit mode — default
thorough; thrifty on the standard triggers.
Flow
Screen the slate (compose conflict-check). Run conflict-check's
screen across every creator: for each, get_creator_profile
{ "identifier": { "type": "social_handle", "platform": "<platform>", "handle": "<handle>" } }
(exactly one identifier type per call). Read brand affiliations (pro
plan) and data freshness. Match affiliations against the competitor list
(no tool call). 1 credit × N. Credit estimate fires when N > 30. Apply
the Freshness Gate — a stale profile's affiliations may have drifted, so a
"clean" stale row carries a drift caveat. Thrifty: profiles only, cap the
slate size and report any creators not screened.
Partition the slate (no tool call) into three sets:
- CLEAN — affiliations present, no overlap with the competitor list
("no conflict found in our corpus").
- FLAGGED — affiliations present and overlapping a competitor
(conflict found), naming the brand.
- UNSCREENABLE — affiliations absent: free plan (pro-gated field) or
the field simply wasn't returned. Unscreenable ≠ clean — it is a "we could
not check," reported as such.
Suppression / active-sequence pre-screen (mandatory, free) — before
reaching, call list_connections { "limit": 100 } and remove from the
CLEAN set (a) anyone already in an ACTIVE sequence for this brand (a
repeat would be refused, uncharged, and is a harassment risk) and (b) anyone
who previously opted out. Report who was skipped and why. 0 credits.
Build the opportunity + budget_band — campaign_type from input. Fill
budget_band from a corpus rate band via query_market_intelligence
{ "mode": "rate", "vertical": "<inferred>", "deal_type": "<if known>", "creator_tier": "<the reach set's tier, if it clusters at one>" } —
wrapped in Refusal Recovery — so the pitch is market-credible, not a lowball.
When the clean reach set clusters at a creator tier, pass creator_tier
(emerging <1k / nano 1k-10k / micro 10k-100k / mid 100k-500k / macro 500k-1M / mega 1M+) for a
size-scoped band; when tier is mixed or unknown keep the vertical-wide band
as the fallback (a too-thin tier auto-broadens, disclosed). 5 credits (skip
in thrifty; reach without budget_band and say so). Keep personal_message
brand-authored.
Credit estimate + confirm (mandatory before any reach). Let K = the
CLEAN, suppression-cleared set. Reaching K creators = 10×K credits.
State it and get an explicit yes:
"Screen is done. K creators are clean and reachable; reaching them costs
10×K credits ($Z). FLAGGED and UNSCREENABLE creators are held back for your
decision. Proceed with reaching the K clean creators?" Never fire without
confirmation.
Reach ONLY the CLEAN set. For each clean creator, one call:
request_creator_connection
{ "creator": { "type": "social_handle", "platform": "<platform>", "handle": "<handle>", "display_name": "<opt>" }, "opportunity": { "campaign_type": "<required>", "deliverables": "<opt>", "comp_tags": ["<opt>"], "budget_band": "<from step 4>", "timeline": "<opt>", "brief_context": "<opt>", "personal_message": "<brand-authored opt>" }, "send_connection_request": true }
10 credits each (one charge per creator, whole 3-touch sequence). Capture each
conn_ref. Never call this for a FLAGGED or UNSCREENABLE creator.
Graceful degradation: if request_creator_connection returns a
refused envelope (no creator_connections entitlement), do NOT error.
Still deliver the full conflict screen (clean/flagged/unscreenable) and add
one line: "Connections aren't on your plan — here's the conflict screen and
the clean set; upgrade to pro/pilot to reach them." The screen is the value
you can still ship.
Deliverable
# Conflict-Safe Connect — <slate / campaign name>
_Screened against: <competitor brands> · Campaign: <campaign_type> · Creatorland Data · <date>_
## Conflict screen
| Creator | Corpus affiliations (relevant) | Verdict | Freshness |
|---|---|---|---|
| @<handle> | <overlapping brands, or "—"> | ✅ CLEAN — no conflict found in our corpus / ⚠ FLAGGED — affiliated with <brand> / ☔ UNSCREENABLE — affiliations not available | fresh / aging / ⚠ stale |
<one row per creator>
## Reached (clean set)
| Creator | conn_ref | Status |
|---|---|---|
| @<handle> | <conn_ref> | queued — 3-touch sequence, auto-stops on reply |
<one row per reached clean creator>
_Reached <K> creators · ~<10×K> credits._
<If skipped by suppression pre-screen: "Skipped (already in an active sequence / opted out in our records): @<handle> — <reason>.">
<If degraded: "Connections aren't on your plan — clean set above is ready to reach; upgrade to pro/pilot.">
## Held back for your decision (NOT reached)
- ⚠ **FLAGGED** — @<handle>: affiliated with <competitor> in our corpus. Decide manually whether to proceed.
- ☔ **UNSCREENABLE** — @<handle>: affiliations not available (free plan / field absent). Unscreenable ≠ clean — we could not check; verify before reaching.
## What this screen does and does not cover
- Affiliations are **derived from the Creatorland corpus** — not an exhaustive
record of every deal. A clean result means **no conflict found in our
corpus**, not a guarantee of none. Unreported, in-flight, or just-signed deals
may not appear, especially on profiles flagged stale.
- **Unscreenable ≠ clean.** A missing affiliations field is "could not check,"
never an all-clear.
- The outreach runs a 3-touch sequence that auto-stops on reply; outcomes are
the creator's. We make no promise of a reply or a yes.
- Contact details are never shared with you through these tools — on a creator
"yes", Creatorland's matchmaker makes a double-opt-in intro.
---
Data freshness: <N>/<M> creators synced within the last sync window; <K2>
flagged — affiliations may have drifted.
Provenance: Creatorland Data MCP · <M> profiles<+ 1 rate band> · <K> connections requested · <date>.
Credits used this run: ~<total> (<M> profiles ×1<+ rate band ×5> + <K> connections ×10).
Honesty rules
- A clean result is "no conflicts IN OUR CORPUS" — never "no conflicts".
Mandatory phrasing everywhere, inherited from
conflict-check; the corpus is
not exhaustive.
- Unscreenable ≠ clean, and is NEVER reached automatically. Absent
affiliations (free plan / missing field) mean the screen could not run for
that creator — report it, never a false all-clear, never auto-reach.
- FLAGGED is never reached automatically. A found conflict is held back for
the user's manual decision; the skill does not override it.
- Stale profiles get a drift caveat — a recent competitor deal may post-date
the sync, so a "clean" stale row is provisional.
- Never promise a reply or a booking. Frame outreach as "we'll reach them
and run a 3-touch sequence that stops on reply," not "this gets you a deal."
- Always show the reach cost before reaching and the actual tally after.
- PII invariant (convention 7 + connection-flow privacy). No contact info in
any deliverable, regardless of source; scrub bio snippets. The affordance is
"Creatorland will reach them for you," never an address.
conn_ref and status
are brand-safe; a creator's contact is not.
Credit footprint
thorough: ~(N + 5 + 10×K) credits for N creators screened, one rate-band call,
and K clean creators reached (e.g. 8 screened + 1 rate band + 5 clean reached =
8 + 5 + 50 = 63) · thrifty: ~(N + 10×K) credits (profiles only, no rate band —
reach without budget_band, slate cap reported). The 10×K reach cost applies to
the clean set only; FLAGGED and UNSCREENABLE creators cost nothing because
they are never reached. The reach estimate is always stated and confirmed before
firing (step 5); the screen estimate fires when N exceeds ~30.
1---2name: conflict-safe-connect3description: Safety-first outreach — run a conflict screen across your slate, then reach ONLY the creators with no competitor conflicts in our corpus. Use when the user says "conflict-check then reach the clean ones", "safely connect with non-conflicting creators", "screen and connect", or "reach only creators with no competitor conflicts". Flagged and unscreenable creators are held back for your decision, never reached automatically. Deliverable is a screen table (clean/flagged/unscreenable) plus a Reached section.4---56# Conflict-Safe Connect78You want to reach a slate of creators for a campaign, but only the ones who9aren't already working with the competitor brands you care about. This skill10runs `conflict-check`'s screen across the whole slate, partitions it into11**CLEAN / FLAGGED / UNSCREENABLE**, and then reaches **only the CLEAN set** via12Creatorland's matchmaker — after a mandatory credit-confirmed pre-flight.13FLAGGED and UNSCREENABLE creators are **never reached automatically**; they're14listed for your manual call. For brand-side casting directors and managers who15want the conflict gate and the reach in one safe pass.1617Read first: ${CLAUDE_PLUGIN_ROOT}/shared/conventions.md (tool schemas, credit18prices, the nine conventions) and ${CLAUDE_PLUGIN_ROOT}/shared/connection-flow.md19(THE connection contract — schemas, mandatory pre-flight, graceful degradation,20privacy invariants). This skill honors thrifty/thorough credit modes21(${CLAUDE_PLUGIN_ROOT}/shared/credit-modes.md) and the Freshness Gate22(${CLAUDE_PLUGIN_ROOT}/shared/freshness-gate.md).2324> This skill **composes `conflict-check` by reference**: run that skill's screen25> first (its honesty framing is mandatory — a clean result is "no conflicts26> found in our corpus", never a guarantee), then act on the result. It does NOT27> re-implement the screen or edit `conflict-check`.28>29> Siblings: `conflict-check` screens but never reaches. `cast-and-connect`30> reaches without a conflict gate. This skill is the gated reach — screen, then31> reach only the clean ones.3233## Inputs to collect3435- **Creator(s) / slate** (required) — one creator or a slate, in any format36 (handles, a sheet, a prior shortlist in-session). Map each to one identifier37 type.38- **Competitor brands** (required) — the brands a conflict would be against.39 If the user hasn't named any, ask once: "Which brands should I screen40 against?" Without them there is nothing to gate on; do not reach blind.41- **Opportunity** — `campaign_type` is **required** (the matchmaker pitch needs42 it). Collect optional `deliverables`, `comp_tags`, `timeline`,43 `brief_context`, and a **brand-authored** `personal_message` if offered —44 never invent quotes. `budget_band` is filled from a corpus rate band in the45 pre-flight (step 4), not asked. For a promo/gifting/event/collab (not a plain casting), also collect the **structured brief** — `archetype` (`casting|product_gift|partner_promo|event_invite|paid_collab`), an `offer` (`{what, value, expiry, redemption}`), and the on-behalf-of `brand` (`{name, represented_by}`) — per the schema and required-field rules in `connection-flow.md` (the new archetypes require `brand` + `offer.what`; don't restate the schema here, reference it).46- **Credit mode** — default `thorough`; `thrifty` on the standard triggers.4748## Flow49501. **Screen the slate (compose `conflict-check`).** Run `conflict-check`'s51 screen across every creator: for each, `get_creator_profile`52 `{ "identifier": { "type": "social_handle", "platform": "<platform>", "handle": "<handle>" } }`53 (exactly one identifier type per call). Read **brand affiliations** (pro54 plan) and **data freshness**. Match affiliations against the competitor list55 (no tool call). 1 credit × N. **Credit estimate fires when N > 30.** Apply56 the Freshness Gate — a stale profile's affiliations may have drifted, so a57 "clean" stale row carries a drift caveat. Thrifty: profiles only, cap the58 slate size and report any creators not screened.59602. **Partition the slate** (no tool call) into three sets:61 - **CLEAN** — affiliations present, **no overlap** with the competitor list62 ("no conflict found in our corpus").63 - **FLAGGED** — affiliations present and **overlapping** a competitor64 (conflict found), naming the brand.65 - **UNSCREENABLE** — affiliations **absent**: free plan (pro-gated field) or66 the field simply wasn't returned. Unscreenable ≠ clean — it is a "we could67 not check," reported as such.68693. **Suppression / active-sequence pre-screen** (mandatory, free) — before70 reaching, call `list_connections` `{ "limit": 100 }` and remove from the71 CLEAN set (a) anyone already in an **ACTIVE** sequence for this brand (a72 repeat would be refused, uncharged, and is a harassment risk) and (b) anyone73 who previously **opted out**. Report who was skipped and why. 0 credits.74754. **Build the opportunity + budget_band** — `campaign_type` from input. Fill76 `budget_band` from a corpus rate band via `query_market_intelligence`77 `{ "mode": "rate", "vertical": "<inferred>", "deal_type": "<if known>", "creator_tier": "<the reach set's tier, if it clusters at one>" }` —78 wrapped in Refusal Recovery — so the pitch is market-credible, not a lowball.79 When the clean reach set clusters at a creator tier, pass `creator_tier`80 (emerging <1k / nano 1k-10k / micro 10k-100k / mid 100k-500k / macro 500k-1M / mega 1M+) for a81 size-scoped band; when tier is mixed or unknown keep the vertical-wide band82 as the fallback (a too-thin tier auto-broadens, disclosed). 5 credits (skip83 in thrifty; reach without `budget_band` and say so). Keep `personal_message`84 brand-authored.85865. **Credit estimate + confirm (mandatory before any reach).** Let K = the87 CLEAN, suppression-cleared set. Reaching K creators = **10×K credits**.88 State it and get an explicit yes:89 _"Screen is done. K creators are clean and reachable; reaching them costs90 ~10×K credits (~$Z). FLAGGED and UNSCREENABLE creators are held back for your91 decision. Proceed with reaching the K clean creators?"_ Never fire without92 confirmation.93946. **Reach ONLY the CLEAN set.** For each clean creator, one call:95 `request_creator_connection`96 `{ "creator": { "type": "social_handle", "platform": "<platform>", "handle": "<handle>", "display_name": "<opt>" }, "opportunity": { "campaign_type": "<required>", "deliverables": "<opt>", "comp_tags": ["<opt>"], "budget_band": "<from step 4>", "timeline": "<opt>", "brief_context": "<opt>", "personal_message": "<brand-authored opt>" }, "send_connection_request": true }`97 10 credits each (one charge per creator, whole 3-touch sequence). Capture each98 `conn_ref`. **Never** call this for a FLAGGED or UNSCREENABLE creator.99100 **Graceful degradation:** if `request_creator_connection` returns a101 **refused envelope** (no `creator_connections` entitlement), do **NOT** error.102 Still deliver the full conflict screen (clean/flagged/unscreenable) and add103 one line: _"Connections aren't on your plan — here's the conflict screen and104 the clean set; upgrade to pro/pilot to reach them."_ The screen is the value105 you can still ship.106107## Deliverable108109```markdown110# Conflict-Safe Connect — <slate / campaign name>111_Screened against: <competitor brands> · Campaign: <campaign_type> · Creatorland Data · <date>_112113## Conflict screen114| Creator | Corpus affiliations (relevant) | Verdict | Freshness |115|---|---|---|---|116| @<handle> | <overlapping brands, or "—"> | ✅ CLEAN — no conflict found in our corpus / ⚠ FLAGGED — affiliated with <brand> / ☔ UNSCREENABLE — affiliations not available | fresh / aging / ⚠ stale |117<one row per creator>118119## Reached (clean set)120| Creator | conn_ref | Status |121|---|---|---|122| @<handle> | <conn_ref> | queued — 3-touch sequence, auto-stops on reply |123<one row per reached clean creator>124_Reached <K> creators · ~<10×K> credits._125<If skipped by suppression pre-screen: "Skipped (already in an active sequence / opted out in our records): @<handle> — <reason>.">126<If degraded: "Connections aren't on your plan — clean set above is ready to reach; upgrade to pro/pilot.">127128## Held back for your decision (NOT reached)129- ⚠ **FLAGGED** — @<handle>: affiliated with <competitor> in our corpus. Decide manually whether to proceed.130- ☔ **UNSCREENABLE** — @<handle>: affiliations not available (free plan / field absent). Unscreenable ≠ clean — we could not check; verify before reaching.131132## What this screen does and does not cover133- Affiliations are **derived from the Creatorland corpus** — not an exhaustive134 record of every deal. A clean result means **no conflict found in our135 corpus**, not a guarantee of none. Unreported, in-flight, or just-signed deals136 may not appear, especially on profiles flagged stale.137- **Unscreenable ≠ clean.** A missing affiliations field is "could not check,"138 never an all-clear.139- The outreach runs a 3-touch sequence that auto-stops on reply; outcomes are140 the creator's. We make no promise of a reply or a yes.141- Contact details are never shared with you through these tools — on a creator142 "yes", Creatorland's matchmaker makes a double-opt-in intro.143144---145Data freshness: <N>/<M> creators synced within the last sync window; <K2>146flagged — affiliations may have drifted.147Provenance: Creatorland Data MCP · <M> profiles<+ 1 rate band> · <K> connections requested · <date>.148Credits used this run: ~<total> (<M> profiles ×1<+ rate band ×5> + <K> connections ×10).149```150151## Honesty rules152153- **A clean result is "no conflicts IN OUR CORPUS" — never "no conflicts".**154 Mandatory phrasing everywhere, inherited from `conflict-check`; the corpus is155 not exhaustive.156- **Unscreenable ≠ clean, and is NEVER reached automatically.** Absent157 affiliations (free plan / missing field) mean the screen could not run for158 that creator — report it, never a false all-clear, never auto-reach.159- **FLAGGED is never reached automatically.** A found conflict is held back for160 the user's manual decision; the skill does not override it.161- **Stale profiles get a drift caveat** — a recent competitor deal may post-date162 the sync, so a "clean" stale row is provisional.163- **Never promise a reply or a booking.** Frame outreach as "we'll reach them164 and run a 3-touch sequence that stops on reply," not "this gets you a deal."165- **Always show the reach cost before reaching and the actual tally after.**166- **PII invariant (convention 7 + connection-flow privacy).** No contact info in167 any deliverable, regardless of source; scrub bio snippets. The affordance is168 "Creatorland will reach them for you," never an address. `conn_ref` and status169 are brand-safe; a creator's contact is not.170171## Credit footprint172173thorough: ~(N + 5 + 10×K) credits for N creators screened, one rate-band call,174and K clean creators reached (e.g. 8 screened + 1 rate band + 5 clean reached =1758 + 5 + 50 = 63) · thrifty: ~(N + 10×K) credits (profiles only, no rate band —176reach without `budget_band`, slate cap reported). The 10×K reach cost applies to177the **clean set only**; FLAGGED and UNSCREENABLE creators cost nothing because178they are never reached. The reach estimate is always stated and confirmed before179firing (step 5); the screen estimate fires when N exceeds ~30.