agentsclimarketplace

Chat manager

Skill Scigentic-Labs/chat-manager

List, inspect, search, and delete AI chat history across tools and machinesFrom its SKILL.md

Install
npx -y skills add Scigentic-Labs/chat-manager

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

6.4 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it

Chat Manager

Manage conversation history from Claude Code, Codex CLI, and other AI tools. Reads sources from ~/.claude/chat-manager.config.json (defaults to ~/.claude/projects/).

All logic lives in chat_manager.py. Each command below is a thin wrapper.


Update Check (run first, every invocation)

_LOCAL_VER=$(python3 ~/.claude/skills/chat-manager/chat_manager.py version 2>/dev/null || echo "unknown")
_AUTO_FILE=$HOME/.claude/chat-manager.auto-update
_REMOTE_VER=""

# If auto-update enabled, skip the prompt and upgrade silently
if [ -f "$_AUTO_FILE" ] && [ "$(cat "$_AUTO_FILE")" = "true" ]; then
  _REMOTE_VER=$(curl -sf --max-time 3 \
    https://raw.githubusercontent.com/Scigentic-Labs/chat-manager/main/chat_manager.py \
    | grep '^__version__' | head -1 | cut -d'"' -f2 2>/dev/null || echo "")
  # semver-aware: only upgrade if remote > local
  if [ -n "$_REMOTE_VER" ] && [ "$_REMOTE_VER" != "$_LOCAL_VER" ]; then
    _semver_gt() {
      local IFS=.; local i; read -r -a a <<< "$1"; read -r -a b <<< "$2"
      for i in 0 1 2; do
        local x="${a[$i]:-0}" y="${b[$i]:-0}"
        [ "$x" -gt "$y" ] && return 0; [ "$x" -lt "$y" ] && return 1
      done; return 1
    }
    _semver_gt "$_REMOTE_VER" "$_LOCAL_VER" && echo "AUTO_UPGRADE $_LOCAL_VER $_REMOTE_VER"
  fi
else
  _REMOTE_VER=$(curl -sf --max-time 3 \
    https://raw.githubusercontent.com/Scigentic-Labs/chat-manager/main/chat_manager.py \
    | grep '^__version__' | head -1 | cut -d'"' -f2 2>/dev/null || echo "")
  if [ -n "$_REMOTE_VER" ] && [ "$_REMOTE_VER" != "$_LOCAL_VER" ]; then
    _semver_gt() {
      local IFS=.; local i; read -r -a a <<< "$1"; read -r -a b <<< "$2"
      for i in 0 1 2; do
        local x="${a[$i]:-0}" y="${b[$i]:-0}"
        [ "$x" -gt "$y" ] && return 0; [ "$x" -lt "$y" ] && return 1
      done; return 1
    }
    _semver_gt "$_REMOTE_VER" "$_LOCAL_VER" && echo "UPGRADE_AVAILABLE $_LOCAL_VER $_REMOTE_VER"
  fi
fi

If AUTO_UPGRADE is printed: run the inline upgrade silently, then tell user "chat-manager updated v{old} → v{new} (auto-update is on)." and continue.

If UPGRADE_AVAILABLE is printed:

Use AskUserQuestion:

  • header: "Update available"
  • question: "chat-manager v{new} is available (you're on v{old})."
  • options:
    • "Yes, update now" → run the inline upgrade below, then continue with original command
    • "Enable auto-update" → run the inline upgrade below, then write echo "true" > ~/.claude/chat-manager.auto-update; tell user "Updated to v{new}. Future updates will install automatically."; continue with original command

Inline upgrade flow:

# Download new version
_DEST=~/.dotfiles/claude-code/skills/chat-manager/chat_manager.py
# Fallback if dotfiles path not found
[ ! -f "$_DEST" ] && _DEST=~/.claude/skills/chat-manager/chat_manager.py

curl -sf --max-time 15 \
  https://raw.githubusercontent.com/Scigentic-Labs/chat-manager/main/chat_manager.py \
  -o "$_DEST" && echo "UPDATE_OK" || echo "UPDATE_FAILED"
  • UPDATE_OK: clear snooze (rm -f ~/.claude/chat-manager.update-snoozed), tell user "Updated to v{new}!"; continue with original command
  • UPDATE_FAILED: tell user "Update failed — still on v{old}. Try manually: curl -sf https://raw.githubusercontent.com/Scigentic-Labs/chat-manager/main/chat_manager.py -o ~/.claude/skills/chat-manager/chat_manager.py"; continue with original command

If no UPGRADE_AVAILABLE output: continue silently.


List all records

Run:

python3 ~/.claude/skills/chat-manager/chat_manager.py scan

Display the table, then wait for the user's instruction.

For a JSON row→path map alongside the table:

python3 ~/.claude/skills/chat-manager/chat_manager.py scan --json

The JSON map is written to stderr — read it separately if needed.

Search

python3 ~/.claude/skills/chat-manager/chat_manager.py search "KEYWORD"

Inspect a record

Look up the row's path from the previous scan output, then:

python3 ~/.claude/skills/chat-manager/chat_manager.py inspect "<path>"

Resume a session

python3 ~/.claude/skills/chat-manager/chat_manager.py resume "<path>"

Script prints the exact cd ... && claude --resume ... command (or Codex equivalent). For records from other machines, it also prints the SSH variant.

Quarantine records

Confirm with user first, then dry-run:

python3 ~/.claude/skills/chat-manager/chat_manager.py quarantine "<path>"

Apply only after confirmation:

python3 ~/.claude/skills/chat-manager/chat_manager.py quarantine "<path>" --apply

The script moves the transcript under ~/.claude/chat-manager-quarantine/<timestamp>/ and prints a restore command. Re-run scan after.

Restore from quarantine

Dry-run first:

python3 ~/.claude/skills/chat-manager/chat_manager.py restore "<quarantine-path>"

Apply only after confirmation:

python3 ~/.claude/skills/chat-manager/chat_manager.py restore "<quarantine-path>" --apply

Moves the file back to its original location. Fails if destination already exists.

Purge quarantine

Remove quarantined files older than N days (default 7). Dry-run first:

python3 ~/.claude/skills/chat-manager/chat_manager.py purge-quarantine --days 7

Apply only after confirmation:

python3 ~/.claude/skills/chat-manager/chat_manager.py purge-quarantine --days 7 --apply

Cleanup candidates

python3 ~/.claude/skills/chat-manager/chat_manager.py cleanup

Present candidates grouped by reason. Always confirm before deleting.

Secret scan

python3 ~/.claude/skills/chat-manager/chat_manager.py secrets

Lists sessions containing credential-shaped values without printing the values.

Redact secrets

Dry-run first:

python3 ~/.claude/skills/chat-manager/chat_manager.py redact-secrets

Apply only after confirmation:

python3 ~/.claude/skills/chat-manager/chat_manager.py redact-secrets --apply

The script creates backups under ~/.claude/chat-manager-redaction-backups/<timestamp>/ before modifying any transcript.

Important

  • NEVER delete without explicit confirmation
  • The current active session cannot be deleted
  • Prefer redact-secrets before deleting sensitive records
  • Prefer quarantine over direct rm
  • Always show updated table after deletions

What ships with it: 4 files

57.4 KB alongside SKILL.md, 1 of them executable

Keep looking

Skills are one crate of 326,512. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.