55# - persistent memory (~/.pi/agent/memory)
66# - todos (~/.pi/todos)
77# - local runtime customizations (extensions/skills/subagents/settings)
8- # - optional secrets (.config/.env and auth.json)
8+ # Secrets are intentionally excluded from state archives.
99
1010SCRIPT_DIR=" $( cd " $( dirname " $0 " ) " && pwd) "
1111# shellcheck source=bin/lib/shell-common.sh
@@ -28,15 +28,10 @@ STATE_PATHS=(
2828 " .pi/agent/subagents-state.json"
2929)
3030
31- STATE_SECRET_PATHS=(
32- " .config/.env"
33- " .pi/agent/auth.json"
34- )
35-
3631usage () {
3732 cat << 'EOF '
3833Usage:
39- sudo baudbot state backup [ARCHIVE.zip] [--exclude-secrets] [-- force]
34+ sudo baudbot state backup [ARCHIVE.zip] [--force]
4035 sudo baudbot state restore <ARCHIVE.zip> [--restart]
4136
4237What gets backed up:
@@ -47,11 +42,13 @@ What gets backed up:
4742 - ~/.pi/agent/skills
4843 - ~/.pi/agent/subagents
4944 - ~/.pi/agent/subagents-state.json (if present)
50- - ~/.config/.env and ~/.pi/agent/auth.json (unless --exclude-secrets)
45+
46+ Never backed up (private by design):
47+ - ~/.config/.env
48+ - ~/.pi/agent/auth.json
5149
5250Examples:
5351 sudo baudbot state backup /tmp/baudbot-state.zip
54- sudo baudbot state backup --exclude-secrets
5552 sudo baudbot stop
5653 sudo baudbot state restore /tmp/baudbot-state.zip
5754 sudo baudbot start
@@ -108,7 +105,6 @@ copy_path_if_present() {
108105
109106write_metadata_file () {
110107 local metadata_file=" $1 "
111- local include_secrets=" $2 "
112108 local now
113109 now=" $( date -u +%Y-%m-%dT%H:%M:%SZ) "
114110
@@ -118,11 +114,11 @@ write_metadata_file() {
118114 fi
119115
120116 require_python3
121- python3 - " $metadata_file " " $STATE_FORMAT " " $now " " $host_name " " $BAUDBOT_AGENT_USER " " $BAUDBOT_AGENT_HOME " " $include_secrets " << 'PY '
117+ python3 - " $metadata_file " " $STATE_FORMAT " " $now " " $host_name " " $BAUDBOT_AGENT_USER " " $BAUDBOT_AGENT_HOME " << 'PY '
122118import json
123119import sys
124120
125- metadata_path, state_format, created_at, host_name, agent_user, agent_home, include_secrets = sys.argv[1:]
121+ metadata_path, state_format, created_at, host_name, agent_user, agent_home = sys.argv[1:]
126122
127123with open(metadata_path, "w", encoding="utf-8") as handle:
128124 json.dump(
@@ -132,7 +128,7 @@ with open(metadata_path, "w", encoding="utf-8") as handle:
132128 "host": host_name,
133129 "agent_user": agent_user,
134130 "agent_home": agent_home,
135- "include_secrets ": include_secrets == "1" ,
131+ "secrets_included ": False ,
136132 },
137133 handle,
138134 indent=2,
@@ -248,7 +244,7 @@ restore_ownership_if_root() {
248244 return 0
249245 fi
250246
251- for rel_path in " ${STATE_PATHS[@]} " " ${STATE_SECRET_PATHS[@]} " ; do
247+ for rel_path in " ${STATE_PATHS[@]} " ; do
252248 if [ -e " $BAUDBOT_AGENT_HOME /$rel_path " ]; then
253249 chown -R " $BAUDBOT_AGENT_USER :$BAUDBOT_AGENT_USER " " $BAUDBOT_AGENT_HOME /$rel_path "
254250 fi
@@ -258,7 +254,6 @@ restore_ownership_if_root() {
258254cmd_backup () {
259255 local archive_raw=" "
260256 local archive_path=" "
261- local include_secrets=" 1"
262257 local overwrite=" 0"
263258 local tmp_dir=" "
264259 local state_root=" "
@@ -267,9 +262,6 @@ cmd_backup() {
267262
268263 while [ " $# " -gt 0 ]; do
269264 case " $1 " in
270- --exclude-secrets)
271- include_secrets=" 0"
272- ;;
273265 --force)
274266 overwrite=" 1"
275267 ;;
@@ -312,23 +304,13 @@ cmd_backup() {
312304 copy_path_if_present " $rel_path " " $payload_root "
313305 done
314306
315- if [ " $include_secrets " = " 1" ]; then
316- for rel_path in " ${STATE_SECRET_PATHS[@]} " ; do
317- copy_path_if_present " $rel_path " " $payload_root "
318- done
319- fi
320-
321- write_metadata_file " $state_root /metadata.json" " $include_secrets "
307+ write_metadata_file " $state_root /metadata.json"
322308 create_zip_archive " $state_root " " $archive_path "
323309
324310 chmod 600 " $archive_path " 2> /dev/null || true
325311
326312 echo " ✓ state backup created: $archive_path "
327- if [ " $include_secrets " = " 1" ]; then
328- echo " includes secrets (.config/.env + auth.json)"
329- else
330- echo " excludes secrets"
331- fi
313+ echo " secrets are excluded by design"
332314}
333315
334316cmd_restore () {
0 commit comments