ZCC Central Command

Sign in to open the live agent map, roster and controls.

Demo access
Username: demo  ·  Password: zinerge2026
z-cc.link · central command · live

Your agency, run by a crew of agents you can see.

The complete master plan: 32 agents across 7 divisions, how each one is built on Claude with ChatGPT as a support model, how every brand's apps plug in, and how you watch and approve it all from one live map on desktop or phone.

Connected today

Every live property, in one place

The apps this command centre already watches over. As each one is wired into the agent layer below, its live status and activity will surface here automatically instead of a static badge.

Live · you are here

ZCC Central Command

z-cc.link

Live

Postoque

postoque.com

Live

Roamola

roamola.com

Live

Sivelar

sivelar.com

Live

Turingminds

turingminds.co.uk

Live activity (simulated)

    Drag to pan · scroll or pinch to zoom · drag agents · select for details
    How it fits together

    Seven layers, one control room

    Every agent follows the same pattern: a trigger creates a job, the orchestrator hands it to an agent, the agent uses connectors to read and act, risky actions stop at your approval gate, and every step streams to z-cc.link as an event. Add a new agent or app and it appears on the map automatically.

    Request-to-result flow

    1. Trigger firesA schedule, a webhook (new email, comment, form or order) or you via dashboard, mobile or Slack drops a job on the queue.
    2. Orchestrator routes itPicks the job up and hands it to the right specialist agent.
    3. Agent worksReads from Brand Brain, acts through the Connector Hub (MCP, n8n, APIs).
    4. Risk checkRisky or public actions go to the Brand and Claims Guard first; everything else is acted on and logged directly.
    5. Approval where neededFlagged items land in the approval inbox on z-cc.link — approved items proceed, edits go back to the agent.
    6. Logged and visibleEvery action writes to the events and audit log, which streams live to the z-cc.link dashboard.
    Part 1 · analysis

    The full agent roster

    Your six requested agents, split into focused specialists where one job is really three, plus the agents a modern AI and digital agency needs to run end to end. Each agent has one clear mission, explicit triggers, a limited tool set and a set autonomy level. Select any card for its full specification and build recipe.

    Why split your requests into specialists? One giant "social media agent" with posting, replying and strategy tools is hard to test and easy to break. Small agents with narrow permissions are safer (a comment-reader can never publish), cheaper (classification runs on a small model) and easier to swap out when a better tool arrives.
    Control

    Autonomy levels and approval rules

    Every agent carries a level. Start each new agent one level lower than its target, review two weeks of logs, then promote it. Promotion and demotion are a single switch on the agent's page.

    L0

    Observe

    Reads, analyses and reports. Cannot change anything outside its own notes.

    L1

    Draft

    Prepares work in full. Nothing leaves the building until you approve it.

    L2

    Act within rules

    Acts alone on allowlisted, low-risk cases. Everything else waits for you.

    L3

    Autonomous

    Acts and logs. You review summaries. Reserved for internal or already-approved work.

    What always needs a human

    ActionDefaultCan become automatic when
    Publishing a new post, ad, blog or newsletterApproveNever for first publication. Approved posts then schedule and publish automatically.
    Replying to comments and DMsRulesFAQ-type questions answered from Brand Brain with high confidence. Complaints, pricing, legal, press and anything emotional always escalate.
    Sending emailRulesCategories you allowlist: acknowledgements, meeting confirmations, standard info requests, document resends.
    First cold outreach to a new leadApproveAfter a sequence template is approved, follow-ups within that template can run automatically and stop on any reply.
    Anything involving money: spend, invoices, refunds, discountsApproveAds may pause spend within a budget cap. Increasing spend always needs you.
    New product claims, health, legal or regulated statementsApproveNever. The Claims Guard blocks and flags them.
    Connecting a new app or granting new permissionsApproveNever.
    Part 2 · how to build

    The tool stack

    Claude is the brain and runtime for every agent. ChatGPT Pro sits alongside as a second opinion, research partner and creative generator. Everything else is plumbing chosen so you can add apps without rewriting agents.

    Claude — main engine

    • Claude Agent SDK (TypeScript or Python) runs each agent loop inside your own worker, with tools and MCP servers attached. This is the core runtime.
    • Claude Managed Agents (Anthropic-hosted, currently beta) for long-running or multi-hour jobs where you'd rather not run the sandbox yourself. Prototype on the SDK, move heavy jobs here.
    • Model routing: Opus 5 for strategy, planning and orchestration; Sonnet 5 for writing, replies and blogs; Haiku 4.5 for high-volume classification like email and comment triage.
    • Claude Code to build the dashboard, workers and connectors; Claude Design to iterate on the dashboard UI before coding it.
    • Skills to package each brand's voice, rules and templates so every agent loads the same instructions.
    • Cowork and Claude in Chrome for tasks on sites with no API, run supervised rather than scheduled.

    ChatGPT Pro — support crew

    • Deep research as a second, independent research pass for the Social Strategist and Blog Planner. Disagreements between the two models are a useful quality signal.
    • Image generation for social creatives and blog headers inside Creative Studio.
    • Codex as a second coder and reviewer on pull requests Claude Code writes.
    • Cross-model QA: a quick "red team" check on high-stakes posts or emails before they reach your approval inbox.
    • Custom GPTs for team members who need quick brand-voice help without dashboard access.
    Billing check. Chat subscriptions and API usage are billed separately. Automated pipelines call the OpenAI and Anthropic APIs. Claude plans now include a separate monthly Agent SDK credit, so check your current plan terms before choosing between plan credit and API keys.

    Full stack by job

    JobRecommendedAlternativesWhy

    Tool features, pricing and API access rules change often. Confirm current terms for each service before committing.

    Plug in anything

    Connector Hub: add a new app in five steps

    Agents never hold passwords or talk to apps directly. They ask the Connector Hub for a named capability ("post_to_linkedin" for brand X). That single rule is what makes adding apps and brands easy.

    1. Pick the connection routeOfficial MCP server if one exists; otherwise a managed-auth platform (Composio or Pipedream Connect); otherwise an n8n node; custom API code only as a last resort.
    2. Authorise per brandRun the OAuth flow from z-cc.link → Connectors → Add. Tokens go to the secrets vault, scoped to one brand, never into prompts.
    3. Write a manifestA short file naming the capabilities it exposes, which are read-only and which are write actions that need an approval level.
    4. Grant to agentsTick which agents may use which capabilities. The Engagement agent gets reply_comment; the Strategist gets read_insights only.
    5. Health check and go liveThe hub pings the connection hourly, tracks rate limits and token expiry, and turns the tile red on the dashboard before anything breaks.
    connectors/linkedin.manifest.yaml
    # One manifest per app. Brand tokens are stored separately.
    id: linkedin
    route: composio            # mcp | composio | pipedream | n8n | custom
    scopes_per_brand: true
    capabilities:
      read_page_posts:   { mode: read }
      read_comments:     { mode: read }
      publish_post:      { mode: write, min_approval: L1 }
      reply_comment:     { mode: write, min_approval: L2 }
    rate_limits:
      publish_post: 20/day
    health_check: every 1h
    owner_agent: connectors
    Brands as data, not code. Each of your 10+ brands is a row with its own voice file, claims rules, connected accounts, posting windows and approvers. Adding brand eleven is a form, not a rebuild.

    Connector catalogue to plan for

    Step by step

    Build guides for the core pipelines

    Build these in order. Each one reuses the same worker, event logging and approval gate, so the first pipeline takes longest and later ones mostly add prompts and connectors.

    1. Create one monorepo with Claude Codeapps/dashboard (Next.js), apps/worker (agent runner), packages/agents (definitions and prompts), packages/connectors (manifests), supabase/ (schema and migrations).
    2. Stand up SupabasePostgres, Auth, Realtime and pgvector. Run the schema in the Data model section. Enable Row Level Security from day one.
    3. Write the generic workerOne function that loads an agent definition, loads brand context, runs the Claude loop with only the allowed tools, and writes every step to the events table.
    4. Add the approval toolGive agents a request_approval tool. It writes to the approvals table and pauses the job. When you approve on z-cc.link, the job resumes.
    5. Add a durable queueTrigger.dev or Inngest for schedules, retries, concurrency per brand and step-level resumption after approval.
    6. DeployWorker in Docker on Railway, Fly.io or a small VPS; dashboard on Vercel or Cloudflare Pages; z-cc.link DNS on Cloudflare with Cloudflare Access in front.
    apps/worker/runAgent.ts (illustrative)
    import { query } from "@anthropic-ai/claude-agent-sdk";
    import { loadAgent, brandContext, logEvent, mcpFor } from "./lib";
    
    export async function runAgent(job) {
      const agent = await loadAgent(job.agent_id);
      const brand = await brandContext(job.brand_id);
      await logEvent(job, "started");
    
      for await (const msg of query({
        prompt: job.instruction,
        options: {
          model: agent.model,
          systemPrompt: agent.system_prompt + brand.rules,
          mcpServers: await mcpFor(agent, brand),  // only granted capabilities
          allowedTools: agent.tools_allowed,
          maxTurns: agent.max_turns ?? 30,
        },
      })) {
        await logEvent(job, msg.type, msg);   // streams to z-cc.link
      }
      await logEvent(job, "finished");
    }
    // Check current SDK docs for exact option names.
    One worker, many agents. Agents are rows plus prompt files, not separate apps. That is why the map, the directory and the logs all update themselves when you add one.
    Foundations

    Data model

    Everything the dashboard shows comes from these tables. Brands, agents and connectors are data, which is what lets you scale to many brands and agents without new code.

    supabase/schema.sql (core)
    create table brands (
      id uuid primary key default gen_random_uuid(),
      name text, domain text, voice jsonb, claims_rules jsonb,
      icp jsonb, posting_windows jsonb, approvers uuid[]
    );
    create table agents (
      id text primary key, name text, division text, icon text,
      model text, autonomy text, enabled bool default true,
      definition jsonb, map_x real, map_y real
    );
    create table connectors (
      id text primary key, route text, manifest jsonb
    );
    create table brand_connections (
      brand_id uuid references brands, connector_id text references connectors,
      secret_ref text, status text, last_check timestamptz
    );
    create table jobs (
      id uuid primary key default gen_random_uuid(),
      agent_id text references agents, brand_id uuid references brands,
      instruction text, status text,  -- queued|working|waiting|done|failed
      parent_job uuid, cost_usd numeric default 0,
      created_at timestamptz default now(), finished_at timestamptz
    );
    create table events (
      id bigserial primary key, job_id uuid references jobs,
      agent_id text, type text, message text, data jsonb,
      created_at timestamptz default now()
    );
    create table approvals (
      id uuid primary key default gen_random_uuid(),
      job_id uuid references jobs, kind text, payload jsonb,
      flags jsonb, status text default 'pending',
      decided_by uuid, reason text, decided_at timestamptz
    );
    supabase/schema.sql (work tables)
    create table companies (id uuid primary key, brand_id uuid, name text,
      domain text, sector text, size text, source text, score int);
    create table contacts (id uuid primary key, company_id uuid,
      name text, role text, email text, email_verified bool,
      lawful_basis text, source text, opted_out bool default false);
    create table deals (id uuid primary key, brand_id uuid,
      company_id uuid, stage text, value numeric, owner uuid);
    create table activities (id bigserial primary key, contact_id uuid,
      channel text, summary text, created_at timestamptz default now());
    
    create table social_posts (id uuid primary key, brand_id uuid,
      platform text, copy text, assets jsonb, status text,
      scheduled_for timestamptz, live_url text, metrics jsonb);
    create table threads (id uuid primary key, brand_id uuid,
      channel text, external_id text, intent text, sentiment text,
      status text, assigned_to uuid, summary text);
    create table emails (id uuid primary key, brand_id uuid,
      thread_id text, priority text, category text, summary text,
      draft text, send_mode text, status text);
    create table blog_posts (id uuid primary key, brand_id uuid,
      cluster text, keyword text, status text, cms_id text, url text);
    create table affiliate_links (id uuid primary key, brand_id uuid,
      programme text, product text, url text, status text, last_check timestamptz);
    
    create table knowledge (id bigserial primary key, brand_id uuid,
      source text, chunk text, embedding vector(1536));
    z-cc.link

    What you see on desktop and phone

    Browser only, no app to install. The desktop view is for oversight and deep dives; the phone view is built around the approval inbox so you can clear a day's decisions in a few minutes.

    https://z-cc.link/overview
    Mission map
    Approvals
    Tasks
    Inbox digest
    Content calendar
    Leads and CRM
    Brands
    Connectors
    Logs and costs
    Kill switch
    17agents working now
    9waiting for approval
    42posts scheduled this week
    3escalated conversations
    Jobs completed per day, all brands
    Approvals · 9
    Brand 3 · LinkedIn · Tue 9:30

    Five ways built-in protection keeps shared surfaces cleaner between cleans…

    Brand 1 · Lead reply

    Draft reply to a distributor enquiry with spec sheet attached.

    Escalated · Instagram DM

    Customer unhappy about a late delivery. Suggested reply ready.

    Screens and what each one answers

    ScreenQuestion it answersKey elements
    Mission mapWhat is every agent doing right now?Draggable, zoomable node graph; live status; animated flows; filter by brand and division
    Agent detailHow is this agent performing and what did it just do?Current job, step timeline, tools used, cost, success rate, autonomy switch, prompt version, test results
    ApprovalsWhat needs my decision?Batch approve, inline edit, reject with reason, flags from Claims Guard, expiry timers
    TasksWhat is in progress across all brands?Kanban of jobs by status, filter by brand, agent or client, links to Linear
    Inbox digestWhich emails matter today?Priority cards, summaries, drafts, auto-sent log
    Content calendarWhat is going out, where and when?Month and week views per brand and platform, drag to reschedule
    Leads and CRMWhere are my deals?Pipeline board, new leads, sequence status, replies
    BrandsIs each brand set up correctly?Voice, claims rules, connected accounts, approvers, Brand Brain sources
    ConnectorsIs anything about to break?Health tiles, token expiry, rate-limit usage, add new app
    Logs and costsWhat happened and what did it cost?Searchable event log, spend per agent, brand and model, budget alerts
    Safety

    Guardrails that keep automation trustworthy

    An agency runs on reputation. These controls stop one bad reply, leaked token or runaway loop from becoming a client problem.

    Keeping costs predictable

    Right model for the job

    Small models classify and route; large models only plan and write. Classification is usually the highest-volume work.

    Cache and batch

    Prompt caching for brand context loaded on every call; batch processing for non-urgent jobs like monthly research and link checks.

    Budgets per agent

    Daily cost caps per agent and brand. The worker pauses an agent that hits its cap and alerts you.

    12-week plan

    Roadmap and build checklist

    Pilot on two brands, prove each pipeline, then roll out to all brands. Tick items as you go; progress is saved in this browser.