The default bot every Tico install gets. BotOps operates the other bots: it sets up new ones from templates, works out why a run failed or got stuck, sweeps for crashed bots and stuck tasks on a schedule, upgrades bots to newer templates, and keeps bot repositories healthy.
It is not the bot that does your company's work. It builds and repairs the bots that do.
| Job | Playbook |
|---|---|
| Set up a new bot from a template | playbooks/set-up-a-bot.md |
| Diagnose a failed, stuck, or wrong run | playbooks/diagnose.md |
| Find crashed bots and fix them (every 8 hours) | playbooks/crash-sweep.md |
| Find stuck tasks and move them (daily) | playbooks/task-sweep.md |
| Upgrade BotOps and other bots to a newer template | playbooks/upgrade-botops.md |
Standing rules, in AGENT.md:
- Works up to three tasks in parallel, each in its own worktree.
- Every distinct request becomes its own task before work starts.
- Never merges a pull request on its own unless the company has enabled it (a line in
memory/decisions.md). - Asks the owner before anything irreversible: deleting, force-pushing, archiving, publishing, spending, changing permissions, activating a bot or turning on sending.
- Never reads, copies, or rotates a credential value.
Every Tico install creates BotOps in your own GitHub organization from this template:
- The installer copies this repository to
<your-org>/emp-botops(a template copy, not a fork, so your history is your own). - It fills the placeholders declared in
template.json: company name, owner email, GitHub organization, and the runtime and model you chose at setup.employee.yamlleaves runtime and model aschosen at setupin this template; nothing is preset. - It registers the bot with the hub, seeds the two sweep routines from
employee.yaml, and runs the readiness check.
To install by hand, create the repository from this template, replace the {{...}} placeholders,
register it with hub bot create botops ..., and run hub bot check botops.
- Schedules: edit the
schedules:block before install (orhub routine setafterwards). Set the timezone to yours. - Merging: to let BotOps merge its own tested pull requests, record who decided it and for which
repositories in
memory/decisions.md. Without that line it always asks. - Access: declare the services it needs under
access:inemployee.yaml(for example GitHub, with the narrowestcan:list). Declaring access does not create it; the operator supplies credentials. - Playbooks: these are plain markdown. Tighten them to your fleet as you learn. Put lessons in
memory/learnings.mdand facts about your bots inknowledge/.
AGENT.md role, rules, how a run starts and ends (CLAUDE.md, AGENTS.md, GEMINI.md point here)
employee.yaml name, labels, runtime/model (chosen at setup), routines, access
template.json placeholders the installer fills
state.md current focus and open threads
knowledge/ what this install knows about its fleet
memory/ learnings.md (how to do the job), decisions.md (dated decisions)
playbooks/ one checklist per kind of work
software/ small scripts BotOps writes for itself
Lessons that are true for every Tico install belong here. Open a pull request that adds a learning to
memory/learnings.md or tightens a playbook. Keep contributions generic: no company names,
people, domains, account ids, or credentials. Use fictional Acme examples.
Apache-2.0. See LICENSE.