121 lines
2.3 KiB
Bash
Executable file
121 lines
2.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
STATE_FILE="$SCRIPT_DIR/codex_context.yaml"
|
|
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() {
|
|
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
|
|
|
|
exec codex --cd "$SCRIPT_DIR" "${codex_args[@]}" "$prompt"
|
|
}
|
|
|
|
main "$@"
|