一键导入
do-deploy
Use when deploying merged changes to production across bridge machines. Triggered by 'deploy to prod', 'ship it', 'push to prod', or 'do-deploy'.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when deploying merged changes to production across bridge machines. Triggered by 'deploy to prod', 'ship it', 'push to prod', or 'do-deploy'.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Pre-publish editorial gate for external-audience content: removes AI-writing tells and blocks hollow drafts. Use on documents, presentations, emails, posts, or web copy once a first draft exists. Triggered by 'de-slop this', 'editorial pass', 'humanize this', 'remove the AI tells', or invoked as a mandatory gate by email, do-presentation, linkedin, and x-com.
Stage, launch, grade, and schedule a Claude Managed Agent (CMA) from a build-sheet. Triggered by 'build the agent', 'launch this agent', 'deploy a managed agent', or as /imagine-agent's handoff.
Create/review/maintain Claude Code Routines (cloud scheduled agents, aka 'Cowork'). Triggered by 'set up a routine', 'schedule a cloud agent', 'cowork task', 'migrate to a routine'.
Create a polished Marp slide deck about a feature, concept, or system. Triggered by 'make a presentation', 'create slides', 'do-presentation', or 'explain this as a deck'.
Use when reading, searching, drafting, or sending email. Triggered by 'read my email', 'check my inbox', 'send an email', 'reply to that email', 'search my mail', or any request to read/send mail.
Use when reading posts or engaging on LinkedIn. Triggered by requests to comment on LinkedIn, browse the feed, write or interact with posts, check DMs, or read/reply to LinkedIn messages.
| name | do-deploy |
| description | Use when deploying merged changes to production across bridge machines. Triggered by 'deploy to prod', 'ship it', 'push to prod', or 'do-deploy'. |
| argument-hint | <pr-number> |
| context | fork |
You are the production deployment operator for the Valor AI system.
This skill is not part of the SDLC pipeline. The SDLC pipeline ends at merge, and merge already handles the local dev environment.
For this repo, production deployment is simple:
remote-update.sh) that pulls main, syncs deps, and restarts the bridgeThere is no manual promotion step, no container registry, no platform CLI. Merging IS deploying.
A few things are one-time, per-machine human steps that the auto-update cron cannot do (they need a browser or interactive consent). These are not part of a deploy, but if a machine is misbehaving after picking up changes, check whether it was ever set up:
gws (Google Workspace CLI) auth — installed by /update but ships unauthenticated. Authenticate by copying the shared vault OAuth client to ~/.config/gws/client_secret.json and running gws auth login (skips the broken gcloud path). Full procedure: docs/features/gws-cli-auth.md (in the ai repo). The shared credential ~/Desktop/Valor/google_credentials.json is identical on every machine (iCloud-synced), so the steps are the same everywhere.DEPLOY_ARG: $ARGUMENTS
If DEPLOY_ARG is empty or literally $ARGUMENTS: Extract from the user's message.
# By PR number (if provided):
gh pr view $PR_NUMBER --json number,title,state,mergedAt,mergeCommit,headRefName
# Or find most recent merge:
gh pr list --state merged --limit 1 --json number,title,mergedAt,mergeCommit,headRefName
Verify the PR is merged. If not, stop:
Deploy blocked: PR #N is not merged. Run /do-merge first.
# Pull latest main
git checkout main && git pull
# Verify merge commit is present
git log --oneline -1 $MERGE_COMMIT
# Check bridge and worker are running
./scripts/valor-service.sh status
./scripts/valor-service.sh worker-status
# Check recent bridge errors
tail -20 logs/bridge.log | grep -c ERROR
# Verify Telegram connection
tail -5 logs/bridge.log | grep "Connected to Telegram"
If the bridge is not running or has errors, restart it:
./scripts/valor-service.sh restart
sleep 5
./scripts/valor-service.sh status
Read the machine list from projects.json and report which machines will auto-update:
python -c "
import json, os
config = json.load(open(os.path.expanduser('~/Desktop/Valor/projects.json')))
machines = set()
for proj in config.get('projects', {}).values():
m = proj.get('machine', '')
if m:
machines.add(m)
import subprocess
local = subprocess.check_output(['scutil', '--get', 'ComputerName']).decode().strip()
print(f'Local machine: {local}')
print(f'All machines: {sorted(machines)}')
remote = sorted(machines - {local})
if remote:
print(f'Remote machines that will auto-update: {remote}')
print('These machines will pick up the changes on their next cron cycle.')
else:
print('No remote machines configured. Local-only deployment.')
"
## Deploy Report: PR #{PR_NUMBER}
**PR**: {PR_TITLE}
**Commit**: {MERGE_COMMIT}
**Method**: Merge to main (auto-update cron on remote machines)
### Local Machine
- Bridge status: {running/restarted/failed}
- Worker status: {running/failed}
- Telegram connected: {yes/no}
- Errors since deploy: {count}
### Remote Machines
{list of machines that will auto-update on next cron cycle}
### Rollback
If needed: `git revert HEAD --no-edit && git push origin main`
Then all machines will pick up the revert on their next cron cycle.