homelab-codex-ws/start-codex.sh

125 lines
2.5 KiB
Bash
Raw Permalink Normal View History

2026-04-22 21:19:00 +02:00
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STATE_FILE="$SCRIPT_DIR/codex_context.yaml"
2026-05-03 19:37:40 +02:00
INITIAL_INSTRUCTION="Before doing any task, read codex_context.yaml and treat it as shared project memory."
2026-04-22 21:19:00 +02:00
MEMORY_POLICY_PROMPT=$(cat <<'EOF'
You are an autonomous coding agent with persistent memory.
GOAL:
Continuously maintain and save a compressed, lossless SESSION_STATE to disk.
RULES:
1. After every meaningful change or decision:
- Update SESSION_STATE
- Save it to file: ./codex_context.yaml
2. SESSION_STATE must be:
- Lossless (no important info lost)
- Compressed (no fluff, structured)
FORMAT:
SESSION_STATE:
meta:
goal:
environment:
systems:
configs:
decisions:
todos:
issues:
3. Compression rules:
- No natural language fluff
- Use short keys
- Deduplicate
- Use IDs (S1, CFG1, etc.)
4. File operations:
- Always overwrite ./codex_context.yaml
- Ensure valid YAML
- Never delete info unless explicitly told
5. On startup:
- If ./codex_context.yaml exists -> load and use it as memory
6. Commands:
EXPORT STATE -> print file content only
IMPORT STATE -> load given YAML
7. Never ask for confirmation when saving context.
Act like a stateful system, not a stateless chat.
EOF
)
usage() {
cat <<'EOF'
Usage: ./start-codex.sh [--print-prompt] [codex-args...]
Starts Codex in this repository with the persistent-memory bootstrap prompt.
Options:
--print-prompt Print the generated startup prompt and exit.
-h, --help Show this help and exit.
Examples:
./start-codex.sh
./start-codex.sh --full-auto
./start-codex.sh --model gpt-5.4
./start-codex.sh --print-prompt
EOF
}
build_prompt() {
2026-05-03 19:37:40 +02:00
printf '%s\n\n' "$INITIAL_INSTRUCTION"
2026-04-22 21:19:00 +02:00
printf '%s\n\n' "$MEMORY_POLICY_PROMPT"
if [[ -f "$STATE_FILE" ]]; then
printf '%s\n\n' 'Load SESSION_STATE below as full context. Treat it as authoritative memory. Continue work accordingly.'
cat "$STATE_FILE"
printf '\n'
fi
}
main() {
local print_prompt=0
local -a codex_args=()
while (($# > 0)); do
case "$1" in
--print-prompt)
print_prompt=1
shift
;;
-h|--help)
usage
exit 0
;;
*)
codex_args+=("$1")
shift
;;
esac
done
local prompt
prompt="$(build_prompt)"
if ((print_prompt)); then
printf '%s' "$prompt"
exit 0
fi
2026-05-03 19:37:40 +02:00
cd "$SCRIPT_DIR"
printf 'Loading %s\n' "$STATE_FILE"
2026-04-22 21:19:00 +02:00
exec codex --cd "$SCRIPT_DIR" "${codex_args[@]}" "$prompt"
}
main "$@"