360 Secure SkillHub
360 安全技能中心

Clean Codex Archives

通过 Python 标准库脚本清理本地 Codex 归档数据:仅删除 state_5.sqlite 中 archived=1 的线程及其日志、目标记录和 threads 相关行,删除 archived_sessions 下的 JSONL 文件,并重写 session_index.jsonl。默认仅试运行,需用户明确授权后才用 --apply 执行删除。

lunarcache
lunarcache
热度 9.67
最近更新 2026-07-23 17:33:01
分类:自动化依赖:代码执行 / 读写文件应用场景:自动化脚本 / 工作流 / 数据处理

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add clean-codex-archives
Metadata
name
clean-codex-archives
description
Safely inspect and remove locally archived Codex conversation data on Windows, macOS, and Linux, including archived rollout JSONL files, archived session rows and related logs in Codex SQLite databases, and stale session_index.jsonl entries. Use when the user asks to clear, purge, delete, or clean archived Codex conversations or their local history metadata.

Clean Codex Archives

Use the bundled scripts/clean_codex_archives.py script as the cross-platform entry point. It uses only Python's standard library and preserves active sessions.

Safety contract

  • Resolve the Codex data root from an explicit --codex-home argument, then the CODEX_HOME environment variable, then the current user's .codex directory.
  • Treat state_5.sqlite as the source of truth. Only rows with threads.archived = 1 are eligible for deletion.
  • Preserve all unarchived threads, their logs, and their session-index entries.
  • Run without --apply first. Use --apply only after the user explicitly authorizes deletion.
  • Delete associated logs and goals before deleting archived thread rows, because the archived IDs are needed to select related records safely.
  • Delete related thread_dynamic_tools and thread_spawn_edges rows when those tables are present.
  • Remove only archived_sessions/*.jsonl files. Do not delete the archive directory itself or unrelated files.
  • Rewrite session_index.jsonl only after database cleanup, retaining entries whose IDs still exist in state_5.sqlite and rejecting malformed JSON instead of silently dropping it.
  • If a database is locked, ask the user to close Codex or otherwise stop the process holding the database, then retry.

Workflow

  1. Run a dry run and inspect the counts for archive files, archived threads, related logs, goals, and stale index entries.
  2. If the user confirms deletion, rerun with --apply.
  3. Use --vacuum only when the user also wants SQLite files compacted; it may require exclusive database access and is not needed for logical deletion.
  4. Verify that archived-thread count is zero, archive-file count is zero, remaining index IDs all exist in the state database, and SQLite quick_check reports ok for modified databases.

Commands

# Inventory only; no changes. Use python3 on Unix-like systems.
python3 ./scripts/clean_codex_archives.py

# Apply the explicitly authorized cleanup.
python3 ./scripts/clean_codex_archives.py --apply

# Use a specific Codex data root.
python3 ./scripts/clean_codex_archives.py --codex-home "$HOME/.codex" --apply

# Optional physical compaction after deletion.
python3 ./scripts/clean_codex_archives.py --apply --vacuum

On Windows, use python instead of python3.