Good afternoon

The mesh is handling the routine. Here's what needs you.

Autopilot dry-run
--:--:--UTC
Viewer

Mesh health

Live

Target is 85%+ by week 16 with zero high-severity policy failures.

    Division load

    share working
    Simulated. In production this reads the jobs, events and approvals tables.

    OnlineFull mesh

    65 agents, 0 links, 0 messages

    Working Waiting for you Blocked Idle

    Agent bus

    0 msgs/min

      Needs your approval

      0 pending

      From a crew of agents to a self-running mesh

      v1 set out 32 agents in 7 divisions around one orchestrator. v2 turns that into a network. Agents send each other typed messages, settle routine decisions among themselves, and every capability is a versioned block you can add, swap or roll back.

      Nine layers, one nervous system

      Events flow down through the layers and decisions flow back up. Only the connector layer can touch the outside world, and it only accepts actions that carry a valid policy verdict and, where required, a signed human approval.

      Framework alignment. The structure follows the enterprise agentic pattern (reimagine, build, empower, orchestrate) and balances speed, scale and trust. Orchestration is graph-based, policies are code, and every decision is explainable and auditable. It's sized for an agency, not a bank.

      How agents talk and decide

      Agents never call each other directly. They publish typed messages to the Agent Bus, which checks each message against a contract and a talk-permission list. Every decision falls into one of five modes, so the routine ones never wait for a human.

      Live scenario: a partner referral becomes a retainer client

      contracts/envelope.jsonevery message on the bus
      {
        "id": "msg_01JBX4Q8",
        "ts": "2026-10-29T09:31:22Z",
        "from": "referral",  "to": "crm",
        "intent": "handoff",      // request|handoff|propose|verify|vote|decide|escalate|ack|nack|event
        "contract": "lead.referred@1",
        "trace_id": "tr_9f2c",  "job_id": "job_7d1e",
        "tenant": { "partner_id": "ptn_042", "client_id": null, "brand_id": "zinerge" },
        "confidence": 0.92,  "risk": "low",  "blast_radius": "internal",
        "decision_mode": "solo",
        "payload": { "company": "acme.example", "need": "website + growth retainer" },
        "expects": ["ack"],  "ttl_s": 3600,
        "idempotency_key": "ref:ptn_042:acme.example"
      }
      policies/decision.rego-style.yamldecision rights as code
      # Evaluated by the Decision Arbiter on every 'decide' message
      rules:
        - when: "money.amount > 0"
          mode: human               # all spend, pay and commission
        - when: "blast_radius == 'public' and first_time"
          mode: human
        - when: "guard.verdict == 'HOLD'"
          mode: block               # never overridable by agents
        - when: "conflict.between_agents"
          mode: arbiter
        - when: "confidence >= 0.85 and risk == 'low'"
          mode: solo
        - when: "0.65 <= confidence < 0.85"
          mode: peer_check          # second agent verifies
        - when: "decision.kind in ['lead_fit','vendor_pick','hire_shortlist']"
          mode: quorum  voters: 3  min_agree: 2
        - default: escalate

      Snap in agents, apps and rules

      Everything in the mesh is a block with a manifest: agents, skills, connectors, policy packs, workflows, memory collections, widgets and portal modules. The Block Registry tests each one, runs it in shadow, then canary, then live. Adding a capability is a manifest and a test file, not a rebuild. Press Snap block on the command centre to watch one plug in.

      blocks/clients/renewal-guardian/block.yaml
      kind: agent
      id: renewal-guardian
      version: 0.3.0
      division: clients
      mission: "Protect every retainer renewal from T-120 days to signature."
      model:  { main: claude-sonnet-5-5, classify: claude-haiku-5-5 }
      autonomy: L2
      listens: [client.health.changed, retainer.renewal.due]
      emits:   [renewal.plan.proposed, approval.requested]
      talks_to: [account, qbr, finance, approvals, arbiter]
      capabilities: [crm.read, retainer.read, docs.draft, email.draft]
      policies: [client-comms, money-needs-human]
      decision: { default: solo, below_confidence: { 0.8: arbiter } }
      limits:   { cost_per_day_gbp: 3, actions_per_hour: 40 }
      map:      { code: RG, icon: refresh }   # appears on the mesh automatically
      tests: ./tests/*.json          # min 10 cases, run on every change
      rollout: shadow                # shadow -> canary(10%) -> live

      65 agents in 11 divisions

      Each agent has one mission, explicit triggers, the smallest possible tool set and an autonomy level. New in v2: People for your international team, Partners for global referral partners, Clients for annual-fee retainers, Delivery for project work, plus mesh-control agents in Command and Knowledge.

      A follow-the-sun team, run by the People division

      Staff and contractors across time zones become one continuous production line. The Follow-the-Sun Dispatcher hands open work to whichever hub is online, with a handover note. Capacity, timesheets, onboarding, access and pay preparation run in the background, and every payment waits for your approval.

      Example hubs, 09:00 to 18:00 local, drawn live from your clock. Replace them with your real hubs in the data model.
      handover notegenerated at each hub's end of day
      ## Handover · EMEA → South Asia · 15:00 UTC
      Open jobs: 7   Blocked: 1   Due in next 8h: 3
      - [Client 4] Landing page QA: 2 issues left (mobile nav, form)
        owner → Dev Hub B · files: /client-4/lp-v3 · ETA 18:00 UTC
      - [Client 9] Monthly report: data pulled, needs narrative
        owner → Content Hub B · template: qbr-v2
      - BLOCKED [Client 2] DNS change waiting on client IT
        next action → Account Manager chases at 09:00 client time
      Decisions taken by agents: 14  (log: /handover/2026-10-29)
      Needs a human: contractor invoice (EMEA-07), scope change (Client 2)

      People-data rules

      • Personal data stays in the People schema with row-level security. Agents outside the division only see names, roles, skills and availability.
      • Pay, rates and bank details are never sent to a model. The Pay Prep agent works with IDs and totals, and a human releases the payment.
      • Transfers of personal data across borders need a lawful mechanism, such as UK IDTA or EU SCCs. Confirm these with your adviser.
      • Employment status, right to work and local labour law vary by country. Agents flag deadlines and missing documents but never decide status.
      • Offboarding revokes every connector token and shared drive within one hour, logged by the Access Steward.

      General guidance, not legal advice.

      Two loops, one revenue engine

      Referral partners bring clients in, and annual-fee clients stay and grow. The two loops meet at Deal won. From there the mesh tracks the attribution, the commission owed, the retainer's health and the renewal date, and checks in with you only where money or commitments are involved.

      partners/commission.rules.yaml (example values)
      tiers:
        registered: { first_year: 10% }
        silver:     { first_year: 12.5%, renewal: 3% }
        gold:       { first_year: 15%,   renewal: 5% }
      basis: fees_received      # not invoiced
      attribution: first_registered_wins
      window_days: 180
      clawback: { if_cancelled_within_days: 90 }
      currency: partner_local  # FX at payment date
      payout: human_approval   # always
      clients/health.score.ts (example weights)
      const health =
          0.25 * delivery_on_time
        + 0.20 * hours_burn_vs_plan
        + 0.20 * sentiment_30d    // email + calls
        + 0.15 * sla_adherence
        + 0.10 * engagement       // portal, meetings
        + 0.10 * payment_timeliness;
      // 80+ healthy · 60-79 watch · <60 at risk
      // at risk → Renewal Guardian opens a save plan
      clients/renewal.timeline.yaml
      T-120: health review + risk flags
      T-90:  QBR and value report (approve)
      T-75:  expansion ideas from Expansion Scout
      T-60:  renewal proposal draft (approve)
      T-30:  contract out via e-sign (approve)
      T-14:  chase + escalate to you if unsigned
      T-0:   renewal invoice draft (approve)
      T+1:  partner renewal commission calc

      Less human input, by earning it

      v2 runs on management by exception. Agents start one level below their target and get promoted on evidence: how often their drafts are approved unchanged, eval scores and incident count. You see exceptions, money and first-time public actions. The routine runs without you.

      ActionDecided byCan become automatic when

      Controls the model can't talk its way past

      Safety is enforced in code at the boundary of each tool call, not by prompt discipline. A connector only accepts a write action that carries a signed approval token, and the agent process can never mint that token.

      worker/hooks/preToolUse.ts (illustrative)
      export async function preToolUse(ctx, tool, input) {
        if (await killSwitch.isOn(ctx.agentId)) return deny("paused");
        if (await budget.exceeded(ctx.agentId, ctx.tenant)) return deny("budget");
        const cap = registry.capability(tool.name);           // from connector manifest
        if (!ctx.granted.includes(cap.id)) return deny("not granted");
        if (cap.mode === "write") {
          const ok = await tokenService.verify(input.approval_token, { // separate process
            job: ctx.jobId, action: cap.id, payloadHash: hash(input) });
          if (!ok) return deny("no valid approval token");
        }
        await audit.write(ctx, tool.name, redact(input));
        return allow();
      }

      Claude at the core, everything else is plumbing

      Claude runs every agent loop. ChatGPT Pro stays alongside as a second opinion, research partner and image generator. The rest is chosen so that apps, brands, staff and partners can be added as data, not code.

      JobRecommendedAlternativesWhy
      Model names, API terms, pricing and platform rules change often. Check the current documentation for each service before you commit. Model IDs shown are current as of October 2026.

      Everything is a row, so everything scales

      Agents, blocks, brands, staff, partners and clients are all data. The mesh, the roster and the dashboards read the same tables, which is why a new agent or partner shows up everywhere on its own.

      supabase/migrations/0002_v2_mesh.sql (core additions)
      create table blocks (id text, version text, kind text, division text, manifest jsonb,
        stage text default 'draft', tests_passed int, primary key(id, version));
      create table bus_messages (id text primary key, ts timestamptz default now(), from_agent text,
        to_agent text, intent text, contract text, trace_id text, job_id uuid, tenant jsonb,
        confidence numeric, risk text, payload jsonb, status text, idempotency_key text unique);
      create table decisions (id uuid primary key, trace_id text, mode text, voters text[],
        outcome text, rationale text, policy_rule text, decided_by text, created_at timestamptz default now());
      -- People
      create table hubs (id text primary key, name text, tz text, work_start time, work_end time);
      create table staff (id uuid primary key, hub_id text, kind text, -- employee|contractor
        role text, skills text[], weekly_hours int, status text, started_on date);
      create table capacity (staff_id uuid, week date, planned_h numeric, booked_h numeric);
      create table timesheets (id bigserial, staff_id uuid, client_id uuid, job_id uuid, hours numeric, day date, approved bool);
      create table handovers (id uuid, from_hub text, to_hub text, note_md text, open_jobs uuid[], created_at timestamptz);
      -- Partners
      create table partners (id uuid primary key, name text, country text, tier text, status text, health int);
      create table referrals (id uuid, partner_id uuid, company text, registered_at timestamptz,
        status text, deal_id uuid, attribution text);
      create table commissions (id uuid, partner_id uuid, client_id uuid, basis numeric, rate numeric,
        amount numeric, currency text, status text, approved_by uuid, due_on date);
      -- Retainer clients
      create table clients (id uuid primary key, name text, country text, partner_id uuid, owner uuid, status text);
      create table retainers (id uuid, client_id uuid, annual_fee numeric, currency text, hours_per_month int,
        start_on date, renew_on date, sla jsonb, status text);
      create table health_scores (client_id uuid, day date, score int, factors jsonb);
      create table change_requests (id uuid, client_id uuid, summary text, est_hours numeric, in_scope bool, status text);

      Desktop for oversight, phone for decisions

      On desktop you get the full mesh with every agent, message and division. On a phone the same data collapses to a minimal view: a division orbit, six numbers and the approval queue, so you can clear a day's decisions in a few minutes.

      ScreenAnswersKey elements
      09:41ZCC5G
      Command centre
      41working
      6to approve
      87%by agents
      MeshQueueAgentsPartnersPlan

      Build the controls first, then the crew

      Each phase has an exit test. Don't start the next phase until the current one passes. Tick steps as you go; progress is saved in this browser only. The full 108-task plan lives in the build tracker and docs/TASKS.md.

      Every live property, one glance

      The rest of the Zinerge / Gulan Group portfolio, pinged directly from your browser. This is a real reachability check, not simulated data, unlike the mesh and queue elsewhere on this page.

      ZCC Central Command

      This dashboard. Static, self-contained, served from z-cc.link.

      Online Open
      You're looking at it right now

      Postoque

      Self-hosted, Claude-native social and blog content automation.

      Checking… Open

      Roamola

      Travel brand in the Gulan Group portfolio.

      Checking… Open

      Sivelar

      Ecommerce and affiliate platform.

      Checking… Open

      TuringMinds

      Computer science and AI tutoring brand.

      Checking… Open
      How this check works. Each card fetches its URL directly from your browser with a short timeout. Any response, even an opaque cross-origin one, counts as reachable; a network failure or timeout counts as unreachable. It can’t see HTTP status codes, only whether the site answered, and it rechecks automatically every two minutes while this tab is visible.