version: 2
shared_rules:
  - This is a background system task, NOT a user conversation.
  - Your final response will be consumed by the system. Keep it concise and task-focused.
  - Do NOT include greetings, explanations, or conversational text.
  - Respond in Chinese (中文).
task_types:
  heartbeat:
    header: "[System Heartbeat]"
    objective: "Check all jobs in your jobs directory and process pending tasks."
    steps_title: "Follow these steps"
    steps:
      - "List all jobs with status 'pending' or 'in_progress'."
      - "For 'recurring' jobs, check 'last_run' to determine if it's time to run again."
      - "For 'once' jobs with status 'pending', execute them now."
      - "After executing each job, update its status, 'last_run' time, and execution log in the JOB.md file."
    empty_result: "If no jobs were executed, output nothing."
  health_check:
    header: "[System Health Check]"
    objective: "Verify that the agent execution pipeline is alive."
    steps_title: "Follow these steps"
    steps:
      - "Verify that runtime config, tools, and jobs can all be accessed normally."
      - "If a real issue is detected, report the failing subsystem and the immediate blocking reason."
    empty_result: "If there is nothing meaningful to report, output OK only."
  transfer_failed_retry:
    header: "[System Task - Transfer Failed Retry]"
    objective: "A file transfer or organization has failed. Please use the `transfer-failed-retry` skill to retry the failed transfer."
    context_title: "Task context"
    context_lines:
      - "Failed transfer history record IDs: {history_ids_csv}"
      - "Total failed records: {history_count}"
    steps_title: "Follow these steps"
    steps:
      - "Use `query_transfer_history` with status='failed' to find the record with id={history_id} and understand the failure details such as source path, error message, and media info."
      - "Analyze the error message to determine the best retry strategy."
      - "If the source file no longer exists, skip this retry and report that the file is missing."
      - "Delete the failed history record using `delete_transfer_history` with history_id={history_id}."
      - "Re-identify the media using `recognize_media` with the source file path."
      - "If recognition fails, try `search_media` with keywords from the filename."
      - "Re-transfer using `transfer_file` with the source path and any identified media info such as tmdbid and media_type."
      - "Report the final result."
  batch_transfer_failed_retry:
    header: "[System Task - Batch Transfer Failed Retry]"
    objective: "Multiple file transfers from the same source have failed. These files likely belong to the same media. Please use the `transfer-failed-retry` skill to retry them efficiently."
    context_title: "Task context"
    context_lines:
      - "Failed transfer history record IDs: {history_ids_csv}"
      - "Total failed records: {history_count}"
    steps_title: "Follow these steps"
    steps:
      - "Use `query_transfer_history` with status='failed' to find all records with these IDs and understand the failure details."
      - "Analyze the first record to determine the shared media identity and the best retry strategy because the root cause is usually the same for all files."
      - "If the error is about media recognition, identify the media once using `recognize_media` or `search_media`, then reuse that result for all files."
      - "For each failed record, delete the old history entry with `delete_transfer_history` and re-transfer using `transfer_file`."
      - "Report how many retries succeeded and how many still failed."
    task_rules:
      - "These files share the same media identity. Do NOT call `recognize_media` or `search_media` repeatedly for each file."
  manual_transfer_redo:
    header: "[System Task - Manual Transfer Re-Organize]"
    objective: "A user manually triggered an AI re-organize task from the transfer history page."
    context_title: "Transfer history record"
    context_lines:
      - "- History ID: {history_id}"
      - "- Current status: {current_status}"
      - "- Current recognized title: {recognized_title}"
      - "- Media type: {media_type}"
      - "- Category: {category}"
      - "- Year: {year}"
      - "- Season/Episode: {season_episode}"
      - "- Source path: {source_path}"
      - "- Source storage: {source_storage}"
      - "- Destination path: {destination_path}"
      - "- Destination storage: {destination_storage}"
      - "- Transfer mode: {transfer_mode}"
      - "- Current TMDB ID: {tmdbid}"
      - "- Current Douban ID: {doubanid}"
      - "- Error message: {error_message}"
    steps_title: "Required workflow"
    steps:
      - "Use `query_transfer_history` to locate and inspect the record with id={history_id}, and verify the source path, status, media info, and failure context."
      - "Decide whether the current recognition is trustworthy."
      - "If the source file no longer exists or cannot be safely processed, stop and report the reason."
      - "If the current recognition is wrong or the record should be reorganized, determine the correct media identity first."
      - "Prefer `recognize_media` with the source path. If recognition is not reliable, use `search_media` with keywords from filename, title, or year."
      - "Only continue when you have high confidence in the target media."
      - "Before re-organizing, delete the old transfer history record with `delete_transfer_history` so the system will not skip the source file."
      - "Then use `transfer_file` to organize the source path directly."
      - "When calling `transfer_file`, reuse known context when appropriate: source storage, target path, target storage, transfer mode, season, tmdbid or doubanid, and media_type."
      - "If this record is already correct and no re-organize is needed, do not perform destructive actions; simply report that no change is necessary."
    task_rules:
      - "Do NOT rely on previous chat context. Work only from the record above."
      - "Your goal is to directly fix one transfer history record by using MoviePilot tools to analyze, clean up the old history entry if necessary, and organize the source file again."
      - "You should complete the re-organize by directly using tools such as `query_transfer_history`, `recognize_media`, `search_media`, `delete_transfer_history`, and `transfer_file`."
      - "Do NOT reorganize blindly when media identity is uncertain."
      - "If the previous record was successful but obviously identified as the wrong media, still use the tool-based flow above instead of `/redo`."
      - "Keep the final response short and focused on outcome."
  batch_manual_transfer_redo:
    header: "[System Task - Batch Manual Transfer Re-Organize]"
    objective: "A user manually triggered a batch AI re-organize task from the transfer history page."
    context_title: "Selected transfer history records"
    context_lines:
      - "- History IDs: {history_ids_csv}"
      - "- Total records: {history_count}"
      - "{records_context}"
    steps_title: "Required workflow"
    steps:
      - "Review the selected records below first and group them by likely shared media identity, source directory, or retry strategy when possible."
      - "Use the provided record context as the primary source of truth. Call `query_transfer_history` only when you need extra confirmation."
      - "For each group, decide whether the current recognition is trustworthy."
      - "If multiple records clearly belong to the same movie or series, identify the media once with `recognize_media` or `search_media`, then reuse that result for the related records."
      - "If a source file no longer exists or cannot be safely processed, skip that record and note the reason."
      - "Before re-organizing a record, delete the old transfer history record with `delete_transfer_history` so the system will not skip the source file."
      - "Then use `transfer_file` to organize the source path directly."
      - "When calling `transfer_file`, reuse known context when appropriate: source storage, target path, target storage, transfer mode, season, tmdbid or doubanid, and media_type."
      - "If a record is already correct and no re-organize is needed, do not perform destructive actions; simply mark it as skipped."
      - "Report only the aggregate outcome, including how many records succeeded, skipped, and failed."
    task_rules:
      - "Do NOT assume every selected record belongs to the same media."
      - "When several records obviously share the same media identity, avoid repeated `recognize_media` or `search_media` calls."
      - "Process every selected record exactly once."
      - "Keep the final response short and focused on the aggregate outcome."
  search_recommend:
    header: "[System Task - Search Results Recommendation]"
    objective: "Analyze the provided search results and select the best matching items based on user preferences."
    context_title: "Task context"
    context_lines:
      - "{search_results}"
    steps_title: "Follow these steps"
    steps:
      - "Review all search result items carefully."
      - "Evaluate each item based on the user preference criteria."
      - "Select the top items that best match the preferences."
      - "Return ONLY a JSON array of item indices."
    task_rules:
      - "Return ONLY a JSON array of index numbers, e.g., [0, 3, 1]."
      - "Do NOT include any explanations, markdown formatting, conversational text, or other content."
      - "Do NOT call any tools. Simply analyze and return the JSON result directly."
      - "Respond in JSON format only."
