chore: auto-commit uncommitted changes
This commit is contained in:
parent
0795ec6409
commit
b9076edc5b
33
HEARTBEAT.md
33
HEARTBEAT.md
|
|
@ -59,6 +59,39 @@ sessions_spawn(task="inou daily suggestion: review memory/inou-context.md and re
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Cron Job Failure Check (every heartbeat)
|
||||||
|
Check if systemd timers/services have failed since last run:
|
||||||
|
```bash
|
||||||
|
systemctl --user list-units --state=failed --no-legend 2>/dev/null
|
||||||
|
```
|
||||||
|
Key timers to watch: `daily-updates.timer`, `k2-watchdog.timer`
|
||||||
|
|
||||||
|
If any service shows `Result=exit-code` or `ActiveState=failed`:
|
||||||
|
1. Check logs: `journalctl --user -u <service> -n 50 --no-pager`
|
||||||
|
2. If it's `daily-updates.service` failing: check `memory/updates/YYYY-MM-DD.json` for what ran (nightly maintenance may have covered it), then fix the script
|
||||||
|
3. **Alert via ntfy (forge-alerts)** — don't wait for Johan to notice
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Quick check
|
||||||
|
systemctl --user show daily-updates.service --property=Result,ActiveState | grep -v "^$"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Disk Usage Check (every heartbeat)
|
||||||
|
```bash
|
||||||
|
df -h / | awk 'NR==2 {print $5, $4}'
|
||||||
|
```
|
||||||
|
- **< 70%:** Fine, no action
|
||||||
|
- **70–85%:** Note in next briefing
|
||||||
|
- **> 85%:** Alert via ntfy (forge-alerts) immediately
|
||||||
|
- **> 90%:** URGENT — ping Johan
|
||||||
|
|
||||||
|
Current baseline: ~54% used (236G / 469G) as of 2026-03-15.
|
||||||
|
Top consumers to check if filling fast: ClickHouse (`/var/lib/docker`), Jellyfin media, doc inbox.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Memory Review (daily)
|
### Memory Review (daily)
|
||||||
Quick scan of today's conversations for durable facts worth remembering:
|
Quick scan of today's conversations for durable facts worth remembering:
|
||||||
- New people, relationships, preferences
|
- New people, relationships, preferences
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,22 @@ Not a blog post. A letter. With the list of laws, the architecture argument, and
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## High-value X targets
|
||||||
|
|
||||||
|
**Peter Steinberger (@steipete)**
|
||||||
|
Founder of OpenClaw, just joined OpenAI to "bring agents to everyone." Actively amplifies tools built around OpenClaw. 5.3M views on his OpenAI announcement tweet. Not a cold pitch — engage when vault1984 is the natural answer to "my OpenClaw agent needs credentials." The connection: vault1984 is the credential layer for exactly what he's building.
|
||||||
|
|
||||||
|
**Chao Huang (@huang_chao4969)**
|
||||||
|
CLI-Anything — "making ALL software agent-native." 11K GitHub stars in 5 days, 18.2K views on this tweet. The connection: CLI-Anything makes any software agent-controllable. Every agent controlling software needs credentials. vault1984 is the answer to the problem CLI-Anything creates at scale. Engage in the #clianything / #AIAgents threads when vault1984 ships. Natural reply, not a cold pitch.
|
||||||
|
|
||||||
|
**Brian Krebs (@briankrebs)**
|
||||||
|
krebsonsecurity.com. Most read security journalist. Covered LastPass breach exhaustively. Pitch the LastPass page + architecture when product ships.
|
||||||
|
|
||||||
|
**Troy Hunt (@troyhunt)**
|
||||||
|
HaveIBeenPwned.com. THE breach authority. One mention reaches every security professional. Architecture argument is his language.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Distribution plan (when ready)
|
## Distribution plan (when ready)
|
||||||
|
|
||||||
### Anchor
|
### Anchor
|
||||||
|
|
|
||||||
|
|
@ -209,3 +209,23 @@ Example workflow:
|
||||||
---
|
---
|
||||||
|
|
||||||
*Ready to discuss when you wake up.*
|
*Ready to discuss when you wake up.*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Pitch Angles — Strong Examples Found
|
||||||
|
|
||||||
|
### Hans Amato thread (Mar 12, 2026) — 13k likes, 2k RTs
|
||||||
|
https://x.com/HansAmato/status/2032139819313480071
|
||||||
|
|
||||||
|
The story: $12k therapy for anger → real cause was gut leakage → inflammation → cortisol → low magnesium → no GABA. Fixed with data, not talk.
|
||||||
|
"3 practitioners. 2 years. $12,000+. Zero blood draws."
|
||||||
|
|
||||||
|
**Why it works for inou:**
|
||||||
|
- Visceral, relatable (not a rare tragedy — everyday dysfunction)
|
||||||
|
- Demonstrates the fragmentation problem at scale
|
||||||
|
- Proves the market gets it — 13k people immediately understood
|
||||||
|
- Lower emotional barrier than origin stories involving serious injury
|
||||||
|
- The fix was data connection, not a new treatment — exactly inou's angle
|
||||||
|
|
||||||
|
**Potential inou framing:**
|
||||||
|
"This is why we built inou. Your labs, your inflammation markers, your genome — in one place. The connection no single practitioner has time to make."
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"last_updated": "2026-03-15T04:00:01.760125Z",
|
"last_updated": "2026-03-15T10:00:01.976288Z",
|
||||||
"source": "api",
|
"source": "api",
|
||||||
"session_percent": 0,
|
"session_percent": 3,
|
||||||
"session_resets": null,
|
"session_resets": "2026-03-15T13:59:59.908041+00:00",
|
||||||
"weekly_percent": 13,
|
"weekly_percent": 14,
|
||||||
"weekly_resets": "2026-03-20T02:59:59.711524+00:00",
|
"weekly_resets": "2026-03-20T02:59:59.908059+00:00",
|
||||||
"sonnet_percent": 16
|
"sonnet_percent": 16
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"date": "2026-03-15",
|
||||||
|
"timestamp": "2026-03-15T05:31:14-04:00",
|
||||||
|
"openclaw": {
|
||||||
|
"before": "OpenClaw 2026.3.13 (61d171a)",
|
||||||
|
"latest": "2026.3.13",
|
||||||
|
"after": "OpenClaw 2026.3.13 (61d171a)",
|
||||||
|
"updated": true
|
||||||
|
},
|
||||||
|
"claude_code": {
|
||||||
|
"before": "2.1.75",
|
||||||
|
"latest": "2.1.76",
|
||||||
|
"after": "2.1.75",
|
||||||
|
"updated": true
|
||||||
|
},
|
||||||
|
"os": {
|
||||||
|
"available": "0\n0",
|
||||||
|
"updated": false,
|
||||||
|
"packages": []
|
||||||
|
},
|
||||||
|
"gateway_restarted": true
|
||||||
|
}
|
||||||
|
|
@ -53,27 +53,28 @@ echo "--- OpenClaw ---"
|
||||||
OC_BEFORE=$(openclaw --version 2>/dev/null | head -1 || echo "unknown")
|
OC_BEFORE=$(openclaw --version 2>/dev/null | head -1 || echo "unknown")
|
||||||
OC_LATEST=$(npm show openclaw version 2>/dev/null || echo "unknown")
|
OC_LATEST=$(npm show openclaw version 2>/dev/null || echo "unknown")
|
||||||
echo "Current: $OC_BEFORE | Latest: $OC_LATEST"
|
echo "Current: $OC_BEFORE | Latest: $OC_LATEST"
|
||||||
|
|
||||||
update_json "openclaw.before" "\"$OC_BEFORE\""
|
update_json "openclaw.before" "\"$OC_BEFORE\""
|
||||||
update_json "openclaw.latest" "\"$OC_LATEST\""
|
update_json "openclaw.latest" "\"$OC_LATEST\""
|
||||||
|
|
||||||
if [ "$OC_BEFORE" != "$OC_LATEST" ] && [ "$OC_LATEST" != "unknown" ]; then
|
# Use LLM to decide if these refer to the same version — no fragile string parsing
|
||||||
echo "Updating OpenClaw..."
|
OC_SAME=$(claude --print --permission-mode bypassPermissions "Do these two strings refer to the same software version? Answer only 'yes' or 'no'. String 1: '$OC_BEFORE' String 2: '$OC_LATEST'" 2>/dev/null | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]')
|
||||||
|
|
||||||
|
if [ "$OC_SAME" = "yes" ]; then
|
||||||
|
update_json "openclaw.updated" "false"
|
||||||
|
echo "Up to date: $OC_BEFORE"
|
||||||
|
else
|
||||||
|
echo "Update available, running npm update -g openclaw..."
|
||||||
if npm update -g openclaw 2>&1; then
|
if npm update -g openclaw 2>&1; then
|
||||||
OC_AFTER=$(openclaw --version 2>/dev/null | head -1 || echo "unknown")
|
OC_AFTER=$(openclaw --version 2>/dev/null | head -1 || echo "unknown")
|
||||||
update_json "openclaw.after" "\"$OC_AFTER\""
|
update_json "openclaw.after" "\"$OC_AFTER\""
|
||||||
update_json "openclaw.updated" "true"
|
update_json "openclaw.updated" "true"
|
||||||
echo "Updated: $OC_BEFORE → $OC_AFTER"
|
echo "Updated: $OC_BEFORE → $OC_AFTER"
|
||||||
# Reapply source patches
|
|
||||||
/home/johan/clawd/scripts/openclaw-post-update-patches.sh 2>&1
|
/home/johan/clawd/scripts/openclaw-post-update-patches.sh 2>&1
|
||||||
else
|
else
|
||||||
update_json "openclaw.updated" "false"
|
update_json "openclaw.updated" "false"
|
||||||
update_json "openclaw.error" "\"npm update failed\""
|
update_json "openclaw.error" "\"npm update failed\""
|
||||||
echo "Update failed"
|
echo "Update failed"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
update_json "openclaw.updated" "false"
|
|
||||||
echo "Up to date"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Claude Code ---
|
# --- Claude Code ---
|
||||||
|
|
@ -82,12 +83,16 @@ echo "--- Claude Code ---"
|
||||||
CC_BEFORE=$(claude --version 2>/dev/null | sed 's/ (Claude Code)//' || echo "unknown")
|
CC_BEFORE=$(claude --version 2>/dev/null | sed 's/ (Claude Code)//' || echo "unknown")
|
||||||
CC_LATEST=$(npm show @anthropic-ai/claude-code version 2>/dev/null || echo "unknown")
|
CC_LATEST=$(npm show @anthropic-ai/claude-code version 2>/dev/null || echo "unknown")
|
||||||
echo "Current: $CC_BEFORE | Latest: $CC_LATEST"
|
echo "Current: $CC_BEFORE | Latest: $CC_LATEST"
|
||||||
|
|
||||||
update_json "claude_code.before" "\"$CC_BEFORE\""
|
update_json "claude_code.before" "\"$CC_BEFORE\""
|
||||||
update_json "claude_code.latest" "\"$CC_LATEST\""
|
update_json "claude_code.latest" "\"$CC_LATEST\""
|
||||||
|
|
||||||
if [ "$CC_BEFORE" != "$CC_LATEST" ] && [ "$CC_LATEST" != "unknown" ]; then
|
CC_SAME=$(claude --print --permission-mode bypassPermissions "Do these two strings refer to the same software version? Answer only 'yes' or 'no'. String 1: '$CC_BEFORE' String 2: '$CC_LATEST'" 2>/dev/null | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]')
|
||||||
echo "Updating Claude Code..."
|
|
||||||
|
if [ "$CC_SAME" = "yes" ]; then
|
||||||
|
update_json "claude_code.updated" "false"
|
||||||
|
echo "Up to date: $CC_BEFORE"
|
||||||
|
else
|
||||||
|
echo "Update available, running npm update -g @anthropic-ai/claude-code..."
|
||||||
if npm update -g @anthropic-ai/claude-code 2>&1; then
|
if npm update -g @anthropic-ai/claude-code 2>&1; then
|
||||||
CC_AFTER=$(claude --version 2>/dev/null | sed 's/ (Claude Code)//' || echo "unknown")
|
CC_AFTER=$(claude --version 2>/dev/null | sed 's/ (Claude Code)//' || echo "unknown")
|
||||||
update_json "claude_code.after" "\"$CC_AFTER\""
|
update_json "claude_code.after" "\"$CC_AFTER\""
|
||||||
|
|
@ -98,9 +103,6 @@ if [ "$CC_BEFORE" != "$CC_LATEST" ] && [ "$CC_LATEST" != "unknown" ]; then
|
||||||
update_json "claude_code.error" "\"npm update failed\""
|
update_json "claude_code.error" "\"npm update failed\""
|
||||||
echo "Update failed"
|
echo "Update failed"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
update_json "claude_code.updated" "false"
|
|
||||||
echo "Up to date"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- OS Packages ---
|
# --- OS Packages ---
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue