Terminal Runbooks
The system is designed for a terminal-first operator using VisiData, nvim, Yazi, opencode, and SSH. These runbooks keep the gates in order.
Daily
scs check --workspace bs
scs brief --workspace bs --pid FS-0001 --check
scs publish --workspace bs --pid FS-0001 --dry-run
Move one article one stage forward. Do not skip a gate.
Workspaces
scs ws is shorthand for scs workspace:
scs ws --list # list workspaces and record counts
scs ws list # same as --list
scs list # same as --list
scs ws bs # create workspace data/bs/
scs ws bs --delete # archive it (confirmation prompt)
scs ws bs --delete --force # archive without the prompt
Archived workspaces move to archive/workspaces/<name>-<timestamp>; the restore
command is printed when the archive finishes.
Weekly
Monday — intake and scoring
scs import-csv --site fundamentalstock --workspace bs --source Writerzen export.csv
scs score --workspace bs
vd data/bs/bs-keywords.csv
Select candidates manually. Record decision, decision_reason,
decision_factors, decided_by, and decided_on.
Tuesday — research
The full command creates the research folder and files:
scs research --workspace bs --pid FS-0001
scs research --workspace bs --pid FS-0001 --check
nvim data/bs/research/FS-0001/README.md
nvim data/bs/research/FS-0001/serp.md
Optionally, define a scsr Bash helper in ~/.bashrc to use the shorter
scsr <project-name> <pid> form:
scsr() {
if [[ $# -ne 2 ]]; then
echo "Usage: scsr <project-name> <pid>" >&2
return 2
fi
scs research --workspace "$1" --pid "$2"
}
Reload with source ~/.bashrc, then use scsr bs FS-0001. This is a shell
convenience wrapper, not a built-in SCS command. The workspace must already
exist. Use the full scs research ... --check command to validate the folder.
Wednesday — cluster and brief
vd data/bs/bs-clusters.csv
scs brief --workspace bs --pid FS-0001
vd data/bs/bs-briefs.csv
scs brief --workspace bs --pid FS-0001 --check
scs brief --workspace bs --pid FS-0001 --approve
Thursday — draft
nvim data/bs/md/FS-0001--*.md
scs check --workspace bs
Write the article after <!-- scs:article -->. Keep the brief half (between
<!-- scs:brief --> and <!-- scs:article -->) intact so scs brief --check
continues to pass and only the article is published. The generated compact front
matter keeps public CMS fields at top level and writer context under scs.*;
rendering refreshes that metadata while preserving the authored body. Keep
detailed SERP/research evidence in research/<pid>/.
Friday — draft, QA, publish decision
scs sync --workspace bs
scs publish --workspace bs --pid FS-0001 --dry-run
scs publish --workspace bs --pid FS-0001
scs publish data/bs/md/FS-0001--balance-sheet-basics.md --dry-run
scs qa open --workspace bs --pid FS-0001
Review in WordPress. Set wpw_review_status, reviewer, date, scope, and
checklist. Then:
scs qa pull --workspace bs --pid FS-0001
scs qa pull data/bs/md/FS-0001--balance-sheet-basics.md
scs qa check --workspace bs --pid FS-0001 --advance
If the article was edited in WordPress, compare before publishing again and retrieve a review copy without replacing the SCS source:
scs wp diff --ws bs --pid FS-0001
scs wp pull-content --ws bs --pid FS-0001
You can also pass the registered article Markdown path instead of workspace and
PID, for example scs wp diff data/bs/md/FS-0001--balance-sheet-basics.md.
Review the *.wordpress-<post-id>.md snapshot and manually reconcile any desired
changes into the authoritative SCS article. The pull-content command refuses to
overwrite an existing snapshot.
Change the publishing state from the terminal, then pull it back:
scs publish --workspace bs --pid FS-0001 --to pending
scs publish --workspace bs --pid FS-0001 --to future --date 2026-11-10
scs publish --workspace bs --pid FS-0001 --status
Monthly
- Pull GSC query-level data into
performance.csv. - Review 30/90-day clicks, position, and CTR.
- Check cannibalization and refresh candidates.
- Run
scs check --workspace bsandscs links check --workspace bs.
Quarterly
- Score the content portfolio: traffic, ranking, engagement, conversion, decay.
- Prioritise refreshes by impact and effort.
- Prune or consolidate pages that cannot be improved.
- Review cluster coverage and entity gaps.
- Update the site/workspace README.
If a step feels slow, fix the template or the command. Do not bypass the gate.