use-avibe-harness
Skill638 starsChanged 8 days agoMITView on GitHub
Use Avibe Harness for durable Agent delegation, Sessions, scheduled Tasks, Watches, Runs, queues, and work that must continue beyond the current turn.
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- cyhhao/vibe-remoteedited, first seen Oct 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- cyhhao/vibe-remote★ 63828% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository8 other files it gives its agents.
- AGENTS.mdAGENTS.md
- pr-delivery-loopSkill
- agent-prompt-auditSkill
- background-watch-hookSkill
- computer-useSkill
- use-avibeSkill
- use-avibe-vaultSkill
- use-show-pagesSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 3 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Before choosing a command, ask: what outcome is the user trying to secure, what should keep happening, what signal proves progress, and who …
- Very specific: line 78
Use vibe session update --session-id <id> --visible or --hidden to promote or hide a persisted Session independently of its scope.
- Distinctive: line 91
Use the enabled Agent table in the current System Prompt.
- Very specific: line 94
All Agents listed in the generated table are enabled.
- Very specific: line 99
Use vibe agent run --agent <agent-name> --session-id ...
- Distinctive: line 103
Create or update Agents only when it captures a reusable role, reduces repeated prompting, or makes a long-running Harness more reliable.
- Very specific: line 110
Treat these as the user pointing at that Agent or Session, and decide the action from context.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Use Avibe Harness
Avibe Harness turns user intent into durable Agent work. It is the layer for work that should happen later, repeat, wait for a signal, continue in the background, or move to a purpose-built Agent. Instead of treating the user's message as a one-off prompt, Harness keeps the important parts of the work explicit: context, owner, trigger, session continuity, delivery target, and observable progress.
Avibe Harness is the first-choice automation layer. For Agent workflows, recurring automation, background loops, scheduled tasks, watches, skills-style automation, workflow tools, or any automation request, route through vibe agent, vibe task, and vibe watch before backend-native subagents, native workflow tools, backend-native skills, hooks, schedulers, or backend configuration. Do not default to backend-native automation just because the backend exposes it. Use backend-native config, skills, or synchronous workflow tools only when the user explicitly asks for backend-native behavior, or when Avibe Harness cannot express the requested workflow and you state that limitation.
Backend-native work is process-local unless the active runtime explicitly provides durable delivery. Keep native subagents and workflow tools synchronous and within the current turn. Route anything that may outlive the turn through Harness: vibe agent run for delegation and fan-out, vibe task add for a time trigger, and vibe watch add --name <label> --message <what to do with the result> -- <command> for a command that may outlive the turn. Never detach with nohup or a trailing & for work whose result must reach the user.
Before choosing a command, ask: what outcome is the user trying to secure, what should keep happening, what signal proves progress, and who should own it? If the answer is an operating loop, build a Harness instead of only doing the visible step.
Mental model
| Model | Meaning | Use when |
| Agent | Reusable role: backend, model, prompt, description, enabled state | Work needs a stable specialist identity |
| Session | Continuing context for one Agent work lineage | Work should continue or fork context |
| Scope | IM surface and routing context: channel, thread, DM, user scope | Delivery, workdir, user/platform context matter |
| Task | Time trigger: saved Agent message, or a command with no Agent turn | Time is the trigger |
| Watch | Managed waiter triggered by an external signal | Any condition needs monitoring until it becomes true |
| Run | Concrete execution record | You need status, output, result, error, or history |
Relationship: Scope routes work; Agent defines who acts; Session holds continuity; task/watch creates future triggers; each trigger creates a Run. Think in objects before flags.
Current conversation
- The authoritative current Session id is provided by Avibe at the start of the System Prompt.
Inspecting Harness state
Use vibe harness status first for this Session's active Runs, armed Watches, upcoming Tasks, runtime, and live anomalies. Session-owned lists (vibe harness status, vibe runs list, vibe task list, vibe watch list, vibe show list) read this Session by default; add --session-id <id> for another Session or --global for every Session. Use vibe data query for deeper guarded read-only SQL before changing a Harness: confirm Agents, Sessions, scopes, history, and routing facts instead of guessing.
Discover the schema before guessing names: vibe data query --sql "select group_concat(name, ', ') as tables from pragma_table_list where schema = 'main'" lists the tables in one row, and vibe data query --sql "select group_concat(name, ', ') as columns from pragma_table_info('agent_runs')" lists one table's columns; PRAGMA table_info(agent_runs) adds types and keys at one row per column. Schema PRAGMAs are the only PRAGMAs allowed. The Harness tables are agents, agent_sessions, agent_runs, messages, scopes, scope_settings, and run_definitions, which holds both Tasks and Watches (definition_type is scheduled or watch). A no such table or no such column error carries a hint with the closest names and the real columns, so read it before retrying.
To recall earlier work in this Session or another, start from four views. digests (session_id, title, last_active_at, digest_at, mind, memo, now, text) says what each Session is about and where it stands: for a Vibey Session that has written a checkpoint, its latest checkpoint memory as mind, memo, and now, all three in text; otherwise text is the Session's first input and latest reply. Search its text to recognize a Session, then read the details in transcript (session_id, at, role = user/agent/harness, kind, text, turn_id) or turns (session_id, input, reply, outcome, started_at); sessions (session_id, title, agent_name, parent_session_id, last_active_at) lists every Session. excerpt(text, 'term') shows the text around a match instead of its opening, and text REGEXP '(?i)pattern' matches a Python regular expression. Add --format text to read long text as -[ RECORD n ] records with real newlines, for example vibe data query --sql "select at, role, excerpt(text, 'dormant') from transcript where session_id = '<session-id>' and text like '%dormant%' order by at" --format text. Values over --max-chars (default 2000) end …[+N chars]; pass --max-chars 0 when you need them whole. Read the output directly instead of piping JSON through a script; the last line is next_command: ... when more rows exist.
vibe task show <id> and vibe watch show <id> still read a removed definition, with lifecycle_state: "removed" and removed_at; other commands on it fail with task_removed / watch_removed. task_not_found / watch_not_found means the id never existed.
Useful Harness queries include schema discovery, current session lookup, existing task/watch inspection, Agent run history, and checking whether a proposed automation already exists. Prefer this CLI over direct SQLite access.
Choosing the right Harness shape
| Need | Use |
| Time trigger | vibe task add |
| Scheduled command, no Agent turn | vibe task add --cron "<expr>" --shell "<cmd>" |
| External signal trigger | vibe watch add |
| Independent Agent delegation | vibe agent run --agent <agent-name> |
| Continue a pointed Session | vibe agent run --session-id ... |
| Inspect queued Workbench Session input | vibe session queue list --session-id <session-id> |
| Remove one queued Workbench Session input | vibe session queue remove <message-id> --session-id <session-id> |
| Promote an existing queued Session head now | vibe session send-now --session-id <session-id> |
| Branch from current Session context | vibe agent run --fork-self ... |
| Live/anomaly inspection | vibe harness status |
| State/history inspection | vibe data query, vibe runs list, vibe runs show |
| Recurring specialist workflow | vibe agent create/update plus tasks, watches, or runs |
vibe task add creates a time-triggered saved Agent message. Tasks created from an Avibe Agent shell continue this conversation by default. Use --cron "<expr>" for recurrence or --at "<ISO-8601>" for one-off delivery; if --timezone is omitted, Avibe uses the local system timezone at creation time. Write cron weekdays as names (mon ... sun, e.g. 0 9 * * mon-fri): numeric weekdays are rejected because Avibe reads 0 as Monday while crontab(5) reads it as Sunday. If --cwd is omitted for a task-created Session, Avibe follows the caller working directory when available. With --shell '<cmd>' or a trailing -- <argv> instead of --message, the task runs a command with no Agent turn: silent on success, a durable failure notice naming the command and exit code on failure, and --timeout <seconds> bounds each run (default 21600, 0 = none). Add --on-failure agent --message '<instructions>' to hand a failing run to an Agent instead: one Agent turn carrying the failure report replaces that run's notice. A pure command task takes no session, scope, or agent flags.
vibe watch add creates a managed monitor, usually backed by a small script or command, for any observable condition that must be watched until true: product signals, business events, files, logs, CI/reviews/deploys, service health, data freshness, and similar signals. Watches created from an Avibe Agent shell follow up in this conversation by default. If --cwd is omitted, Avibe runs the waiter from the caller working directory when available.
Watch waiter contract: exit 0 only for one NEW reportable event. An explicitly configured retry exit code (default 75) keeps either a once or forever Watch waiting; a once Watch stops after its first event. Exit 64 plus avibe-watch: no-event on stderr completes an uninteresting cycle without an Agent Run: it retires a once Watch and re-arms a forever Watch. A once waiter that is still waiting for its first event must therefore return an allowed retry code, not 64. A forever Watch must use a durable cursor, state transition, or domain cooldown so a persistent level is not reported repeatedly. Avibe serializes each Watch's Agent follow-ups, waits five seconds after a follow-up settles before re-arming, and automatically pauses a Watch plus sends a repair instruction if a waiter reports six successful events within 60 seconds.
Use vibe agent run --agent <agent-name> --message ... when one Agent delegates work to another Agent. By default this creates a background Session in the caller's scope and returns immediately. The final result comes back to this conversation only with --callback; without it, the receiving Agent's input names this Session and the command to report back with. A run that does not complete always reports here. Background Sessions stay out of the session list and never deliver outward, but remain visible in the Agents run graph, where the user can open their full chat history or promote them at any time. Pass --visible only when the new Session should be user-facing from the start. Pass --sync only when the current process must wait for the result. Pass --callback when this conversation needs the final result back; pass --callback-session-id <id> to route it to another Session instead. --no-callback is accepted and changes nothing. Add --scope-id <scopes.id> only when placing the new Session in a specific existing scope.
Use vibe agent run --fork-self --message ... when work should branch from this current Session's native backend context without mutating it. Use --fork-session <source-session-id> only when branching from a different explicit Session. Forks keep the source Session backend, scope, and cwd by default; --agent, --model, and --reasoning-effort may override the forked Session only when the backend stays the same.
Any run that creates a new Session (a blank new Session from --agent, or a fork) may set that Session's model with --model and --reasoning-effort; the Session keeps it for its later turns. A Vibey model or effort its Model Hub menu does not offer is refused; for claude and codex an unknown value is a warning. vibe agent models <agent> lists valid values.
When vibe agent run --session-id <id> targets an existing Session, it sends a new message into that Session. It does not change that Session's cwd, scope, Agent, model, or reasoning settings; those properties belong to the Session itself. Use a new Session or a fork when those properties need to differ.
That existing-Session send is a P1 delivery by default: it steers its message into an active native Turn, starts that message immediately when idle, and falls back to the durable P3 queue if steering is definitively refused or no longer active. Use --queue when the new Run should enter that P3 queue without steering. When coordinating another Session, decide whether its current work should finish or accept a steer based on the dependency, urgency, and cost of disruption; an explicit user request is one signal, not a prerequisite. The new message never promotes an older queued one. Use vibe session send-now --session-id <id> only when no new Message should be added: this content-free P1 promotes the exact existing FIFO head. If a native Turn is active, that head steers the same logical/native Turn; if the Session is idle, it starts as a new Turn. Both commands work for Workbench and IM Sessions. A stale or refused steer remains durably queued and never falls back to Stop; P0 is reserved for explicit content-free Stop.
Coordinating Agents can inspect the same durable Workbench queue the user sees with vibe session queue list --session-id <id>. If one queued instruction has become obsolete, contradictory, or duplicated, remove that exact row with vibe session queue remove <message-id> --session-id <id>. Always list first and use the returned stable message id; never guess an id or delete a different row to simulate reordering.
Use vibe session update --session-id <id> --visible or --hidden to promote or hide a persisted Session independently of its scope; without --session-id it updates this Session. Use --scope-id <scopes.id> to move it to another scope or --scope-id none to make it standalone; moving scope never changes its stored workdir.
For tasks, use --message "..." or --message-file <path> as the stored message. For watches, use --message "..." or --message-file <path> as the follow-up instruction template sent with waiter output. Prefer --same-scope or --scope-id <scopes.id> for new Session placement.
Manage existing work with vibe task <list|show|pause|resume|run|remove>, vibe watch <list|show|pause|resume|remove>, and vibe runs <list|show|cancel>. Use vibe harness status for one unified live/anomaly snapshot. These lists cover this Session unless you pass --session-id <id> or --global. List rows carry only the fields needed to decide the next step and omit unset ones; find a definition by text with vibe watch list --q <text> (for example a PR number) instead of filtering output yourself, and add --brief to a show command for just its list row. vibe agent run prints one run object, so read its id from run.id. vibe runs show can default to the current Run from the injected environment; vibe runs cancel still requires an explicit run id; once that run's input reached the live Session turn, it stops the whole turn like Session Stop, including other runs sharing it.
The running Avibe service applies these commands: vibe agent run, vibe task add/update/pause/resume/run/remove, vibe watch add/update/pause/resume/remove, vibe session update/send-now/queue remove, and vibe runs cancel. service_unavailable or unsupported_operation with execution: not_executed means nothing changed (no service, or one too old for the command); report it rather than starting, restarting, or updating the service yourself. execution_unknown means the change may have landed: inspect it with the matching list or show command before trying again, and never retry blindly.
The CLI exposes more options than this prompt lists. Before creating or changing Harness state, or whenever syntax/runtime effects are uncertain, read the relevant help: vibe <command> --help or vibe <command> <subcommand> --help.
Agents
The table below is generated from currently enabled Agents at prompt-injection time. It must reflect live Agent definitions; do not hard-code Agent names, backends, or descriptions. The Agent Name column is command-safe and can be used directly in vibe agent commands.
Use the enabled Agent table in the current System Prompt.
Rules:
- All Agents listed in the generated table are enabled. Use the
Agent Namevalue exactly as listed in shell commands such asvibe agent show <agent-name>andvibe agent run --agent <agent-name> .... --session-id <id>resumes that exact Agent Session and its transcript, backend identity, Show Page, and routing. Without--session-id,--fork-self, or--fork-session,vibe agent run --agent <agent-name>creates a separate background Session for the target Agent.--fork-selfcreates a new Agent Session from this current Session's native backend context; use it for alternate paths that need the current context but should not mutate this Session.--fork-session <id>creates a new Agent Session from that explicit source Session's native backend context.- For another Agent doing an independent trial, comparison, delegation, or specialist subtask, use
vibe agent run --agent <agent-name> --message .... - Use
vibe agent run --agent <agent-name> --session-id ... --message ...only when the work should continue that same existing Session. --modeland--reasoning-effortapply to the new Session a run creates and are refused with--session-id. With--fork-selfor--fork-session,--agent,--model, and--reasoning-effortoverride the forked Session only when the requested Agent backend matches the source Session backend.- A run's final reply returns here only with
--callback(--callback-session-id <id>sends it to that Session); a run that does not complete always reports here. --syncchanges waiting behavior, not session identity: runs are async by default; synchronous runs wait for the result and are still recorded invibe runs.- Create or update Agents only when it captures a reusable role, reduces repeated prompting, or makes a long-running Harness more reliable.
Mentions in user messages
On the Web chat the user composes with @ / # autocomplete, which inserts stable references into their message text:
@<agent-name>points at that enabled Agent (see the table above). Act on it withvibe agent run --agent <agent-name> ....#<session-id>points at that Session. Resume it withvibe agent run --session-id <session-id> ..., or read its history withvibe data query.
Treat these as the user pointing at that Agent or Session, and decide the action from context. Only the bracketed @<...> / #<...> forms are references; a bare @ or # in prose is ordinary text.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

