For a while, Tim would "schedule" content and nothing would happen. I'd come back the next day to find five draft posts sitting there, unpublished. The AI had done its job in the chat session. But the chat session ended. And so did the schedule.

The Problem With Chat-Based Scheduling

This is a subtle failure mode that's easy to miss. When you ask an AI to schedule something, it can tell you "I've scheduled this post for 3pm tomorrow" and it will sound completely correct. But unless that schedule is written somewhere that a real system watches, it's just words in a conversation.

The AI isn't running in the background at 3pm, waiting to post. The AI is a stateless tool. When you close the tab, the session is gone. The "schedule" existed only in context — and context dies with the session.

I had five posts sitting as drafts in Documentor. Tim had created them, written the content, and told me they were scheduled. They weren't. They were just drafts with a note in the chat saying "schedule for Tuesday." Tuesday came and went.

The Fix: A Real Scheduler Inside Documentor

The fix was to build actual scheduling into Documentor itself. Not rely on the AI to remember — give the database a "Scheduled" status with a specific datetime field, then have a background job that checks every 60 seconds for content that's due.

Now the flow looks like this:

  1. Tim creates the content and writes it to the database with status "Scheduled" and a specific timestamp
  2. A background worker runs every minute, queries for any content where scheduled_time has passed and status is still "Scheduled"
  3. When it finds something due, it posts it to Facebook and updates the status to "Published"
  4. Done — no human needs to be involved

The difference is that the schedule now lives in the database, not in the AI's context. The database persists. The background job persists. The chat session is irrelevant.

Queue Management

Once you have real scheduling, you need real queue management. You can't just schedule everything for "now" or "tomorrow" without checking what's already queued.

The rule I built in: before scheduling any new content, Tim checks two things. First, when was the last post actually published? Second, what's the latest scheduled time already in the queue? Then it schedules the new content 3 hours after whichever is later.

This means content naturally spaces itself out. If I ask Tim to create three posts in one session, he'll schedule them 3 hours apart — not all at 2pm. And if he's picking up where a previous session left off, he checks the database first so he doesn't stack everything on top of existing scheduled posts.

Before I had this rule, I ended up with four posts scheduled for the same hour once. The queue management is simple in concept but it only works if the AI is actually checking the live database state rather than relying on what it "knows" from the current conversation.

The Deeper Principle

There's a clear line between a chatbot and an integrated system. A chatbot gives you answers inside the conversation. An integrated system writes state to persistent storage and runs background processes that act on that state.

A chatbot can help you plan. An integrated system can execute the plan after you've closed your laptop.

This shows up everywhere in how I build things. Tim isn't just a chatbot — he's an agent with access to real systems. But access alone isn't enough. The systems themselves need to be built so that AI actions have persistent effects. If Tim writes a cron job, the cron job needs to actually be registered. If Tim schedules content, the schedule needs to live in a database with a worker watching it.

The failure mode — AI says "done" but nothing actually persisted — is one of the more frustrating ways AI tools disappoint people. They talk a good game in the chat window and then nothing changes in the real world.

What I Check Now

Before creating any new scheduled content, Tim runs a quick query against Documentor's database: show me everything with status "Scheduled" or "Published" in the last 24 hours, ordered by time. This gives a clear picture of the queue before adding to it.

It's a small habit but it means I never accidentally post four things in an hour or go three days without anything going out because content sat as a draft. This queue discipline became especially important when scaling the Vietnamese pages to full automation — activating image workflows on top of existing video schedules meant careful spacing across twice the content volume.

The content approach matters a lot here too. If you're creating content that actually deserves to be read, you want it to land at the right time with proper spacing — not dumped all at once because the AI forgot to check the queue.

The scheduling piece is one of the most common requests I get. People want their AI to post content automatically every day, but they're using tools that forget everything when the session closes. Jarvis runs on a dedicated server that stays on 24/7 — your agent schedules content, checks the queue, and posts on time, even when you're asleep.

— Pond