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,contextfields
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:
- Reads agent handoffs and pending work files
- Parses blocked items and context
- Deduplicates against
data/needs_apple_seen.json - Pushes new items to Convex database
- 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 onlyAccount 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
- Morning review — see items in 6am audit
- Mission Control — view details in dashboard
- Take action — complete the requested task
- 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