Motivation
Today there's no single surface to see what each psyop is actually doing. Operators have to either tail stderr from psyops run or open the SQLite DB and write queries to answer basic questions like:
- What did this psyop score in its last run, and what did it deliver?
- Which posts are sitting in
for_you_queue waiting to be hydrated?
- How many
delivery_queue rows are pending / failing per target?
- What does the latest scoring distribution look like (uniform 0.5? actual signal?)?
- Which psyops haven't been run in a while?
- What's the recent X-API spend (calls / ratelimit) per psyop?
A read-only dashboard that surfaces this state would replace a lot of ad-hoc poking.
Proposed scope (v1)
A local web UI launched via psychological-operations dashboard (or similar). Reads from the same ~/.psychological-operations/data.db + config.json + psyops/ dir the CLI uses. No state of its own.
Per-psyop view:
- Identity (name, current commit SHA, enabled/disabled, configured targets)
- Last run summary (timestamp, accepted / scored / survivors / delivered counts)
- Score distribution histogram for the most recent run
- Recent survivors with score + URL + delivery status per target
for_you_queue size + oldest entry age
delivery_queue rows scoped to this psyop, with per-row attempts / last_error
Cross-cutting view:
- All psyops at a glance (last-run timestamp, survivors count, pending deliveries, error count)
- Global
delivery_queue health
- Recent objectiveai spend (sum of
usage.cost across recent function executions)
- Recent X-API call volume (search vs hydrate vs likes/retweets) — useful as a ratelimit-burn proxy
Stretch
- Re-run a single psyop from the UI (button → spawn
psyops run --name X)
- Drain the delivery queue from the UI (button → spawn
targets deliver)
- Live tail of the most recent objectiveai execution log (the SW-style
Logs ID thing) so the operator can debug a degenerate score distribution without rummaging in ~/.objectiveai/logs/
Non-goals
- Cloud / remote-multi-user — strictly local + read-only on
~/.psychological-operations/
- Editing
psyop.json from the UI — keep psyop authorship in the file system + git, that's the whole point of the per-psyop git repo
Implementation notes
Probably a Rust binary serving a small static HTML/JS app from an embedded include_dir!-ed bundle. Same pattern as the chromium / extension bundles. Localhost-only, no auth needed since it's a single-user local tool.
Motivation
Today there's no single surface to see what each psyop is actually doing. Operators have to either tail stderr from
psyops runor open the SQLite DB and write queries to answer basic questions like:for_you_queuewaiting to be hydrated?delivery_queuerows are pending / failing per target?A read-only dashboard that surfaces this state would replace a lot of ad-hoc poking.
Proposed scope (v1)
A local web UI launched via
psychological-operations dashboard(or similar). Reads from the same~/.psychological-operations/data.db+config.json+psyops/dir the CLI uses. No state of its own.Per-psyop view:
for_you_queuesize + oldest entry agedelivery_queuerows scoped to this psyop, with per-row attempts / last_errorCross-cutting view:
delivery_queuehealthusage.costacross recent function executions)Stretch
psyops run --name X)targets deliver)Logs IDthing) so the operator can debug a degenerate score distribution without rummaging in~/.objectiveai/logs/Non-goals
~/.psychological-operations/psyop.jsonfrom the UI — keep psyop authorship in the file system + git, that's the whole point of the per-psyop git repoImplementation notes
Probably a Rust binary serving a small static HTML/JS app from an embedded
include_dir!-ed bundle. Same pattern as the chromium / extension bundles. Localhost-only, no auth needed since it's a single-user local tool.