Skip to content

Needs Apple System

The Needs Apple system automatically surfaces blockers requiring Apple's attention across all agency operations. It appears prominently at the top of Mission Control and in Apple's daily morning briefings.

Purpose

Aggregate and prioritize items that specifically need Apple's action:

  • DNS and domain changes
  • Account access and permissions
  • Strategic decisions and approvals
  • Infrastructure issues requiring admin access
  • Vendor account problems

How It Works

Data Collection

The system monitors multiple sources for blocked items:

1. Agent Handoffs

  • File: data/agent-handoffs.jsonl
  • Filter: Items tagged to: "apple"
  • Format: JSONL with fromAgent, description, context fields

2. Pending Work

  • File: memory/pending-work.md
  • Filter: Items marked as "Blocked on Apple"
  • Parse: Extracts description and context from markdown

3. Manual Additions

  • Method: Direct API calls from scripts or agents
  • Endpoint: POST /needs-apple/add

Automated Processing

Cron: needs-apple-sync
Schedule: Every 2 hours, 8am–10pm CT
Script: scripts/needs_apple_push.py

The sync process:

  1. Reads agent handoffs and pending work files
  2. Parses blocked items and context
  3. Deduplicates against data/needs_apple_seen.json
  4. Pushes new items to Convex database
  5. Prevents duplicate notifications on reruns

Deduplication Logic

Seen items tracking:

  • File: data/needs_apple_seen.json
  • Key: Hash of item description
  • Purpose: Prevent duplicate entries when cron reruns

API Endpoints

All endpoints require x-activity-secret header for authentication.

Add Item

http
POST /needs-apple/add
Content-Type: application/json
x-activity-secret: {secret}

{
  "fromAgent": "axel",
  "description": "DNS record needed: ventures.creatorsagency.co",
  "context": "Blocking new project deployment, needs A record pointing to 76.76.21.21"
}

List Items

http
GET /needs-apple/list
x-activity-secret: {secret}

Returns all unresolved items with timestamps and metadata.

Resolve Item

http
POST /needs-apple/resolve
Content-Type: application/json
x-activity-secret: {secret}

{
  "id": "item_id_from_list"
}

Marks item as resolved and records resolution timestamp.

Database Schema

Convex table: needs_apple

typescript
{
  fromAgent: string,      // Which agent identified the blocker
  description: string,    // Brief description of what's needed
  context?: string,       // Additional details and reasoning
  resolved: boolean,      // Whether Apple has addressed it
  createdAt: number,     // When item was added (timestamp)
  resolvedAt?: number,   // When item was resolved (timestamp)
}

Dashboard Display

Mission Control

  • Location: Hero section at top of home page
  • Layout: Card-based list of unresolved items
  • Features:
    • Resolve button for each item
    • Empty state when no blockers exist
    • Color-coded by age/priority
    • Links to relevant context when available

Apple's Morning Brief

  • Integration: Prepended to 6am Ops & Strategy Audit
  • Format: Bullet list with context
  • Frequency: Daily at 5am CT (before audit content)
  • Purpose: Ensure Apple sees blockers first thing

Adding Items from Code

Python Example

python
import requests
from pathlib import Path

# Load environment
env = dict(
    l.split('=', 1) 
    for l in Path('mission-control/.env.local').read_text().splitlines() 
    if '=' in l and not l.startswith('#')
)

site = env['NEXT_PUBLIC_CONVEX_SITE_URL'].strip()
secret = env['ACTIVITY_LOG_SECRET'].strip()

# Add item
response = requests.post(
    f"{site}/needs-apple/add",
    headers={
        "x-activity-secret": secret, 
        "Content-Type": "application/json"
    },
    json={
        "fromAgent": "axel",
        "description": "Vercel team-scoped API returning 403",
        "context": "Build health monitoring is blind since Mar 23. Need Apple to fix API token/team permissions."
    },
    timeout=10
)

Direct Script Usage

bash
cd /Users/aurora/.openclaw/workspace
python3 scripts/needs_apple_push.py \
  --agent "axel" \
  --description "DNS record needed" \
  --context "Type=A, Name=ventures, Value=76.76.21.21, Zone=creatorsagency.co"

Common Use Cases

DNS Changes

Most frequent category of Apple blockers:

  • A records for new subdomains
  • CNAME records for service redirects
  • TXT records for verification
  • SSL certificate approvals

Format for DNS requests:

Type=A, Name=ventures, Value=76.76.21.21, Zone=creatorsagency.co, Proxy=DNS only

Account Access

Second most common category:

  • Vercel team permissions
  • GitHub organization access
  • Vendor account reactivation
  • API key regeneration

Infrastructure Decisions

Strategic or security-related decisions:

  • Server provisioning approvals
  • Security setting changes
  • Integration authorizations
  • Budget-related infrastructure

Resolution Process

Apple's Workflow

  1. Morning review — see items in 6am audit
  2. Mission Control — view details in dashboard
  3. Take action — complete the requested task
  4. Mark resolved — click resolve button in dashboard

Automatic Resolution

Some items may auto-resolve if:

  • Underlying issue is fixed by other means
  • Item becomes obsolete due to changed requirements
  • Duplicate item is resolved elsewhere

Monitoring and Metrics

Dashboard Metrics

  • Total unresolved — count of open items
  • Average resolution time — how long items stay open
  • Most common categories — DNS, access, infrastructure
  • Agent distribution — which agents identify most blockers

Historical Data

All resolved items remain in database with resolution timestamps for analysis of:

  • Resolution patterns
  • Common blocker types
  • Response time trends
  • Agent reporting patterns

Integration Points

With Other Systems

  • HEARTBEAT.md — blocked items get parsed and surfaced
  • Agent handoffs — direct integration via JSONL format
  • Pending work — markdown parsing for blocked sections
  • Morning audits — automatic prepending to daily briefings

Security Notes

  • API requires secret header to prevent unauthorized additions
  • Only Apple can mark items resolved
  • All actions are logged with timestamps
  • Agent source is tracked for accountability