Agent skill

Daemon

by sorryhyun in sorryhyun/anima_lora

Submit, monitor, and manage GPU jobs through the anima daemon (make daemon-, make gen, make run-status, MCP bridge, discovery).

MITAuto-check passedAI & LLM Engineering

Install Daemon

skills CLI
$ npx skills add sorryhyun/anima_lora --skill daemon -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install sorryhyun/anima_lora daemon --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/sorryhyun/anima_lora.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/daemon .claude/skills/daemon && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
daemon
GitHub stars
125
Token cost
~2.1k tokens
SKILL.md length
1,059 words
Files
1
Skills in repo
12
Repo updated
First seen
Licence
MIT

At a glance

Submit, monitor, and manage GPU jobs through the anima daemon (make daemon-, make gen, make run-status, MCP bridge, discovery).

  • AI & LLM Engineering work in your project
  • SKILL.md covers Targets, Job environment, Reading the queue and Discovery & agent surface, plus 2 more sections
  • Calls make and python

What it does

Daemon is an agent skill from sorryhyun/anima_lora. Submit, monitor, and manage GPU jobs through the anima daemon (make daemon-, make gen, make run-status, MCP bridge, discovery). Load before launching any GPU process as an agent, checking training-run progress, batch-generating images, or wiring a new daemon client.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in AI & LLM Engineering. It works with Model Context Protocol. The repository describes itself as: optimized anima lora training script. The licence is MIT.

When your agent uses it

  • AI & LLM Engineering work in your project

Example prompts

  • “/daemon”

Requirements

  • Python 3

What it can do on your machine

Read from SKILL.md and the folder at commit d3a5fc4. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • make
    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Daemon loads about 2.1k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 1,059 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from sorryhyun/anima_lora at commit d3a5fc4, republished under its MIT licence (© sorryhyun). 1,059 words, ~2,072 tokens.

Download SKILL.mdSave it as .claude/skills/daemon/SKILL.md (or your agent's skills folder).
name
daemon
description
Submit, monitor, and manage GPU jobs through the anima daemon (make daemon-*, make gen, make run-status, MCP bridge, discovery). Load before launching any GPU process as an agent, checking training-run progress, batch-generating images, or wiring a new daemon client.

Daemon job queue & GPU work

Local FIFO job queue (anima_daemon/), auto-starts on first submit. Full HTTP contract: anima_daemon/README.md.

Agent-launched GPU work must go through the daemon. A GPU process started from a Claude Code background Bash gets killed by the harness sandbox layer after ~1 min (silent SIGKILL — no OS/OOM trace, no traceback; observed 2026-07-25). Daemon jobs also queue behind a live train run instead of OOM-colliding, and survive the terminal.

Targets

make daemon | daemon-run ARGS="<script.py> …" | daemon-wait [JOB=<id>] | daemon-attach [JOB=<id>] | daemon-jobs | daemon-log [JOB=<id>] | daemon-pause [JOB=<id>] | daemon-resume [JOB=<id>] | daemon-kill | daemon-terminate | daemon-prune

  • Front door: make daemon-run ARGS="<script.py> [flags]" — attach-by-default, exits with the job's code; --queue detaches, --inline bypasses the daemon; --stall-timeout S where 0 = off. daemon-run's own --label/--stall-timeout go before the script path — after it every token reaches the child untouched (bench scripts take --label themselves), and -- passes everything after it verbatim.
  • make daemon-wait [JOB=<id>] blocks to terminal and prints the record + result envelope, exiting with the job's code (DaemonClient.wait() programmatically) — don't hand-roll an HTTP poll loop.
  • daemon-pause tree-freezes the running job (SIGSTOP — VRAM held, SM idle, resume instant; the queue does NOT advance past it; refuses accelerate launch runs). daemon-pause RELEASE=1 is the cooperative variant for train.py jobs: the trainer saves a resumable state at its next optimizer step and exits (run_end paused), the GPU is freed and the queue advances; the job parks as paused + released and daemon-resume re-enqueues it at the front with --resume <state_dir> (reload + recompile, not instant). Protocol: pause.request / pause.ack.json in the job dir, library/training/pause.py.
  • Append --queue to any train/distill target to enqueue instead of running inline (make lora --queue, make turbo --queue). GUI Train button, ComfyUI trainer node, and preprocessing all submit here.
  • Long-quiet phases: prefer --stall-timeout over a heartbeat, else bench/_common.py::start_heartbeat() (the watchdog also spares a quiet-but-CPU-burning tree).

Job environment

A job's env is daemon-env ← captured_env ← extra_env. captured_env is the submitter's ANIMA_* / CUDA_* / HF_* / PYTORCH_* / TORCH_* / NCCL_* at submit time (recorded in job.json); everything else — and every whitelisted var the submit shell does not set — comes from the shell that booted the daemon, possibly days ago (a stale-code respawn re-boots it from whichever shell submitted next).

  • An unset var cannot override: if the daemon booted with ANIMA_VOCAB_PACK=<preview pack>, a later submit without the var trains on the preview pack. Set every env lever the job depends on in the submit shell, and confirm it from the job itself: captured_env in job.json, the value in /proc/<pid>/environ, or the line the job logs (the vocab pack logs its sha).
  • make daemon-terminate is the reset, and it is cheap when nothing is running — all state is on disk and the next submit boots a fresh daemon from the current shell. Use it whenever make daemon-jobs ARGS="--state queued,running,paused" reads 0 of M and the daemon's env is in doubt (an old session booted it, an env lever changed, a run is about to take hours). It kills the active job and discards the queue, so check that line first.

Reading the queue

questioncommandwhat comes back
Is a job running / is the queue busy?make daemon-jobs ARGS="--state queued,running,paused"one line per unfinished job, then N of M jobs — a bare 0 of M is the "nothing running" answer (exit 1 = daemon down)
How far along is the current run?make run-statusstep N/total, it/s, ETA, last losses, last ckpt (§ Run status below)
Did job <id> finish, and with what exit code?make daemon-jobs ARGS="--all" | grep <id>one line: when · id · state · rc= · duration · target · first error line
…and block until it does?make daemon-wait JOB=<id>exits with the job's own code (record + envelope on stdout)
What argv did job <id> run?python -c "import json;print(' '.join(json.load(open('output/daemon/jobs/<id>/job.json'))['argv']))"the child argv on one line. Command jobs only — a train job persists method/preset/overrides/extra and builds its launch cmd at spawn, so its argv is empty
One job's full record + its bench result.json?python -m anima_daemon status <id>the whole record, envelope inlined under result; reads the on-disk job.json when the daemon is down
Is the daemon up, on which port, running stale code?python -m anima_daemon statusup, resolved base_url, stale_code, paused, active_job (exit 1 when down)

daemon-jobs, daemon-log, run-status and the job.json read all work with the daemon down.

daemon-jobs prints oldest first (| tail -5 = the five most recent), capped at 15; filter with ARGS="--running|--failed|--done|--state s[,s]|--limit N|--all". Jobs do not always start in submit order (a chained job waits on its parent), so ask for pending work by state rather than trusting the newest-15 slice to contain it. make daemon-log [JOB=<id>] dumps a job's stdout from disk (ARGS="-n 200"; -n 0 = all); daemon-attach follows a live stream only, so it has nothing for a finished job.

Show full SKILL.md (283 more words)Show less

Discovery & agent surface

  • Discovery is pidfile-based: output/daemon/daemon.json / ~/.anima/daemon.json → {port, root}. Never hardcode 8765 — the port falls back to ephemeral on collision.
  • python -m anima_daemon submit|wait|status is the stdlib-only equivalent of the make targets, for callers that can't import tasks.py.
  • The daemon self-describes at GET / (README) and GET /tools (JSON-Schema manifest). anima_daemon/mcp.py is a stdio MCP bridge over the same surface — register the script path as the MCP command; it discovers the daemon itself.
  • Job dirs are retention-bounded. make daemon-prune is the manual sweep — dry-run unless ARGS="--apply". Rules and knobs: anima_daemon/README.md § Retention.

Batch generation: make gen

Daemon-routed batch generation — same argv + env levers as make test, submitted as a GPU command job (attach-by-default; --queue detaches, --inline bypasses). Lands a gen_manifest.json in the job record: write_gen_manifest drops a result_path.json pointer when the daemon exports ANIMA_DAEMON_JOB_DIR (a plain python inference.py is unaffected).

Run status: make run-status

step N/total, it/s, ETA, last losses, last ckpt, and RUNNING/OK/ERROR/DEAD (no run_end + dead pid), digested from the run's progress.jsonl (library/training/progress.py::read_status — importable; scripts/run_status.py is the CLI). Covers train.py methods and make turbo.

Both launch paths are scanned: an inline run's output/logs/<name>.progress.jsonl and a daemon job's output/daemon/jobs/<id>/progress.jsonl (the daemon overrides --progress_jsonl with a per-job path, so the run dir under output/logs/ holds the snapshot + TB events but no stream). Defaults to the newest stream from either; RUN=<output_name|job id|path> selects — a daemon stream's filename is bare, so a run name there is matched against the run_start event inside it, and the header prints (job <id>). ARGS="--list" for all, ARGS="--json" for the dict, ARGS="--jobs-dir ''" to skip the daemon dirs.

For every scalar instead: make export-logs RUN=output/logs/<run> SUMMARY=1 prints max-step + last value per tag (raw payload {"run", "tags": {tag: [[step, wall_time, value], …]}} — value is row[2]).

© sorryhyun, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/daemon of sorryhyun/anima_lora.

Open the folder on GitHubat commit d3a5fc4

Compare with similar skills

Daemon next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Daemon compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Daemon this skillsorryhyun/anima_lora125—~2.1kAutomated safety check: PassMIT
Codebase Managementgiancarloerra/SocratiCode3.3k1 repos~1.8kAutomated safety check: PassAGPL-3.0
Hugging Face LLM Trainerhuggingface/skills11k3 repos~7.2kAutomated safety check: PassApache-2.0
KtxKaelio/ktx1.6k1 repos~3.2kAutomated safety check: PassApache-2.0
Tool Use Data Synthesissunny-glow/Auto-BenchMax1.3k—~3.3kAutomated safety check: PassNone
Sandbaseiflytek/skillhub5.2k2 repos~2.1kAutomated safety check: PassApache-2.0

Similar skills

  • Codebase Management

    giancarloerra/SocratiCode

    Set up, index, and manage SocratiCode codebase indexing. An agent skill from giancarloerra/SocratiCode.

    3.3k GitHub starsUsed in 1 repo~1.8k tokens
    AI & LLM EngineeringAuto-check passed
  • Hugging Face LLM Trainer

    huggingface/skills

    Official

    Trains or fine-tunes language and vision models with TRL or Unsloth on Hugging Face Jobs cloud GPUs, then converts the results to GGUF.

    11k GitHub starsUsed in 3 repos~7.2k tokens
    AI & LLM EngineeringAuto-check passed
  • Ktx

    Kaelio/ktx

    Installs and configures ktx, the open-source context layer for data agents — runs ktx setup non-interactively with hidden CLI flags, configures database connections and embeddings, installs agent…

    1.6k GitHub starsUsed in 1 repo~3.2k tokens
    AI & LLM EngineeringAuto-check passed
  • Tool Use Data Synthesis

    sunny-glow/Auto-BenchMax

    Synthesize training data for ANY tool-use / agentic benchmark, in ANY repo.

    1.3k GitHub stars~3.3k tokensUpdated 2 mo ago
    AI & LLM EngineeringAuto-check passed
  • Sandbase

    iflytek/skillhub

    Access 2,000+ AI models and API tools through one MCP interface for inference, media generation, search, scraping, embeddings, social data, and structured retrieval.

    5.2k GitHub starsUsed in 2 repos~2.1k tokens
    AI & LLM EngineeringAuto-check passed
  • MCP Local RAG

    shinpr/mcp-local-rag

    Searches, saves, and maintains a local document index through a local RAG MCP server.

    407 GitHub stars~4.4k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed

More from sorryhyun/anima_lora

All 12 skills in this repo
  • Model Catalog

    sorryhyun/anima_lora

    The model catalog (library/downloads.py) — one Asset row per weight (repo, files, destination, installed probe), packs, resolve() name order, and the rule that loaders import their default paths…

    125 GitHub stars~502 tokensUpdated today
    Auto-check passed
  • Qwen21

    sorryhyun/anima_lora

    Qwen-Image-2.1 LoRA line (NOT Anima) — running cache/train through the daemon, make gui-qwen, the CacheRequest/TrainRequest flag surface and how to add a field, model-dir resolution, cache layout…

    125 GitHub stars~1.9k tokensUpdated today
    Auto-check: notes
  • Anime Tools

    sorryhyun/anima_lora

    The trainer ↔ animetools boundary — what the curation split moved out, the typed request/stage API the make targets build, the git-pin dev loop and its stale-venv trap, and the tests that guard the…

    125 GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Bucketing

    sorryhyun/anima_lora

    Free-fit native-shape bucketing — the token bands per edge tier, tier choice at preprocess time, the compiledynamicseq coupling and per-tier graph budget, and why training never needs --targetres.

    125 GitHub stars~932 tokensUpdated today
    Auto-check passed
  • Captions

    sorryhyun/anima_lora

    Caption pipeline — position-clause grammar (never hand-split a caption), make caption-autotag modes, make caption-position (v2 rewrite rules and gates), and the preprocess-stage wiring for both.

    125 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Custom Nodes

    sorryhyun/anima_lora

    The ComfyUI node map — which node lives in which standalone repo vs in-tree under customnodes/, where each is symlinked, and the vendor-sync rule for the vendor/ subsets.

    125 GitHub stars~470 tokensUpdated today
    Auto-check passed

Questions about Daemon

What does Daemon do?

Submit, monitor, and manage GPU jobs through the anima daemon (make daemon-, make gen, make run-status, MCP bridge, discovery). Daemon is an agent skill from sorryhyun/anima_lora. Submit, monitor, and manage GPU jobs through the anima daemon (make daemon-, make gen, make run-status, MCP bridge, discovery).

When should I use Daemon?

Daemon fits situations like: AI & LLM Engineering work in your project.

How do I install Daemon in Claude Code?

Run `npx skills add sorryhyun/anima_lora --skill daemon -a claude-code`. Or copy the skill folder (.claude/skills/daemon in sorryhyun/anima_lora) into .claude/skills/daemon in your project. Claude Code loads it when a task matches its description.

How do I install Daemon in Codex?

Run `npx skills add sorryhyun/anima_lora --skill daemon -a codex`. Or copy the skill folder (.claude/skills/daemon in sorryhyun/anima_lora) into .agents/skills/daemon in your project. Codex loads it when a task matches its description.

Can I use Daemon in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sorryhyun/anima_lora --skill daemon -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/daemon, .gemini/skills/daemon, .github/skills/daemon and .opencode/skills/daemon in your project.

What does Daemon need to run?

Going by SKILL.md and its folder, Daemon needs the command-line tools its instructions call (make and python). Our summary lists: Python 3.

Does Daemon access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Daemon safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Daemon use?

Daemon is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Daemon use?

About 2.1k tokens (SKILL.md is roughly 8.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Daemon?

Skills that share tags, products or a category with Daemon: Codebase Management (giancarloerra/SocratiCode, 3.3k stars), Hugging Face LLM Trainer (huggingface/skills, 11k stars), Ktx (Kaelio/ktx, 1.6k stars) and Tool Use Data Synthesis (sunny-glow/Auto-BenchMax, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Daemon?

sorryhyun (a GitHub user) maintains it in sorryhyun/anima_lora, which has 125 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 8, 2026.

Source: sorryhyun/anima_lora on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.