MAL-Updater
Treat {baseDir} as the skill root. This repository is the skill package.
Core model
- Keep business logic in the repo-local Python CLI.
- Keep runtime state outside the skill tree under the workspace runtime root
.MAL-Updater/unless the operator explicitly overrides paths. - Do not assume host-specific absolute paths, IPs, or preexisting local copies under
~/.openclaw/workspace/skills/. - For new installs or portability audits, start with
bootstrap-auditbefore doing any live auth or sync work. - Prefer the long-lived user-systemd daemon over timers or OpenClaw cron for unattended operation.
Bootstrap / onboarding workflow
cd {baseDir}- Run
PYTHONPATH=src python3 -m mal_updater.cli bootstrap-audit - Read
{baseDir}/references/bootstrap-onboarding.md - Use the audit output to:
- verify required binaries
- check whether provider-specific optional transport/runtime extras are missing
- confirm the external runtime layout under
.MAL-Updater/ - identify which user-provided secrets/app settings are still missing for MAL and any enabled source providers
- verify the secrets location is outside version control and suitable for restrictive local permissions
- decide whether the repo-owned user-systemd daemon can be installed on this host
- If bootstrap is incomplete, guide the user through the missing steps instead of pretending install is finished.
- Prompt for provider credentials only when the workflow reaches that provider's bootstrap step; do not request Crunchyroll or HIDIVE secrets preemptively if the user has not chosen or enabled that provider yet.
How to access backend data / operator surfaces
For the most common operator/data tasks, use the repo-local CLI from {baseDir}:
Read-only inspection
PYTHONPATH=src python3 -m mal_updater.cli statusPYTHONPATH=src python3 -m mal_updater.cli bootstrap-auditPYTHONPATH=src python3 -m mal_updater.cli service-statusPYTHONPATH=src python3 -m mal_updater.cli service-run-oncePYTHONPATH=src python3 -m mal_updater.cli health-check --format summary
Recommendations / recommendation-related data
PYTHONPATH=src python3 -m mal_updater.cli recommend --limit 20PYTHONPATH=src python3 -m mal_updater.cli recommend --limit 20 --flatPYTHONPATH=src python3 -m mal_updater.cli recommend-refresh-metadata
Review queue / mapping triage
PYTHONPATH=src python3 -m mal_updater.cli list-review-queue --summaryPYTHONPATH=src python3 -m mal_updater.cli review-queue-next --issue-type mapping_reviewPYTHONPATH=src python3 -m mal_updater.cli review-queue-worklist --issue-type mapping_review --limit 5PYTHONPATH=src python3 -m mal_updater.cli list-mappings
Sync planning / guarded execution
PYTHONPATH=src python3 -m mal_updater.cli dry-run-sync --provider all --limit 20 --approved-mappings-onlyPYTHONPATH=src python3 -m mal_updater.cli apply-sync --limit 0 --exact-approved-only --executePYTHONPATH=src python3 -m mal_updater.cli provider-fetch-snapshot --provider crunchyroll --out .MAL-Updater/cache/live-crunchyroll-snapshot.json --ingestPYTHONPATH=src python3 -m mal_updater.cli provider-fetch-snapshot --provider hidive --out .MAL-Updater/cache/live-hidive-snapshot.json --ingest
Operational workflow
Prefer read-only inspection before live writes.
Read-only first:
statusbootstrap-audithealth-checkservice-statusservice-run-oncelist-mappingslist-review-queue --summarydry-run-syncrecommend
Treat these as state-changing:
mal-auth-loginmal-refreshprovider-auth-login --provider crunchyrollprovider-auth-login --provider hidiveprovider-fetch-snapshot --provider <provider> --ingestapply-sync --executescripts/install_user_systemd_units.shinstall-servicerestart-service
High-value references
- Read
{baseDir}/references/bootstrap-onboarding.mdfor install/onboarding/bootstrap expectations. - Read
{baseDir}/references/cli-recipes.mdfor copy/paste command patterns. - Read
{baseDir}/references/data-surfaces.mdfor a concise map of which backend commands expose recommendations, review-queue state, service/runtime state, and guarded sync surfaces.
Guardrails
- Keep sync behavior conservative; do not invent broader write scope than the CLI already supports.
- Prefer
dry-run-syncbeforeapply-sync --executeunless the task explicitly asks for a live apply. - Treat Crunchyroll auth/fetch instability as real residue; document it plainly.
- Treat staged provider credentials and long-lived tokens as sensitive local files; keep them out of version control and prefer restrictive local permissions.
- When a host cannot satisfy the unattended daemon path, say so clearly instead of silently skipping service setup.
- Recommend manual review before enabling unattended daemon operation on a host that matters.
- Keep outputs short and actionable: counts, blockers, next command, and whether user input is needed.