HookStackGitHub
Back to catalogue
WorkflowSessionEndSessionEndOn Claude Code session end· non-blocking

Temporary file cleanup at session end

Automatically removes temporary files (.tmp) and stale artifacts from the logs directory at session end.

Use cases

  • Keep a clean logs directory without manual intervention
  • Free disk space at the end of a long session

Providers & tags

Claude Code
#cleanup#session#temp-files#maintenance

settings.json fragment

{
  "hooks": {
    "SessionEnd": [
      {
        "hooks": [
          {
            "command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/session-end-cleanup.mjs",
            "type": "command"
          }
        ],
        "matcher": ""
      }
    ]
  }
}

Script · .claude/hooks/session-end-cleanup.mjs

#!/usr/bin/env node
// Nettoie les fichiers temporaires Claude datant de plus de 24h (SessionEnd)
import { readdirSync, statSync, unlinkSync } from 'fs';
import { join } from 'path';
import { fileURLToPath } from 'url';

const MAX_AGE_MS = 24 * 60 * 60 * 1_000;
const PREFIX = 'claude-';

export function run({
  readdir = readdirSync,
  stat = statSync,
  unlink = unlinkSync,
  tmp = '/tmp',
  maxAge = MAX_AGE_MS,
  now = () => Date.now(),
} = {}) {
  let cleaned = 0;
  try {
    for (const f of readdir(tmp)) {
      if (!f.startsWith(PREFIX)) continue;
      const fp = join(tmp, f);
      try {
        const age = now() - stat(fp).mtimeMs;
        if (age > maxAge) {
          unlink(fp);
          cleaned++;
        }
      } catch {}
    }
  } catch {}

  return cleaned > 0
    ? { cleaned, message: `[session-end-cleanup] ${cleaned} fichier(s) temporaire(s) supprimé(s).\n` }
    : { cleaned: 0 };
}

/* v8 ignore next 4 */
if (process.argv[1] === fileURLToPath(import.meta.url)) {
  const result = run();
  if (result?.message) process.stderr.write(result.message);
}