unpackerr
Copilot instructions1.5k starsChanged 56 days agoMITView on GitHub
Longer runtime/API context: INTERNALS.md. Unpackerr is a single-process daemon. One goroutine in Run() (pkg/unpackerr/start.go) owns the live Config, the queue map, and the folder tracker. HTTP handlers validate input and hand mutations to that goroutine through onMainLoop. Review with that model in mind; the items below have been raised and rejected before. - Live Config fields are read and written only on the main loop. Do not ask for a mutex around u.StartDelay, u.Passwords, u.Sonarr, and similar. If a new…
We split this copilot-instructions.md into the rules it gives an agent
4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 23
Do not propose snapshot-and-merge logic whose only purpose is concurrent PUTs.
- Very specific: line 30
Do not request url.Parse or a non-empty host.
- Distinctive: line 53
Do not force a write failure with a read-only directory.
- Distinctive: line 63
Do not request an in-process watcher or listener rebuild.
≈ “Common” is an estimate: at least 1 in 5 of the 3,669 Copilot instructions 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
Review guidance for Unpackerr
Longer runtime/API context: INTERNALS.md.
Unpackerr is a single-process daemon. One goroutine in Run() (pkg/unpackerr/start.go)
owns the live Config, the queue map, and the folder tracker. HTTP handlers validate
input and hand mutations to that goroutine through onMainLoop. Review with that model
in mind; the items below have been raised and rejected before.
Concurrency
- Live
Configfields are read and written only on the main loop. Do not ask for a mutex aroundu.StartDelay,u.Passwords,u.Sonarr, and similar. If a new reader runs on another goroutine, route it throughonMainLoopinstead. Exception:GET /api/stats/ PrometheusCollectread Starr/folder map headers underconfigMuand the last poll snapshot underHistory.mu. Poll workers publishQueueandlast*afterGetQueuereturns. Do not hop that path ontoonMainLoop. retrieveAppQueuesdoes not need to snapshot the app lists. A config PUT applies on the same goroutine, which is parked inwait.Wait()until every poll returns.syncFileUIPasswordis not a lock-order inversion.uiPassword()releasesuiPassMubeforeconfigMuis taken.- Two administrators saving config at the same instant is not a design target. Do not propose snapshot-and-merge logic whose only purpose is concurrent PUTs.
History.mu,histMu,configMu, anduiPassMueach guard one thing for HTTP readers. Do not suggest adding a fifth lock; suggest moving the work to the main loop.
Validation and input
- Starr URLs are checked for an
http://orhttps://prefix, matching startup. Do not requesturl.Parseor a non-empty host. - The history JSONL is written by this process, capped at
keep_history, and read withbufio.Reader.ReadBytes. It is not untrusted input. Do not request line caps, bounded readers, atomic rename, rollback copies, or.bakhandling for it. Starr and Folder rows newer than 72 hours are restored intoHistory.MapaftervalidateApps. Folder items are attached to the watch tracker afterPollFolders(which replacesu.folders). Do not skip Folder rows. - A local admin POST does not need context-cancellation checks between enqueue and execution on the main loop.
New()allocatesConfig,Webserver,History, andfolders. Nil checks on those fields in HTTP handlers are dead code.- The tray builds its menus in
readyTraybeforego u.Run(), and a config PUT cannot apply until the loop drainstaskChan, so those reads of liveConfigare ordered before any possible write. They are not a race and do not need a lock. filepath:values are kept as written infileConfigand expanded on the live copy only (expandFilepaths). PUT may add or change afilepath:string; a missing secret file is 400. Webserver PUT expandsfilepath:only onui_password. Do not addexpandFilepathsacross API keys or TLS paths as a drive-by.
Tests
- Do not force a write failure with a read-only directory. The container image
runs as root, which ignores the permission bits, and Windows ignores them
outright. Use
blockedPath, which puts the target under a regular file so the write fails with ENOTDIR for every user and platform.
Config PUT
- Sections that the loop cannot re-apply in place return
restartRequired: trueand setpendingRestart; the loop re-execs itself once the queue is idle (maybeRestart). Folders and listener/TLS/logger changes fall in this group. Do not request an in-process watcher or listener rebuild. - General PUT resets the loop tickers directly; interval changes do not need a restart.
Trending
More talk lately.about the whole repository
Who's talking about Unpackerr/unpackerr
- Faustvii/home-ops“fix(container): update image ghcr.io/unpackerr/unpackerr (v1.0.0 ➔ v1.0.1)”GitHub · Oct 29, 2026 · 1 reactions
- nklmilojevic/home“fix(container): update ghcr.io/unpackerr/unpackerr ( v1.0.0 → v1.0.1 )”GitHub · Oct 29, 2026 · 1 reactions
- Tanguille/cluster“fix(container): update image ghcr.io/unpackerr/unpackerr (v1.0.0 ➔ v1.0.1)”GitHub · Oct 29, 2026 · 1 reactions
- jsimcina/k8s-home“fix(container): update image ghcr.io/unpackerr/unpackerr (v1.0.0 ➔ v1.0.1)”GitHub · Oct 29, 2026 · 1 reactions
- janpuc/home-ops“feat(container)!: Update image ghcr.io/unpackerr/unpackerr (v0.16.1 ➔ v1.0.1)”GitHub · Oct 26, 2026 · 1 reactions
The biggest 5 of 51 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 51
Talked about on GitHub and Bluesky (51 times).
On GitHub · 50
- Oct 29, 2026fix(container): update image ghcr.io/unpackerr/unpackerr (v1.0.0 ➔ v1.0.1) — Faustvii/home-ops1 reaction · 2 comments
- Oct 29, 2026fix(container): update ghcr.io/unpackerr/unpackerr ( v1.0.0 → v1.0.1 ) — nklmilojevic/home1 reaction · 2 comments
- Oct 29, 2026fix(container): update image ghcr.io/unpackerr/unpackerr (v1.0.0 ➔ v1.0.1) — Tanguille/cluster1 reaction · 6 comments
- Oct 29, 2026fix(container): update image ghcr.io/unpackerr/unpackerr (v1.0.0 ➔ v1.0.1) — jsimcina/k8s-home1 reaction · 1 comment
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr (v0.16.1 ➔ v1.0.1) — janpuc/home-ops1 reaction · 1 comment
45 more on GitHub
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr (v0.16.1 ➔ v1.0.0) — Faustvii/home-ops1 reaction · 2 comments
- Oct 26, 2026feat(container)!: Update ghcr.io/unpackerr/unpackerr ( v0.16.1 → v1.0.0 ) — nklmilojevic/home1 reaction · 2 comments
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr (v0.16.1 ➔ v1.0.0) — Tanguille/cluster1 reaction · 7 comments
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr (v0.16.1 ➔ v1.0.0) — jsimcina/k8s-home1 reaction · 2 comments
- Oct 26, 2026Import qBittorrent single-file torrents from root_path — Sonarr/Sonarr1 reaction
- Oct 17, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr (0.15.2 ➔ v0.16.1) — Faustvii/home-ops1 reaction · 2 comments
- Oct 30, 2026Update ghcr.io/unpackerr/unpackerr Docker tag to v1 — sweeneytr/wavecat0 reactions
- Oct 29, 2026fix(container): update image mirror.gcr.io/golift/unpackerr ( v1.0.0 → v1.0.1 ) — adampetrovic/home-ops0 reactions · 2 comments
- Oct 29, 2026fix: update docker image ghcr.io/unpackerr/unpackerr to v1.0.1 — tvories/k8s-gitops0 reactions · 3 comments
- Oct 29, 2026Update image ghcr.io/unpackerr/unpackerr (v1.0.0 ➔ v1.0.1) — ergho/homelab-ops0 reactions
- Oct 29, 2026Update ghcr.io/unpackerr/unpackerr Docker tag to v1.0.1 — daubog44/arr_setup0 reactions
- Oct 29, 2026Update docker.io/golift/unpackerr Docker tag to v1.0.1 — DI0IK/nixlab0 reactions
- Oct 29, 2026fix(container): update image ghcr.io/unpackerr/unpackerr to v1.0.1 — rust84/k8s-gitops0 reactions · 2 comments
- Oct 29, 2026fix(container): update image golift/unpackerr (v1.0.0 → v1.0.1) — solanyn/home-ops0 reactions · 1 comment
- Oct 29, 2026fix(container): update image ghcr.io/unpackerr/unpackerr ( v1.0.0 → v1.0.1 ) — nicolerenee/infra0 reactions
- Oct 26, 2026fix(container): update ghcr.io/unpackerr/unpackerr ( v1.0.0 → v1.0.1 ) — aisling136/HomeLab0 reactions
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr (v0.16.1 ➔ v1.0.1) — smbonn2005/HomeOps0 reactions · 2 comments
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr to v1 — Euvaz/gitops-home0 reactions
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr ( 0.14.5 → v1.0.1 ) — carpenike/k8s-gitops0 reactions · 1 comment
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr ( v0.16.1 → v1.0.1 ) — s0len/solen-ops0 reactions · 2 comments
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr to v1 — mfin/homelab0 reactions
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr ( v0.16.1 ➔ v1.0.1 ) — bluevulpine/flux-talos0 reactions · 2 comments
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr (v0.16.1 ➔ v1.0.1) — hydazz/home-ops0 reactions · 1 comment
- Oct 26, 2026feat(container)!: Update image ghcr.io/unpackerr/unpackerr (v0.16.1 ➔ v1.0.1) — christfriedbalizou/homelab0 reactions · 2 comments
- Oct 26, 2026feat(images)!: Update docker.io/golift/unpackerr Docker tag to v1.0.1 — dfroberg/cluster0 reactions
- Oct 26, 2026chore(deps): update docker images (major) — spotdemo4/nix0 reactions
- Oct 26, 2026chore(container)!: Update image golift/unpackerr (0.15.2 ➔ v1.0.1) — D-o-c-labs/Doc-Home-ops0 reactions · 2 comments
- Oct 26, 2026Update ghcr.io/unpackerr/unpackerr Docker tag to v1 — PlatanosVerdes/rpi-homeserver0 reactions
- Oct 2, 2026Request: Unpackerr — mdg-labs/hoserva-catalog0 reactions
- Sep 19, 2026feat(container)!: Update image docker.io/golift/unpackerr (0.15.2 ➔ v0.16.1) — qlonik/musical-parakeet0 reactions
- Sep 14, 2026feat(container): update image ghcr.io/unpackerr/unpackerr (0.15.2 ➔ v0.16.1) — zebernst/homelab0 reactions · 1 comment
- Sep 5, 2026feat(container): update image ghcr.io/unpackerr/unpackerr ( 0.15.2 → v0.16.1 ) — zednotdead/gensokyo0 reactions · 2 comments
- Aug 31, 2026chore(deps): update golift/unpackerr docker tag to v0.16.1 — sixteenbit/fafnir-appstore0 reactions
- Aug 31, 2026Update golift/unpackerr Docker tag to v0.16.1 - abandoned — vyrtualsynthese/homelab0 reactions · 1 comment
- Aug 31, 2026feat(container): update image ghcr.io/unpackerr/unpackerr to v0.16.1 — mfin/homelab0 reactions
- Aug 30, 2026chore(container)!: Update image golift/unpackerr (0.15.2 ➔ v0.16.1) — D-o-c-labs/Doc-Home-ops0 reactions · 2 comments
- Mar 7, 2026feat(container): update image ghcr.io/unpackerr/unpackerr to v0.15.2 — selbert/tom-ops0 reactions · 2 comments
- Mar 7, 2026feat(container): update image ghcr.io/unpackerr/unpackerr to v0.16.1 — snazy2000/K8s-at-home0 reactions · 2 comments
- Mar 2, 2026feat(container): update image ghcr.io/unpackerr/unpackerr to v0.16.1 — Euvaz/gitops-home0 reactions
- Mar 2, 2026feat(container): update image ghcr.io/unpackerr/unpackerr ( 0.14.5 → v0.16.1 ) — carpenike/k8s-gitops0 reactions · 1 comment
- Jan 19, 2026[Request] Unpackerr — dennysubke/dennys-umbrel-app-store0 reactions · 1 comment
- Jun 14, 2025App request: Unpackerr — truenas/apps0 reactions
- Jun 20, 2024Unpackarr — mjmaurer/media0 reactions
- Jan 18, 2024Switch unpackerr to ghcr — onedr0p/home-ops0 reactions · 1 comment
- Mar 28, 2023Panic in MarshalENV — golift/cnfg0 reactions
On Bluesky · 1
- Apr 3, 2024github.com/Unpackerr/un... — @spooky.imi.boo1 likes and repost · 1 reply
Where files are headingNew Copilot instructions files have more rules about branches and pull requests, and fewer about code style.
Of the Copilot instructions files we read, the 2,297 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
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.

