free-memory
Skill31 starsChanged 22 days agoMITView on GitHub
Finds and frees what agent work leaves behind: stale processes that waste CPU, memory or ports (leaked test fixtures, orphaned dev servers and watchers, duplicate servers, forgotten log tails, abandoned headless browsers), and disk space held by finished git worktrees, build output such as Cargo target folders and node_modules, temp-folder leftovers and tool caches. It sorts everything into stop or delete, ask and keep with evidence, and acts only on what is clearly stale. Use when the machine is slow, hot or loud, memory, swap or disk is nearly full, someone asks what eats CPU, RAM or disk space, asks to clean up stale or leftover processes, worktrees, build folders or temp files, or a port is taken by a server nobody remembers starting. Not for stopping one process the user named, a memory leak inside an app's code, Docker containers or images, or sorting personal files such as Downloads or photos.
- Deletes or force-pushes
In this repository8 other files it gives its agents.
- AGENTS.mdAGENTS.md
- article-audioSkill
- explainerSkill
- knowledgeSkill
- skill-shaperSkill
- system-diffSkill
- transcribeSkill
- unknown-unknownsSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 5 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 28
ASK items always need a fresh yes, one at a time or as a list the user confirms.
- Distinctive: line 55
Stop the groups you are sure of:
- Distinctive: line 65
Ask the user about each ASK group that you could not resolve.
- Very specific: line 101
Do not run killall node, pkill node or pkill -f node.
- Very specific: line 102
Do not kill a PID from an old list.
- Very specific: line 103
Do not run kill -- -<pgid> before you check the group.
- Very specific: line 105
Do not delete a worktree with rm -rf or git worktree remove --force, and do not unlock a locked worktree.
- Distinctive: line 106
Do not delete by age or by name pattern alone.
- Distinctive: line 114
Do not list every PID or path.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Free memory and disk
Agents, test runs and dev servers leave processes and files behind. Each one is small, but together they hold gigabytes of memory, ports, hours of CPU, and hundreds of gigabytes of disk. Stopping a process or deleting a folder is easy. The hard part is to tell a leftover from something that somebody still uses. Without this skill, agents kill by name (pkill node) and take down live sessions, kill by CPU and miss the idle leaks, delete worktrees with unsaved edits, or delete temp folders by age and miss the large fresh build output. So collect evidence, sort everything into stop or delete, ask and keep, act only on the clear items, and ask about the rest.
Both scripts need Node.js 18 or later and work on macOS and Linux. scripts/procs.mjs needs ps and lsof (or ss on Linux). scripts/disk.mjs needs git and du, and lsof on macOS.
Which part
- Memory, CPU, ports, a slow or hot machine: follow the process steps below.
- Disk space, worktrees, build folders, temp files: read references/disk.md and follow it.
- Both: do the processes first. A stopped server no longer holds its worktree, so the disk scan can then judge it.
Permission
- A request to clean up, kill or free memory lets you stop the KILL groups after you review them.
- A request to free disk space or to clean up worktrees, build output or temp files lets you delete the DELETE items after you review them.
- A question such as "what eats my CPU?" or "what fills my disk?" lets you scan only. Report what you find, then ask before you stop or delete anything.
- ASK items always need a fresh yes, one at a time or as a list the user confirms.
- Deleting is permanent. There is no trash. Say what comes back (branches, build output) and what does not (temp files).
Processes: steps
Scan. The scan only reads. It never stops anything.
S=<skill-dir>/scripts/procs.mjs node $S scan # memory, top CPU and memory users, kill / ask / keep groups with reasons node $S scan --keep # also list the keep groups node $S scan --all # all your processes, not only dev tools node $S scan --json # the raw facts for each group node $S scan --min-age 2h # default 60m; younger groups are always keptA group is a root process and all its descendants, for example
pnpm dev→vite→esbuild. If the parent of the root exited, the group is "orphaned". The root climbs through wrapper shells (zsh -c,sh start.sh) that have no terminal.Review every KILL and ASK group. The script guesses from facts. You decide. Check each reason against the rules below. If you are not sure, look closer:
ps -o pid,ppid,etime,time,tty,args -p <pid> # time = total CPU used lsof -a -d cwd -p <pid>; lsof -nP -iTCP -sTCP:LISTEN -a -p <pid> curl -sI http://127.0.0.1:<port> | head -3 # what the port serves git -C <cwd> worktree list; git -C <cwd> log -1 --format=%crStop the groups you are sure of:
node $S kill <root pid> [<root pid> ...] # the whole group node $S kill --suggested --except 123,456 # every KILL group, minus the ones you reject node $S kill <pid> ... --dry-run # show what would stopkillacts only on processes from the last scan, and only if the scan is less than 1 hour old. It checks each start time, so a reused PID is never hit. It refuses this agent session. It sends SIGTERM, waits up to 5 s, then sends SIGKILL to the processes that are still running. A PID that is not a group root stops with its own descendants only.- Ask the user about each ASK group that you could not resolve. Give the command, folder, port, age and size.
- Scan again to confirm, then report.
Processes: how to judge
Stale: stop it
- Its folder is gone: a deleted worktree or a removed temp dir.
- It is a test leftover and its parent exited:
node -e "setInterval(...)", fixtures, stubs, smoke runners, stall runners. - Its parent exited and it runs from a temp folder (
$TMPDIR,/tmp,/var/folders):bunxornpxcaches, scratch servers, IPC executors of dead agent sessions. - It is a watcher (
tsx watch, nodemon,--watch,--hot) with no server child and no port. The server crashed, and the watcher waits forever. - Two copies of one command run in one folder. The copy without the port lost the race for it.
- It is a log tail (
wrangler tail,tail -f,logs -f) whose parent exited. Nobody reads it. - It is a test browser driven over
--remote-debugging-pipeand its parent exited. Nothing can control it again, even if it still starts new renderers. Crash handlers always detach (PPID 1). They are stale only when their browser has exited. - Large CPU time on an orphan makes it urgent. For example, the
esbuild --serviceof a forgottenwrangler pages devused 21 hours of CPU in 5 days.
In use: keep it
- This agent session started it. Stop your own processes when you are done with them.
- It runs in an open terminal: it has a tty and its shell is alive.
- It runs inside tmux, screen or zellij. Somebody started it on purpose.
- Its parent is alive: an agent session (Claude Code, Codex, Cursor and similar), an editor or a test runner. MCP servers such as
npm exec chrome-devtools-mcpbelong to their agent session. Exception: if the parent is a long-running broker or daemon, not a session, judge the child on its own facts. - A member of the group started in the last 10 minutes, so the group is in use.
- GUI apps and their helpers: Electron renderers, WebKit, Chrome, Slack, Obsidian. Do not kill them, even at several GB. Report them, and the user can quit or reload the app.
- System processes and processes of other users. Never use sudo.
Not sure: ask
- An orphaned dev server on a port whose project folder still exists. The user may have it open in a browser. Say so if it listens on
*,0.0.0.0or[::]: then it is open to the network. - A detached daemon with no clear owner, such as a status script, a browser daemon or a job runner. Detached daemons are often on purpose.
- Code that moved: the script path is gone, but the folder still exists somewhere else (for example an archive). The process still runs the old code.
- An orphaned test browser with a debugging port. A tool can connect to it again.
Do not
- Do not run
killall node,pkill nodeorpkill -f node. They kill agent sessions, MCP servers and live dev servers. - Do not kill a PID from an old list. PIDs get reused. Use the script, or check
ps -o lstart= -p <pid>right before the kill. - Do not run
kill -- -<pgid>before you check the group. A process group can contain the agent's own shell. - In ad-hoc shell on macOS, remember that
/bin/bashis 3.2. It has nodeclare -A, nomapfileand no${x,,}. - Do not delete a worktree with
rm -rforgit worktree remove --force, and do not unlock a locked worktree. Both lose work that git protects. Delete throughdisk.mjs. - Do not delete by age or by name pattern alone. Ownership and use decide, as references/disk.md explains.
Report
- What you stopped or deleted: a short table with group or kind, count and reason. For processes, give the memory freed, the CPU hogs you stopped and the ports you released. For disk, give the free space before and after.
- What you did not stop or delete and why: one line per ASK item, with command or path, port, age and size. End with a direct question.
- Other facts: the largest consumers that are not stale (apps, app data, VM disks), swap use, and interactive agent sessions older than a day. Each such session can hold MCP servers and browsers, and the user can close it. For disk, also say what refills it (see references/disk.md).
Do not list every PID or path. Group them and count them.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

