Skip to content

Example Packs

Three concrete pack shapes — English Coach, Creator Studio, Daily Journal — with the storage, memory, cron, and skills each one actually needs.

A pack is judged by whether it keeps a real user coming back for weeks. The way to evaluate the format is to look at three concrete shapes a serious vertical agent app might take.

This page sketches each one — its memory, its tables, its cron jobs, and the skills that move data through it.

“Remember what I got wrong last week and quiz me on it this morning.”

A pack that runs a long-term English-learning loop. The user practices daily; the pack tracks what they confuse and surfaces it in tomorrow’s mission.

memory/
├── soul.md — Coaching tone: encouraging, specific, not patronizing
├── user.md — Stable: CEFR level, target (IELTS), available minutes/day
└── state.md — Evolving: this week's focus, recent mistake patterns
schema.sql
├── writing_submissions — every paragraph the user has written
├── review_queue — SRS items with phrase, due_at, ease_factor
├── mistake_patterns — recurring error types (article use, tense agreement)
└── weekly_progress — week-keyed summary rows
SkillTriggerWrites
onboardingFirst openuser.md (CEFR, goals), seed state.md
daily_mission9am cron, manualwriting_submissions
writing_feedbackAfter submissionreview_queue, mistake_patterns
vocab_reviewManual, buttonUpdates review_queue.ease_factor
weekly_reportSunday 8pm cronweekly_progress
aggregatorWeeklyUpdates state.md summary
cron:
- { id: daily_practice, schedule: "0 9 * * *", skill: daily_mission }
- { id: weekly_review, schedule: "0 20 * * 0", skill: weekly_report }

Everything the agent says next morning is grounded in review_queue and mistake_patterns, not the conversation history. The user can open state.md and read exactly what the pack thinks of them. If something is wrong, they can edit it.

“Capture this link, draft three angles for it, slot the best one on Thursday.”

A pack that turns raw inputs (URLs, ideas, screenshots) into a publishing pipeline. The user feeds it material; the pack drafts, scores, and schedules.

memory/
├── soul.md — Writing voice: tight, opinionated, no fluff
├── user.md — Stable: target platforms, audience, tone constraints
└── state.md — Evolving: this week's themes, posts in flight
schema.sql
├── sources — captured URLs, notes, attachments
├── ideas — angles extracted from sources
├── drafts — drafts with status (queued / scheduled / published)
├── publishing_log — what shipped where, when
└── brand_voice — accepted/rejected drafts → tone signal over time
SkillTriggerWrites
captureInbound link or notesources
ingest_urlAsync after captureEnriches sources with summary
prompt_meManual, buttonideas from existing sources
draft_postManual, buttondrafts with platform variant
score_draftAfter accept/rejectUpdates brand_voice
weekly_planSunday cronReorders the drafts queue
cron:
- { id: morning_idea, schedule: "0 8 * * 1-5", skill: prompt_me }
- { id: weekly_plan, schedule: "0 18 * * 0", skill: weekly_plan }

The pack does not “be a writing assistant.” It runs the loop the user actually does: capture → angle → draft → ship → review. Each step writes structured data that the next step reads. A general chat assistant has to be re-told all of that every conversation.

“Two weeks of notes — what kept coming up?”

A pack for reflective journaling, mood tracking, and weekly review. Lighter on tables than the other two, heavier on memory.

memory/
├── soul.md — Companion tone: warm, curious, not therapeutic
├── user.md — Stable: rough rhythm, life areas being worked on
└── state.md — Evolving: themes from the past 2-4 weeks
schema.sql
├── daily_notes — date, content, mood tag, energy
├── goals — long-running goals with status
├── action_items — extracted next-actions from notes
└── weekly_reviews — synthesized weekly summary rows
SkillTriggerWrites
daily_note9pm cron, manualdaily_notes
extract_actionsAfter noteaction_items
review_weekFriday evening cronweekly_reviews
theme_finderManualUpdates state.md themes
cron:
- { id: evening_prompt, schedule: "0 21 * * *", skill: daily_note }
- { id: friday_review, schedule: "0 19 * * 5", skill: review_week }

The user does not have to “remember to journal.” The pack opens the conversation at 9pm. The user does not have to “write a weekly summary.” The pack offers one on Friday based on the past 7 days of daily_notes. The memory contract lets the agent stay coherent across weeks.

PropertyWhy all three need it
Typed stateThe thing the user keeps coming back to is the accumulated state, not the last reply
Per-pack memorysoul.md/user.md/state.md keep each pack in its own voice
ScheduleThe pack opens the conversation; the user does not have to remember to engage
Permission scopeEach pack only touches what its pack.yml declares
Eval surfaceEach pack can be regression-checked: did the SRS scheduler still pick the right cards? did drafts still match the brand voice?

If a vertical agent doesn’t need at least four of those, it probably doesn’t need to be a pack. A one-shot tool does not need a .aouo bundle.

These three are sketches — they are not shipped as code in this repo. The samples actually in apps/ (notes, create, vocab) are earlier and smaller versions of the same idea.

To start: see Your First Pack, then Pack Spec and Schema & Persist.