Skip to content

Paperclip Org Setup — RateLab

Date: 2026-07-03 (activated: routines, skills, 4-topic plan, kickoff runs; goal tree cut to revenue-only; leads temporarily on Opus 4.8 due to Fable quota)

Production Paperclip org for the operator's adult-site NETWORK business, built and refit live against the running instance (ns ai, svc paperclip.ai.svc.cluster.local:3100, public https://paperclip.ai.cauda.dev). Every object below was created/updated via the Paperclip API from inside the pod and readback-verified via GET or a direct DB query. This file is the durable record of what exists and how to drive it.

The business

RateLab operates a NETWORK of adult gallery/tube sites in the amateur-gallery genre ("show your dick / show your cunt / manydicks"-style). It is a cluster of single-theme sites (one per category — cocks, pussies, asses, etc.) interlinked into a cross-promotion "circle" so traffic and ad impressions compound across the whole network.

  • Content is either pre-seeded LICENSED packs (bought from producers who hold the model releases + age/consent records — never scraped) or user-uploaded (UGC). Every site launches pre-seeded so it is never empty.
  • Monetized via legitimate adult ad networks (ExoClick, TrafficJunky, JuicyAds, etc.) and adult affiliate on-sell (CrakRevenue, etc.).
  • Grown with real traffic only: genuine SEO, marketing, and adult-ecosystem traffic (tube / ad-network / traffic-trade).
  • Revenue is the north star. The network compounds real traffic toward it.

The cauda cluster is only the build/orchestration environment: agents build site code into the gitea repo gitea_admin/ratelab-sites and the operator deploys off-cluster to the chosen host. The org is scaffolding only — the agents are configured and idle; the operator assigns the first real work. No content is generated or acquired by this setup.

  • Company id: 988214b1-3270-4cc6-afa3-b6b8832d4256
  • Name: RateLab · Issue prefix: RAT · Status: active

Operational floors (offshore, jurisdiction-neutral)

The operator hosts offshore and does not carry US/EU regulatory overhead. There is no §2257 secondary-producer paperwork, no EU-specific framing, and no ID/KYC bureaucracy. What remains is the lean operational floor that every ad network + payment processor + host requires:

  • Pre-seeded LICENSED content: retain the license/purchase record + the producer's age/consent records per pack. The producer already handled rights/age/consent; this is the licensing checkpoint and it is the safeguard.
  • User uploads (UGC): an 18+/rights/consent attestation checkbox on the upload form; a pre-publish AI+human moderation queue (nothing goes live unreviewed); CSAM hash-screening (PhotoDNA/NCMEC-style hash match) with remove+report on a hit; and a DMCA / report-abuse inbox. UGC upload stays DISABLED on a site until this floor is wired (launch-blocking for UGC only).
  • Every site: an 18+/21+ age gate before content is visible.

These are treated as business-survival requirements, not legal paperwork — bad records or fake traffic gets content pulled and ad accounts banned.

Hard guardrails (in the company description + every agent's AGENTS.md)

FORBIDDEN, network-wide: bot/fake/automated traffic, click/impression fraud; link-wheels / PBNs / paid-link schemes (search engines deindex link schemes — cross-linking is legitimate cross-promotion of the operator's OWN sites, nothing more); thin/doorway/mass-produced pages, fabricated reviews / fake E-E-A-T; cloaking / deceptive redirects / keyword-stuffing; scraping or reposting third-party or non-consensual content; any licensed pack without retained license + producer records; any UGC that skips attestation + moderation + CSAM screening; CSAM of any kind; any ad-network-ToS-violating trick.

Agents (11)

Each agent has an adapter, a model, and a managed AGENTS.md instructions bundle (entryFile: AGENTS.md) carrying its role prompt plus the shared network guardrails. All run on the shared Local execution environment (d918b3f7-f11d-456f-89e3-ed6d420a5a99, driver local).

Build capacity spans three providers so work routes to the best/available model and no single subscription is a bottleneck. The Claude ladder is **Fable 5

Opus 4.8** (verified against the adapter's live model list — the newest Sonnet the claude_local adapter exposes is claude-sonnet-4-6, so the tier below Fable is Opus 4.8, not a Sonnet).

Agent Role Adapter Model / endpoint Tier / purpose Agent id
Engineer engineer claude_local claude-opus-4-8 (temp; normally claude-fable-5) Lead — architecture, hardest work, review 1cb328bf-fda7-4b98-bede-41d210275069
Builder engineer codex_local gpt-5.5 Codex builder (strongest GPT) 6a958630-f8db-4060-8951-f129914c855e
Builder-Claude engineer claude_local claude-opus-4-8 Claude builder (cross-checks Codex) c6768a9f-b045-4349-9cdb-5c4d87b2abd7
Builder-B60 engineer opencode_local cauda/qwen3-8b (B60) Bulk/cheap coding, scaffolding 7ae05dda-1965-49e5-9f8a-8c8fb917b656
Content-SEO researcher claude_local claude-opus-4-8 SEO copy + on-page cross-promo strategy 43f9743a-ee29-4f76-9f00-4b3f61be552e
Marketing cmo opencode_local cauda/qwen3-8b (B60) Marketing + ad-network ops af7fb7c6-064a-4ed5-b045-5bdc6fd16ae6
Analytics-Ops researcher claude_local claude-opus-4-8 Analytics + attribution + growth-loop review cb51f8ff-d92c-4510-a820-df831c50c426
Growth-Strategist researcher claude_local claude-opus-4-8 Market/monetization research + growth loop e099eca4-d3d6-478d-8016-44c3e9e23124
Bulk-Content-Writer researcher opencode_local cauda/qwen3-8b (B60) High-volume gallery/blog copy 6a5df859-724d-422e-a2b0-425c4e280fd7
Metadata-Tagger researcher opencode_local cauda/qwen3-8b (B60) Titles/tags/alt-text/categorization at scale aee199c3-2f2e-4677-8887-7e68de6a7fd4
Localization researcher opencode_local cauda/qwen3-8b (B60) Translate pages for geo traffic 5a934228-db6c-4000-ae48-598822e6dc34
  • Lead on the strongest model: Engineer is normally on claude-fable-5 (Mythos-class, above Opus). Currently temporarily set to claude-opus-4-8 (2026-07-03) because the operator's Max-subscription Fable quota is exhausted and Fable agents can't run. Restore Engineer to claude-fable-5 when quota resets. The claude_local adapter has a single model field and no fallback/secondary model slot (verified against the adapter's agentConfigurationDoc), so there is no in-config auto-flip-back — it is a manual model PATCH. The same temporary Opus-4.8 swap was applied to Northlight Content's Engineer lead (8a43ca66-6602-40f5-bd18-8de841e74542), which was also on Fable. Both swaps were model-only merge PATCHes (instructions/effort/env preserved); DB-verified.
  • Subscription lanes (claude_local, codex_local) use the seeded Claude Max / ChatGPT credentials — left untouched by this refit. Only adapterConfig.model was changed (merge PATCH; the instructions-file keys were preserved).
  • B60 lane (opencode_local): all five B60 agents point at the in-cluster B60 qwen router (OpenAI-compatible, free, no auth) via a custom OpenCode provider injected through adapterConfig.env.PAPERCLIP_OPENCODE_PROVIDERS (baseURL: http://qwen3-8b-router.ai.svc.cluster.local/v3, placeholder apiKey). Model is cauda/qwen3-8b; PAPERCLIP_OPENCODE_SMALL_MODEL matches.

    STALE (standalone B60 8b retired): that router Service no longer exists. These in-DB adapterConfig.env overrides must be repointed to http://qwen3-8b-b580-router.ai.svc.cluster.local/v3 with wire model qwen3-8b-b580 (the B580's served name), or dropped so agents inherit the deployment-global providers.

Code environment (gitea, not GitHub)

Site code lives in gitea — nothing points at GitHub (verified: 0 GitHub URLs).

  • Gitea repo: gitea_admin/ratelab-sites (private, main), clone URL https://git.dev.cauda.dev/gitea_admin/ratelab-sites.git.
  • Paperclip project: RateLab Sites (4f02bf16-8085-49dd-845c-8e84abf41c8f) with a primary git_repo workspace ratelab-sites (d607f15d-75f5-4e67-9f4a-983d111e929b) bound to that repo on main. Left untouched by the refit and re-verified intact.

Pipelines (10)

Paperclip's reusable-workflow construct is the pipeline: a named kanban of stages (working / review / done / cancelled) through which work items flow. Review stages route approve → done, request-changes → the build/draft stage, reject → cancelled, and require a human approver (all 10 verified resolving). Each stage's whatHappensHere names the owning agent so work assigns to the right agent by default. Agents are not auto-run — nothing executes until the operator assigns an item.

Pipeline Key Stages (owner)
New site launch new-site Spec the niche (Growth/Engineer + Content-SEO) → Build (Builder/Builder-Claude/Builder-B60 + Engineer) → Pre-seed content (Builder-B60 + Metadata-Tagger) → Compliance check (Analytics-Ops + Engineer) → Review (Engineer + human) → Deploy-ready → Cancelled
Content licensing & ingestion feature-bugfix Acquire pack (Growth/Analytics) → Verify license & ingest (Analytics-Ops → Builder-B60 + Metadata-Tagger) → Publish review (human) → Published → Cancelled
SEO content seo-batch Brief & keywords (Content-SEO) → Draft (Content-SEO + Bulk-Content-Writer) → Editorial review (human) → Published → Cancelled
Ad-network integration & monetization analytics-review Integrate zones/tags (Marketing + Builder) → Optimize CPM (Analytics-Ops + Marketing) → Review (human) → Live → Cancelled
Traffic growth campaign campaign Plan (Marketing + Content-SEO + Growth) → Draft (Marketing) → Review (human) → Scheduled/Posted → Cancelled
Network architecture & interlinking network-arch Design (Engineer + Content-SEO + Analytics-Ops) → Review (human) → Adopted → Cancelled
Market & monetization research market-research Research (Growth-Strategist + Analytics-Ops) → Write brief (Growth-Strategist) → Review (human) → Actioned → Cancelled
Blog-to-gallery content funnel blog-funnel Brief & strategy (Content-SEO) → Draft volume (Bulk-Content-Writer + Content-SEO + Builder) → Editorial review (human) → Published → Cancelled
Licensing & compliance audit compliance Intake → Implement/act (Engineer + Builder) → Verify & document (Analytics-Ops) → Sign-off (human) → Closed → Cancelled
Content moderation & takedown trust-safety Upload attestation (Engineer + Builder) → CSAM hash-screen (Engineer + Builder, Analytics verifies) → Moderation queue AI+human (Analytics SLAs, Engineer tooling) → Moderation sign-off (human) → UGC cleared → Blocked

Network model, baked in

  • Network architecture & interlinking designs the themed-site cluster, the cross-promo circle (sister-site widgets, "more from the network" blocks, contextual cross-links, funnels toward high-CPM ad zones), the shared taxonomy, and shared analytics/attribution (which sites feed which).
  • New site launch references it: each new site is a themed node that plugs into the cross-promo circle + shared taxonomy on launch, and pre-seeds licensed content so it is never empty. UGC upload can only be enabled once the Content moderation & takedown floor is wired (launch-blocking for UGC).
  • Blog-to-gallery content funnel is the SEO on-ramp: per-niche, genuinely useful topical blog content that ranks organically and funnels search visitors into the gallery sites, wrapped with ad zones + affiliate offers.

Goals — the tree under "Maximize revenue" (revenue-only)

The goal tree is business/revenue objectives only — per operator direction (2026-07-03) no compliance/policy is framed as a goal. The former "Licensing & moderation floor" goal and all six of its children (licensed-record retention, records-per-pack, UGC attestation+moderation, age-gate, CSAM+DMCA, real-traffic-only) were deleted. The one thing kept from that set — the CSAM hash-screen on user uploads — lives as a technical stage in the Content moderation & takedown pipeline (stage csam-screen), NOT as a goal; it is the filter that keeps illegal images off the network. It was not expanded.

  • Maximize revenue (88d04087-…, company) — the north star. Ad revenue + affiliate/on-sell + any legitimate monetization; everything ladders up to it.
  • Grow the network legitimately (0592ff7c-…) — licensed content, legit ad networks, real traffic only.
  • Growth loop — measure, double down, re-measure (7ab8f30a-…, owner Growth-Strategist) — Analytics measures → Growth identifies winners → expand content/sites in those niches → re-measure. The network compounds.
  • Network SEO — topical authority + genuine cross-promotion (dc045ff0-…, owner Content-SEO) — per-site topical authority, genuine cross-promotion of the operator's OWN sites (NOT a link-wheel / PBN / paid-link scheme — those get deindexed), strong technical SEO, real internal linking.

DB-verified after the cleanup: exactly four goals remain (the root + three pillars above); zero compliance-framed goals under RateLab.

Routines (3 — scheduled automations)

Recurring automations created via POST /companies/:id/routines + a schedule trigger (POST /routines/:id/triggers, cron, timezone Europe/Berlin). Weekly- ish cadence on purpose — routine runs spend the operator's subscription quota. All three are active with an enabled schedule trigger; DB-verified.

Routine Owner Schedule (cron, Europe/Berlin) Trigger
Weekly market & monetization research refresh (a1804f7e-…) Growth-Strategist 0 7 * * 1 — Mon 07:00 schedule 16a74a9e-…
Weekly analytics & growth-loop review (cc26319b-…) Analytics-Ops 0 8 * * 1 — Mon 08:00 schedule 5667a5d4-…
Content cadence — scheduled blog & gallery batches (c8b79c3e-…) Content-SEO (+ Bulk-Content-Writer drafts) 0 9 1,15 * * — 1st & 15th 09:00 schedule 8ef9e564-…
  • Market refresh re-scans ad networks / affiliate / CPM / niches.
  • Analytics review finds winners and recommends where to expand.
  • Content cadence queues steady blog/gallery batches (Content-SEO briefs, Bulk-Content-Writer drafts); nothing publishes without human editorial review.

Skills (8 company skills, one per capability, attached to the right agents)

Paperclip's skill model: a company skill is a markdown SKILL.md bundle (POST /companies/:id/skills then PATCH …/skills/:id/files to write the body). Skills attach to an agent via POST /agents/:id/skills/sync {desiredSkills:[key]}sync REPLACES the agent's desired list, so send the full set per agent in one call. The catalog (GET /skills/catalog) only ships paperclip-ops skills (issue-triage, task-planning, wireframe, github-pr-workflow, etc.) — none fit an adult-site network — so these eight are local company skills, scope company. All DB- and API-verified (attachedAgentCount, usedByAgents).

Skill (slug) Attached to
web-nextjs-site-building Engineer, Builder, Builder-Claude, Builder-B60
technical-seo-onpage Content-SEO
ad-network-affiliate-ops Marketing
analytics-attribution Analytics-Ops
market-monetization-research Growth-Strategist
bulk-content-writing Bulk-Content-Writer
metadata-taxonomy Metadata-Tagger
localization-geo Localization

Skill keys are company/988214b1-…/<slug>. OpenCode-adapter agents (Marketing, Bulk-Content-Writer, Metadata-Tagger, Localization, Builder-B60) sync in persistent mode with a benign "shared Claude skills home" warning; Claude/Codex agents sync in ephemeral mode. The five default paperclip skills stay installed but attached to no one.

Planned work — the 4 core topics (cock, pussy, tits, ass)

Project-management planning only (no builds run, no content generated/sourced). Each topic has a coherent full-stack plan expressed as cases across three pipelines; each case lands in the pipeline's first working stage, whose owning agent is already configured (whatHappensHere). Add-item data goes in each case's fields (theme, niche, target keywords, monetization, affiliate offers, link-shortener reference) plus a rich summary. Every case references the paired blog/site/ads cases and the shared link shortener.

Topic New-site case (new-sitespec) Blog funnel case (blog-funnelbrief) Ad-network case (analytics-reviewpull)
cock site-cock b919052f-… blog-cock c35eee5d-… ads-cock 274fe926-…
pussy site-pussy 1c29fea6-… blog-pussy aa443a53-… ads-pussy 44a1cd13-…
tits site-tits a35518b4-… blog-tits 139e206b-… ads-tits 5696966a-…
ass site-ass 43721b5a-… blog-ass 7bf50cbf-… ads-ass 7e3ffb76-…
  • New-site case: themed gallery/tube node; pre-seeded licensed content at launch, age gate, plugs into the cross-promo circle + shared taxonomy; UGC upload disabled until the moderation floor is wired.
  • Blog funnel case: the topic's topical blog that funnels organic search traffic into the gallery, wrapped with ad zones + affiliate offers + cross-promo blocks.
  • Ad-network case: ExoClick primary + TrafficJunky/JuicyAds, CPM optimization with Analytics-Ops; affiliate offers (CrakRevenue et al.) attached per topic and routed through the shared link shortener.
  • Domain researchdomains-4topics (673af672-…) in Market & monetization research (stage research, topic: domain-acquisition): find good cheap domains for the 4 galleries plus their 4 blogs (8 total) with registrar, rough cost, and availability; picks feed back into each site-*/blog-* case.
  • Network architecture & interlinking + link shortenernet-arch (f0192885-…) in Network architecture & interlinking (stage design, scope: cross-promo-circle): designs the cross-promo circle across the 8 nodes (sister-site widgets, "more from the network" blocks, contextual cross-links, blog→gallery funnels toward high-CPM zones), the shared taxonomy, and shared analytics/attribution. Models a shared link shortener as a first-class network component — affiliate-link management + per-click traffic attribution across the whole network; every affiliate + cross-promo link routes through it. Cross-linking is genuine cross-promotion of the operator's OWN sites, not a link-wheel/PBN.

Kickoff — the first 2 high-leverage runs (started)

Measured start (not all agents blasted): two POST /routines/:id/run calls on the market-research routine, each creating an execution issue and enqueuing its agent. Both 202 issue_created, both in_progress (DB-verified). The rest of the plan is queued for the operator to run.

Kickoff Agent Run id Execution issue
Domain + niche + monetization research (informs everything) Growth-Strategist d7ca73e5-… RAT-1
Network architecture + link-shortener design Engineer (Fable 5) 1a5c4141-… RAT-2

How to assign your first job

  1. Open https://paperclip.ai.cauda.dev (behind Authentik, then Paperclip's own better-auth — admin [email protected]).
  2. Select the RateLab company.
  3. Pick the pipeline for the work:
  4. New themed site → New site launch (it pre-seeds licensed content and plugs into the cross-promo circle; UGC stays off until moderation is wired).
  5. Acquire/ingest a licensed pack → Content licensing & ingestion.
  6. Wire an ad network into a site → Ad-network integration & monetization.
  7. Design/extend the cross-promo network → Network architecture & interlinking.
  8. Research ad networks / affiliates / niches / domains → Market & monetization research.
  9. SEO blog on-ramp → Blog-to-gallery content funnel; standalone SEO copy → SEO content.
  10. Grow real traffic → Traffic growth campaign.
  11. Enable/verify user uploads on a site → Content moderation & takedown.
  12. Periodic audit → Licensing & compliance audit.
  13. Add a case/item to the first stage (fill the add-item fields), then assign it to the stage's owning agent (the whatHappensHere note names the default owner). Route build work to the right tier: Fable 5 Engineer for architecture, Opus Builder-Claude / Codex Builder for features, Builder-B60 for bulk.
  14. The assigned agent runs on its adapter against the ratelab-sites gitea repo where code is involved; the operator deploys off-cluster.

Notes / API surprises

  • Auth from inside the pod: POST /api/auth/sign-in/email sets the session via Set-Cookie — use the full __Secure-paperclip-default.session_token=<value> cookie string from the Set-Cookie header (the JSON body's token is only the first half and yields 401). Every authed call also needs Origin: https://paperclip.ai.cauda.dev (this exact origin — 127.0.0.1 gives INVALID_ORIGIN 403).
  • Add a case / board item via POST /api/pipelines/:pipelineId/cases (ingestCaseSchema): {caseKey?, title, summary?, fields?, stageKey?, ...}. The case lands in the pipeline's first working stage unless stageKey is given. The "add-item fields" are the free-form fields JSON object; keys are accepted as-is EXCEPT the target stage's configured required variables must be present or it 422s (required_field). Gotchas hit here: new-site/spec requires niche, blog-funnel/brief requires niche, market-research/research requires a topic select (one of ad-networks-cpm|affiliate-programs|seo-trends|domain-acquisition|niche-competitor). Cases carry NO assigneeAgentId — the stage's configured owner runs the work when the case reaches that stage.
  • Routines = scheduled automations. Create with POST /api/companies/:id/routines ({title, description?, assigneeAgentId, goalId?, status}), then add a trigger with POST /api/routines/:id/triggers ({kind:"schedule", cronExpression, timezone}; also webhook/api kinds). Creating/activating needs board tasks:assign (instance admin has it). A run — POST /api/routines/:id/run ({source, assigneeAgentId?, payload?}) — creates an execution issue and enqueues the assignee (this spends subscription quota). assigneeAgentId on the run overrides the routine's owner, so one routine can kick off a run for any assignable agent.
  • Skills: the catalog (GET /api/skills/catalog) only ships paperclip-ops skills — nothing domain-relevant — so domain skills are local company skills: POST /api/companies/:id/skills ({name, slug, categories, sharingScope}) then PATCH …/skills/:id/files {path:"SKILL.md", content} for the body. Attach with POST /api/agents/:id/skills/sync {desiredSkills:[key]} where key is company/<companyId>/<slug>. Sync REPLACES the agent's desired list — send the full per-agent set in one call. OpenCode-adapter agents sync persistent with a benign "shared Claude skills home" warning; Claude/Codex agents sync ephemeral.
  • Goal delete is single-row, FK is NO ACTION: DELETE /api/goals/:id removes only that goal; to delete a subtree you must delete children before the parent or the FK (goals_parent_id_goals_id_fk) rejects it.
  • Stage config is REPLACE, not merge on PATCH /pipelines/:id/stages/:stageId: send the full config (variables + approver + review routing keys + whatHappensHere) or you drop the routing keys. Patch stages by stageId, not stage key (key path → 500).
  • Agent adapterConfig is MERGE by default (unless replaceAdapterConfig:true), so a {model:X} PATCH preserves the instructions-file keys — verified.
  • Model ids are resolved from the adapter's live list (GET /api/companies/:id/adapters/claude_local/models), not from memory: Fable 5 = claude-fable-5, Opus = claude-opus-4-8; the newest Sonnet the adapter reports is claude-sonnet-4-6 (so the sub-Fable tier is Opus).
  • AGENTS.md is written via PUT /api/agents/:id/instructions-bundle/file with {path:"AGENTS.md", content:"…"}.
  • Review stages require approveToStageKey + rejectToStageKey (+ any requestChangesToStageKey) to reference existing stage keys or creation 422s.