The end-to-end daily-use loop: create company → hire agents → seed tasks → heartbeats fire → agents pick up tasks → review outputs → iterate. Builds the mental model before any code.
By the end of this lesson you'll understand the complete daily-use loop in Paperclip AI — from creating a company through to reviewing agent outputs — before touching any code.
Every interaction with Paperclip follows the same repeating cycle:
1. Create Company
↓
2. Hire Agents
↓
3. Seed Issues (tasks)
↓
4. Heartbeats Fire ←─────────────────┐
↓ │
5. Agents Work │
↓ │
6. Review Outputs ──────── iterate ────┘
Once you reach stage 4, the loop runs automatically on a schedule. Your job as the operator shifts from "doing work" to "reviewing work and adjusting direction."
A Company is the top-level container for everything in Paperclip. All agents, tasks, costs, and logs belong to exactly one company. Think of it as a separate workspace or tenant.
You create a company with a name and a timezone. The timezone drives when daily heartbeat windows fire.
An Agent is a named worker with a role, a system prompt, and an adapter that tells Paperclip how to actually run it (Claude Code CLI, OpenAI API, a webhook, or a shell script).
When you "hire" an agent a human approval gate fires first — you have to confirm the hire. This is intentional: agent creation is a consequential action with real cost implications.
Issues are tasks. They have a title, a description, a status (open → in_progress → completed), and optionally a parent issue for nesting subtasks.
You can create issues manually, bulk-import them via the API, or have a manager agent create them for worker agents to pick up.
A heartbeat is a scheduled trigger that wakes each agent according to its cron schedule. When a heartbeat fires for an agent, Paperclip:
open issue assigned to the agentadapter.invoke(issue) — the adapter runs the actual AI workThe adapter does the work. For a Claude Code adapter this means spawning the claude CLI with the issue as context. For an OpenAI adapter it means calling the chat completions API. For an HTTP adapter it means POSTing to an external endpoint.
The adapter returns a runId. Paperclip polls adapter.status(runId) until the run completes, then captures the output and records the token cost.
After each heartbeat run, Paperclip writes:
- A heartbeat_runs record with status, duration, token count, and cost
- A cost_event with the USD amount charged
- An activity_log entry describing what happened
You review these in the dashboard, check whether the agent moved issues forward, and decide whether to adjust the agent's prompt, add more tasks, or change the schedule.
Paperclip is a control plane, not an execution engine. It decides what agents work on and when — the actual intelligence lives inside the adapters (Claude, GPT, your own code).