Skip to content

Phase 3: Intelligence ​

Make the agent proactive and smart.

Timeline: Q3 2026 (10-12 weeks) Goal: Agent that works while you sleep


The Shift ​

Phase 1-2: Agent responds to commands Phase 3: Agent acts autonomously

Before: "Find me a job" → Agent searches
After:  Agent finds job at 2AM → Applies → Notifies you at 7AM

3.1 Proactive Agent ​

What We're Building ​

CapabilityDescription
Background Job MatchingContinuously match users to new jobs
Price AlertsWatch items, notify on price drops
Inventory SuggestionsSuggest what to source based on demand
Auto Follow-upsChase invoices, nudge buyers
Opportunity DetectionSpot patterns, suggest actions

Technical Spec ​

Proactive Task System

sql
-- User preferences for proactive actions
proactive_settings (
  user_id UUID,
  job_alerts BOOLEAN DEFAULT true,
  price_alerts BOOLEAN DEFAULT true,
  auto_apply BOOLEAN DEFAULT false,  -- Opt-in
  quiet_hours_start TIME,
  quiet_hours_end TIME
)

-- Scheduled tasks
agent_tasks (
  id UUID,
  user_id UUID,
  task_type VARCHAR(50),  -- job_match, price_watch, follow_up
  config JSONB,
  next_run TIMESTAMP,
  last_run TIMESTAMP,
  status VARCHAR(20)
)

-- Task results
agent_actions (
  id UUID,
  user_id UUID,
  task_id UUID,
  action_type VARCHAR(50),  -- applied, alerted, followed_up
  details JSONB,
  created_at TIMESTAMP,
  notified_at TIMESTAMP
)

Background Job Matching

javascript
// Runs every hour
async function matchNewJobs() {
  // Get users with job alerts enabled
  const users = await getActiveJobSeekers();
  
  for (const user of users) {
    // Get jobs posted since last run
    const newJobs = await getNewJobs(user.lastJobCheck);
    
    // Score each job
    const matches = newJobs
      .map(job => ({
        job,
        score: calculateMatchScore(user, job)
      }))
      .filter(m => m.score >= user.minMatchScore)
      .sort((a, b) => b.score - a.score);
    
    if (matches.length > 0) {
      if (user.autoApply) {
        // Apply automatically
        for (const match of matches.slice(0, 5)) {
          await autoApply(user.id, match.job.id);
        }
        await notify(user.id, `Applied to ${matches.length} new jobs`);
      } else {
        // Just notify
        await notify(user.id, `${matches.length} new jobs match your profile`);
      }
    }
    
    await updateLastJobCheck(user.id);
  }
}

Price Watching

javascript
// User watches an item
async function watchItem(userId, listingId, targetPrice) {
  await db.priceWatches.create({
    userId,
    listingId,
    targetPrice,
    currentPrice: listing.price,
    status: 'active'
  });
}

// Runs when prices change
async function checkPriceDrops(listingId, newPrice) {
  const watches = await db.priceWatches.find({
    listingId,
    targetPrice: { $gte: newPrice },
    status: 'active'
  });
  
  for (const watch of watches) {
    await notify(watch.userId, {
      type: 'price_drop',
      listing: listingId,
      oldPrice: watch.currentPrice,
      newPrice,
      message: `Price dropped to ${newPrice}! Only 3 left.`
    });
  }
}

Auto Follow-ups

javascript
// Run daily
async function autoFollowUp() {
  // Unpaid invoices > 3 days
  const overdueInvoices = await getOverdueInvoices(3);
  
  for (const invoice of overdueInvoices) {
    if (invoice.followUpCount < 3) {
      await sendFollowUp(invoice);
      await incrementFollowUpCount(invoice.id);
    }
  }
  
  // Unresponsive buyers > 24 hours
  const stalledConversations = await getStalledConversations(24);
  
  for (const convo of stalledConversations) {
    await sendNudge(convo);
  }
}

Timeline ​

WeekTasks
1-2Task scheduling infrastructure
3-4Background job matching
5-6Price alerts
7-8Auto follow-ups
9-10Opportunity detection

3.2 Multi-Product Flows ​

What We're Building ​

Connected workflows that span multiple products.

Sell → Source → Resell Flow ​

1. User sells phone cases successfully
   Agent detects: high demand, good margins
   
2. Agent suggests: "You sold 20 cases this month.
   Want me to source more from China?"
   
3. User: "Yes, find similar for under $2"
   
4. Agent (via YeboNa):
   → Finds 5 verified suppliers
   → Shows options with reviews
   → User selects supplier
   
5. Agent (via YeboSafe):
   → Creates escrow for order
   → Collects payment from user
   → Releases to supplier on shipment
   
6. Agent tracks shipment
   → Notifies on customs clearance
   → Notifies on delivery
   
7. Agent (via YeboShops):
   → Auto-lists new inventory
   → Sets prices based on last sales
   → Distributes via Eneza

Learn → Work → Earn Flow ​

1. User: "I want to make money with coding"

2. Agent analyzes job market:
   → Most in-demand: React, Node.js
   → Average salary: $X
   → Jobs available: Y
   
3. Agent suggests learning path:
   → "Start with JavaScript Basics (2 weeks)
   → Then React Fundamentals (3 weeks)
   → You'll qualify for X jobs"
   
4. User enrolls (YeboLearn)
   Agent tracks progress
   Sends reminders
   
5. User completes, gets certificate
   Skills auto-added to profile
   
6. Agent (YeboJobs):
   → Searches matching jobs
   → Auto-applies to 20 positions
   → Schedules interviews
   
7. User gets job
   Agent (YeboLink):
   → Helps with contract
   → Sets up invoicing
   → Collects payments

Technical Spec ​

Flow Engine

javascript
const flows = {
  'sell-source-resell': {
    trigger: { type: 'sales_threshold', count: 10 },
    steps: [
      { action: 'suggest_sourcing', product: 'yebona' },
      { action: 'create_order', product: 'yebona' },
      { action: 'create_escrow', product: 'yebosafe' },
      { action: 'track_shipment', product: 'yebona' },
      { action: 'auto_list', product: 'yeboshops' }
    ]
  },
  
  'learn-work-earn': {
    trigger: { type: 'user_goal', goal: 'make_money' },
    steps: [
      { action: 'analyze_market', product: 'yebojobs' },
      { action: 'suggest_courses', product: 'yebolearn' },
      { action: 'track_learning', product: 'yebolearn' },
      { action: 'update_skills', product: 'yebojobs' },
      { action: 'auto_apply', product: 'yebojobs' }
    ]
  }
};

async function executeFlow(flowId, userId, context) {
  const flow = flows[flowId];
  
  for (const step of flow.steps) {
    const result = await executeStep(step, userId, context);
    context = { ...context, ...result };
    
    // Check if user intervention needed
    if (result.needsConfirmation) {
      await pauseAndNotify(userId, result.question);
      return; // Will resume on user response
    }
  }
}

Timeline ​

WeekTasks
1-2Flow engine architecture
3-4Sell-source-resell flow
5-6Learn-work-earn flow
7-8Cross-product data sync

3.3 Personalization ​

What We're Building ​

Agent that learns and adapts to each user.

User Model ​

javascript
{
  // Communication preferences
  preferredTimes: ['morning', 'evening'],
  responseStyle: 'concise', // or 'detailed'
  language: 'en',
  
  // Behavior patterns
  typicalPriceRange: { min: 500, max: 5000 },
  negotiationStyle: 'firm', // accepts first offer, negotiates, etc.
  responseSpeed: 'fast', // how quickly they reply
  
  // Interests
  categories: ['electronics', 'fashion'],
  skills: ['javascript', 'design'],
  goals: ['increase_sales', 'find_job'],
  
  // Performance
  sellThroughRate: 0.7,
  averageRating: 4.8,
  completionRate: 0.95
}

Learning System ​

javascript
// Update model on each interaction
async function learn(userId, event) {
  const model = await getUserModel(userId);
  
  switch (event.type) {
    case 'message_sent':
      model.preferredTimes = updateTimePreference(
        model.preferredTimes, 
        event.timestamp
      );
      break;
      
    case 'price_accepted':
      model.typicalPriceRange = updatePriceRange(
        model.typicalPriceRange,
        event.price
      );
      break;
      
    case 'negotiation_completed':
      model.negotiationStyle = analyzeNegotiation(
        event.offers,
        event.finalPrice
      );
      break;
  }
  
  await saveUserModel(userId, model);
}

Personalized Responses ​

javascript
async function formatResponse(userId, content) {
  const model = await getUserModel(userId);
  
  // Adjust detail level
  if (model.responseStyle === 'concise') {
    content = summarize(content);
  }
  
  // Adjust tone
  if (model.formality === 'casual') {
    content = casualize(content);
  }
  
  // Respect quiet hours
  if (isQuietHours(model)) {
    return queue(content, model.preferredTimes[0]);
  }
  
  return content;
}

Timeline ​

WeekTasks
1-2User model schema
3-4Learning from interactions
5-6Personalized responses
7-8Timing optimization

Success Metrics ​

MetricTarget
Proactive actions/user/day3+
Auto-apply acceptance rate>30%
Price alert conversion>10%
Multi-product flow completion>50%
User satisfaction>4.5/5

Phase 3 Exit Criteria ​

  • [ ] Agent works proactively (not just reactively)
  • [ ] Cross-product flows working
  • [ ] Personalization noticeable
  • [ ] Users report "it knows me"
  • [ ] Measurable time savings

Next: Phase 4: Scale

One chat. Everything done.