Keep Track of Context Without Effort
You have context scattered across email threads, calendar invites, chat messages, and last week's notes. To keep track of it all, you depend on your memory. Memory drops things. Outpost is a personal operations center that runs AI agents on a schedule.
The agents sync your email and calendar. They build a knowledge graph of the people and projects you work with. They prepare briefings before meetings. You set it up once. It keeps working in the background.
By the end of this guide, Outpost runs against your knowledge base. It maintains a continuously updated picture of your work context.
Prerequisites
Complete the Getting Started: Outpost for Engineers guide first. That guide covers how to install Outpost, how to initialize the knowledge base, and how to start the scheduler. This guide assumes your knowledge base works and your scheduler runs.
See what your agents do
Outpost ships with six agents. Each agent owns a slice of your context. After the scheduler runs for a cycle or two, check what happened:
npx fit-outpost status
Expected output:
Outpost Scheduler
==================
Agents:
+ postman
KB: ~/.local/share/fit/outpost/Team Schedule: {"type":"cron","expression":"*/15 8-18 * * 1-5"}
Status: idle Last wake: 5/4/2026, 9:15:00 AM Wakes: 12
Last action: Synced 3 new mail threads
+ concierge
KB: ~/.local/share/fit/outpost/Team Schedule: {"type":"cron","expression":"*/30 8-18 * * 1-5"}
Status: idle Last wake: 5/4/2026, 9:00:00 AM Wakes: 6
Last action: Prepared briefing for 10:00 AM standup
+ librarian
KB: ~/.local/share/fit/outpost/Team Schedule: {"type":"cron","expression":"0 9,12,15,18 * * 1-5"}
Status: idle Last wake: 5/4/2026, 9:00:00 AM Wakes: 3
Last action: Extracted 5 entities from recent mail
+ chief-of-staff
KB: ~/.local/share/fit/outpost/Team Schedule: {"type":"cron","expression":"0 7,18 * * 1-5"}
Status: idle Last wake: 5/4/2026, 7:00:00 AM Wakes: 2
Last action: Compiled daily briefing
+ recruiter
KB: ~/.local/share/fit/outpost/Team Schedule: {"type":"cron","expression":"0 8,12,17 * * 1-5"}
Status: never-woken Last wake: never Wakes: 0
+ head-hunter
KB: ~/.local/share/fit/outpost/Team Schedule: {"type":"cron","expression":"0 9 * * 1-5"}
Status: never-woken Last wake: never Wakes: 0
A + prefix marks an enabled agent. A
- prefix marks a disabled agent. Each entry shows a
knowledge base path, a schedule, and a tally of wakes and last
actions. The four agents that matter most when you track context day
to day are:
| Agent | What it maintains |
|---|---|
| postman | Syncs email from Apple Mail and drafts responses |
| concierge | Syncs calendar from Apple Calendar and prepares briefings |
| librarian | Extracts people, projects, and topics into the knowledge graph |
| chief-of-staff | Reads all agent state and compiles a daily overview |
The recruiter and head-hunter agents handle engineering recruitment workflows. The default configuration includes them. They do not activate unless you have candidate data in your knowledge base.
Understand the knowledge graph
As agents sync email, calendar, and chat data, the librarian processes it into a knowledge graph. The graph is plain markdown files inside numbered tier directories at the knowledge base root. Each tier is one unit of sharing. A lower tier number means a narrower audience:
~/.local/share/fit/outpost/Team/ # The KB root: an Obsidian vault
├── 0-Draft/ # Tier 0: you only -- never shared
├── 1-Management/ # Tier 1: senior managers
├── 2-Confidential/ # Tier 2: managers with hiring duties
│ └── Candidates/ # Candidate records and assessments
├── 3-Team/ # Tier 3: the whole team
│ ├── People/ # One note per person you interact with
│ ├── Organizations/ # Companies, teams, departments
│ ├── Projects/ # Active projects and initiatives
│ └── Topics/ # Technical topics and recurring themes
├── 4-Public/ # Tier 4: anyone
├── Briefings/ # Personal: briefings from chief-of-staff
├── registry.yaml # Personal: metadata vocabularies
├── CLAUDE.md # Personal: agent instructions for this KB
└── .claude/
├── agents/ # Agent definitions (one per agent)
└── skills/ # Skill definitions agents use
The tier directories are the graph. Every other root entry is personal and never shared. Sharing is cumulative. A member who receives tier 2 also receives tiers 3 and 4. Shares travel over any folder-syncing mount, such as OneDrive or Git. A shared tier directory is often a symlink into a separately synced folder. Keep the vault root outside every cloud-synced folder. Tier 0 then never leaves your machine.
Notes use Obsidian-compatible wiki links. Links in shared tiers are
tier-prefixed, for example
[[3-Team/People/Sarah Chen]]. A note links only to its
own tier or to a wider one. Agents place each note in the widest
tier that excludes everyone who must not read it. You can browse the
graph in Obsidian or in any markdown editor. Each person note
accumulates context from every email, meeting, and conversation
where they appeared. That is the kind of background you would
otherwise reconstruct from memory before a meeting.
You can search the graph directly:
rg "Sarah Chen" ~/.local/share/fit/outpost/Team/3-Team/
People/Sarah Chen.md:3:Engineering Manager at Acme Corp
People/Sarah Chen.md:8:Last seen: standup 2026-05-02
Projects/Auth Migration.md:12:Lead: [[3-Team/People/Sarah Chen]]
Topics/Platform Reliability.md:5:Raised by [[3-Team/People/Sarah Chen]] in Q1 review
The search returns every note that mentions the person across all entity types. You see the full context in one search.
Split one entity across tiers with overlays
Some entities carry facts for different audiences. A colleague who
is also a candidate has a team-safe person note and confidential
recruitment records. An overlay keeps both without
a leak. The overlay is a note in a narrower tier. It declares its
canonical note in the wider tier with a one-way
canonical link. The canonical note never links back.
Three overlay forms cover the common cases:
- Facet — the overlay holds the sections for the narrower audience.
- Timeline split — the canonical note keeps the wide-audience dated entries. The overlay holds narrower entries under the same date keys.
- Inverse stub — when the content is narrow but widely linked, a wider-tier stub carries only shareable identity facts. The narrow note links down to it.
Send a copy to an ad-hoc audience with an export
Some audiences are not tiers. A deliverable for one named recipient
and a brief for a panel of peers are export cases.
An export sends a copy of a note or a note's body through mail,
chat, or a file hand-over. The note itself keeps its tier. Agents
compose export bodies in 0-Draft/. Nothing leaves until
you approve it.
One metadata standard binds every tier
Agents stamp YAML frontmatter on every note they write. Every shared
note carries type, created, and
updated. Conditional keys such as
aliases and status follow strict triggers.
The vocabularies live in registry.yaml at the KB root.
You edit the registry. Agents only select from it. Tags form a
closed topic/ taxonomy from the same registry.
The payoff is coherence across tiers. Obsidian Bases group notes by
type and status across every tier you
hold. Aliases reunite a person note and its candidate record in the
quick switcher. Path-keyed graph groups color each tier in the graph
view. The note path stays the only tier authority. Frontmatter never
carries a tier or audience key.
Customize agent schedules
The default schedule runs agents during business hours on weekdays. You may want to adjust when agents run. For example, adjust it if you work across time zones or want briefings earlier.
Agent schedules live in the Outpost configuration file at
~/.fit/outpost/scheduler.json. Each agent entry
specifies a knowledge base path, a required
privilege level, a schedule, and whether the agent is
enabled. Use full for agents that sync the live
mail/calendar stores or send mail. Use restricted for
agents that only process already-synced content:
{
"agents": {
"postman": {
"kb": "~/.local/share/fit/outpost/Team",
"privilege": "full",
"schedule": { "type": "cron", "expression": "*/15 8-18 * * 1-5" },
"enabled": true
},
"chief-of-staff": {
"kb": "~/.local/share/fit/outpost/Team",
"privilege": "restricted",
"schedule": { "type": "cron", "expression": "0 7,18 * * 1-5" },
"enabled": true
}
}
}
The schedule object supports three types:
| Type | Format | Example |
|---|---|---|
cron |
Standard cron expression in
{ "type": "cron",
"expression": "..." }
|
*/30 8-18 * * 1-5 (every 30 min, business hours)
|
interval |
Minutes between wakes in
{ "type": "interval",
"minutes": N }
|
{ "type": "interval",
"minutes": 10 }
|
once |
Single run at a specific time in
{ "type": "once", "runAt":
"..." }
|
{ "type": "once", "runAt":
"2026-05-05T09:00:00Z" }
|
To disable an agent and keep its configuration, set
"enabled": false. Restart the daemon after
you edit the file:
npx fit-outpost stop
npx fit-outpost daemon
Scheduler stopped.
Scheduler started (6 agents, daemon mode).
Wake an agent on demand
You do not have to wait for the next scheduled cycle. To run an agent immediately:
npx fit-outpost wake postman
Waking postman...
Synced 2 new mail threads
Done (4.2s)
Use this when new email arrived and you want the postman to sync it before a meeting. Use it also when you want a fresh briefing:
npx fit-outpost wake chief-of-staff
Waking chief-of-staff...
Compiled daily briefing (12 items)
Done (6.8s)
The chief-of-staff reads triage files from all other agents and
compiles a briefing in Briefings/. Each briefing
summarizes what changed since the last one: new emails, upcoming
meetings, open threads, and action items.
Update agents and skills
Outpost ships updated agent definitions and skills with each release. To fetch the latest into your knowledge base:
npx fit-outpost update ~/.local/share/fit/outpost/Team
Updating ~/.local/share/fit/outpost/Team...
CLAUDE.md updated
agents/postman.md updated
skills/sync-apple-mail unchanged
settings.json merged (2 new permissions)
Done.
Omit the path to update the knowledge base in the current directory. You can then run the command from inside the KB:
cd ~/.local/share/fit/outpost/Team
npx fit-outpost update
The update copies the latest CLAUDE.md, agent
definitions, skill files, and settings into your knowledge base. It
merges new permissions into your existing
settings.json. It does not overwrite your
customizations.
Validate your setup
After you update or change agent configurations, confirm the setup:
npx fit-outpost validate
Expected output when all agents and knowledge bases are valid:
Validating agents...
[OK] postman: agent definition
[OK] concierge: agent definition
[OK] librarian: agent definition
[OK] chief-of-staff: agent definition
[OK] recruiter: agent definition
[OK] head-hunter: agent definition
All OK.
Knowledge base: ~/.local/share/fit/outpost/Team
OK
The validator first checks that each configured agent has a matching
definition file in .claude/agents/. The file can live
in the knowledge base or in your global
~/.claude/agents/ directory. A
[FAIL] result means the agent definition is missing.
Run npx fit-outpost update <path> to restore it,
or run npx fit-outpost update from inside the knowledge
base.
The validator then runs the knowledge checks on each configured
knowledge base. It checks tier ranks, link direction, link
resolution, link format, literal path strings, legacy layouts, and
note frontmatter and tags. A
validation-baseline.json file at the KB root downgrades
known findings to warnings. New findings exit with a non-zero code.
Pass a path to check one vault or a received share (npx fit-outpost validate <path>). Add --json for machine-readable findings.
Verify
You reach the outcome of this guide when:
-
npx fit-outpost statusshows agents with recent wake times and action summaries. Outpost tracks context automatically. -
Your knowledge base contains notes under
3-Team/People/,3-Team/Projects/, and3-Team/Organizations/. The agents build the knowledge graph from your email and calendar. -
Briefings/contains at least one daily briefing. The chief-of-staff compiles context across all agents. -
You can search the graph with
rg "name" 3-Team/and find cross-referenced context about a person or project.
If any of these are missing, check
npx fit-outpost status for errors. Then review the logs
at ~/.fit/outpost/logs/.