بنقرة واحدة
restart
What to do after a container restart. Holds the per-skill daemon startup commands.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
What to do after a container restart. Holds the per-skill daemon startup commands.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
The user's chat screen in the Vesta app (web, desktop, mobile). Reply to `source=app-chat` notifications via `app-chat send`. Requires daemon.
Use before building or modifying the user's dashboard: widgets, pages, layouts, custom UI. Understand what the user wants, design it, write a spec, then dispatch the dashboard-builder to build it.
Browse, navigate, click, fill forms, screenshot, or scrape web pages with a stealth (Camoufox) browser.
Google-native REST APIs (Gmail, Google Calendar) for users who bring their own Google Cloud OAuth client (~/.google/credentials.json required). For everyday email and calendar prefer the email-client skill, which needs no Google Cloud project. Requires daemon.
Tasks, to-dos, reminders, time-based alerts; create and manage. Requires daemon.
WhatsApp messages, contacts, groups, and live voice calls (place/answer, talk in your own voice; not generic text/SMS). Use to message or call someone on WhatsApp.
| name | restart |
| description | What to do after a container restart. Holds the per-skill daemon startup commands. |
Read /run/vestad-env so the values are in your context (Read tool, not bash).
Run the Daemons block below; it is safe to re-run and starts only what's missing. Then check User State in MEMORY.md and reach out on their preferred channel. Match the moment: new day → warm; mid-convo restart → brief; crash → mention it; middle of the night → wait.
Skill setup steps add their daemon startup commands here, one fenced block per skill (a daemon that vestad proxies on a port is a service, registered via the vestad skill; a portless background process still goes here). Every line MUST be guarded with running <session> || so re-running the block can't spawn a duplicate: crash/timeout recovery re-enters this skill repeatedly, and an unguarded line piles up duplicate daemons.
# Wipe dead sockets a restart may have left in /run/screen, else the guard treats
# a "(Dead ???)" corpse as still-running and never restarts the daemon.
screen -wipe >/dev/null 2>&1 || true
# True iff a LIVE screen session with this exact name exists. Judge by captured
# output (test -n), not exit code: the agent's shimmed ugrep `grep -qv` returns 0
# on empty input, which would report every daemon as live on a cold boot.
running() { test -n "$(screen -ls 2>/dev/null | grep -E "[0-9]+\.$1[[:space:]]" | grep -v "Dead")"; }
# IMPORTANT: copy this definition verbatim from this file; never type it from
# memory or a system-reminder cache. A stale cached grep form matches nothing
# against a real session name, so running() returns false for a live session
# and `false || spawn` re-spawns on every guarded restart line, silently
# stacking duplicate daemons.
# Skills append guarded startup lines below, e.g.:
# running foo || { screen -dmS foo foo serve --notifications-dir ~/agent/notifications; sleep 1; }
# The trailing `sleep 1` keeps back-to-back `screen -dmS` launches from racing and dropping sessions.