Best for
- Use this skill when the user asks the MoviePilot agent to identify and organize downloaded/local video or music files that automatic transfer cannot handle.
jxxghp/MoviePilot/skills/organize-files/SKILL.md
Use this skill when the user asks the MoviePilot agent to identify and organize downloaded/local video or music files that automatic transfer cannot handle. Typical triggers include manually organizing a file or folder, a TV season pack, one music recording, or a complete album directory. If the user gives failed transfer history IDs, prefer transfer-failed-retry instead.
Decision brief
Use this skill to help the user identify media files that MoviePilot could not organize automatically, then call the normal transfer pipeline through transferfile. Do not rename, move, or copy files manually; let MoviePilot's directory, transfer mode, rename template, overwrite,…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/jxxghp/MoviePilot --skill "skills/organize-files"Inspect the Agent Skill "organize-files" from https://github.com/jxxghp/MoviePilot/blob/b952a3e407262dbc9c4e2c045e550468023d9f68/skills/organize-files/SKILL.md at commit b952a3e407262dbc9c4e2c045e550468023d9f68. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Use listdirectory for any directory the user provides. Prefer sortby="time" for "recent" or "刚下载的" requests.
MoviePilot's normal flow is:
If the user provides one or more failed transfer history IDs, stop and use transfer-failed-retry.
Use listdirectory for any directory the user provides. Prefer sortby="time" for "recent" or "刚下载的" requests.
For the best sample file, call:
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 90/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 11,623 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Use this skill to help the user identify media files that MoviePilot could not organize automatically, then call the normal transfer pipeline through transfer_file. Do not rename, move, or copy files manually; let MoviePilot's directory, transfer mode, rename template, overwrite, scrape, and notification settings handle the actual organization.
MoviePilot's normal flow is:
DownloadChain.download_single adds a downloader task, records DownloadHistory and DownloadFiles, runs downloader-specific download_added, then sends DownloadAdded.TransferChain.process scans completed downloader tasks in monitored download directories. If a DownloadHistory exists for the hash, it reuses the recorded media IDs; otherwise it falls back to path recognition.transfer_file, which enters TransferFileTool -> TransferChain.manual_transfer -> TransferChain.do_transfer.do_transfer recursively collects eligible video/subtitle/audio files, ignores recycle/hidden paths and configured exclude words, and reuses download history when possible. Video uses MetaInfoPath; music uses audio tags plus MetaMusic/MusicInfo and keeps the selected recording or album identity.TransferChain.__handle_transfer chooses the target directory through DirectoryHelper, delegates file operations to the file manager module, and lets TransHandler build the final target path and name.TransferHistory success/failure records, emits transfer events, sends notifications, and may trigger transfer-failed-retry for failed history records.Important implication: an existing TransferHistory for the same source path can make a later transfer skip. Delete only stale or failed history records, and only after the user has confirmed the record is safe to remove.
transfer-failed-retry.query_download_tasks to find its save path or hash, then continue with the path.query_directory_settings(directory_type="download") first, then ask which directory or subdirectory to process if more than one candidate exists.Use list_directory for any directory the user provides. Prefer sort_by="time" for "recent" or "刚下载的" requests.
For directories with more than 20 items, ask the user to narrow the folder or choose the relevant child directory before running transfers. Avoid organizing a broad shared download root unless the user explicitly confirms the scope.
Treat these as transfer candidates:
Skip obvious samples, trailers, screenshots, hidden folders, recycle folders, and files that are not media/subtitle/audio.
For the best sample file, call:
recognize_media(path="<source file path>")
If recognition fails or looks wrong:
search_media(title="...", year="...", media_type="movie|tv"). For music, call search_media(title="<artist> - <title>", media_type="music", music_type="recording|album").ask_user_choice when available, or ask the user directly to choose the correct title and media_source + media_id pair.query_media_detail(media_source="themoviedb", media_id="<id>", media_type="tv") before deciding the season number. For an album, use query_media_detail(media_type="music", music_type="album", media_source="musicbrainz", media_id="<album_id>") and verify total_tracks before treating the directory as complete.Never invent an ID. Preserve the exact source-native entity returned by search: a recording is one track, an album is a multi-track collection, and an artist is browse-only and cannot be organized.
Before writing:
query_library_exists when a precise video or music identity is known and duplicate risk matters. For albums, an exists result is only true after complete track coverage is confirmed.query_transfer_history(title="<title or path keyword>", status="all") if the file may already have a success or failure record.transfer_file later returns "已整理过", query transfer history, identify the matching source path, and ask before deleting the stale record.Only call delete_transfer_history(history_id=<id>) for the exact stale/failed record that blocks the requested source path. Do not delete unrelated successful history.
Use transfer_file with explicit identity whenever possible:
transfer_file(
file_path="<source path>",
storage="local",
media_type="movie|tv",
media_source="<source>",
media_id="<native_id>",
season=<season_number_if_tv>
)
For one recording:
transfer_file(file_path="<audio file>", media_type="music", music_type="recording", media_source="musicbrainz", media_id="<recording_id>")
For a complete album, transfer the album directory once:
transfer_file(file_path="<album directory>/", media_type="music", music_type="album", media_source="musicbrainz", media_id="<album_id>")
Rules:
file_path so the tool treats it as a directory.target_path, target_storage, and transfer_type empty so configured directory rules apply.target_path or transfer_type only when the user explicitly asks or the default directory configuration cannot handle the file.media_source + media_id, media_type="tv", and the confirmed season for each item.scrape_metadata(media_type="music", ...); album scraping may use the album ID and reports actual lyrics counts.After each transfer batch, report:
media_source + media_id, season/episode range when relevant;If the result creates failed history records, tell the user they can retry with the history ID or let the agent continue with transfer-failed-retry.
recognize_media(path=...)search_media(...) and confirm the result.transfer_file(file_path=..., media_type=..., media_source=..., media_id=..., season=...)list_directory(path=...)recognize_media(path=...).media_source, media_id, media_type="tv", and season.transfer_file(file_path="<folder>/", media_type="tv", media_source="<source>", media_id="<native_id>", season=<season>)recognize_media(path=..., media_type="music")search_media(..., music_type="recording") when ambiguous.query_library_exists when duplicate risk matters.media_source + media_id.list_directory(path=...) and confirm the files form one album rather than a mixed folder.total_tracks; ask before proceeding when the folder appears incomplete or mixed.media_type="music", music_type="album", and the album identity.list_directory(path=...)query_transfer_history(title="<title or source path keyword>", status="all")src.delete_transfer_history(history_id=<id>)transfer_file(...).music_type and source-native IDs.Frequently asked questions
Use this skill to help the user identify media files that MoviePilot could not organize automatically, then call the normal transfer pipeline through transferfile. Do not rename, move, or copy files manually; let MoviePilot's directory, transfer mode, rename template, overwrite,…
The source record exposes this install command: npx skills add https://github.com/jxxghp/MoviePilot --skill "skills/organize-files". Inspect the command and pinned source before running it.
Alternatives
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
wanshuiyin/Auto-claude-code-research-in-sleep
Use it for operations and research tasks; the detail page covers purpose, installation, and practical steps.
prowler-cloud/prowler
PostgreSQL indexing best practices for Prowler: index design, partial indexes, partitioned table indexing, EXPLAIN ANALYZE validation, concurrent operations, monitoring, and maintenance. Trigger: When creating or modifying PostgreSQL indexes, analyzing query performance with EXPLAIN, debugging slow queries, reviewing index usage statistics, reindexing, dropping indexes, or working with partitioned table indexes. Also trigger when discussing index strategies, partial indexes, or index maintenance