4.4 KiB
Client Onboarding & Fleet Runbook (CLIENT-ONBOARDING-RUNBOOK.md)
1. Overview & Agency Context
This document defines the complete standard operating procedure (SOP) and automated runbook for provisioning, authenticating, and onboarding client agency profiles (nodes) into the NetVM multi-tenant fleet on bl.
In accordance with the NetVM Ethics Charter (https://start.muse-dev.online/ethics.html):
- Managed services are strictly run for consenting clients with explicit authority.
- Every client receives a completely isolated network namespace (
warp-<node>), dedicated WireGuard tunnel identity, isolated Chrome profile, and separate credentials. - Canonical Naming Convention:
node == agent == profile == API account.
2. Fleet Architecture & Port Allocation
The fleet uses a deterministic 94x0 CDP port and warp-<node> naming convention:
| Node | CDP Port | Netns | Egress IP | Purpose / Profile |
|---|---|---|---|---|
muse |
9410 |
warp-muse |
Dedicated WARP | Primary Dev / Orchestrator |
pip |
9420 |
warp-pip |
Dedicated WARP | Production Agent |
646 |
9430 |
warp-646 |
Dedicated WARP | Production Agent |
opm |
9440 |
warp-opm |
Dedicated WARP | Production Agent |
def |
9450 |
warp-def |
Dedicated WARP | Production Agent |
<new> |
9460+ |
warp-<new> |
Dedicated WARP | Next provisioned client node |
3. Step-by-Step Client Onboarding SOP
Phase 1: Infrastructure Provisioning (Automated)
Run the idempotent node provisioning script to generate the WireGuard identity, network namespace, CDP relay, and chrome-box profile:
# Example: Provisioning node 'dev1'
./bin/netvm-provision-node.sh dev1
Verification:
- Namespace created:
ip netns list | grep warp-dev1 - Registry updated in
NODES.mdandACCOUNTS.md.
Phase 2: Sign-in Initiation (super cred initiate)
Launch the client login flow without handling raw passwords or secrets:
# For email OTP login:
super cred initiate --node dev1 --email client@domain.com
# Or via Python Agent API:
python3 bin/cred-client.py initiate --node dev1 --email client@domain.com
- If already authenticated, exits
0(active). - If awaiting verification code, exits
2(awaiting_otp).
Phase 3: Submitting Transient OTP (super cred submit-otp)
When the client or operator receives the 6-digit email OTP:
super cred submit-otp --node dev1 --otp 123456
- The code is submitted transiently and is never persisted to disk or logs.
- If the account directly enters chat, status transitions to
active. - If the account requires age verification, it advances to Phase 4.
Phase 4: Resolving the Age Verification Gate (/access/verification)
When a brand-new or unlinked client profile reaches the Muse age verification gate:
Method A: Instagram Linking (Recommended)
- Run:
super cred link-instagram --node dev1 [--notify] - The system provides a one-tap Tailscale portal URL:
http://bl.tailfb5960.ts.net:8765/verify/dev1 - Crucial Rule: The operator or client must link an established / aged Instagram profile (not created within minutes). Brand-new Instagram accounts lack mature age signals, causing Meta Accounts Center to disable the Confirm button.
- If completed via mobile/desktop browser, use an Incognito/Private window to prevent ambient Meta cookie bleed.
- If executing automated RPA in-browser, inject the Instagram credentials and security code directly into the container's CDP session.
Method B: Credit Card Verification (Fallback)
If Instagram linking is not available, operator can complete the verification using a client payment card on /access/verification.
Phase 5: Vitality & Status Monitoring
Query individual or fleet-wide health:
# Check single node
super cred status --node dev1
# Check entire fleet
super cred list
4. Rate-Limiting & Operational Safety Rules
To avoid platform anti-automation challenges and maintain high reputation:
- Pacing / Spacing: Space new node creations and Instagram authorizations by at least 15–20 minutes per IP/session.
- Namespace Isolation: Never attempt multi-account auth inside the same browser profile. Always execute inside the client's dedicated
warp-<node>netns. - No Credential Logging: Never print plain text passwords or authentication tokens to stdout, git-tracked markdown, or plain text logs.