← back to Linkedin Voice Agent
references/daily-cadence.md
53 lines
# Daily cadence — the "every day" automation (Steve-gated)
Okara auto-writes a LinkedIn post every day. The local equivalent is a launchd
job that runs Stage 2 each morning and drops fresh drafts in `data/drafts/`.
It is still **draft-only** — a human reviews and publishes. Installing a
scheduled job is a gated action, so run this yourself when you want it on.
## 1. Plist template
Save as `~/Library/LaunchAgents/com.steve.linkedin-voice-agent.plist`
(edit `--profile` to your profile name; adjust the hour in `StartCalendarInterval`):
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.steve.linkedin-voice-agent</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python3</string>
<string>/Users/macstudio3/.claude/skills/linkedin-voice-agent/scripts/generate.py</string>
<string>--profile</string><string>steve</string>
<string>--count</string><string>3</string>
</array>
<key>StartCalendarInterval</key>
<dict><key>Hour</key><integer>7</integer><key>Minute</key><integer>30</integer></dict>
<key>StandardOutPath</key><string>/tmp/lva-daily.log</string>
<key>StandardErrorPath</key><string>/tmp/lva-daily.err</string>
</dict>
</plist>
```
## 2. Install / load
```bash
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.linkedin-voice-agent.plist
launchctl kickstart gui/$(id -u)/com.steve.linkedin-voice-agent # run once now to test
```
## 3. Review + publish (unchanged)
Each morning, read the newest `data/drafts/steve-*.md`, pick a winner, and
publish it via the `linkedin-api` skill (your go):
```bash
python3 ~/.claude/skills/linkedin-api/scripts/post.py --text "<approved draft text>"
```
## Uninstall
```bash
launchctl bootout gui/$(id -u)/com.steve.linkedin-voice-agent
rm ~/Library/LaunchAgents/com.steve.linkedin-voice-agent.plist
```