{"id":"2caed099-f012-473c-8a66-6303bc2b7ecf","entityType":"agent","slug":"clawhub-morandot-arknights-skill","name":"Arknights Guide","canonicalUrl":"https://www.xpersona.co/agent/clawhub-morandot-arknights-skill","canonicalPath":"/agent/clawhub-morandot-arknights-skill","generatedAt":"2026-10-10T10:44:08.061Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T06:05:36.876Z","emptyReason":null},"description":"Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile. Skill: Arknights Guide Owner: morandot Summary: Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile. Tags: arknights:1.6.0, en:1.6.0, game:1.6.0, gaming:1.6.0, guide:1.6.0, latest:1.6.1, zh-CN:1.6.0 Version history: v1.6.1 | 2026-09-02T02:54:54.006Z | auto Arknights-skill 1.6.1 Changelog - Improved Doctor profile update policy: now only updates the local","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17fmfw5nxs39nmch12gj4h40n85agev:arknights-skill","sourceUrl":"https://clawhub.ai/morandot/arknights-skill","homepage":"https://clawhub.ai/morandot/skills/arknights-skill","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/morandot/arknights-skill","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/morandot/skills/arknights-skill","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile. Skill: Arknights Guide Owner: morandot Summa"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:05:36.876Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:05:36.876Z","emptyReason":null},"stars":null,"forks":null,"downloads":1631,"packageName":null,"latestVersion":"1.6.1","tractionLabel":"1.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:05:36.876Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T06:05:36.876Z","lastCrawledAt":"2026-10-10T06:05:36.876Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T06:05:36.876Z","lastVerifiedAt":null,"highlights":[{"version":"1.6.1","createdAt":"2026-09-02T02:54:54.006Z","changelog":"Arknights-skill 1.6.1 Changelog - Improved Doctor profile update policy: now only updates the local profile when the user provides new explicit facts, reducing unnecessary writes. - Updated documentation throughout (SKILL.md, quickstart guide) for clarity and accuracy regarding profile behavior and data privacy. - Metadata versioning moved and standardized under `metadata:` in skill manifest. - Removed redundant `skill-card.md` documentation file. - Minor language and formatting improvements for consistency.","fileCount":9,"zipByteSize":24264},{"version":"1.6.0","createdAt":"2026-07-28T09:01:31.033Z","changelog":"- Version bumped from 1.5.0 to 1.5.1. - Added the `updated_at` metadata field. - No functional or logic changes to core rules, usage, or workflow. - Documentation formatting and metadata updated for accuracy.","fileCount":9,"zipByteSize":24122},{"version":"1.5.1","createdAt":"2026-07-28T08:57:37.632Z","changelog":"- Removed the skill-card.md file. - No changes were made to the skill's logic, documentation, or user guidance.","fileCount":9,"zipByteSize":23910},{"version":"1.4.2","createdAt":"2026-07-28T08:34:34.505Z","changelog":"No code or documentation changes in this version. - Version bump only; no file changes detected. - Behavior and documentation remain unchanged from previous release.","fileCount":9,"zipByteSize":23935},{"version":"1.5.0","createdAt":"2026-07-28T08:18:27.997Z","changelog":"SKILL.md: added HARD-GATE, Post-answer gate, When NOT To Use, Common Pitfalls sections. description rewritten to Use-when format. README: badges, What You Can Ask table, project structure fix.","fileCount":9,"zipByteSize":24006},{"version":"1.4.1","createdAt":"2026-07-28T06:23:28.886Z","changelog":"# arknights-skill v1.4.1 Changelog - Updated SKILL.md: revised and condensed core usage rules, clarified profile access requirements, and added stronger \"hard gate\" language on local profile access. - Improved logic for when the skill should and should not trigger based on question relevance. - Expanded and updated operator/account profile management instructions. - Adjusted metadata structure and removed obsolete authoring fields. - Removed the deprecated `skill-card.md` file.","fileCount":9,"zipByteSize":23971},{"version":"1.4.0","createdAt":"2026-06-05T07:38:20.046Z","changelog":"Add list/search/delete-operator/gc CLI commands, --dry-run support, comparison template, cross-platform improvements, Makefile, release CI","fileCount":9,"zipByteSize":21965},{"version":"1.3.0","createdAt":"2026-04-28T14:51:41.781Z","changelog":"arknights-skill v1.3.0 Release Notes 1. Doctor Profile Storage Path Migration - Default storage moved from inside the skill install directory to ~/.config/arknights-skill/doctor-profile.json - Fully decoupled from the install directory; reinstalling or updating the skill no longer affects profile data - Automatic one-time migration on first run; legacy files preserved 2. New Commands - confirm --field <field> --apply: apply a pending downgrade/conflict value - dismiss --field <field>: discard a pending confirmation - read now prints a pending-confirmations summary to stderr 3. Data Safety Improvements - Numeric fields in account.resources and account.progress now use monotonic merge (reject lower values, queue as pending instead of silent overwrite) - 35 unit tests covering all merge logic 4. Engineering Improvements - update.sh supports --force flag; shows diff when local modifications are detected - CI adds ruff lint, pytest, required-file existence checks - New bump_version.sh script for automated version sync","fileCount":7,"zipByteSize":13816}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17fmfw5nxs39nmch12gj4h40n85agev:arknights-skill","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T10:44:08.058Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-morandot-arknights-skill/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T06:05:36.876Z","emptyReason":null},"readme":"Skill: Arknights Guide\n\nOwner: morandot\n\nSummary: Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile.\n\nTags: arknights:1.6.0, en:1.6.0, game:1.6.0, gaming:1.6.0, guide:1.6.0, latest:1.6.1, zh-CN:1.6.0\n\nVersion history:\n\nv1.6.1 | 2026-09-02T02:54:54.006Z | auto\n\nArknights-skill 1.6.1 Changelog\n\n- Improved Doctor profile update policy: now only updates the local profile when the user provides new explicit facts, reducing unnecessary writes.\n- Updated documentation throughout (SKILL.md, quickstart guide) for clarity and accuracy regarding profile behavior and data privacy.\n- Metadata versioning moved and standardized under `metadata:` in skill manifest.\n- Removed redundant `skill-card.md` documentation file.\n- Minor language and formatting improvements for consistency.\n\nv1.6.0 | 2026-07-28T09:01:31.033Z | auto\n\n- Version bumped from 1.5.0 to 1.5.1.\n- Added the `updated_at` metadata field.\n- No functional or logic changes to core rules, usage, or workflow.\n- Documentation formatting and metadata updated for accuracy.\n\nv1.5.1 | 2026-07-28T08:57:37.632Z | auto\n\n- Removed the skill-card.md file.\n- No changes were made to the skill's logic, documentation, or user guidance.\n\nv1.4.2 | 2026-07-28T08:34:34.505Z | auto\n\nNo code or documentation changes in this version.\n\n- Version bump only; no file changes detected.\n- Behavior and documentation remain unchanged from previous release.\n\nv1.5.0 | 2026-07-28T08:18:27.997Z | user\n\nSKILL.md: added HARD-GATE, Post-answer gate, When NOT To Use, Common Pitfalls sections. description rewritten to Use-when format. README: badges, What You Can Ask table, project structure fix.\n\nv1.4.1 | 2026-07-28T06:23:28.886Z | auto\n\n# arknights-skill v1.4.1 Changelog\n\n- Updated SKILL.md: revised and condensed core usage rules, clarified profile access requirements, and added stronger \"hard gate\" language on local profile access.\n- Improved logic for when the skill should and should not trigger based on question relevance.\n- Expanded and updated operator/account profile management instructions.\n- Adjusted metadata structure and removed obsolete authoring fields.\n- Removed the deprecated `skill-card.md` file.\n\nv1.4.0 | 2026-06-05T07:38:20.046Z | user\n\nAdd list/search/delete-operator/gc CLI commands, --dry-run support, comparison template, cross-platform improvements, Makefile, release CI\n\nv1.3.0 | 2026-04-28T14:51:41.781Z | user\n\narknights-skill v1.3.0 Release Notes\n\n  1. Doctor Profile Storage Path Migration\n     - Default storage moved from inside the skill install directory\n       to ~/.config/arknights-skill/doctor-profile.json\n     - Fully decoupled from the install directory; reinstalling or\n       updating the skill no longer affects profile data\n     - Automatic one-time migration on first run; legacy files preserved\n\n  2. New Commands\n     - confirm --field <field> --apply: apply a pending downgrade/conflict value\n     - dismiss --field <field>: discard a pending confirmation\n     - read now prints a pending-confirmations summary to stderr\n\n  3. Data Safety Improvements\n     - Numeric fields in account.resources and account.progress now use\n       monotonic merge (reject lower values, queue as pending instead of\n       silent overwrite)\n     - 35 unit tests covering all merge logic\n\n  4. Engineering Improvements\n     - update.sh supports --force flag; shows diff when local modifications\n       are detected\n     - CI adds ruff lint, pytest, required-file existence checks\n     - New bump_version.sh script for automated version sync\n\nv1.2.0 | 2026-04-24T09:08:21.861Z | user\n\n**新增支持本地博士档案记忆，结合账号数据给出更精准建议：**\n\n- 增加本地存储和读取博士账号档案的脚本（scripts/memory.py）\n- 回答时优先参考本地博士档案（账号练度、目标、拥有干员等），建议更贴合实际账号。\n- 回答后自动从用户新表述中提取账号事实，补充更新档案信息。\n- 档案仅保存账号结构化事实，不记录对话、攻略建议或推测信息。\n- 支持多客户端读取/写入机制，文档完善脚本调用约定和环境变量说明。\n\nv1.1.2 | 2026-04-22T11:42:09.213Z | user\n\nNo code or content changes detected in this version.\n\n- No file changes were made between the previous and current versions.\n- Functionality and documentation remain the same as the previous release.\n\nv1.1.1 | 2026-04-22T10:42:07.537Z | user\n\n**Arknights-skill 1.1.1 Changelog**\n\n- 明确规范了对干员定位、技能机制、养成建议、剧情梳理、术语解释和关卡思路的回答结构。\n- 增加时效性规则，要求针对版本敏感提问必须联网检索或显式说明非最新结论。\n- 优化默认回答模板，覆盖主要玩家决策场景（如技能优先、值得养成、关卡攻略等）。\n- 强化对剧透内容的分级控制流程，需用户明确后才开放完整剧情。\n- 统一术语和官名规范，避免混用别称，维持专业一致性。\n- 新增“Do Not Do These”与“Final Goal”条款，防止编造内容并明确回答目标。\n\nArchive index:\n\nArchive v1.6.1: 9 files, 24264 bytes\n\nFiles: agents/openai.yaml (2439b), references/answer-templates.md (2112b), references/doctor-profile-schema.md (7455b), references/examples.md (5053b), references/quickstart.md (2454b), scripts/memory.py (31457b), skill-card.md (2560b), SKILL.md (13626b), _meta.json (134b)\n\nFile v1.6.1:SKILL.md\n\n---\nname: arknights-skill\ndescription: >\n  Use when the user asks about Arknights operators, skills, masteries, modules,\n  stages, lore, terms, or resource planning. Do NOT use for other games,\n  non-Arknights gacha advice, or real-time event schedules (requires live\n  lookup). On invocation it reads and updates a local Doctor profile stored\n  only on this machine (~/.config/arknights-skill/doctor-profile.json);\n  profile data is never transmitted.\nlicense: MIT\ncompatibility: >\n  Compatible with Agent Skills clients (Codex, Claude Code, Hermes). Requires\n  shell access for the bundled Python script (`scripts/memory.py`). No external\n  credentials needed. Version-sensitive questions require live web lookup; when\n  offline, state conclusions are not current.\nallowed-tools: shell\nmetadata:\n  version: \"1.7.0\"\n  homepage: https://github.com/morandot/arknights-skill\n  openclaw-homepage: https://github.com/morandot/arknights-skill\n  author: moran\n---\n\n# Arknights Guide\n\nA dedicated skill for Arknights questions. The goal is not to dump trivia, but to organize information into decisions a player can act on. When a local Doctor profile is available, prioritize advice that matches the user's own account, roster, and investment level.\n\n<HARD-GATE>\nDo NOT answer any Arknights question without first attempting to read the local Doctor profile. See Rule 0 below.\n</HARD-GATE>\n\n## When To Use\n\nUse this skill when the user asks about:\n\n- **Operator evaluation**: roles, branches, worth building, availability\n  - _\"银灰值不值得练？\"_ / _\"Is SilverAsh worth building?\"_\n- **Skills & investment**: skills, talents, modules, potential, masteries, elite promotion\n  - _\"银灰专精哪个技能？\"_ / _\"Which SilverAsh skill to mastery?\"_\n- **Resource planning**: who to raise first, allocation, raise-or-skip\n  - _\"新手该先练谁？\"_ / _\"Who should a new player raise first?\"_\n- **Stage strategy**: main story, event, high-difficulty stages\n  - _\"OF-F4 怎么打？\"_ / _\"How to clear OF-F4?\"_\n- **Comparison**: side-by-side operator analysis\n  - _\"银灰和棘刺谁更好？\"_ / _\"SilverAsh vs Thorns?\"_\n- **Lore & story**: worldbuilding, factions, character relationships, story summaries\n  - _\"整合运动的背景是什么？\"_ / _\"What is Reunion's backstory?\"_\n- **Terminology**: game terms and mechanics explanation\n  - _\"暖机是什么意思？\"_ / _\"What does warm-up mean?\"_\n- **Version environment**: current strength assessments, event summaries\n  - _\"当前版本谁最强？\"_ / _\"Who is strongest in the current version?\"_\n\n### When NOT To Use\n\n- Other games or gacha games — this skill only covers Arknights\n- Pull rate calculations, banner probability — live data needed, not a calculator tool\n- Real-time event schedules or server status — always require live lookup\n- Account binding, login issues, payment problems — these are customer service topics\n\n## Core Rules\n\n### 0. Use The Local Doctor Profile (Mandatory)\n\n**HARD-GATE: You MUST attempt to read the profile before answering.**\n\nIf the current client allows local file access, read the structured profile next to the installed skill first. Do not assume the current working directory is the skill directory. Resolve the script path with this fallback:\n\n```bash\nSKILL_DIR=\"${CLAUDE_SKILL_DIR:-${SKILL_DIR:-$(dirname \"$(find ~/.hermes ~/.config -name memory.py -print -quit 2>/dev/null)\")}}\"\npython3 \"$SKILL_DIR/scripts/memory.py\" read\n```\n\nThe default profile path is:\n\n```text\n~/.config/arknights-skill/doctor-profile.json\n```\n\nThe user can also set `ARKNIGHTS_MEMORY_DIR` to use a different local directory. The profile stores only structured account facts, never full conversations.\n\nIf neither `$CLAUDE_SKILL_DIR` nor `$SKILL_DIR` is set, search `~/.hermes/skills` or `~/.config/arknights-skill` for the directory containing `memory.py`.\n\n**When answering:**\n\n- Prefer known Doctor level, server, resource state, goals, preferences, owned operators, and operator investment from the profile.\n- If the profile is empty or unreadable, answer normally and do not pretend to know the user's account.\n- If stored facts conflict with explicit information in the current turn, treat the new information as a confirmation candidate rather than overwriting the old profile directly.\n- Reply in the user's language unless they ask for another language.\n\n**Post-answer gate: Update the profile only when the user provided new facts.**\n\nIf the user's current turn explicitly provided account or operator facts, extract only those explicitly provided facts and update the profile after answering. If the turn contained no new explicit facts, skip the update:\n\n```bash\npython3 \"$CLAUDE_SKILL_DIR/scripts/memory.py\" update --patch-json '{\"operators\":{\"SilverAsh\":{\"owned\":true,\"elite\":2,\"level\":60,\"masteries\":{\"3\":3}}}}'\n```\n\nOnly write these facts:\n\n- Doctor information: name, server, level, UID\n- Account state: main story or event progress, resources, goals, preferences\n- Operator information: owned status, elite phase, level, potential, skill level, masteries, modules, concise notes\n\nDo not write:\n\n- Full conversations, raw screenshot OCR, or long logs\n- Inferences the user did not confirm\n- Guide advice, strength evaluations, version environment judgments\n- Story content, official text, or event schedules\n\nWhen a downgrade or conflicting fact appears, the script writes to `pending_confirmations`. Do not manually overwrite those fields. If useful, ask the user briefly at the end to confirm.\n\n**Resolving pending confirmations:**\n\n```bash\n# Apply a pending downgrade / conflict\npython3 \"$SKILL_DIR/scripts/memory.py\" confirm --field \"SilverAsh.elite\" --apply\n\n# Dismiss (discard) a pending entry\npython3 \"$SKILL_DIR/scripts/memory.py\" dismiss --field \"SilverAsh.elite\"\n```\n\nAdditional profile management commands:\n\n```bash\n# List recorded operators (filter with --owned or --has-pending)\npython3 \"$SKILL_DIR/scripts/memory.py\" list --owned\n\n# Search operators by name or notes\npython3 \"$SKILL_DIR/scripts/memory.py\" search silver\n\n# Delete a recorded operator\npython3 \"$SKILL_DIR/scripts/memory.py\" delete-operator SilverAsh\n\n# Remove stale pending confirmations (older than 30 days)\npython3 \"$SKILL_DIR/scripts/memory.py\" gc --days 30\n\n# Preview merged result without saving\npython3 \"$SKILL_DIR/scripts/memory.py\" update --patch-json '...' --dry-run\n```\n\n### 1. Lead With The Decision\n\nWhen the user asks whether to build an operator, which skill to prioritize, or how to clear a stage, lead with the answer before the explanation.\n\nPreferred order:\n\n1. Direct conclusion\n2. Why\n3. Applicable scenarios or limitations\n4. Investment or execution advice\n\n### 2. Separate Facts From Evaluation\n\nThe following can be stated as facts:\n\n- Skill and mechanic explanations\n- Class branch roles\n- Basic worldbuilding premises\n- Confirmed profile facts\n- User-provided screenshot or stage information\n\nThe following require qualifiers:\n\n- Whether an operator is strong\n- Whether an operator is future-proof\n- Current version standing\n- Whether an operator is required for high difficulty\n- Whether a banner is worth pulling\n\nPhrase these as \"under current mainstream evaluation\", \"from an early-game utility perspective\", or \"in high-pressure content, this is usually considered\".\n\n### 3. Treat Version-Sensitive Questions As Freshness-Critical\n\nTreat these questions as freshness-critical by default:\n\n- \"Is this operator still strong now?\"\n- \"Is this banner worth pulling in the current version?\"\n- \"How do I clear the latest event?\"\n- \"What is new on CN / JP / Global?\"\n- \"Which skill should I mastery in the current environment?\"\n\nChecklist for version-sensitive questions:\n\n1. Check if live web access is available\n2. ❌ No access → explicitly state \"this conclusion is NOT based on current version data\" and answer from general knowledge\n3. ✅ Access → search before answering\n   - Preferred search keywords (adapt to user language):\n     - Chinese: `明日方舟 {operator_name} 强度 {current_version}`, NGA 明日方舟版, PRTS Wiki\n     - English: `Arknights {operator_name} guide {current_version}`, Gamepress, Arknights Wiki\n4. Do not invent event dates, banner schedules, version order, or official text\n\n### 4. Control Spoilers\n\nWhen the user did not ask for spoilers, default to Level 0-1:\n\n- Level 0: no-spoiler background outline\n- Level 1: light spoilers, enough to mention relationships and premises\n- Level 2: moderate spoilers, enough to summarize key conflicts\n- Level 3: full spoilers, including endings and core reveals\n\nWhen the user explicitly asks for the full story, start with a spoiler warning:\n\n> **Full spoilers below.**\n\n### 5. Make Guides Executable\n\nStage strategy answers should cover as many of these as useful:\n\n- Core stage pressure\n- Enemy threat types\n- Map and positioning priorities\n- DP timing\n- Deployment order or skill timing\n- Common failure points\n- Substitute operator roles or class types\n\nIf the user did not say they have a high-end roster, include a lower-rarity or lower-investment approach.\n\n### 6. Keep Names And Terms Consistent\n\nUse official or widely accepted names. When useful, introduce a bilingual or alias form once, then stay consistent. Do not rotate between multiple nicknames for the same concept.\n\n## Default Answer Shapes\n\n### Operator Review\n\nDefault structure:\n\n1. One-sentence conclusion\n2. Role\n3. Core strengths\n4. Main weaknesses\n5. Best use cases\n6. Investment and mastery advice\n\n### Skill Priority\n\nDefault structure:\n\n1. Recommended skill\n2. Why\n3. When the other skill is better\n4. Mastery order\n5. Difference between new and developed accounts\n\n### Raise Or Skip\n\nDefault structure:\n\n1. Conclusion: build / depends on roster / skip\n2. Why\n3. Who benefits most\n4. Most efficient stopping point\n5. Same-role substitutes\n\n### Lore / Story\n\nDefault structure:\n\n1. No-spoiler introduction\n2. Core conflict around the character or faction\n3. Relationships with other characters\n4. Expand into detailed story only after the user asks\n\n### Stage Help\n\nDefault structure:\n\n1. Core stage pressure\n2. Recommended approach\n3. Recommended role composition\n4. Deployment and skill timing\n5. Failure points\n6. Lower-investment substitutes\n\n### Terminology\n\nDefault structure:\n\n1. Definition\n2. Practical meaning\n3. Example\n4. Common confusion\n\n### Comparison\n\nDefault structure:\n\n1. Conclusion: choose A / choose B / depends on scenario\n2. Each operator's strengths\n3. Each operator's weaknesses\n4. Scenario-by-scenario comparison\n5. Investment advice\n\n## Common Pitfalls\n\nAvoid these when answering:\n\n- **Inventing stats**: Never invent module multipliers, skill percentages, or talent values. State \"I don't have the exact multiplier\" if unsure.\n- **Presenting old versions as current**: A 6-month-old meta assessment is outdated. Always caveat stale knowledge.\n- **Copying squads without substitution**: If recommending a squad, always explain which roles are essential and what substitutes work.\n- **Equating rarity with power**: A 5-star can outperform a 6-star in specific niches. Evaluate by role fit, not star count.\n- **Assuming universal access**: Not everyone has every 6-star. Check profile; if unavailable, default to F2P-friendly advice.\n- **Over-promising banner value**: Banner evaluation depends on account roster and goals. Never say \"must-pull\" universally.\n\n## Agent Configuration (optional)\n\n`agents/openai.yaml` defines the Agent prompt configuration specific to this skill:\n\n- **`display_name` / `short_description`** — Display name and summary shown in the Agent skill list.\n- **`default_prompt`** — The default invocation prompt, which emphasizes fact–evaluation separation, leading with conclusions, and freshness caveats for version-sensitive topics.\n- **`policy.allow_implicit_invocation`** — When `true`, the Agent may trigger this skill without an explicit `$arknights-skill` prefix.\n\nThis file is automatically loaded by the nanobot runtime; manual edits are rarely needed.\n\n## References\n\nRead these only when needed; do not load all of them by default:\n\n- Quick start guide: [references/quickstart.md](references/quickstart.md)\n- Structured templates: [references/answer-templates.md](references/answer-templates.md)\n- Style examples: [references/examples.md](references/examples.md)\n- Doctor profile schema: [references/doctor-profile-schema.md](references/doctor-profile-schema.md)\n- Local Doctor profile script: [scripts/memory.py](scripts/memory.py)\n\nRead these files only when you need a fuller template, want to align with the example rhythm, need the profile schema reference, or need to confirm the local memory script interface.\n\n## Do Not Do These\n\nDo not:\n\n- Invent stats, module multipliers, event dates, banner schedules, or official text\n- Present subjective strength evaluation as absolute fact\n- Reveal major story spoilers unless the user asked for them\n- Give only a copied squad without explaining substitution logic\n- Present old-version conclusions as current-version facts\n- Store personal account memory anywhere except the local profile, and never in the public repository or release package\n- Recommend pulling based solely on strength without considering the user's roster gaps\n- Repeat the entire profile before answering — use it silently for personalization\n\n## Final Goal\n\nEvery answer should help the user do at least one of these:\n\n- Decide whether to build an operator\n- Decide which skill to prioritize\n- Understand a mechanic or term\n- Get an executable stage plan\n- Understand the key point of a story or setting\n- Know whether a version-sensitive conclusion is current\n\nFile v1.6.1:_meta.json\n\n{\n  \"ownerId\": \"kn7bzyad0y0t00e7622qh62rwd85b19e\",\n  \"slug\": \"arknights-skill\",\n  \"version\": \"1.6.1\",\n  \"publishedAt\": 1788317694006\n}\n\nFile v1.6.1:references/answer-templates.md\n\n# Answer Templates\n\nChoose the template closest to the user's question when useful. Do not copy it mechanically. Adapt each template to the specific operator, stage, or term — never output a fill-in-the-blank skeleton verbatim.\n\n## 1. Operator Review\n\n```text\nConclusion:\n[Worth building / depends on roster / skippable]. If your account lacks [role], this operator's priority is higher.\n\nRole:\n- Class / branch:\n- Core job:\n- Common usage:\n\nStrengths:\n-\n-\n\nWeaknesses:\n-\n-\n\nBest use cases:\n-\n-\n\nInvestment advice:\n- Recommended level:\n- Elite 2 priority:\n- Mastery priority (M1 → M3 value):\n\nOne-line advice:\n[]\n```\n\n## 2. Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill [X].\n\nWhy:\n-\n-\n\nWhen Skill [Y] is better:\n-\n-\n\nMastery advice:\n- M1 value:\n- M2 value:\n- M3 value:\n- Recommended stopping point:\n\nConclusion:\n[]\n```\n\n## 3. Raise Or Skip\n\n```text\nConclusion:\n[Build / depends on roster / skip]\n\nWhy:\n-\n-\n\nWho benefits most:\n- New players / veteran accounts / high-difficulty accounts / accounts missing a specific role\n\nMost efficient stopping point:\n- [E1 Lv.50 S7] / [E2 Lv.40 S7 M1] / etc.\n\nSame-role substitutes:\n-\n```\n\n## 4. Lore / Story\n\n```text\nNo-spoiler introduction:\n[]\n\nCore premise:\n-\n-\n\nRelationship with other characters / factions:\n-\n-\n\nCharacter theme:\n[]\n\nIf you want to go deeper, I can expand into files, event story, and full-spoiler plotlines.\n```\n\n## 5. Stage Strategy\n\n```text\nCore stage pressure:\n-\n-\n\nRecommended approach:\n-\n-\n\nRecommended role composition:\n- DP generation:\n- Main DPS:\n- Secondary DPS:\n- Healing:\n- Blocking / tanking:\n- Utility:\n\nExecution notes:\n1.\n2.\n3.\n\nCommon failure points:\n-\n-\n\nLower-investment substitute plan:\n-\n```\n\n## 6. Terminology\n\n```text\nDefinition:\n[]\n\nPractical meaning:\n[]\n\nExample:\n[]\n\nCommon confusion:\n[]\n```\n\n## 7. Comparison\n\n```text\nConclusion:\n[Choose A / choose B / depends on scenario]\n\n[Operator A] strengths:\n-\n-\n\n[Operator A] weaknesses:\n-\n-\n\n[Operator B] strengths:\n-\n-\n\n[Operator B] weaknesses:\n-\n-\n\nScenario comparison:\n- Main story / events:\n- High-difficulty content:\n- New player accounts:\n\nInvestment advice:\n-\n```\n\nFile v1.6.1:references/doctor-profile-schema.md\n\n# Doctor Profile Schema\n\n`doctor-profile.json` is the local structured profile maintained by `scripts/memory.py`.\nIt stores only explicitly confirmed facts — never full conversations, screenshot OCR, or inferences.\n\nSchema version: **1**\n\n---\n\n## File Location\n\nDefault path:\n\n```\n~/.config/arknights-skill/doctor-profile.json\n```\n\nOverride with environment variable `ARKNIGHTS_MEMORY_DIR`.\nMigration from the legacy `.arknights-memory/` path happens automatically on first run.\n\n---\n\n## Top-Level Structure\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": { ... },\n  \"doctor\": { ... },\n  \"account\": { ... },\n  \"operators\": { ... },\n  \"pending_confirmations\": [ ... ]\n}\n```\n\n---\n\n## Field Reference\n\n### `schema_version` *(integer)*\n\nCurrent: `1`.\n`memory.py` will reject profiles with an unsupported version.\n\n---\n\n### `game` *(string)*\n\nAlways `\"Arknights\"`. Reserved for future multi-game support.\n\n---\n\n### `metadata` *(object)*\n\n| Field | Type | Description |\n|---|---|---|\n| `created_at` | ISO 8601 UTC string | Profile creation timestamp. Set automatically. |\n| `updated_at` | ISO 8601 UTC string | Last write timestamp. Updated on every `save`. |\n\nBoth are managed by `memory.py`; do not write manually.\n\n---\n\n### `doctor` *(object)*\n\nPersonal information about the Doctor.\n\n| Field | Type | Description |\n|---|---|---|\n| `name` | string or null | In-game nickname / display name. |\n| `server` | string or null | Server region, e.g. `\"CN\"`, `\"US\"`, `\"JP\"`, `\"KR\"`, `\"EN\"`. |\n| `level` | integer or null | Doctor account level. |\n| `uid` | string or null | Player UID. Format varies by server. |\n\n---\n\n### `account` *(object)*\n\nAccount state and preferences.\n\n| Field | Type | Description |\n|---|---|---|\n| `progress` | object | Freeform progress map, e.g. `{\"main_story\": \"chapter_09\", \"current_event\": \"near_light\"}`. |\n| `resources` | object | Resource stockpile, e.g. `{\"lmd\": 50000, \"skill_book_3\": 30, \"orundum\": 5400}`. |\n| `goals` | string array | Short-term or mid-term goals, e.g. `[\"elite2 SilverAsh\", \"clear OF-F4\"]`. |\n| `preferences` | string array | Play style or unit type preferences, e.g. `[\"guard mains\", \"low-rarity friendly\", \"waifu > meta\"]`. |\n\n---\n\n### `operators` *(object)*\n\nKeyed by operator name (use official English or CN name consistently, one per key).\nEach value:\n\n```json\n{\n  \"owned\": true,\n  \"elite\": 2,\n  \"level\": 80,\n  \"potential\": 5,\n  \"skill_level\": 7,\n  \"masteries\": { \"1\": 3, \"2\": 0, \"3\": 1 },\n  \"modules\": { \"m1\": 3, \"m2\": 1 },\n  \"notes\": [\"top priority defender\"],\n  \"updated_at\": \"2026-04-24T10:30:00Z\"\n}\n```\n\n| Field | Type | Valid values | Description |\n|---|---|---|---|\n| `owned` | boolean | `true` / `false` / `null` | Whether the Doctor owns this operator. |\n| `elite` | integer or null | `0`, `1`, `2`, `null` | Elite phase. |\n| `level` | integer or null | `≥ 1`, `null` | Current level within the current elite phase. |\n| `potential` | integer or null | `1–6`, `null` | Potential level. |\n| `skill_level` | integer or null | `1–7`, `null` | Skill rank. |\n| `masteries` | object | `{ \"skill_id\": 0–3 }` | Per-skill mastery level. `skill_id` is `\"1\"`, `\"2\"`, or `\"3\"`. |\n| `modules` | object | `{ \"module_id\": 0–3 }` | Per-module upgrade stage. `module_id` is a string identifier. |\n| `notes` | string array | — | Short freeform notes. Each entry ≤ 240 chars. |\n| `updated_at` | ISO 8601 UTC string | — | Last modified timestamp. Managed by `memory.py`. |\n\n#### Merge behavior\n\n- **Monotonic only**: `elite`, `level`, `masteries`, `potential`, `skill_level` only accept **increasing** values.\n  Downgrades are rejected and written to `pending_confirmations` for manual review.\n- **Boolean**: `owned` can transition `null → false → true`, but `true → false` triggers a confirmation.\n- **Free text**: `notes` is deduplicated; duplicates are silently ignored.\n\n---\n\n### `pending_confirmations` *(array)*\n\nStores downgrade or conflicting-fact entries that need user confirmation before being applied.\n\nEach item:\n\n```json\n{\n  \"field\": \"SilverAsh.elite\",\n  \"current\": 2,\n  \"incoming\": 1,\n  \"reason\": \"incoming elite is lower\",\n  \"observed_at\": \"2026-04-24T12:00:00Z\"\n}\n```\n\n| Field | Type | Description |\n|---|---|---|\n| `field` | string | Dotted path to the conflicting field. |\n| `current` | any | Currently stored value. |\n| `incoming` | any | Incoming value that was rejected. |\n| `reason` | string | Why the write was rejected. |\n| `observed_at` | ISO 8601 UTC string | When the conflict was detected. |\n\nUse `memory.py confirm --field <field> --apply` to accept, or `memory.py dismiss --field <field>` to discard.\n\n---\n\n## CLI Commands Reference\n\n| Command | Description |\n|---|---|\n| `path` | Print the profile file path. |\n| `read` | Load or initialize the profile; print JSON to stdout, pending confirmations to stderr. |\n| `update --patch-json '<json>' [--dry-run]` | Merge structured facts. With `--dry-run`, preview without saving. |\n| `confirm --field <field> --apply` | Apply a pending downgrade/conflict. |\n| `dismiss --field <field>` | Discard a pending entry. |\n| `list [--owned] [--has-pending]` | List recorded operators. Filter by ownership or pending status. |\n| `search <keyword>` | Search operators by name or notes (case-insensitive). |\n| `delete-operator <name>` | Delete a recorded operator. |\n| `gc [--days N] [--dry-run]` | Remove pending confirmations older than N days (default: 30). |\n\n---\n\n## Write Rules (What `memory.py update --patch-json` Accepts)\n\nOnly **explicitly provided facts** from the current conversation turn should be written:\n\n| ✅ Allowed | ❌ Not written |\n|---|---|\n| Doctor name, server, level, UID | Full conversations |\n| Account progress milestones | Raw screenshot OCR |\n| Resource amounts | Long narrative logs |\n| Operator owned / elite / level | Inferences not confirmed by the user |\n| Mastery and module status | Guide advice |\n| Short freeform notes | Strength evaluations |\n\nSee `SKILL.md` → **Core Rules §0** for the full update workflow.\n\n---\n\n## Example\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": {\n    \"created_at\": \"2026-04-24T08:00:00Z\",\n    \"updated_at\": \"2026-05-19T14:30:00Z\"\n  },\n  \"doctor\": {\n    \"name\": \"Moran\",\n    \"server\": \"CN\",\n    \"level\": 120,\n    \"uid\": null\n  },\n  \"account\": {\n    \"progress\": { \"main_story\": \"chapter_11\" },\n    \"resources\": { \"lmd\": 200000, \"skill_book_3\": 50 },\n    \"goals\": [\"elite2 Exusiai\"],\n    \"preferences\": [\"low-rarity friendly\", \"early game\"]\n  },\n  \"operators\": {\n    \"Exusiai\": {\n      \"owned\": true,\n      \"elite\": 1,\n      \"level\": 70,\n      \"potential\": 3,\n      \"skill_level\": 7,\n      \"masteries\": { \"1\": 3, \"2\": 1, \"3\": 0 },\n      \"modules\": {},\n      \"notes\": [\"top priority sniper\"],\n      \"updated_at\": \"2026-05-19T14:30:00Z\"\n    }\n  },\n  \"pending_confirmations\": []\n}\n```\n\n---\n\n## Edge Cases\n\n- **Multiple operators with same name on different accounts**: Not supported in the current schema. The profile is single-account.\n- **CN operator name vs EN operator name**: Use whichever name the user provides, but stay consistent. If the user switches languages, a new entry is created for the localized name.\n- **Kitchen-sink updates**: Sending `update --patch-json` with all operators at once is fine. Each is merged independently.\n- **Race conditions**: The profile file is small (typically <50KB) and written atomically via temporary file + atomic rename, so concurrent reads see a consistent state.\n\nFile v1.6.1:references/examples.md\n\n# Style Examples\n\nThese examples are for answer rhythm only. Do not copy the specific conclusions blindly.\n\n## Example 1: Whether An Operator Is Worth Building\n\n```text\nConclusion:\nWorth building. This operator is a high-utility core damage dealer, and Elite 2 is a meaningful breakpoint.\n\nRole:\nGround physical DPS with burst potential. Their main value comes from wide-area cleanup during skill uptime.\n\nStrengths:\n- Strong burst against grouped medium-pressure enemies\n- Large coverage area and forgiving positioning\n- Reliable performance in main story and event stages\n\nWeaknesses:\n- Depends heavily on skill uptime\n- Needs teammates to cover downtime\n\nInvestment advice:\nPrioritize Elite 2. If resources allow, improve the core skill's mastery first.\n```\n\n## Example 2: Terminology\n\n```text\nDefinition:\nWarm-up means an operator needs time to stack, charge, or enter a stable skill cycle before reaching full strength.\n\nPractical meaning:\nThey may feel weaker early, then become noticeably stronger in the mid or late stage.\n\nExample:\nOperators that need to stack attack, build summons, or wait for a stable cycle.\n\nCommon confusion:\nWarm-up does not mean weak. Many warm-up operators simply reach their power window later.\n```\n\n## Example 3: Stage Strategy\n\n```text\nCore stage pressure:\n- Tight early DP\n- Mid-to-late waves pressure both high-defense lanes and aerial threats\n\nRecommended approach:\nStabilize DP and anti-air first, prepare sustained damage for the center lane, then save one burst skill for the pressure wave.\n\nLower-investment substitute:\nThe real requirement is stable anti-air plus sustained AoE or multi-target damage in the center lane. It does not have to be a specific 6-star operator.\n```\n\n## Example 4: Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill 2.\n\nWhy:\n- Faster startup and better general use\n- Easier to get consistent value in main story and most event stages\n\nWhen the other skill is better:\n- Consider Skill 3 if you care more about burst ceiling or already have a team that can support its timing\n\nMastery advice:\n- Standard accounts should master Skill 2 first\n- Developed accounts chasing high-pressure performance can add Skill 3 later\n```\n\n## Example 5: Lore Introduction\n\n```text\nNo-spoiler introduction:\nThis character's appeal is not just combat role, but the tension between identity, responsibility, and choice.\n\nCore premise:\n- They belong to a key faction\n- They mirror or contrast another important character's values\n\nRelationships and theme:\n- On the surface, the conflict is about duty; underneath, it is closer to a conflict of beliefs\n- The character theme usually revolves around responsibility, cost, and self-definition\n\nIf you want to continue, I can expand into profile material and the full story route, with spoiler level clearly marked.\n```\n\n## Example 6: Operator Comparison\n\n```text\nConclusion:\nBoth are strong ground DPS. SilverAsh is better for burst wave-clear; Thorns is better for sustained lane-holding.\n\nSilverAsh strengths:\n- Huge burst damage during skill uptime\n- Wide attack range when skill is active\n- Excellent for clearing grouped enemies\n\nThorns strengths:\n- Consistent sustained damage without skill dependency\n- Self-sufficient with built-in regeneration\n- Reliable for holding a lane solo\n\nScenario comparison:\n- Main story / events: Thorns is more comfortable for general use\n- High-difficulty content: SilverAsh burst is harder to replace\n- New player accounts: Thorns is more forgiving to deploy\n\nInvestment advice:\nIf you lack burst DPS, raise SilverAsh first. If you need a reliable solo laner, raise Thorns first. Ideally raise both.\n```\n\n## Example 7: Common Mistakes — AVOID These Patterns\n\nThese are examples of what NOT to do:\n\n```text\n❌ Wrong pattern: Absolute evaluation without qualifiers\n\"SilverAsh is the best guard in the game.\"\n→ Instead: \"SilverAsh is a top-tier burst guard. Under current mainstream evaluation, he is one of the strongest general-purpose guards, especially in content that rewards burst damage.\"\n\n❌ Wrong pattern: Copying a squad without substitution logic\n\"Use SilverAsh, Thorns, Saria, Exusiai, Myrtle, Eyjafjalla.\"\n→ Instead: \"Core roles: a burst guard for wave clear (SilverAsh or alternatives), a sustained lane holder (Thorns or a strong Arts guard), a healer-tank (Saria or a healing defender + medic), fast DP generation (Myrtle or any flagbearer), and an AoE caster (Eyjafjalla or a splash caster).\"\n\n❌ Wrong pattern: Old version conclusion without caveat\n\"SilverAsh is still S-tier.\"\n→ Instead: \"SilverAsh was historically S-tier. I don't have live data on current CN meta. His burst role is still useful, but I recommend searching for the latest assessment from [current month/year].\"\n\n❌ Wrong pattern: Profile dump before answering\n\"Your profile says: name=Moran, level=120, server=CN, operators={SilverAsh: {elite: 2, ...}} ...\"\n→ Instead: Use the profile silently for personalization. Only mention relevant facts (\"I see you have an E2 SilverAsh — that's great for this stage.\").\n```\n\nFile v1.6.1:references/quickstart.md\n\n# Quick Start\n\nGet started with arknights-skill in three steps.\n\n## 1. Install\n\nChoose your platform:\n\n**Hermes:**\n```bash\nskills add git+https://github.com/morandot/arknights-skill.git --skill arknights-skill\n```\n\n**Shell (manual):**\n```bash\nbash -c \"$(curl -fsSL https://raw.githubusercontent.com/morandot/arknights-skill/main/install.sh)\"\n```\n\nThis runs a script fetched from GitHub. To review it first:\n\n```bash\ncurl -fsSL -o /tmp/arknights-install.sh https://raw.githubusercontent.com/morandot/arknights-skill/main/install.sh\nless /tmp/arknights-install.sh   # inspect the script\nbash /tmp/arknights-install.sh   # run after review\n```\n\nTo pin a released version instead of `main`, set `REPO_REF` (e.g. `REPO_REF=v1.5.0`).\n\n**Claude Code:**\nTell your agent: \"Install the skill `arknights-skill` from https://github.com/morandot/arknights-skill\"\n\n**Codex / OpenClaw:**\nUse `npx skills add https://github.com/morandot/arknights-skill --skill arknights-skill`\n\n## 2. Set Up Your Profile\n\nTell the agent about your account. It will automatically save your info to a local Doctor profile:\n\n> \"我是 CN 服 120 级博士，有银灰精英 2 专 9 技能 3，棘刺精英 2 专 9 技能 3，塞雷娅精英 2 专 9 技能 1\"\n\n> \"I'm a level 120 Doctor on CN server. I have SilverAsh E2 M9 S3, Thorns E2 M9 S3, Saria E2 M9 S1\"\n\nThe agent will save your operators and account info. You can update it anytime by mentioning new operators or progress changes.\n\n## 3. Ask Questions\n\n- \"银灰值不值得练？\" / \"Is SilverAsh worth building?\"\n- \"银灰和棘刺谁更好？\" / \"SilverAsh vs Thorns?\"\n- \"OF-F4 怎么打？\" / \"How to clear OF-F4?\"\n- \"新手该先练谁？\" / \"Who should I raise first?\"\n\nThe agent will use your profile to give personalized advice.\n\n## Managing Your Profile\n\nThe agent manages the profile automatically. If you need manual control:\n\n```bash\n# View profile location\npython3 arknights-skill/scripts/memory.py path\n\n# Read current profile\npython3 arknights-skill/scripts/memory.py read\n\n# List recorded operators\npython3 arknights-skill/scripts/memory.py list --owned\n\n# Search operators\npython3 arknights-skill/scripts/memory.py search silver\n\n# Clean up stale pending confirmations\npython3 arknights-skill/scripts/memory.py gc\n\n# Delete an operator\npython3 arknights-skill/scripts/memory.py delete-operator SilverAsh\n```\n\nYour profile is stored at `~/.config/arknights-skill/doctor-profile.json`. It never leaves your machine.\n\nFile v1.6.1:skill-card.md\n\n## Description:\n\nAnswers Arknights operator, investment, lore, terminology, and stage-strategy questions while using a local Doctor profile for personalization.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[morandot](https://clawhub.ai/user/morandot)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal Arknights players use this skill to get build priorities, skill and mastery advice, stage strategy, lore summaries, terminology explanations, and resource-planning guidance tailored to explicitly recorded local account facts.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Install instructions may execute a mutable remote shell script from the main branch.\n\nMitigation: Install from a pinned release or reviewed package, and inspect the install path before execution.\n\nRisk: The skill creates and updates persistent local game-account profile data, including server, UID, roster, resources, goals, and preferences.\n\nMitigation: Use ARKNIGHTS_MEMORY_DIR deliberately, keep the profile on a trusted local machine, and delete the profile when retention is no longer wanted.\n\nRisk: Version-sensitive Arknights guidance can become stale when live lookup is unavailable.\n\nMitigation: Require live lookup for current banners, events, and meta-sensitive advice, or clearly state that the answer is not based on current version data.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/morandot/skills/arknights-skill)\n- [Server-Resolved GitHub Source](https://github.com/morandot/arknights-skill/tree/main/arknights-skill)\n- [Project Homepage](https://github.com/morandot/arknights-skill)\n- [Quick Start](references/quickstart.md)\n- [Answer Templates](references/answer-templates.md)\n- [Doctor Profile Schema](references/doctor-profile-schema.md)\n- [Style Examples](references/examples.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with occasional shell command and JSON snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses local profile data when available; version-sensitive answers require live lookup or a freshness caveat.]\n\n## Skill Version(s):\n\n1.6.1 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.6.1:agents/openai.yaml\n\ninterface:\n  display_name: \"Arknights Guide\"\n  short_description: \"Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile.\"\n  default_prompt: |\n    Use $arknights-skill to answer Arknights questions. Workflow:\n    1. Read the local Doctor profile via memory.py read (mandatory, see SKILL.md Rule 0 HARD-GATE).\n    2. Greet the user briefly. Use the profile silently for personalization; do not recite its contents (see SKILL.md \"Do Not Do These\").\n    3. If the profile is empty, offer to help set it up by collecting their server, level, and key operators.\n    4. Answer their question following the skill rules: lead with the decision, separate facts from evaluation, control spoilers, check version freshness.\n    5. After answering, if the user explicitly provided new facts this turn, update the profile with those facts; otherwise skip (post-answer gate, see SKILL.md Rule 0).\n  instructions: |\n    Arknights Guide provides structured advice for the game Arknights:\n    - Operator evaluation: worth building, skill priority, mastery order, module value\n    - Investment planning: who to raise first, resource allocation, raise-or-skip decisions\n    - Stage strategy: executable guides with DP timing, deployment order, substitutes\n    - Lore and story: spoiler-controlled character and faction summaries\n    - Terminology: clear definitions with practical context\n    - Comparison: side-by-side operator analysis for build decisions\n\n    Key behaviors:\n    - Always lead with the decision before explanation\n    - Separate factual mechanics from subjective strength evaluations\n    - Treat version-sensitive questions as freshness-critical; search or caveat\n    - Default to Level 0-1 spoiler control unless the user asks for more\n    - Include lower-rarity substitutes when the user does not have a high-end roster\n    - Use the local Doctor profile to personalize advice\n    - After answering, update the profile only with facts the user explicitly provided in the current turn\n    - Never invent stats, event dates, or official text\n\n  suggested_prompts:\n    - \"银灰值不值得练？\"\n    - \"银灰专精哪个技能？\"\n    - \"新手该先练谁？\"\n    - \"OF-F4 怎么打？\"\n    - \"银灰和棘刺谁更好？\"\n    - \"Is SilverAsh worth building?\"\n    - \"Who should a new player raise first?\"\n    - \"SilverAsh vs Thorns?\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.6.0: 9 files, 24122 bytes\n\nFiles: agents/openai.yaml (2340b), references/answer-templates.md (2112b), references/doctor-profile-schema.md (7455b), references/examples.md (5053b), references/quickstart.md (2072b), scripts/memory.py (31457b), skill-card.md (2879b), SKILL.md (13512b), _meta.json (134b)\n\nFile v1.6.0:SKILL.md\n\n---\nname: arknights-skill\nslug: arknights-skill\ndisplayName: Arknights Guide\ndescription: >\n  Use when the user asks about Arknights operators, skills, masteries, modules,\n  stages, lore, terms, or resource planning. Do NOT use for other games,\n  non-Arknights gacha advice, or real-time event schedules (requires live\n  lookup).\nsummary: Arknights operator evaluation, skill priority, stage strategy, lore, and local Doctor profile.\nlicense: MIT\ncompatibility: >\n  Compatible with Agent Skills clients (Codex, Claude Code, Hermes). Requires\n  shell access for the bundled Python script (`scripts/memory.py`). No external\n  credentials needed. Version-sensitive questions require live web lookup; when\n  offline, state conclusions are not current.\nallowed-tools: shell\nversion: \"1.5.1\"\nmetadata:\n  homepage: https://github.com/morandot/arknights-skill\n  openclaw:\n    homepage: https://github.com/morandot/arknights-skill\n  author: moran\n  updated_at: \"2026-07-28\"\n---\n\n# Arknights Guide\n\nA dedicated skill for Arknights questions. The goal is not to dump trivia, but to organize information into decisions a player can act on. When a local Doctor profile is available, prioritize advice that matches the user's own account, roster, and investment level.\n\n<HARD-GATE>\nDo NOT answer any Arknights question without first attempting to read the local Doctor profile. See Rule 0 below.\n</HARD-GATE>\n\n## When To Use\n\nUse this skill when the user asks about:\n\n- **Operator evaluation**: roles, branches, worth building, availability\n  - _\"银灰值不值得练？\"_ / _\"Is SilverAsh worth building?\"_\n- **Skills & investment**: skills, talents, modules, potential, masteries, elite promotion\n  - _\"银灰专精哪个技能？\"_ / _\"Which SilverAsh skill to mastery?\"_\n- **Resource planning**: who to raise first, allocation, raise-or-skip\n  - _\"新手该先练谁？\"_ / _\"Who should a new player raise first?\"_\n- **Stage strategy**: main story, event, high-difficulty stages\n  - _\"OF-F4 怎么打？\"_ / _\"How to clear OF-F4?\"_\n- **Comparison**: side-by-side operator analysis\n  - _\"银灰和棘刺谁更好？\"_ / _\"SilverAsh vs Thorns?\"_\n- **Lore & story**: worldbuilding, factions, character relationships, story summaries\n  - _\"整合运动的背景是什么？\"_ / _\"What is Reunion's backstory?\"_\n- **Terminology**: game terms and mechanics explanation\n  - _\"暖机是什么意思？\"_ / _\"What does warm-up mean?\"_\n- **Version environment**: current strength assessments, event summaries\n  - _\"当前版本谁最强？\"_ / _\"Who is strongest in the current version?\"_\n\n### When NOT To Use\n\n- Other games or gacha games — this skill only covers Arknights\n- Pull rate calculations, banner probability — live data needed, not a calculator tool\n- Real-time event schedules or server status — always require live lookup\n- Account binding, login issues, payment problems — these are customer service topics\n\n## Core Rules\n\n### 0. Use The Local Doctor Profile (Mandatory)\n\n**HARD-GATE: You MUST attempt to read the profile before answering.**\n\nIf the current client allows local file access, read the structured profile next to the installed skill first. Do not assume the current working directory is the skill directory. Resolve the script path with this fallback:\n\n```bash\nSKILL_DIR=\"${CLAUDE_SKILL_DIR:-${SKILL_DIR:-$(dirname \"$(find ~/.hermes ~/.config -name memory.py -print -quit 2>/dev/null)\")}}\"\npython3 \"$SKILL_DIR/scripts/memory.py\" read\n```\n\nThe default profile path is:\n\n```text\n~/.config/arknights-skill/doctor-profile.json\n```\n\nThe user can also set `ARKNIGHTS_MEMORY_DIR` to use a different local directory. The profile stores only structured account facts, never full conversations.\n\nIf neither `$CLAUDE_SKILL_DIR` nor `$SKILL_DIR` is set, search `~/.hermes/skills` or `~/.config/arknights-skill` for the directory containing `memory.py`.\n\n**When answering:**\n\n- Prefer known Doctor level, server, resource state, goals, preferences, owned operators, and operator investment from the profile.\n- If the profile is empty or unreadable, answer normally and do not pretend to know the user's account.\n- If stored facts conflict with explicit information in the current turn, treat the new information as a confirmation candidate rather than overwriting the old profile directly.\n- Reply in the user's language unless they ask for another language.\n\n**Post-answer gate: You MUST update the profile after answering.**\n\nAfter answering, extract only explicitly provided facts from the user's current turn and update the profile:\n\n```bash\npython3 \"$CLAUDE_SKILL_DIR/scripts/memory.py\" update --patch-json '{\"operators\":{\"SilverAsh\":{\"owned\":true,\"elite\":2,\"level\":60,\"masteries\":{\"3\":3}}}}'\n```\n\nOnly write these facts:\n\n- Doctor information: name, server, level, UID\n- Account state: main story or event progress, resources, goals, preferences\n- Operator information: owned status, elite phase, level, potential, skill level, masteries, modules, concise notes\n\nDo not write:\n\n- Full conversations, raw screenshot OCR, or long logs\n- Inferences the user did not confirm\n- Guide advice, strength evaluations, version environment judgments\n- Story content, official text, or event schedules\n\nWhen a downgrade or conflicting fact appears, the script writes to `pending_confirmations`. Do not manually overwrite those fields. If useful, ask the user briefly at the end to confirm.\n\n**Resolving pending confirmations:**\n\n```bash\n# Apply a pending downgrade / conflict\npython3 \"$SKILL_DIR/scripts/memory.py\" confirm --field \"SilverAsh.elite\" --apply\n\n# Dismiss (discard) a pending entry\npython3 \"$SKILL_DIR/scripts/memory.py\" dismiss --field \"SilverAsh.elite\"\n```\n\nAdditional profile management commands:\n\n```bash\n# List recorded operators (filter with --owned or --has-pending)\npython3 \"$SKILL_DIR/scripts/memory.py\" list --owned\n\n# Search operators by name or notes\npython3 \"$SKILL_DIR/scripts/memory.py\" search silver\n\n# Delete a recorded operator\npython3 \"$SKILL_DIR/scripts/memory.py\" delete-operator SilverAsh\n\n# Remove stale pending confirmations (older than 30 days)\npython3 \"$SKILL_DIR/scripts/memory.py\" gc --days 30\n\n# Preview merged result without saving\npython3 \"$SKILL_DIR/scripts/memory.py\" update --patch-json '...' --dry-run\n```\n\n### 1. Lead With The Decision\n\nWhen the user asks whether to build an operator, which skill to prioritize, or how to clear a stage, lead with the answer before the explanation.\n\nPreferred order:\n\n1. Direct conclusion\n2. Why\n3. Applicable scenarios or limitations\n4. Investment or execution advice\n\n### 2. Separate Facts From Evaluation\n\nThe following can be stated as facts:\n\n- Skill and mechanic explanations\n- Class branch roles\n- Basic worldbuilding premises\n- Confirmed profile facts\n- User-provided screenshot or stage information\n\nThe following require qualifiers:\n\n- Whether an operator is strong\n- Whether an operator is future-proof\n- Current version standing\n- Whether an operator is required for high difficulty\n- Whether a banner is worth pulling\n\nPhrase these as \"under current mainstream evaluation\", \"from an early-game utility perspective\", or \"in high-pressure content, this is usually considered\".\n\n### 3. Treat Version-Sensitive Questions As Freshness-Critical\n\nTreat these questions as freshness-critical by default:\n\n- \"Is this operator still strong now?\"\n- \"Is this banner worth pulling in the current version?\"\n- \"How do I clear the latest event?\"\n- \"What is new on CN / JP / Global?\"\n- \"Which skill should I mastery in the current environment?\"\n\nChecklist for version-sensitive questions:\n\n1. Check if live web access is available\n2. ❌ No access → explicitly state \"this conclusion is NOT based on current version data\" and answer from general knowledge\n3. ✅ Access → search before answering\n   - Preferred search keywords (adapt to user language):\n     - Chinese: `明日方舟 {operator_name} 强度 {current_version}`, NGA 明日方舟版, PRTS Wiki\n     - English: `Arknights {operator_name} guide {current_version}`, Gamepress, Arknights Wiki\n4. Do not invent event dates, banner schedules, version order, or official text\n\n### 4. Control Spoilers\n\nWhen the user did not ask for spoilers, default to Level 0-1:\n\n- Level 0: no-spoiler background outline\n- Level 1: light spoilers, enough to mention relationships and premises\n- Level 2: moderate spoilers, enough to summarize key conflicts\n- Level 3: full spoilers, including endings and core reveals\n\nWhen the user explicitly asks for the full story, start with a spoiler warning:\n\n> **Full spoilers below.**\n\n### 5. Make Guides Executable\n\nStage strategy answers should cover as many of these as useful:\n\n- Core stage pressure\n- Enemy threat types\n- Map and positioning priorities\n- DP timing\n- Deployment order or skill timing\n- Common failure points\n- Substitute operator roles or class types\n\nIf the user did not say they have a high-end roster, include a lower-rarity or lower-investment approach.\n\n### 6. Keep Names And Terms Consistent\n\nUse official or widely accepted names. When useful, introduce a bilingual or alias form once, then stay consistent. Do not rotate between multiple nicknames for the same concept.\n\n## Default Answer Shapes\n\n### Operator Review\n\nDefault structure:\n\n1. One-sentence conclusion\n2. Role\n3. Core strengths\n4. Main weaknesses\n5. Best use cases\n6. Investment and mastery advice\n\n### Skill Priority\n\nDefault structure:\n\n1. Recommended skill\n2. Why\n3. When the other skill is better\n4. Mastery order\n5. Difference between new and developed accounts\n\n### Raise Or Skip\n\nDefault structure:\n\n1. Conclusion: build / depends on roster / skip\n2. Why\n3. Who benefits most\n4. Most efficient stopping point\n5. Same-role substitutes\n\n### Lore / Story\n\nDefault structure:\n\n1. No-spoiler introduction\n2. Core conflict around the character or faction\n3. Relationships with other characters\n4. Expand into detailed story only after the user asks\n\n### Stage Help\n\nDefault structure:\n\n1. Core stage pressure\n2. Recommended approach\n3. Recommended role composition\n4. Deployment and skill timing\n5. Failure points\n6. Lower-investment substitutes\n\n### Terminology\n\nDefault structure:\n\n1. Definition\n2. Practical meaning\n3. Example\n4. Common confusion\n\n### Comparison\n\nDefault structure:\n\n1. Conclusion: choose A / choose B / depends on scenario\n2. Each operator's strengths\n3. Each operator's weaknesses\n4. Scenario-by-scenario comparison\n5. Investment advice\n\n## Common Pitfalls\n\nAvoid these when answering:\n\n- **Inventing stats**: Never invent module multipliers, skill percentages, or talent values. State \"I don't have the exact multiplier\" if unsure.\n- **Presenting old versions as current**: A 6-month-old meta assessment is outdated. Always caveat stale knowledge.\n- **Copying squads without substitution**: If recommending a squad, always explain which roles are essential and what substitutes work.\n- **Equating rarity with power**: A 5-star can outperform a 6-star in specific niches. Evaluate by role fit, not star count.\n- **Assuming universal access**: Not everyone has every 6-star. Check profile; if unavailable, default to F2P-friendly advice.\n- **Over-promising banner value**: Banner evaluation depends on account roster and goals. Never say \"must-pull\" universally.\n\n## Agent Configuration (optional)\n\n`agents/openai.yaml` defines the Agent prompt configuration specific to this skill:\n\n- **`display_name` / `short_description`** — Display name and summary shown in the Agent skill list.\n- **`default_prompt`** — The default invocation prompt, which emphasizes fact–evaluation separation, leading with conclusions, and freshness caveats for version-sensitive topics.\n- **`policy.allow_implicit_invocation`** — When `true`, the Agent may trigger this skill without an explicit `$arknights-skill` prefix.\n\nThis file is automatically loaded by the nanobot runtime; manual edits are rarely needed.\n\n## References\n\nRead these only when needed; do not load all of them by default:\n\n- Quick start guide: [references/quickstart.md](references/quickstart.md)\n- Structured templates: [references/answer-templates.md](references/answer-templates.md)\n- Style examples: [references/examples.md](references/examples.md)\n- Doctor profile schema: [references/doctor-profile-schema.md](references/doctor-profile-schema.md)\n- Local Doctor profile script: [scripts/memory.py](scripts/memory.py)\n\nRead these files only when you need a fuller template, want to align with the example rhythm, need the profile schema reference, or need to confirm the local memory script interface.\n\n## Do Not Do These\n\nDo not:\n\n- Invent stats, module multipliers, event dates, banner schedules, or official text\n- Present subjective strength evaluation as absolute fact\n- Reveal major story spoilers unless the user asked for them\n- Give only a copied squad without explaining substitution logic\n- Present old-version conclusions as current-version facts\n- Store personal account memory anywhere except the local profile, and never in the public repository or release package\n- Recommend pulling based solely on strength without considering the user's roster gaps\n- Repeat the entire profile before answering — use it silently for personalization\n\n## Final Goal\n\nEvery answer should help the user do at least one of these:\n\n- Decide whether to build an operator\n- Decide which skill to prioritize\n- Understand a mechanic or term\n- Get an executable stage plan\n- Understand the key point of a story or setting\n- Know whether a version-sensitive conclusion is current\n\nFile v1.6.0:_meta.json\n\n{\n  \"ownerId\": \"kn7bzyad0y0t00e7622qh62rwd85b19e\",\n  \"slug\": \"arknights-skill\",\n  \"version\": \"1.6.0\",\n  \"publishedAt\": 1785229291033\n}\n\nFile v1.6.0:references/answer-templates.md\n\n# Answer Templates\n\nChoose the template closest to the user's question when useful. Do not copy it mechanically. Adapt each template to the specific operator, stage, or term — never output a fill-in-the-blank skeleton verbatim.\n\n## 1. Operator Review\n\n```text\nConclusion:\n[Worth building / depends on roster / skippable]. If your account lacks [role], this operator's priority is higher.\n\nRole:\n- Class / branch:\n- Core job:\n- Common usage:\n\nStrengths:\n-\n-\n\nWeaknesses:\n-\n-\n\nBest use cases:\n-\n-\n\nInvestment advice:\n- Recommended level:\n- Elite 2 priority:\n- Mastery priority (M1 → M3 value):\n\nOne-line advice:\n[]\n```\n\n## 2. Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill [X].\n\nWhy:\n-\n-\n\nWhen Skill [Y] is better:\n-\n-\n\nMastery advice:\n- M1 value:\n- M2 value:\n- M3 value:\n- Recommended stopping point:\n\nConclusion:\n[]\n```\n\n## 3. Raise Or Skip\n\n```text\nConclusion:\n[Build / depends on roster / skip]\n\nWhy:\n-\n-\n\nWho benefits most:\n- New players / veteran accounts / high-difficulty accounts / accounts missing a specific role\n\nMost efficient stopping point:\n- [E1 Lv.50 S7] / [E2 Lv.40 S7 M1] / etc.\n\nSame-role substitutes:\n-\n```\n\n## 4. Lore / Story\n\n```text\nNo-spoiler introduction:\n[]\n\nCore premise:\n-\n-\n\nRelationship with other characters / factions:\n-\n-\n\nCharacter theme:\n[]\n\nIf you want to go deeper, I can expand into files, event story, and full-spoiler plotlines.\n```\n\n## 5. Stage Strategy\n\n```text\nCore stage pressure:\n-\n-\n\nRecommended approach:\n-\n-\n\nRecommended role composition:\n- DP generation:\n- Main DPS:\n- Secondary DPS:\n- Healing:\n- Blocking / tanking:\n- Utility:\n\nExecution notes:\n1.\n2.\n3.\n\nCommon failure points:\n-\n-\n\nLower-investment substitute plan:\n-\n```\n\n## 6. Terminology\n\n```text\nDefinition:\n[]\n\nPractical meaning:\n[]\n\nExample:\n[]\n\nCommon confusion:\n[]\n```\n\n## 7. Comparison\n\n```text\nConclusion:\n[Choose A / choose B / depends on scenario]\n\n[Operator A] strengths:\n-\n-\n\n[Operator A] weaknesses:\n-\n-\n\n[Operator B] strengths:\n-\n-\n\n[Operator B] weaknesses:\n-\n-\n\nScenario comparison:\n- Main story / events:\n- High-difficulty content:\n- New player accounts:\n\nInvestment advice:\n-\n```\n\nFile v1.6.0:references/doctor-profile-schema.md\n\n# Doctor Profile Schema\n\n`doctor-profile.json` is the local structured profile maintained by `scripts/memory.py`.\nIt stores only explicitly confirmed facts — never full conversations, screenshot OCR, or inferences.\n\nSchema version: **1**\n\n---\n\n## File Location\n\nDefault path:\n\n```\n~/.config/arknights-skill/doctor-profile.json\n```\n\nOverride with environment variable `ARKNIGHTS_MEMORY_DIR`.\nMigration from the legacy `.arknights-memory/` path happens automatically on first run.\n\n---\n\n## Top-Level Structure\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": { ... },\n  \"doctor\": { ... },\n  \"account\": { ... },\n  \"operators\": { ... },\n  \"pending_confirmations\": [ ... ]\n}\n```\n\n---\n\n## Field Reference\n\n### `schema_version` *(integer)*\n\nCurrent: `1`.\n`memory.py` will reject profiles with an unsupported version.\n\n---\n\n### `game` *(string)*\n\nAlways `\"Arknights\"`. Reserved for future multi-game support.\n\n---\n\n### `metadata` *(object)*\n\n| Field | Type | Description |\n|---|---|---|\n| `created_at` | ISO 8601 UTC string | Profile creation timestamp. Set automatically. |\n| `updated_at` | ISO 8601 UTC string | Last write timestamp. Updated on every `save`. |\n\nBoth are managed by `memory.py`; do not write manually.\n\n---\n\n### `doctor` *(object)*\n\nPersonal information about the Doctor.\n\n| Field | Type | Description |\n|---|---|---|\n| `name` | string or null | In-game nickname / display name. |\n| `server` | string or null | Server region, e.g. `\"CN\"`, `\"US\"`, `\"JP\"`, `\"KR\"`, `\"EN\"`. |\n| `level` | integer or null | Doctor account level. |\n| `uid` | string or null | Player UID. Format varies by server. |\n\n---\n\n### `account` *(object)*\n\nAccount state and preferences.\n\n| Field | Type | Description |\n|---|---|---|\n| `progress` | object | Freeform progress map, e.g. `{\"main_story\": \"chapter_09\", \"current_event\": \"near_light\"}`. |\n| `resources` | object | Resource stockpile, e.g. `{\"lmd\": 50000, \"skill_book_3\": 30, \"orundum\": 5400}`. |\n| `goals` | string array | Short-term or mid-term goals, e.g. `[\"elite2 SilverAsh\", \"clear OF-F4\"]`. |\n| `preferences` | string array | Play style or unit type preferences, e.g. `[\"guard mains\", \"low-rarity friendly\", \"waifu > meta\"]`. |\n\n---\n\n### `operators` *(object)*\n\nKeyed by operator name (use official English or CN name consistently, one per key).\nEach value:\n\n```json\n{\n  \"owned\": true,\n  \"elite\": 2,\n  \"level\": 80,\n  \"potential\": 5,\n  \"skill_level\": 7,\n  \"masteries\": { \"1\": 3, \"2\": 0, \"3\": 1 },\n  \"modules\": { \"m1\": 3, \"m2\": 1 },\n  \"notes\": [\"top priority defender\"],\n  \"updated_at\": \"2026-04-24T10:30:00Z\"\n}\n```\n\n| Field | Type | Valid values | Description |\n|---|---|---|---|\n| `owned` | boolean | `true` / `false` / `null` | Whether the Doctor owns this operator. |\n| `elite` | integer or null | `0`, `1`, `2`, `null` | Elite phase. |\n| `level` | integer or null | `≥ 1`, `null` | Current level within the current elite phase. |\n| `potential` | integer or null | `1–6`, `null` | Potential level. |\n| `skill_level` | integer or null | `1–7`, `null` | Skill rank. |\n| `masteries` | object | `{ \"skill_id\": 0–3 }` | Per-skill mastery level. `skill_id` is `\"1\"`, `\"2\"`, or `\"3\"`. |\n| `modules` | object | `{ \"module_id\": 0–3 }` | Per-module upgrade stage. `module_id` is a string identifier. |\n| `notes` | string array | — | Short freeform notes. Each entry ≤ 240 chars. |\n| `updated_at` | ISO 8601 UTC string | — | Last modified timestamp. Managed by `memory.py`. |\n\n#### Merge behavior\n\n- **Monotonic only**: `elite`, `level`, `masteries`, `potential`, `skill_level` only accept **increasing** values.\n  Downgrades are rejected and written to `pending_confirmations` for manual review.\n- **Boolean**: `owned` can transition `null → false → true`, but `true → false` triggers a confirmation.\n- **Free text**: `notes` is deduplicated; duplicates are silently ignored.\n\n---\n\n### `pending_confirmations` *(array)*\n\nStores downgrade or conflicting-fact entries that need user confirmation before being applied.\n\nEach item:\n\n```json\n{\n  \"field\": \"SilverAsh.elite\",\n  \"current\": 2,\n  \"incoming\": 1,\n  \"reason\": \"incoming elite is lower\",\n  \"observed_at\": \"2026-04-24T12:00:00Z\"\n}\n```\n\n| Field | Type | Description |\n|---|---|---|\n| `field` | string | Dotted path to the conflicting field. |\n| `current` | any | Currently stored value. |\n| `incoming` | any | Incoming value that was rejected. |\n| `reason` | string | Why the write was rejected. |\n| `observed_at` | ISO 8601 UTC string | When the conflict was detected. |\n\nUse `memory.py confirm --field <field> --apply` to accept, or `memory.py dismiss --field <field>` to discard.\n\n---\n\n## CLI Commands Reference\n\n| Command | Description |\n|---|---|\n| `path` | Print the profile file path. |\n| `read` | Load or initialize the profile; print JSON to stdout, pending confirmations to stderr. |\n| `update --patch-json '<json>' [--dry-run]` | Merge structured facts. With `--dry-run`, preview without saving. |\n| `confirm --field <field> --apply` | Apply a pending downgrade/conflict. |\n| `dismiss --field <field>` | Discard a pending entry. |\n| `list [--owned] [--has-pending]` | List recorded operators. Filter by ownership or pending status. |\n| `search <keyword>` | Search operators by name or notes (case-insensitive). |\n| `delete-operator <name>` | Delete a recorded operator. |\n| `gc [--days N] [--dry-run]` | Remove pending confirmations older than N days (default: 30). |\n\n---\n\n## Write Rules (What `memory.py update --patch-json` Accepts)\n\nOnly **explicitly provided facts** from the current conversation turn should be written:\n\n| ✅ Allowed | ❌ Not written |\n|---|---|\n| Doctor name, server, level, UID | Full conversations |\n| Account progress milestones | Raw screenshot OCR |\n| Resource amounts | Long narrative logs |\n| Operator owned / elite / level | Inferences not confirmed by the user |\n| Mastery and module status | Guide advice |\n| Short freeform notes | Strength evaluations |\n\nSee `SKILL.md` → **Core Rules §0** for the full update workflow.\n\n---\n\n## Example\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": {\n    \"created_at\": \"2026-04-24T08:00:00Z\",\n    \"updated_at\": \"2026-05-19T14:30:00Z\"\n  },\n  \"doctor\": {\n    \"name\": \"Moran\",\n    \"server\": \"CN\",\n    \"level\": 120,\n    \"uid\": null\n  },\n  \"account\": {\n    \"progress\": { \"main_story\": \"chapter_11\" },\n    \"resources\": { \"lmd\": 200000, \"skill_book_3\": 50 },\n    \"goals\": [\"elite2 Exusiai\"],\n    \"preferences\": [\"low-rarity friendly\", \"early game\"]\n  },\n  \"operators\": {\n    \"Exusiai\": {\n      \"owned\": true,\n      \"elite\": 1,\n      \"level\": 70,\n      \"potential\": 3,\n      \"skill_level\": 7,\n      \"masteries\": { \"1\": 3, \"2\": 1, \"3\": 0 },\n      \"modules\": {},\n      \"notes\": [\"top priority sniper\"],\n      \"updated_at\": \"2026-05-19T14:30:00Z\"\n    }\n  },\n  \"pending_confirmations\": []\n}\n```\n\n---\n\n## Edge Cases\n\n- **Multiple operators with same name on different accounts**: Not supported in the current schema. The profile is single-account.\n- **CN operator name vs EN operator name**: Use whichever name the user provides, but stay consistent. If the user switches languages, a new entry is created for the localized name.\n- **Kitchen-sink updates**: Sending `update --patch-json` with all operators at once is fine. Each is merged independently.\n- **Race conditions**: The profile file is small (typically <50KB) and written atomically via temporary file + atomic rename, so concurrent reads see a consistent state.\n\nFile v1.6.0:references/examples.md\n\n# Style Examples\n\nThese examples are for answer rhythm only. Do not copy the specific conclusions blindly.\n\n## Example 1: Whether An Operator Is Worth Building\n\n```text\nConclusion:\nWorth building. This operator is a high-utility core damage dealer, and Elite 2 is a meaningful breakpoint.\n\nRole:\nGround physical DPS with burst potential. Their main value comes from wide-area cleanup during skill uptime.\n\nStrengths:\n- Strong burst against grouped medium-pressure enemies\n- Large coverage area and forgiving positioning\n- Reliable performance in main story and event stages\n\nWeaknesses:\n- Depends heavily on skill uptime\n- Needs teammates to cover downtime\n\nInvestment advice:\nPrioritize Elite 2. If resources allow, improve the core skill's mastery first.\n```\n\n## Example 2: Terminology\n\n```text\nDefinition:\nWarm-up means an operator needs time to stack, charge, or enter a stable skill cycle before reaching full strength.\n\nPractical meaning:\nThey may feel weaker early, then become noticeably stronger in the mid or late stage.\n\nExample:\nOperators that need to stack attack, build summons, or wait for a stable cycle.\n\nCommon confusion:\nWarm-up does not mean weak. Many warm-up operators simply reach their power window later.\n```\n\n## Example 3: Stage Strategy\n\n```text\nCore stage pressure:\n- Tight early DP\n- Mid-to-late waves pressure both high-defense lanes and aerial threats\n\nRecommended approach:\nStabilize DP and anti-air first, prepare sustained damage for the center lane, then save one burst skill for the pressure wave.\n\nLower-investment substitute:\nThe real requirement is stable anti-air plus sustained AoE or multi-target damage in the center lane. It does not have to be a specific 6-star operator.\n```\n\n## Example 4: Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill 2.\n\nWhy:\n- Faster startup and better general use\n- Easier to get consistent value in main story and most event stages\n\nWhen the other skill is better:\n- Consider Skill 3 if you care more about burst ceiling or already have a team that can support its timing\n\nMastery advice:\n- Standard accounts should master Skill 2 first\n- Developed accounts chasing high-pressure performance can add Skill 3 later\n```\n\n## Example 5: Lore Introduction\n\n```text\nNo-spoiler introduction:\nThis character's appeal is not just combat role, but the tension between identity, responsibility, and choice.\n\nCore premise:\n- They belong to a key faction\n- They mirror or contrast another important character's values\n\nRelationships and theme:\n- On the surface, the conflict is about duty; underneath, it is closer to a conflict of beliefs\n- The character theme usually revolves around responsibility, cost, and self-definition\n\nIf you want to continue, I can expand into profile material and the full story route, with spoiler level clearly marked.\n```\n\n## Example 6: Operator Comparison\n\n```text\nConclusion:\nBoth are strong ground DPS. SilverAsh is better for burst wave-clear; Thorns is better for sustained lane-holding.\n\nSilverAsh strengths:\n- Huge burst damage during skill uptime\n- Wide attack range when skill is active\n- Excellent for clearing grouped enemies\n\nThorns strengths:\n- Consistent sustained damage without skill dependency\n- Self-sufficient with built-in regeneration\n- Reliable for holding a lane solo\n\nScenario comparison:\n- Main story / events: Thorns is more comfortable for general use\n- High-difficulty content: SilverAsh burst is harder to replace\n- New player accounts: Thorns is more forgiving to deploy\n\nInvestment advice:\nIf you lack burst DPS, raise SilverAsh first. If you need a reliable solo laner, raise Thorns first. Ideally raise both.\n```\n\n## Example 7: Common Mistakes — AVOID These Patterns\n\nThese are examples of what NOT to do:\n\n```text\n❌ Wrong pattern: Absolute evaluation without qualifiers\n\"SilverAsh is the best guard in the game.\"\n→ Instead: \"SilverAsh is a top-tier burst guard. Under current mainstream evaluation, he is one of the strongest general-purpose guards, especially in content that rewards burst damage.\"\n\n❌ Wrong pattern: Copying a squad without substitution logic\n\"Use SilverAsh, Thorns, Saria, Exusiai, Myrtle, Eyjafjalla.\"\n→ Instead: \"Core roles: a burst guard for wave clear (SilverAsh or alternatives), a sustained lane holder (Thorns or a strong Arts guard), a healer-tank (Saria or a healing defender + medic), fast DP generation (Myrtle or any flagbearer), and an AoE caster (Eyjafjalla or a splash caster).\"\n\n❌ Wrong pattern: Old version conclusion without caveat\n\"SilverAsh is still S-tier.\"\n→ Instead: \"SilverAsh was historically S-tier. I don't have live data on current CN meta. His burst role is still useful, but I recommend searching for the latest assessment from [current month/year].\"\n\n❌ Wrong pattern: Profile dump before answering\n\"Your profile says: name=Moran, level=120, server=CN, operators={SilverAsh: {elite: 2, ...}} ...\"\n→ Instead: Use the profile silently for personalization. Only mention relevant facts (\"I see you have an E2 SilverAsh — that's great for this stage.\").\n```\n\nFile v1.6.0:references/quickstart.md\n\n# Quick Start\n\nGet started with arknights-skill in three steps.\n\n## 1. Install\n\nChoose your platform:\n\n**Hermes:**\n```bash\nskills add git+https://github.com/morandot/arknights-skill.git --skill arknights-skill\n```\n\n**Shell (manual):**\n```bash\nbash -c \"$(curl -fsSL https://raw.githubusercontent.com/morandot/arknights-skill/main/install.sh)\"\n```\n\n**Claude Code:**\nTell your agent: \"Install the skill `arknights-skill` from https://github.com/morandot/arknights-skill\"\n\n**Codex / OpenClaw:**\nUse `npx skills add https://github.com/morandot/arknights-skill --skill arknights-skill`\n\n## 2. Set Up Your Profile\n\nTell the agent about your account. It will automatically save your info to a local Doctor profile:\n\n> \"我是 CN 服 120 级博士，有银灰精英 2 专 9 技能 3，棘刺精英 2 专 9 技能 3，塞雷娅精英 2 专 9 技能 1\"\n\n> \"I'm a level 120 Doctor on CN server. I have SilverAsh E2 M9 S3, Thorns E2 M9 S3, Saria E2 M9 S1\"\n\nThe agent will save your operators and account info. You can update it anytime by mentioning new operators or progress changes.\n\n## 3. Ask Questions\n\n- \"银灰值不值得练？\" / \"Is SilverAsh worth building?\"\n- \"银灰和棘刺谁更好？\" / \"SilverAsh vs Thorns?\"\n- \"OF-F4 怎么打？\" / \"How to clear OF-F4?\"\n- \"新手该先练谁？\" / \"Who should I raise first?\"\n\nThe agent will use your profile to give personalized advice.\n\n## Managing Your Profile\n\nThe agent manages the profile automatically. If you need manual control:\n\n```bash\n# View profile location\npython3 arknights-skill/scripts/memory.py path\n\n# Read current profile\npython3 arknights-skill/scripts/memory.py read\n\n# List recorded operators\npython3 arknights-skill/scripts/memory.py list --owned\n\n# Search operators\npython3 arknights-skill/scripts/memory.py search silver\n\n# Clean up stale pending confirmations\npython3 arknights-skill/scripts/memory.py gc\n\n# Delete an operator\npython3 arknights-skill/scripts/memory.py delete-operator SilverAsh\n```\n\nYour profile is stored at `~/.config/arknights-skill/doctor-profile.json`. It never leaves your machine.\n\nFile v1.6.0:skill-card.md\n\n## Description: <br>\nUse when the user asks about Arknights operators, skills, masteries, modules, stages, lore, terms, or resource planning; do not use for other games, non-Arknights gacha advice, or real-time event schedules. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[morandot](https://clawhub.ai/user/morandot) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal Arknights players use this skill to get personalized operator evaluations, skill and mastery priorities, resource planning help, stage strategies, terminology explanations, and spoiler-controlled lore summaries. The skill reads and updates a local Doctor profile when available so advice can reflect the user's account, roster, and goals. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The quickstart includes a curl-to-bash shell installer. <br>\nMitigation: Prefer the documented package-manager install paths and review installer commands before running them. <br>\nRisk: The skill creates and maintains a persistent local Doctor profile that can include account details such as server, level, UID, goals, resources, and operator status. <br>\nMitigation: Use ARKNIGHTS_MEMORY_DIR to choose an appropriate storage location, avoid saving UID or other account details on shared machines, and store only explicitly provided facts. <br>\nRisk: Version-sensitive Arknights guidance can become stale or misleading when live lookup is unavailable. <br>\nMitigation: Check current sources for banners, events, and meta-dependent advice, or state clearly when an answer is not based on current version data. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/morandot/skills/arknights-skill) <br>\n- [Project Homepage](https://github.com/morandot/arknights-skill) <br>\n- [Quick Start](references/quickstart.md) <br>\n- [Answer Templates](references/answer-templates.md) <br>\n- [Style Examples](references/examples.md) <br>\n- [Doctor Profile Schema](references/doctor-profile-schema.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, markdown, shell commands, configuration] <br>\n**Output Format:** [Markdown with inline shell commands and structured answer sections] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May read and update a local Doctor profile JSON file; version-sensitive answers require live lookup or an explicit freshness caveat.] <br>\n\n## Skill Version(s): <br>\n1.6.0 (source: server release metadata; artifact frontmatter reports 1.5.1) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.6.0:agents/openai.yaml\n\ninterface:\n  display_name: \"Arknights Guide\"\n  short_description: \"Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile.\"\n  default_prompt: |\n    Use $arknights-skill to answer Arknights questions. Workflow:\n    1. Read the local Doctor profile via memory.py read (mandatory, see SKILL.md Rule 0 HARD-GATE).\n    2. Greet the user briefly, showing their profile summary (Doctor name, level, operator count, pending confirmations).\n    3. If the profile is empty, offer to help set it up by collecting their server, level, and key operators.\n    4. Answer their question following the skill rules: lead with the decision, separate facts from evaluation, control spoilers, check version freshness.\n    5. After answering, update the profile with any explicitly provided facts (post-answer gate, see SKILL.md Rule 0).\n  instructions: |\n    Arknights Guide provides structured advice for the game Arknights:\n    - Operator evaluation: worth building, skill priority, mastery order, module value\n    - Investment planning: who to raise first, resource allocation, raise-or-skip decisions\n    - Stage strategy: executable guides with DP timing, deployment order, substitutes\n    - Lore and story: spoiler-controlled character and faction summaries\n    - Terminology: clear definitions with practical context\n    - Comparison: side-by-side operator analysis for build decisions\n\n    Key behaviors:\n    - Always lead with the decision before explanation\n    - Separate factual mechanics from subjective strength evaluations\n    - Treat version-sensitive questions as freshness-critical; search or caveat\n    - Default to Level 0-1 spoiler control unless the user asks for more\n    - Include lower-rarity substitutes when the user does not have a high-end roster\n    - Use the local Doctor profile to personalize advice\n    - After answering, always update the profile with newly provided facts\n    - Never invent stats, event dates, or official text\n\n  suggested_prompts:\n    - \"银灰值不值得练？\"\n    - \"银灰专精哪个技能？\"\n    - \"新手该先练谁？\"\n    - \"OF-F4 怎么打？\"\n    - \"银灰和棘刺谁更好？\"\n    - \"Is SilverAsh worth building?\"\n    - \"Who should a new player raise first?\"\n    - \"SilverAsh vs Thorns?\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.5.1: 9 files, 23910 bytes\n\nFiles: agents/openai.yaml (2340b), references/answer-templates.md (2112b), references/doctor-profile-schema.md (7455b), references/examples.md (5053b), references/quickstart.md (2072b), scripts/memory.py (31457b), skill-card.md (2556b), SKILL.md (13485b), _meta.json (134b)\n\nFile v1.5.1:SKILL.md\n\n---\nname: arknights-skill\nslug: arknights-skill\ndisplayName: Arknights Guide\ndescription: >\n  Use when the user asks about Arknights operators, skills, masteries, modules,\n  stages, lore, terms, or resource planning. Do NOT use for other games,\n  non-Arknights gacha advice, or real-time event schedules (requires live\n  lookup).\nsummary: Arknights operator evaluation, skill priority, stage strategy, lore, and local Doctor profile.\nlicense: MIT\ncompatibility: >\n  Compatible with Agent Skills clients (Codex, Claude Code, Hermes). Requires\n  shell access for the bundled Python script (`scripts/memory.py`). No external\n  credentials needed. Version-sensitive questions require live web lookup; when\n  offline, state conclusions are not current.\nallowed-tools: shell\nversion: \"1.5.0\"\nmetadata:\n  homepage: https://github.com/morandot/arknights-skill\n  openclaw:\n    homepage: https://github.com/morandot/arknights-skill\n  author: moran\n---\n\n# Arknights Guide\n\nA dedicated skill for Arknights questions. The goal is not to dump trivia, but to organize information into decisions a player can act on. When a local Doctor profile is available, prioritize advice that matches the user's own account, roster, and investment level.\n\n<HARD-GATE>\nDo NOT answer any Arknights question without first attempting to read the local Doctor profile. See Rule 0 below.\n</HARD-GATE>\n\n## When To Use\n\nUse this skill when the user asks about:\n\n- **Operator evaluation**: roles, branches, worth building, availability\n  - _\"银灰值不值得练？\"_ / _\"Is SilverAsh worth building?\"_\n- **Skills & investment**: skills, talents, modules, potential, masteries, elite promotion\n  - _\"银灰专精哪个技能？\"_ / _\"Which SilverAsh skill to mastery?\"_\n- **Resource planning**: who to raise first, allocation, raise-or-skip\n  - _\"新手该先练谁？\"_ / _\"Who should a new player raise first?\"_\n- **Stage strategy**: main story, event, high-difficulty stages\n  - _\"OF-F4 怎么打？\"_ / _\"How to clear OF-F4?\"_\n- **Comparison**: side-by-side operator analysis\n  - _\"银灰和棘刺谁更好？\"_ / _\"SilverAsh vs Thorns?\"_\n- **Lore & story**: worldbuilding, factions, character relationships, story summaries\n  - _\"整合运动的背景是什么？\"_ / _\"What is Reunion's backstory?\"_\n- **Terminology**: game terms and mechanics explanation\n  - _\"暖机是什么意思？\"_ / _\"What does warm-up mean?\"_\n- **Version environment**: current strength assessments, event summaries\n  - _\"当前版本谁最强？\"_ / _\"Who is strongest in the current version?\"_\n\n### When NOT To Use\n\n- Other games or gacha games — this skill only covers Arknights\n- Pull rate calculations, banner probability — live data needed, not a calculator tool\n- Real-time event schedules or server status — always require live lookup\n- Account binding, login issues, payment problems — these are customer service topics\n\n## Core Rules\n\n### 0. Use The Local Doctor Profile (Mandatory)\n\n**HARD-GATE: You MUST attempt to read the profile before answering.**\n\nIf the current client allows local file access, read the structured profile next to the installed skill first. Do not assume the current working directory is the skill directory. Resolve the script path with this fallback:\n\n```bash\nSKILL_DIR=\"${CLAUDE_SKILL_DIR:-${SKILL_DIR:-$(dirname \"$(find ~/.hermes ~/.config -name memory.py -print -quit 2>/dev/null)\")}}\"\npython3 \"$SKILL_DIR/scripts/memory.py\" read\n```\n\nThe default profile path is:\n\n```text\n~/.config/arknights-skill/doctor-profile.json\n```\n\nThe user can also set `ARKNIGHTS_MEMORY_DIR` to use a different local directory. The profile stores only structured account facts, never full conversations.\n\nIf neither `$CLAUDE_SKILL_DIR` nor `$SKILL_DIR` is set, search `~/.hermes/skills` or `~/.config/arknights-skill` for the directory containing `memory.py`.\n\n**When answering:**\n\n- Prefer known Doctor level, server, resource state, goals, preferences, owned operators, and operator investment from the profile.\n- If the profile is empty or unreadable, answer normally and do not pretend to know the user's account.\n- If stored facts conflict with explicit information in the current turn, treat the new information as a confirmation candidate rather than overwriting the old profile directly.\n- Reply in the user's language unless they ask for another language.\n\n**Post-answer gate: You MUST update the profile after answering.**\n\nAfter answering, extract only explicitly provided facts from the user's current turn and update the profile:\n\n```bash\npython3 \"$CLAUDE_SKILL_DIR/scripts/memory.py\" update --patch-json '{\"operators\":{\"SilverAsh\":{\"owned\":true,\"elite\":2,\"level\":60,\"masteries\":{\"3\":3}}}}'\n```\n\nOnly write these facts:\n\n- Doctor information: name, server, level, UID\n- Account state: main story or event progress, resources, goals, preferences\n- Operator information: owned status, elite phase, level, potential, skill level, masteries, modules, concise notes\n\nDo not write:\n\n- Full conversations, raw screenshot OCR, or long logs\n- Inferences the user did not confirm\n- Guide advice, strength evaluations, version environment judgments\n- Story content, official text, or event schedules\n\nWhen a downgrade or conflicting fact appears, the script writes to `pending_confirmations`. Do not manually overwrite those fields. If useful, ask the user briefly at the end to confirm.\n\n**Resolving pending confirmations:**\n\n```bash\n# Apply a pending downgrade / conflict\npython3 \"$SKILL_DIR/scripts/memory.py\" confirm --field \"SilverAsh.elite\" --apply\n\n# Dismiss (discard) a pending entry\npython3 \"$SKILL_DIR/scripts/memory.py\" dismiss --field \"SilverAsh.elite\"\n```\n\nAdditional profile management commands:\n\n```bash\n# List recorded operators (filter with --owned or --has-pending)\npython3 \"$SKILL_DIR/scripts/memory.py\" list --owned\n\n# Search operators by name or notes\npython3 \"$SKILL_DIR/scripts/memory.py\" search silver\n\n# Delete a recorded operator\npython3 \"$SKILL_DIR/scripts/memory.py\" delete-operator SilverAsh\n\n# Remove stale pending confirmations (older than 30 days)\npython3 \"$SKILL_DIR/scripts/memory.py\" gc --days 30\n\n# Preview merged result without saving\npython3 \"$SKILL_DIR/scripts/memory.py\" update --patch-json '...' --dry-run\n```\n\n### 1. Lead With The Decision\n\nWhen the user asks whether to build an operator, which skill to prioritize, or how to clear a stage, lead with the answer before the explanation.\n\nPreferred order:\n\n1. Direct conclusion\n2. Why\n3. Applicable scenarios or limitations\n4. Investment or execution advice\n\n### 2. Separate Facts From Evaluation\n\nThe following can be stated as facts:\n\n- Skill and mechanic explanations\n- Class branch roles\n- Basic worldbuilding premises\n- Confirmed profile facts\n- User-provided screenshot or stage information\n\nThe following require qualifiers:\n\n- Whether an operator is strong\n- Whether an operator is future-proof\n- Current version standing\n- Whether an operator is required for high difficulty\n- Whether a banner is worth pulling\n\nPhrase these as \"under current mainstream evaluation\", \"from an early-game utility perspective\", or \"in high-pressure content, this is usually considered\".\n\n### 3. Treat Version-Sensitive Questions As Freshness-Critical\n\nTreat these questions as freshness-critical by default:\n\n- \"Is this operator still strong now?\"\n- \"Is this banner worth pulling in the current version?\"\n- \"How do I clear the latest event?\"\n- \"What is new on CN / JP / Global?\"\n- \"Which skill should I mastery in the current environment?\"\n\nChecklist for version-sensitive questions:\n\n1. Check if live web access is available\n2. ❌ No access → explicitly state \"this conclusion is NOT based on current version data\" and answer from general knowledge\n3. ✅ Access → search before answering\n   - Preferred search keywords (adapt to user language):\n     - Chinese: `明日方舟 {operator_name} 强度 {current_version}`, NGA 明日方舟版, PRTS Wiki\n     - English: `Arknights {operator_name} guide {current_version}`, Gamepress, Arknights Wiki\n4. Do not invent event dates, banner schedules, version order, or official text\n\n### 4. Control Spoilers\n\nWhen the user did not ask for spoilers, default to Level 0-1:\n\n- Level 0: no-spoiler background outline\n- Level 1: light spoilers, enough to mention relationships and premises\n- Level 2: moderate spoilers, enough to summarize key conflicts\n- Level 3: full spoilers, including endings and core reveals\n\nWhen the user explicitly asks for the full story, start with a spoiler warning:\n\n> **Full spoilers below.**\n\n### 5. Make Guides Executable\n\nStage strategy answers should cover as many of these as useful:\n\n- Core stage pressure\n- Enemy threat types\n- Map and positioning priorities\n- DP timing\n- Deployment order or skill timing\n- Common failure points\n- Substitute operator roles or class types\n\nIf the user did not say they have a high-end roster, include a lower-rarity or lower-investment approach.\n\n### 6. Keep Names And Terms Consistent\n\nUse official or widely accepted names. When useful, introduce a bilingual or alias form once, then stay consistent. Do not rotate between multiple nicknames for the same concept.\n\n## Default Answer Shapes\n\n### Operator Review\n\nDefault structure:\n\n1. One-sentence conclusion\n2. Role\n3. Core strengths\n4. Main weaknesses\n5. Best use cases\n6. Investment and mastery advice\n\n### Skill Priority\n\nDefault structure:\n\n1. Recommended skill\n2. Why\n3. When the other skill is better\n4. Mastery order\n5. Difference between new and developed accounts\n\n### Raise Or Skip\n\nDefault structure:\n\n1. Conclusion: build / depends on roster / skip\n2. Why\n3. Who benefits most\n4. Most efficient stopping point\n5. Same-role substitutes\n\n### Lore / Story\n\nDefault structure:\n\n1. No-spoiler introduction\n2. Core conflict around the character or faction\n3. Relationships with other characters\n4. Expand into detailed story only after the user asks\n\n### Stage Help\n\nDefault structure:\n\n1. Core stage pressure\n2. Recommended approach\n3. Recommended role composition\n4. Deployment and skill timing\n5. Failure points\n6. Lower-investment substitutes\n\n### Terminology\n\nDefault structure:\n\n1. Definition\n2. Practical meaning\n3. Example\n4. Common confusion\n\n### Comparison\n\nDefault structure:\n\n1. Conclusion: choose A / choose B / depends on scenario\n2. Each operator's strengths\n3. Each operator's weaknesses\n4. Scenario-by-scenario comparison\n5. Investment advice\n\n## Common Pitfalls\n\nAvoid these when answering:\n\n- **Inventing stats**: Never invent module multipliers, skill percentages, or talent values. State \"I don't have the exact multiplier\" if unsure.\n- **Presenting old versions as current**: A 6-month-old meta assessment is outdated. Always caveat stale knowledge.\n- **Copying squads without substitution**: If recommending a squad, always explain which roles are essential and what substitutes work.\n- **Equating rarity with power**: A 5-star can outperform a 6-star in specific niches. Evaluate by role fit, not star count.\n- **Assuming universal access**: Not everyone has every 6-star. Check profile; if unavailable, default to F2P-friendly advice.\n- **Over-promising banner value**: Banner evaluation depends on account roster and goals. Never say \"must-pull\" universally.\n\n## Agent Configuration (optional)\n\n`agents/openai.yaml` defines the Agent prompt configuration specific to this skill:\n\n- **`display_name` / `short_description`** — Display name and summary shown in the Agent skill list.\n- **`default_prompt`** — The default invocation prompt, which emphasizes fact–evaluation separation, leading with conclusions, and freshness caveats for version-sensitive topics.\n- **`policy.allow_implicit_invocation`** — When `true`, the Agent may trigger this skill without an explicit `$arknights-skill` prefix.\n\nThis file is automatically loaded by the nanobot runtime; manual edits are rarely needed.\n\n## References\n\nRead these only when needed; do not load all of them by default:\n\n- Quick start guide: [references/quickstart.md](references/quickstart.md)\n- Structured templates: [references/answer-templates.md](references/answer-templates.md)\n- Style examples: [references/examples.md](references/examples.md)\n- Doctor profile schema: [references/doctor-profile-schema.md](references/doctor-profile-schema.md)\n- Local Doctor profile script: [scripts/memory.py](scripts/memory.py)\n\nRead these files only when you need a fuller template, want to align with the example rhythm, need the profile schema reference, or need to confirm the local memory script interface.\n\n## Do Not Do These\n\nDo not:\n\n- Invent stats, module multipliers, event dates, banner schedules, or official text\n- Present subjective strength evaluation as absolute fact\n- Reveal major story spoilers unless the user asked for them\n- Give only a copied squad without explaining substitution logic\n- Present old-version conclusions as current-version facts\n- Store personal account memory anywhere except the local profile, and never in the public repository or release package\n- Recommend pulling based solely on strength without considering the user's roster gaps\n- Repeat the entire profile before answering — use it silently for personalization\n\n## Final Goal\n\nEvery answer should help the user do at least one of these:\n\n- Decide whether to build an operator\n- Decide which skill to prioritize\n- Understand a mechanic or term\n- Get an executable stage plan\n- Understand the key point of a story or setting\n- Know whether a version-sensitive conclusion is current\n\nFile v1.5.1:_meta.json\n\n{\n  \"ownerId\": \"kn7bzyad0y0t00e7622qh62rwd85b19e\",\n  \"slug\": \"arknights-skill\",\n  \"version\": \"1.5.1\",\n  \"publishedAt\": 1785229057632\n}\n\nFile v1.5.1:references/answer-templates.md\n\n# Answer Templates\n\nChoose the template closest to the user's question when useful. Do not copy it mechanically. Adapt each template to the specific operator, stage, or term — never output a fill-in-the-blank skeleton verbatim.\n\n## 1. Operator Review\n\n```text\nConclusion:\n[Worth building / depends on roster / skippable]. If your account lacks [role], this operator's priority is higher.\n\nRole:\n- Class / branch:\n- Core job:\n- Common usage:\n\nStrengths:\n-\n-\n\nWeaknesses:\n-\n-\n\nBest use cases:\n-\n-\n\nInvestment advice:\n- Recommended level:\n- Elite 2 priority:\n- Mastery priority (M1 → M3 value):\n\nOne-line advice:\n[]\n```\n\n## 2. Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill [X].\n\nWhy:\n-\n-\n\nWhen Skill [Y] is better:\n-\n-\n\nMastery advice:\n- M1 value:\n- M2 value:\n- M3 value:\n- Recommended stopping point:\n\nConclusion:\n[]\n```\n\n## 3. Raise Or Skip\n\n```text\nConclusion:\n[Build / depends on roster / skip]\n\nWhy:\n-\n-\n\nWho benefits most:\n- New players / veteran accounts / high-difficulty accounts / accounts missing a specific role\n\nMost efficient stopping point:\n- [E1 Lv.50 S7] / [E2 Lv.40 S7 M1] / etc.\n\nSame-role substitutes:\n-\n```\n\n## 4. Lore / Story\n\n```text\nNo-spoiler introduction:\n[]\n\nCore premise:\n-\n-\n\nRelationship with other characters / factions:\n-\n-\n\nCharacter theme:\n[]\n\nIf you want to go deeper, I can expand into files, event story, and full-spoiler plotlines.\n```\n\n## 5. Stage Strategy\n\n```text\nCore stage pressure:\n-\n-\n\nRecommended approach:\n-\n-\n\nRecommended role composition:\n- DP generation:\n- Main DPS:\n- Secondary DPS:\n- Healing:\n- Blocking / tanking:\n- Utility:\n\nExecution notes:\n1.\n2.\n3.\n\nCommon failure points:\n-\n-\n\nLower-investment substitute plan:\n-\n```\n\n## 6. Terminology\n\n```text\nDefinition:\n[]\n\nPractical meaning:\n[]\n\nExample:\n[]\n\nCommon confusion:\n[]\n```\n\n## 7. Comparison\n\n```text\nConclusion:\n[Choose A / choose B / depends on scenario]\n\n[Operator A] strengths:\n-\n-\n\n[Operator A] weaknesses:\n-\n-\n\n[Operator B] strengths:\n-\n-\n\n[Operator B] weaknesses:\n-\n-\n\nScenario comparison:\n- Main story / events:\n- High-difficulty content:\n- New player accounts:\n\nInvestment advice:\n-\n```\n\nFile v1.5.1:references/doctor-profile-schema.md\n\n# Doctor Profile Schema\n\n`doctor-profile.json` is the local structured profile maintained by `scripts/memory.py`.\nIt stores only explicitly confirmed facts — never full conversations, screenshot OCR, or inferences.\n\nSchema version: **1**\n\n---\n\n## File Location\n\nDefault path:\n\n```\n~/.config/arknights-skill/doctor-profile.json\n```\n\nOverride with environment variable `ARKNIGHTS_MEMORY_DIR`.\nMigration from the legacy `.arknights-memory/` path happens automatically on first run.\n\n---\n\n## Top-Level Structure\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": { ... },\n  \"doctor\": { ... },\n  \"account\": { ... },\n  \"operators\": { ... },\n  \"pending_confirmations\": [ ... ]\n}\n```\n\n---\n\n## Field Reference\n\n### `schema_version` *(integer)*\n\nCurrent: `1`.\n`memory.py` will reject profiles with an unsupported version.\n\n---\n\n### `game` *(string)*\n\nAlways `\"Arknights\"`. Reserved for future multi-game support.\n\n---\n\n### `metadata` *(object)*\n\n| Field | Type | Description |\n|---|---|---|\n| `created_at` | ISO 8601 UTC string | Profile creation timestamp. Set automatically. |\n| `updated_at` | ISO 8601 UTC string | Last write timestamp. Updated on every `save`. |\n\nBoth are managed by `memory.py`; do not write manually.\n\n---\n\n### `doctor` *(object)*\n\nPersonal information about the Doctor.\n\n| Field | Type | Description |\n|---|---|---|\n| `name` | string or null | In-game nickname / display name. |\n| `server` | string or null | Server region, e.g. `\"CN\"`, `\"US\"`, `\"JP\"`, `\"KR\"`, `\"EN\"`. |\n| `level` | integer or null | Doctor account level. |\n| `uid` | string or null | Player UID. Format varies by server. |\n\n---\n\n### `account` *(object)*\n\nAccount state and preferences.\n\n| Field | Type | Description |\n|---|---|---|\n| `progress` | object | Freeform progress map, e.g. `{\"main_story\": \"chapter_09\", \"current_event\": \"near_light\"}`. |\n| `resources` | object | Resource stockpile, e.g. `{\"lmd\": 50000, \"skill_book_3\": 30, \"orundum\": 5400}`. |\n| `goals` | string array | Short-term or mid-term goals, e.g. `[\"elite2 SilverAsh\", \"clear OF-F4\"]`. |\n| `preferences` | string array | Play style or unit type preferences, e.g. `[\"guard mains\", \"low-rarity friendly\", \"waifu > meta\"]`. |\n\n---\n\n### `operators` *(object)*\n\nKeyed by operator name (use official English or CN name consistently, one per key).\nEach value:\n\n```json\n{\n  \"owned\": true,\n  \"elite\": 2,\n  \"level\": 80,\n  \"potential\": 5,\n  \"skill_level\": 7,\n  \"masteries\": { \"1\": 3, \"2\": 0, \"3\": 1 },\n  \"modules\": { \"m1\": 3, \"m2\": 1 },\n  \"notes\": [\"top priority defender\"],\n  \"updated_at\": \"2026-04-24T10:30:00Z\"\n}\n```\n\n| Field | Type | Valid values | Description |\n|---|---|---|---|\n| `owned` | boolean | `true` / `false` / `null` | Whether the Doctor owns this operator. |\n| `elite` | integer or null | `0`, `1`, `2`, `null` | Elite phase. |\n| `level` | integer or null | `≥ 1`, `null` | Current level within the current elite phase. |\n| `potential` | integer or null | `1–6`, `null` | Potential level. |\n| `skill_level` | integer or null | `1–7`, `null` | Skill rank. |\n| `masteries` | object | `{ \"skill_id\": 0–3 }` | Per-skill mastery level. `skill_id` is `\"1\"`, `\"2\"`, or `\"3\"`. |\n| `modules` | object | `{ \"module_id\": 0–3 }` | Per-module upgrade stage. `module_id` is a string identifier. |\n| `notes` | string array | — | Short freeform notes. Each entry ≤ 240 chars. |\n| `updated_at` | ISO 8601 UTC string | — | Last modified timestamp. Managed by `memory.py`. |\n\n#### Merge behavior\n\n- **Monotonic only**: `elite`, `level`, `masteries`, `potential`, `skill_level` only accept **increasing** values.\n  Downgrades are rejected and written to `pending_confirmations` for manual review.\n- **Boolean**: `owned` can transition `null → false → true`, but `true → false` triggers a confirmation.\n- **Free text**: `notes` is deduplicated; duplicates are silently ignored.\n\n---\n\n### `pending_confirmations` *(array)*\n\nStores downgrade or conflicting-fact entries that need user confirmation before being applied.\n\nEach item:\n\n```json\n{\n  \"field\": \"SilverAsh.elite\",\n  \"current\": 2,\n  \"incoming\": 1,\n  \"reason\": \"incoming elite is lower\",\n  \"observed_at\": \"2026-04-24T12:00:00Z\"\n}\n```\n\n| Field | Type | Description |\n|---|---|---|\n| `field` | string | Dotted path to the conflicting field. |\n| `current` | any | Currently stored value. |\n| `incoming` | any | Incoming value that was rejected. |\n| `reason` | string | Why the write was rejected. |\n| `observed_at` | ISO 8601 UTC string | When the conflict was detected. |\n\nUse `memory.py confirm --field <field> --apply` to accept, or `memory.py dismiss --field <field>` to discard.\n\n---\n\n## CLI Commands Reference\n\n| Command | Description |\n|---|---|\n| `path` | Print the profile file path. |\n| `read` | Load or initialize the profile; print JSON to stdout, pending confirmations to stderr. |\n| `update --patch-json '<json>' [--dry-run]` | Merge structured facts. With `--dry-run`, preview without saving. |\n| `confirm --field <field> --apply` | Apply a pending downgrade/conflict. |\n| `dismiss --field <field>` | Discard a pending entry. |\n| `list [--owned] [--has-pending]` | List recorded operators. Filter by ownership or pending status. |\n| `search <keyword>` | Search operators by name or notes (case-insensitive). |\n| `delete-operator <name>` | Delete a recorded operator. |\n| `gc [--days N] [--dry-run]` | Remove pending confirmations older than N days (default: 30). |\n\n---\n\n## Write Rules (What `memory.py update --patch-json` Accepts)\n\nOnly **explicitly provided facts** from the current conversation turn should be written:\n\n| ✅ Allowed | ❌ Not written |\n|---|---|\n| Doctor name, server, level, UID | Full conversations |\n| Account progress milestones | Raw screenshot OCR |\n| Resource amounts | Long narrative logs |\n| Operator owned / elite / level | Inferences not confirmed by the user |\n| Mastery and module status | Guide advice |\n| Short freeform notes | Strength evaluations |\n\nSee `SKILL.md` → **Core Rules §0** for the full update workflow.\n\n---\n\n## Example\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": {\n    \"created_at\": \"2026-04-24T08:00:00Z\",\n    \"updated_at\": \"2026-05-19T14:30:00Z\"\n  },\n  \"doctor\": {\n    \"name\": \"Moran\",\n    \"server\": \"CN\",\n    \"level\": 120,\n    \"uid\": null\n  },\n  \"account\": {\n    \"progress\": { \"main_story\": \"chapter_11\" },\n    \"resources\": { \"lmd\": 200000, \"skill_book_3\": 50 },\n    \"goals\": [\"elite2 Exusiai\"],\n    \"preferences\": [\"low-rarity friendly\", \"early game\"]\n  },\n  \"operators\": {\n    \"Exusiai\": {\n      \"owned\": true,\n      \"elite\": 1,\n      \"level\": 70,\n      \"potential\": 3,\n      \"skill_level\": 7,\n      \"masteries\": { \"1\": 3, \"2\": 1, \"3\": 0 },\n      \"modules\": {},\n      \"notes\": [\"top priority sniper\"],\n      \"updated_at\": \"2026-05-19T14:30:00Z\"\n    }\n  },\n  \"pending_confirmations\": []\n}\n```\n\n---\n\n## Edge Cases\n\n- **Multiple operators with same name on different accounts**: Not supported in the current schema. The profile is single-account.\n- **CN operator name vs EN operator name**: Use whichever name the user provides, but stay consistent. If the user switches languages, a new entry is created for the localized name.\n- **Kitchen-sink updates**: Sending `update --patch-json` with all operators at once is fine. Each is merged independently.\n- **Race conditions**: The profile file is small (typically <50KB) and written atomically via temporary file + atomic rename, so concurrent reads see a consistent state.\n\nFile v1.5.1:references/examples.md\n\n# Style Examples\n\nThese examples are for answer rhythm only. Do not copy the specific conclusions blindly.\n\n## Example 1: Whether An Operator Is Worth Building\n\n```text\nConclusion:\nWorth building. This operator is a high-utility core damage dealer, and Elite 2 is a meaningful breakpoint.\n\nRole:\nGround physical DPS with burst potential. Their main value comes from wide-area cleanup during skill uptime.\n\nStrengths:\n- Strong burst against grouped medium-pressure enemies\n- Large coverage area and forgiving positioning\n- Reliable performance in main story and event stages\n\nWeaknesses:\n- Depends heavily on skill uptime\n- Needs teammates to cover downtime\n\nInvestment advice:\nPrioritize Elite 2. If resources allow, improve the core skill's mastery first.\n```\n\n## Example 2: Terminology\n\n```text\nDefinition:\nWarm-up means an operator needs time to stack, charge, or enter a stable skill cycle before reaching full strength.\n\nPractical meaning:\nThey may feel weaker early, then become noticeably stronger in the mid or late stage.\n\nExample:\nOperators that need to stack attack, build summons, or wait for a stable cycle.\n\nCommon confusion:\nWarm-up does not mean weak. Many warm-up operators simply reach their power window later.\n```\n\n## Example 3: Stage Strategy\n\n```text\nCore stage pressure:\n- Tight early DP\n- Mid-to-late waves pressure both high-defense lanes and aerial threats\n\nRecommended approach:\nStabilize DP and anti-air first, prepare sustained damage for the center lane, then save one burst skill for the pressure wave.\n\nLower-investment substitute:\nThe real requirement is stable anti-air plus sustained AoE or multi-target damage in the center lane. It does not have to be a specific 6-star operator.\n```\n\n## Example 4: Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill 2.\n\nWhy:\n- Faster startup and better general use\n- Easier to get consistent value in main story and most event stages\n\nWhen the other skill is better:\n- Consider Skill 3 if you care more about burst ceiling or already have a team that can support its timing\n\nMastery advice:\n- Standard accounts should master Skill 2 first\n- Developed accounts chasing high-pressure performance can add Skill 3 later\n```\n\n## Example 5: Lore Introduction\n\n```text\nNo-spoiler introduction:\nThis character's appeal is not just combat role, but the tension between identity, responsibility, and choice.\n\nCore premise:\n- They belong to a key faction\n- They mirror or contrast another important character's values\n\nRelationships and theme:\n- On the surface, the conflict is about duty; underneath, it is closer to a conflict of beliefs\n- The character theme usually revolves around responsibility, cost, and self-definition\n\nIf you want to continue, I can expand into profile material and the full story route, with spoiler level clearly marked.\n```\n\n## Example 6: Operator Comparison\n\n```text\nConclusion:\nBoth are strong ground DPS. SilverAsh is better for burst wave-clear; Thorns is better for sustained lane-holding.\n\nSilverAsh strengths:\n- Huge burst damage during skill uptime\n- Wide attack range when skill is active\n- Excellent for clearing grouped enemies\n\nThorns strengths:\n- Consistent sustained damage without skill dependency\n- Self-sufficient with built-in regeneration\n- Reliable for holding a lane solo\n\nScenario comparison:\n- Main story / events: Thorns is more comfortable for general use\n- High-difficulty content: SilverAsh burst is harder to replace\n- New player accounts: Thorns is more forgiving to deploy\n\nInvestment advice:\nIf you lack burst DPS, raise SilverAsh first. If you need a reliable solo laner, raise Thorns first. Ideally raise both.\n```\n\n## Example 7: Common Mistakes — AVOID These Patterns\n\nThese are examples of what NOT to do:\n\n```text\n❌ Wrong pattern: Absolute evaluation without qualifiers\n\"SilverAsh is the best guard in the game.\"\n→ Instead: \"SilverAsh is a top-tier burst guard. Under current mainstream evaluation, he is one of the strongest general-purpose guards, especially in content that rewards burst damage.\"\n\n❌ Wrong pattern: Copying a squad without substitution logic\n\"Use SilverAsh, Thorns, Saria, Exusiai, Myrtle, Eyjafjalla.\"\n→ Instead: \"Core roles: a burst guard for wave clear (SilverAsh or alternatives), a sustained lane holder (Thorns or a strong Arts guard), a healer-tank (Saria or a healing defender + medic), fast DP generation (Myrtle or any flagbearer), and an AoE caster (Eyjafjalla or a splash caster).\"\n\n❌ Wrong pattern: Old version conclusion without caveat\n\"SilverAsh is still S-tier.\"\n→ Instead: \"SilverAsh was historically S-tier. I don't have live data on current CN meta. His burst role is still useful, but I recommend searching for the latest assessment from [current month/year].\"\n\n❌ Wrong pattern: Profile dump before answering\n\"Your profile says: name=Moran, level=120, server=CN, operators={SilverAsh: {elite: 2, ...}} ...\"\n→ Instead: Use the profile silently for personalization. Only mention relevant facts (\"I see you have an E2 SilverAsh — that's great for this stage.\").\n```\n\nFile v1.5.1:references/quickstart.md\n\n# Quick Start\n\nGet started with arknights-skill in three steps.\n\n## 1. Install\n\nChoose your platform:\n\n**Hermes:**\n```bash\nskills add git+https://github.com/morandot/arknights-skill.git --skill arknights-skill\n```\n\n**Shell (manual):**\n```bash\nbash -c \"$(curl -fsSL https://raw.githubusercontent.com/morandot/arknights-skill/main/install.sh)\"\n```\n\n**Claude Code:**\nTell your agent: \"Install the skill `arknights-skill` from https://github.com/morandot/arknights-skill\"\n\n**Codex / OpenClaw:**\nUse `npx skills add https://github.com/morandot/arknights-skill --skill arknights-skill`\n\n## 2. Set Up Your Profile\n\nTell the agent about your account. It will automatically save your info to a local Doctor profile:\n\n> \"我是 CN 服 120 级博士，有银灰精英 2 专 9 技能 3，棘刺精英 2 专 9 技能 3，塞雷娅精英 2 专 9 技能 1\"\n\n> \"I'm a level 120 Doctor on CN server. I have SilverAsh E2 M9 S3, Thorns E2 M9 S3, Saria E2 M9 S1\"\n\nThe agent will save your operators and account info. You can update it anytime by mentioning new operators or progress changes.\n\n## 3. Ask Questions\n\n- \"银灰值不值得练？\" / \"Is SilverAsh worth building?\"\n- \"银灰和棘刺谁更好？\" / \"SilverAsh vs Thorns?\"\n- \"OF-F4 怎么打？\" / \"How to clear OF-F4?\"\n- \"新手该先练谁？\" / \"Who should I raise first?\"\n\nThe agent will use your profile to give personalized advice.\n\n## Managing Your Profile\n\nThe agent manages the profile automatically. If you need manual control:\n\n```bash\n# View profile location\npython3 arknights-skill/scripts/memory.py path\n\n# Read current profile\npython3 arknights-skill/scripts/memory.py read\n\n# List recorded operators\npython3 arknights-skill/scripts/memory.py list --owned\n\n# Search operators\npython3 arknights-skill/scripts/memory.py search silver\n\n# Clean up stale pending confirmations\npython3 arknights-skill/scripts/memory.py gc\n\n# Delete an operator\npython3 arknights-skill/scripts/memory.py delete-operator SilverAsh\n```\n\nYour profile is stored at `~/.config/arknights-skill/doctor-profile.json`. It never leaves your machine.\n\nFile v1.5.1:skill-card.md\n\n## Description: <br>\nAnswers Arknights operator, investment, lore, terminology, and stage-strategy questions while maintaining a local Doctor profile for account-aware guidance. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[morandot](https://clawhub.ai/user/morandot) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal Arknights players use this skill to get operator build priorities, skill mastery advice, stage plans, lore summaries, terminology explanations, and resource-planning guidance tailored to their local Doctor profile. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill automatically reads and updates a local Doctor profile during Arknights conversations. <br>\nMitigation: Install only when local game-profile memory is acceptable, review the stored profile periodically, and avoid adding sensitive real-world information. <br>\nRisk: Manual curl-to-bash installation can increase installation-chain risk. <br>\nMitigation: Prefer the OpenClaw/Codex package install path identified in the security guidance. <br>\nRisk: Version-sensitive Arknights guidance can become stale, especially for current events, banners, and meta evaluations. <br>\nMitigation: Use live lookup for freshness-critical questions when available and clearly caveat answers when current data cannot be checked. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/morandot/skills/arknights-skill) <br>\n- [Project homepage](https://github.com/morandot/arknights-skill) <br>\n- [Quick start guide](references/quickstart.md) <br>\n- [Doctor profile schema](references/doctor-profile-schema.md) <br>\n- [Answer templates](references/answer-templates.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and structured recommendations] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May read and update a local Doctor profile for personalization; version-sensitive Arknights questions require live lookup when available.] <br>\n\n## Skill Version(s): <br>\n1.5.1 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.5.1:agents/openai.yaml\n\ninterface:\n  display_name: \"Arknights Guide\"\n  short_description: \"Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile.\"\n  default_prompt: |\n    Use $arknights-skill to answer Arknights questions. Workflow:\n    1. Read the local Doctor profile via memory.py read (mandatory, see SKILL.md Rule 0 HARD-GATE).\n    2. Greet the user briefly, showing their profile summary (Doctor name, level, operator count, pending confirmations).\n    3. If the profile is empty, offer to help set it up by collecting their server, level, and key operators.\n    4. Answer their question following the skill rules: lead with the decision, separate facts from evaluation, control spoilers, check version freshness.\n    5. After answering, update the profile with any explicitly provided facts (post-answer gate, see SKILL.md Rule 0).\n  instructions: |\n    Arknights Guide provides structured advice for the game Arknights:\n    - Operator evaluation: worth building, skill priority, mastery order, module value\n    - Investment planning: who to raise first, resource allocation, raise-or-skip decisions\n    - Stage strategy: executable guides with DP timing, deployment order, substitutes\n    - Lore and story: spoiler-controlled character and faction summaries\n    - Terminology: clear definitions with practical context\n    - Comparison: side-by-side operator analysis for build decisions\n\n    Key behaviors:\n    - Always lead with the decision before explanation\n    - Separate factual mechanics from subjective strength evaluations\n    - Treat version-sensitive questions as freshness-critical; search or caveat\n    - Default to Level 0-1 spoiler control unless the user asks for more\n    - Include lower-rarity substitutes when the user does not have a high-end roster\n    - Use the local Doctor profile to personalize advice\n    - After answering, always update the profile with newly provided facts\n    - Never invent stats, event dates, or official text\n\n  suggested_prompts:\n    - \"银灰值不值得练？\"\n    - \"银灰专精哪个技能？\"\n    - \"新手该先练谁？\"\n    - \"OF-F4 怎么打？\"\n    - \"银灰和棘刺谁更好？\"\n    - \"Is SilverAsh worth building?\"\n    - \"Who should a new player raise first?\"\n    - \"SilverAsh vs Thorns?\"\n\npolicy:\n  allow_implicit_invocation: true\n\nArchive v1.4.2: 9 files, 23935 bytes\n\nFiles: agents/openai.yaml (2340b), references/answer-templates.md (2112b), references/doctor-profile-schema.md (7455b), references/examples.md (5053b), references/quickstart.md (2072b), scripts/memory.py (31457b), skill-card.md (2687b), SKILL.md (13485b), _meta.json (134b)\n\nFile v1.4.2:SKILL.md\n\n---\nname: arknights-skill\nslug: arknights-skill\ndisplayName: Arknights Guide\ndescription: >\n  Use when the user asks about Arknights operators, skills, masteries, modules,\n  stages, lore, terms, or resource planning. Do NOT use for other games,\n  non-Arknights gacha advice, or real-time event schedules (requires live\n  lookup).\nsummary: Arknights operator evaluation, skill priority, stage strategy, lore, and local Doctor profile.\nlicense: MIT\ncompatibility: >\n  Compatible with Agent Skills clients (Codex, Claude Code, Hermes). Requires\n  shell access for the bundled Python script (`scripts/memory.py`). No external\n  credentials needed. Version-sensitive questions require live web lookup; when\n  offline, state conclusions are not current.\nallowed-tools: shell\nversion: \"1.5.0\"\nmetadata:\n  homepage: https://github.com/morandot/arknights-skill\n  openclaw:\n    homepage: https://github.com/morandot/arknights-skill\n  author: moran\n---\n\n# Arknights Guide\n\nA dedicated skill for Arknights questions. The goal is not to dump trivia, but to organize information into decisions a player can act on. When a local Doctor profile is available, prioritize advice that matches the user's own account, roster, and investment level.\n\n<HARD-GATE>\nDo NOT answer any Arknights question without first attempting to read the local Doctor profile. See Rule 0 below.\n</HARD-GATE>\n\n## When To Use\n\nUse this skill when the user asks about:\n\n- **Operator evaluation**: roles, branches, worth building, availability\n  - _\"银灰值不值得练？\"_ / _\"Is SilverAsh worth building?\"_\n- **Skills & investment**: skills, talents, modules, potential, masteries, elite promotion\n  - _\"银灰专精哪个技能？\"_ / _\"Which SilverAsh skill to mastery?\"_\n- **Resource planning**: who to raise first, allocation, raise-or-skip\n  - _\"新手该先练谁？\"_ / _\"Who should a new player raise first?\"_\n- **Stage strategy**: main story, event, high-difficulty stages\n  - _\"OF-F4 怎么打？\"_ / _\"How to clear OF-F4?\"_\n- **Comparison**: side-by-side operator analysis\n  - _\"银灰和棘刺谁更好？\"_ / _\"SilverAsh vs Thorns?\"_\n- **Lore & story**: worldbuilding, factions, character relationships, story summaries\n  - _\"整合运动的背景是什么？\"_ / _\"What is Reunion's backstory?\"_\n- **Terminology**: game terms and mechanics explanation\n  - _\"暖机是什么意思？\"_ / _\"What does warm-up mean?\"_\n- **Version environment**: current strength assessments, event summaries\n  - _\"当前版本谁最强？\"_ / _\"Who is strongest in the current version?\"_\n\n### When NOT To Use\n\n- Other games or gacha games — this skill only covers Arknights\n- Pull rate calculations, banner probability — live data needed, not a calculator tool\n- Real-time event schedules or server status — always require live lookup\n- Account binding, login issues, payment problems — these are customer service topics\n\n## Core Rules\n\n### 0. Use The Local Doctor Profile (Mandatory)\n\n**HARD-GATE: You MUST attempt to read the profile before answering.**\n\nIf the current client allows local file access, read the structured profile next to the installed skill first. Do not assume the current working directory is the skill directory. Resolve the script path with this fallback:\n\n```bash\nSKILL_DIR=\"${CLAUDE_SKILL_DIR:-${SKILL_DIR:-$(dirname \"$(find ~/.hermes ~/.config -name memory.py -print -quit 2>/dev/null)\")}}\"\npython3 \"$SKILL_DIR/scripts/memory.py\" read\n```\n\nThe default profile path is:\n\n```text\n~/.config/arknights-skill/doctor-profile.json\n```\n\nThe user can also set `ARKNIGHTS_MEMORY_DIR` to use a different local directory. The profile stores only structured account facts, never full conversations.\n\nIf neither `$CLAUDE_SKILL_DIR` nor `$SKILL_DIR` is set, search `~/.hermes/skills` or `~/.config/arknights-skill` for the directory containing `memory.py`.\n\n**When answering:**\n\n- Prefer known Doctor level, server, resource state, goals, preferences, owned operators, and operator investment from the profile.\n- If the profile is empty or unreadable, answer normally and do not pretend to know the user's account.\n- If stored facts conflict with explicit information in the current turn, treat the new information as a confirmation candidate rather than overwriting the old profile directly.\n- Reply in the user's language unless they ask for another language.\n\n**Post-answer gate: You MUST update the profile after answering.**\n\nAfter answering, extract only explicitly provided facts from the user's current turn and update the profile:\n\n```bash\npython3 \"$CLAUDE_SKILL_DIR/scripts/memory.py\" update --patch-json '{\"operators\":{\"SilverAsh\":{\"owned\":true,\"elite\":2,\"level\":60,\"masteries\":{\"3\":3}}}}'\n```\n\nOnly write these facts:\n\n- Doctor information: name, server, level, UID\n- Account state: main story or event progress, resources, goals, preferences\n- Operator information: owned status, elite phase, level, potential, skill level, masteries, modules, concise notes\n\nDo not write:\n\n- Full conversations, raw screenshot OCR, or long logs\n- Inferences the user did not confirm\n- Guide advice, strength evaluations, version environment judgments\n- Story content, official text, or event schedules\n\nWhen a downgrade or conflicting fact appears, the script writes to `pending_confirmations`. Do not manually overwrite those fields. If useful, ask the user briefly at the end to confirm.\n\n**Resolving pending confirmations:**\n\n```bash\n# Apply a pending downgrade / conflict\npython3 \"$SKILL_DIR/scripts/memory.py\" confirm --field \"SilverAsh.elite\" --apply\n\n# Dismiss (discard) a pending entry\npython3 \"$SKILL_DIR/scripts/memory.py\" dismiss --field \"SilverAsh.elite\"\n```\n\nAdditional profile management commands:\n\n```bash\n# List recorded operators (filter with --owned or --has-pending)\npython3 \"$SKILL_DIR/scripts/memory.py\" list --owned\n\n# Search operators by name or notes\npython3 \"$SKILL_DIR/scripts/memory.py\" search silver\n\n# Delete a recorded operator\npython3 \"$SKILL_DIR/scripts/memory.py\" delete-operator SilverAsh\n\n# Remove stale pending confirmations (older than 30 days)\npython3 \"$SKILL_DIR/scripts/memory.py\" gc --days 30\n\n# Preview merged result without saving\npython3 \"$SKILL_DIR/scripts/memory.py\" update --patch-json '...' --dry-run\n```\n\n### 1. Lead With The Decision\n\nWhen the user asks whether to build an operator, which skill to prioritize, or how to clear a stage, lead with the answer before the explanation.\n\nPreferred order:\n\n1. Direct conclusion\n2. Why\n3. Applicable scenarios or limitations\n4. Investment or execution advice\n\n### 2. Separate Facts From Evaluation\n\nThe following can be stated as facts:\n\n- Skill and mechanic explanations\n- Class branch roles\n- Basic worldbuilding premises\n- Confirmed profile facts\n- User-provided screenshot or stage information\n\nThe following require qualifiers:\n\n- Whether an operator is strong\n- Whether an operator is future-proof\n- Current version standing\n- Whether an operator is required for high difficulty\n- Whether a banner is worth pulling\n\nPhrase these as \"under current mainstream evaluation\", \"from an early-game utility perspective\", or \"in high-pressure content, this is usually considered\".\n\n### 3. Treat Version-Sensitive Questions As Freshness-Critical\n\nTreat these questions as freshness-critical by default:\n\n- \"Is this operator still strong now?\"\n- \"Is this banner worth pulling in the current version?\"\n- \"How do I clear the latest event?\"\n- \"What is new on CN / JP / Global?\"\n- \"Which skill should I mastery in the current environment?\"\n\nChecklist for version-sensitive questions:\n\n1. Check if live web access is available\n2. ❌ No access → explicitly state \"this conclusion is NOT based on current version data\" and answer from general knowledge\n3. ✅ Access → search before answering\n   - Preferred search keywords (adapt to user language):\n     - Chinese: `明日方舟 {operator_name} 强度 {current_version}`, NGA 明日方舟版, PRTS Wiki\n     - English: `Arknights {operator_name} guide {current_version}`, Gamepress, Arknights Wiki\n4. Do not invent event dates, banner schedules, version order, or official text\n\n### 4. Control Spoilers\n\nWhen the user did not ask for spoilers, default to Level 0-1:\n\n- Level 0: no-spoiler background outline\n- Level 1: light spoilers, enough to mention relationships and premises\n- Level 2: moderate spoilers, enough to summarize key conflicts\n- Level 3: full spoilers, including endings and core reveals\n\nWhen the user explicitly asks for the full story, start with a spoiler warning:\n\n> **Full spoilers below.**\n\n### 5. Make Guides Executable\n\nStage strategy answers should cover as many of these as useful:\n\n- Core stage pressure\n- Enemy threat types\n- Map and positioning priorities\n- DP timing\n- Deployment order or skill timing\n- Common failure points\n- Substitute operator roles or class types\n\nIf the user did not say they have a high-end roster, include a lower-rarity or lower-investment approach.\n\n### 6. Keep Names And Terms Consistent\n\nUse official or widely accepted names. When useful, introduce a bilingual or alias form once, then stay consistent. Do not rotate between multiple nicknames for the same concept.\n\n## Default Answer Shapes\n\n### Operator Review\n\nDefault structure:\n\n1. One-sentence conclusion\n2. Role\n3. Core strengths\n4. Main weaknesses\n5. Best use cases\n6. Investment and mastery advice\n\n### Skill Priority\n\nDefault structure:\n\n1. Recommended skill\n2. Why\n3. When the other skill is better\n4. Mastery order\n5. Difference between new and developed accounts\n\n### Raise Or Skip\n\nDefault structure:\n\n1. Conclusion: build / depends on roster / skip\n2. Why\n3. Who benefits most\n4. Most efficient stopping point\n5. Same-role substitutes\n\n### Lore / Story\n\nDefault structure:\n\n1. No-spoiler introduction\n2. Core conflict around the character or faction\n3. Relationships with other characters\n4. Expand into detailed story only after the user asks\n\n### Stage Help\n\nDefault structure:\n\n1. Core stage pressure\n2. Recommended approach\n3. Recommended role composition\n4. Deployment and skill timing\n5. Failure points\n6. Lower-investment substitutes\n\n### Terminology\n\nDefault structure:\n\n1. Definition\n2. Practical meaning\n3. Example\n4. Common confusion\n\n### Comparison\n\nDefault structure:\n\n1. Conclusion: choose A / choose B / depends on scenario\n2. Each operator's strengths\n3. Each operator's weaknesses\n4. Scenario-by-scenario comparison\n5. Investment advice\n\n## Common Pitfalls\n\nAvoid these when answering:\n\n- **Inventing stats**: Never invent module multipliers, skill percentages, or talent values. State \"I don't have the exact multiplier\" if unsure.\n- **Presenting old versions as current**: A 6-month-old meta assessment is outdated. Always caveat stale knowledge.\n- **Copying squads without substitution**: If recommending a squad, always explain which roles are essential and what substitutes work.\n- **Equating rarity with power**: A 5-star can outperform a 6-star in specific niches. Evaluate by role fit, not star count.\n- **Assuming universal access**: Not everyone has every 6-star. Check profile; if unavailable, default to F2P-friendly advice.\n- **Over-promising banner value**: Banner evaluation depends on account roster and goals. Never say \"must-pull\" universally.\n\n## Agent Configuration (optional)\n\n`agents/openai.yaml` defines the Agent prompt configuration specific to this skill:\n\n- **`display_name` / `short_description`** — Display name and summary shown in the Agent skill list.\n- **`default_prompt`** — The default invocation prompt, which emphasizes fact–evaluation separation, leading with conclusions, and freshness caveats for version-sensitive topics.\n- **`policy.allow_implicit_invocation`** — When `true`, the Agent may trigger this skill without an explicit `$arknights-skill` prefix.\n\nThis file is automatically loaded by the nanobot runtime; manual edits are rarely needed.\n\n## References\n\nRead these only when needed; do not load all of them by default:\n\n- Quick start guide: [references/quickstart.md](references/quickstart.md)\n- Structured templates: [references/answer-templates.md](references/answer-templates.md)\n- Style examples: [references/examples.md](references/examples.md)\n- Doctor profile schema: [references/doctor-profile-schema.md](references/doctor-profile-schema.md)\n- Local Doctor profile script: [scripts/memory.py](scripts/memory.py)\n\nRead these files only when you need a fuller template, want to align with the example rhythm, need the profile schema reference, or need to confirm the local memory script interface.\n\n## Do Not Do These\n\nDo not:\n\n- Invent stats, module multipliers, event dates, banner schedules, or official text\n- Present subjective strength evaluation as absolute fact\n- Reveal major story spoilers unless the user asked for them\n- Give only a copied squad without explaining substitution logic\n- Present old-version conclusions as current-version facts\n- Store personal account memory anywhere except the local profile, and never in the public repository or release package\n- Recommend pulling based solely on strength without considering the user's roster gaps\n- Repeat the entire profile before answering — use it silently for personalization\n\n## Final Goal\n\nEvery answer should help the user do at least one of these:\n\n- Decide whether to build an operator\n- Decide which skill to prioritize\n- Understand a mechanic or term\n- Get an executable stage plan\n- Understand the key point of a story or setting\n- Know whether a version-sensitive conclusion is current\n\nFile v1.4.2:_meta.json\n\n{\n  \"ownerId\": \"kn7bzyad0y0t00e7622qh62rwd85b19e\",\n  \"slug\": \"arknights-skill\",\n  \"version\": \"1.4.2\",\n  \"publishedAt\": 1785227674505\n}\n\nFile v1.4.2:references/answer-templates.md\n\n# Answer Templates\n\nChoose the template closest to the user's question when useful. Do not copy it mechanically. Adapt each template to the specific operator, stage, or term — never output a fill-in-the-blank skeleton verbatim.\n\n## 1. Operator Review\n\n```text\nConclusion:\n[Worth building / depends on roster / skippable]. If your account lacks [role], this operator's priority is higher.\n\nRole:\n- Class / branch:\n- Core job:\n- Common usage:\n\nStrengths:\n-\n-\n\nWeaknesses:\n-\n-\n\nBest use cases:\n-\n-\n\nInvestment advice:\n- Recommended level:\n- Elite 2 priority:\n- Mastery priority (M1 → M3 value):\n\nOne-line advice:\n[]\n```\n\n## 2. Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill [X].\n\nWhy:\n-\n-\n\nWhen Skill [Y] is better:\n-\n-\n\nMastery advice:\n- M1 value:\n- M2 value:\n- M3 value:\n- Recommended stopping point:\n\nConclusion:\n[]\n```\n\n## 3. Raise Or Skip\n\n```text\nConclusion:\n[Build / depends on roster / skip]\n\nWhy:\n-\n-\n\nWho benefits most:\n- New players / veteran accounts / high-difficulty accounts / accounts missing a specific role\n\nMost efficient stopping point:\n- [E1 Lv.50 S7] / [E2 Lv.40 S7 M1] / etc.\n\nSame-role substitutes:\n-\n```\n\n## 4. Lore / Story\n\n```text\nNo-spoiler introduction:\n[]\n\nCore premise:\n-\n-\n\nRelationship with other characters / factions:\n-\n-\n\nCharacter theme:\n[]\n\nIf you want to go deeper, I can expand into files, event story, and full-spoiler plotlines.\n```\n\n## 5. Stage Strategy\n\n```text\nCore stage pressure:\n-\n-\n\nRecommended approach:\n-\n-\n\nRecommended role composition:\n- DP generation:\n- Main DPS:\n- Secondary DPS:\n- Healing:\n- Blocking / tanking:\n- Utility:\n\nExecution notes:\n1.\n2.\n3.\n\nCommon failure points:\n-\n-\n\nLower-investment substitute plan:\n-\n```\n\n## 6. Terminology\n\n```text\nDefinition:\n[]\n\nPractical meaning:\n[]\n\nExample:\n[]\n\nCommon confusion:\n[]\n```\n\n## 7. Comparison\n\n```text\nConclusion:\n[Choose A / choose B / depends on scenario]\n\n[Operator A] strengths:\n-\n-\n\n[Operator A] weaknesses:\n-\n-\n\n[Operator B] strengths:\n-\n-\n\n[Operator B] weaknesses:\n-\n-\n\nScenario comparison:\n- Main story / events:\n- High-difficulty content:\n- New player accounts:\n\nInvestment advice:\n-\n```\n\nFile v1.4.2:references/doctor-profile-schema.md\n\n# Doctor Profile Schema\n\n`doctor-profile.json` is the local structured profile maintained by `scripts/memory.py`.\nIt stores only explicitly confirmed facts — never full conversations, screenshot OCR, or inferences.\n\nSchema version: **1**\n\n---\n\n## File Location\n\nDefault path:\n\n```\n~/.config/arknights-skill/doctor-profile.json\n```\n\nOverride with environment variable `ARKNIGHTS_MEMORY_DIR`.\nMigration from the legacy `.arknights-memory/` path happens automatically on first run.\n\n---\n\n## Top-Level Structure\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": { ... },\n  \"doctor\": { ... },\n  \"account\": { ... },\n  \"operators\": { ... },\n  \"pending_confirmations\": [ ... ]\n}\n```\n\n---\n\n## Field Reference\n\n### `schema_version` *(integer)*\n\nCurrent: `1`.\n`memory.py` will reject profiles with an unsupported version.\n\n---\n\n### `game` *(string)*\n\nAlways `\"Arknights\"`. Reserved for future multi-game support.\n\n---\n\n### `metadata` *(object)*\n\n| Field | Type | Description |\n|---|---|---|\n| `created_at` | ISO 8601 UTC string | Profile creation timestamp. Set automatically. |\n| `updated_at` | ISO 8601 UTC string | Last write timestamp. Updated on every `save`. |\n\nBoth are managed by `memory.py`; do not write manually.\n\n---\n\n### `doctor` *(object)*\n\nPersonal information about the Doctor.\n\n| Field | Type | Description |\n|---|---|---|\n| `name` | string or null | In-game nickname / display name. |\n| `server` | string or null | Server region, e.g. `\"CN\"`, `\"US\"`, `\"JP\"`, `\"KR\"`, `\"EN\"`. |\n| `level` | integer or null | Doctor account level. |\n| `uid` | string or null | Player UID. Format varies by server. |\n\n---\n\n### `account` *(object)*\n\nAccount state and preferences.\n\n| Field | Type | Description |\n|---|---|---|\n| `progress` | object | Freeform progress map, e.g. `{\"main_story\": \"chapter_09\", \"current_event\": \"near_light\"}`. |\n| `resources` | object | Resource stockpile, e.g. `{\"lmd\": 50000, \"skill_book_3\": 30, \"orundum\": 5400}`. |\n| `goals` | string array | Short-term or mid-term goals, e.g. `[\"elite2 SilverAsh\", \"clear OF-F4\"]`. |\n| `preferences` | string array | Play style or unit type preferences, e.g. `[\"guard mains\", \"low-rarity friendly\", \"waifu > meta\"]`. |\n\n---\n\n### `operators` *(object)*\n\nKeyed by operator name (use official English or CN name consistently, one per key).\nEach value:\n\n```json\n{\n  \"owned\": true,\n  \"elite\": 2,\n  \"level\": 80,\n  \"potential\": 5,\n  \"skill_level\": 7,\n  \"masteries\": { \"1\": 3, \"2\": 0, \"3\": 1 },\n  \"modules\": { \"m1\": 3, \"m2\": 1 },\n  \"notes\": [\"top priority defender\"],\n  \"updated_at\": \"2026-04-24T10:30:00Z\"\n}\n```\n\n| Field | Type | Valid values | Description |\n|---|---|---|---|\n| `owned` | boolean | `true` / `false` / `null` | Whether the Doctor owns this operator. |\n| `elite` | integer or null | `0`, `1`, `2`, `null` | Elite phase. |\n| `level` | integer or null | `≥ 1`, `null` | Current level within the current elite phase. |\n| `potential` | integer or null | `1–6`, `null` | Potential level. |\n| `skill_level` | integer or null | `1–7`, `null` | Skill rank. |\n| `masteries` | object | `{ \"skill_id\": 0–3 }` | Per-skill mastery level. `skill_id` is `\"1\"`, `\"2\"`, or `\"3\"`. |\n| `modules` | object | `{ \"module_id\": 0–3 }` | Per-module upgrade stage. `module_id` is a string identifier. |\n| `notes` | string array | — | Short freeform notes. Each entry ≤ 240 chars. |\n| `updated_at` | ISO 8601 UTC string | — | Last modified timestamp. Managed by `memory.py`. |\n\n#### Merge behavior\n\n- **Monotonic only**: `elite`, `level`, `masteries`, `potential`, `skill_level` only accept **increasing** values.\n  Downgrades are rejected and written to `pending_confirmations` for manual review.\n- **Boolean**: `owned` can transition `null → false → true`, but `true → false` triggers a confirmation.\n- **Free text**: `notes` is deduplicated; duplicates are silently ignored.\n\n---\n\n### `pending_confirmations` *(array)*\n\nStores downgrade or conflicting-fact entries that need user confirmation before being applied.\n\nEach item:\n\n```json\n{\n  \"field\": \"SilverAsh.elite\",\n  \"current\": 2,\n  \"incoming\": 1,\n  \"reason\": \"incoming elite is lower\",\n  \"observed_at\": \"2026-04-24T12:00:00Z\"\n}\n```\n\n| Field | Type | Description |\n|---|---|---|\n| `field` | string | Dotted path to the conflicting field. |\n| `current` | any | Currently stored value. |\n| `incoming` | any | Incoming value that was rejected. |\n| `reason` | string | Why the write was rejected. |\n| `observed_at` | ISO 8601 UTC string | When the conflict was detected. |\n\nUse `memory.py confirm --field <field> --apply` to accept, or `memory.py dismiss --field <field>` to discard.\n\n---\n\n## CLI Commands Reference\n\n| Command | Description |\n|---|---|\n| `path` | Print the profile file path. |\n| `read` | Load or initialize the profile; print JSON to stdout, pending confirmations to stderr. |\n| `update --patch-json '<json>' [--dry-run]` | Merge structured facts. With `--dry-run`, preview without saving. |\n| `confirm --field <field> --apply` | Apply a pending downgrade/conflict. |\n| `dismiss --field <field>` | Discard a pending entry. |\n| `list [--owned] [--has-pending]` | List recorded operators. Filter by ownership or pending status. |\n| `search <keyword>` | Search operators by name or notes (case-insensitive). |\n| `delete-operator <name>` | Delete a recorded operator. |\n| `gc [--days N] [--dry-run]` | Remove pending confirmations older than N days (default: 30). |\n\n---\n\n## Write Rules (What `memory.py update --patch-json` Accepts)\n\nOnly **explicitly provided facts** from the current conversation turn should be written:\n\n| ✅ Allowed | ❌ Not written |\n|---|---|\n| Doctor name, server, level, UID | Full conversations |\n| Account progress milestones | Raw screenshot OCR |\n| Resource amounts | Long narrative logs |\n| Operator owned / elite / level | Inferences not confirmed by the user |\n| Mastery and module status | Guide advice |\n| Short freeform notes | Strength evaluations |\n\nSee `SKILL.md` → **Core Rules §0** for the full update workflow.\n\n---\n\n## Example\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": {\n    \"created_at\": \"2026-04-24T08:00:00Z\",\n    \"updated_at\": \"2026-05-19T14:30:00Z\"\n  },\n  \"doctor\": {\n    \"name\": \"Moran\",\n    \"server\": \"CN\",\n    \"level\": 120,\n    \"uid\": null\n  },\n  \"account\": {\n    \"progress\": { \"main_story\": \"chapter_11\" },\n    \"resources\": { \"lmd\": 200000, \"skill_book_3\": 50 },\n    \"goals\": [\"elite2 Exusiai\"],\n    \"preferences\": [\"low-rarity friendly\", \"early game\"]\n  },\n  \"operators\": {\n    \"Exusiai\": {\n      \"owned\": true,\n      \"elite\": 1,\n      \"level\": 70,\n      \"potential\": 3,\n      \"skill_level\": 7,\n      \"masteries\": { \"1\": 3, \"2\": 1, \"3\": 0 },\n      \"modules\": {},\n      \"notes\": [\"top priority sniper\"],\n      \"updated_at\": \"2026-05-19T14:30:00Z\"\n    }\n  },\n  \"pending_confirmations\": []\n}\n```\n\n---\n\n## Edge Cases\n\n- **Multiple operators with same name on different accounts**: Not supported in the current schema. The profile is single-account.\n- **CN operator name vs EN operator name**: Use whichever name the user provides, but stay consistent. If the user switches languages, a new entry is created for the localized name.\n- **Kitchen-sink updates**: Sending `update --patch-json` with all operators at once is fine. Each is merged independently.\n- **Race conditions**: The profile file is small (typically <50KB) and written atomically via temporary file + atomic rename, so concurrent reads see a consistent state.\n\nFile v1.4.2:references/examples.md\n\n# Style Examples\n\nThese examples are for answer rhythm only. Do not copy the specific conclusions blindly.\n\n## Example 1: Whether An Operator Is Worth Building\n\n```text\nConclusion:\nWorth building. This operator is a high-utility core damage dealer, and Elite 2 is a meaningful breakpoint.\n\nRole:\nGround physical DPS with burst potential. Their main value comes from wide-area cleanup during skill uptime.\n\nStrengths:\n- Strong burst against grouped medium-pressure enemies\n- Large coverage area and forgiving positioning\n- Reliable performance in main story and event stages\n\nWeaknesses:\n- Depends heavily on skill uptime\n- Needs teammates to cover downtime\n\nInvestment advice:\nPrioritize Elite 2. If resources allow, improve the core skill's mastery first.\n```\n\n## Example 2: Terminology\n\n```text\nDefinition:\nWarm-up means an operator needs time to stack, charge, or enter a stable skill cycle before reaching full strength.\n\nPractical meaning:\nThey may feel weaker early, then become noticeably stronger in the mid or late stage.\n\nExample:\nOperators that need to stack attack, build summons, or wait for a stable cycle.\n\nCommon confusion:\nWarm-up does not mean weak. Many warm-up operators simply reach their power window later.\n```\n\n## Example 3: Stage Strategy\n\n```text\nCore stage pressure:\n- Tight early DP\n- Mid-to-late waves pressure both high-defense lanes and aerial threats\n\nRecommended approach:\nStabilize DP and anti-air first, prepare sustained damage for the center lane, then save one burst skill for the pressure wave.\n\nLower-investment substitute:\nThe real requirement is stable anti-air plus sustained AoE or multi-target damage in the center lane. It does not have to be a specific 6-star operator.\n```\n\n## Example 4: Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill 2.\n\nWhy:\n- Faster startup and better general use\n- Easier to get consistent value in main story and most event stages\n\nWhen the other skill is better:\n- Consider Skill 3 if you care more about burst ceiling or already have a team that can support its timing\n\nMastery advice:\n- Standard accounts should master Skill 2 first\n- Developed accounts chasing high-pressure performance can add Skill 3 later\n```\n\n## Example 5: Lore Introduction\n\n```text\nNo-spoiler introduction:\nThis character's appeal is not just combat role, but the tension between identity, responsibility, and choice.\n\nCore premise:\n- They belong to a key faction\n- They mirror or contrast another important character's values\n\nRelationships and theme:\n- On the surface, the conflict is about duty; underneath, it is closer to a conflict of beliefs\n- The character theme usually revolves around responsibility, cost, and self-definition\n\nIf you want to continue, I can expand into profile material and the full story route, with spoiler level clearly marked.\n```\n\n## Example 6: Operator Comparison\n\n```text\nConclusion:\nBoth are strong ground DPS. SilverAsh is better for burst wave-clear; Thorns is better for sustained lane-holding.\n\nSilverAsh strengths:\n- Huge burst damage during skill uptime\n- Wide attack range when skill is active\n- Excellent for clearing grouped enemies\n\nThorns strengths:\n- Consistent sustained damage without skill dependency\n- Self-sufficient with built-in regeneration\n- Reliable for holding a lane solo\n\nScenario comparison:\n- Main story / events: Thorns is more comfortable for general use\n- High-difficulty content: SilverAsh burst is harder to replace\n- New player accounts: Thorns is more forgiving to deploy\n\nInvestment advice:\nIf you lack burst DPS, raise SilverAsh first. If you need a reliable solo laner, raise Thorns first. Ideally raise both.\n```\n\n## Example 7: Common Mistakes — AVOID These Patterns\n\nThese are examples of what NOT to do:\n\n```text\n❌ Wrong pattern: Absolute evaluation without qualifiers\n\"SilverAsh is the best guard in the game.\"\n→ Instead: \"SilverAsh is a top-tier burst guard. Under current mainstream evaluation, he is one of the strongest general-purpose guards, especially in content that rewards burst damage.\"\n\n❌ Wrong pattern: Copying a squad without substitution logic\n\"Use SilverAsh, Thorns, Saria, Exusiai, Myrtle, Eyjafjalla.\"\n→ Instead: \"Core roles: a burst guard for wave clear (SilverAsh or alternatives), a sustained lane holder (Thorns or a strong Arts guard), a healer-tank (Saria or a healing defender + medic), fast DP generation (Myrtle or any flagbearer), and an AoE caster (Eyjafjalla or a splash caster).\"\n\n❌ Wrong pattern: Old version conclusion without caveat\n\"SilverAsh is still S-tier.\"\n→ Instead: \"SilverAsh was historically S-tier. I don't have live data on current CN meta. His burst role is still useful, but I recommend searching for the latest assessment from [current month/year].\"\n\n❌ Wrong pattern: Profile dump before answering\n\"Your profile says: name=Moran, level=120, server=CN, operators={SilverAsh: {elite: 2, ...}} ...\"\n→ Instead: Use the profile silently for personalization. Only mention relevant facts (\"I see you have an E2 SilverAsh — that's great for this stage.\").\n```\n\nFile v1.4.2:references/quickstart.md\n\n# Quick Start\n\nGet started with arknights-skill in three steps.\n\n## 1. Install\n\nChoose your platform:\n\n**Hermes:**\n```bash\nskills add git+https://github.com/morandot/arknights-skill.git --skill arknights-skill\n```\n\n**Shell (manual):**\n```bash\nbash -c \"$(curl -fsSL https://raw.githubusercontent.com/morandot/arknights-skill/main/install.sh)\"\n```\n\n**Claude Code:**\nTell your agent: \"Install the skill `arknights-skill` from https://github.com/morandot/arknights-skill\"\n\n**Codex / OpenClaw:**\nUse `npx skills add https://github.com/morandot/arknights-skill --skill arknights-skill`\n\n## 2. Set Up Your Profile\n\nTell the agent about your account. It will automatically save your info to a local Doctor profile:\n\n> \"我是 CN 服 120 级博士，有银灰精英 2 专 9 技能 3，棘刺精英 2 专 9 技能 3，塞雷娅精英 2 专 9 技能 1\"\n\n> \"I'm a level 120 Doctor on CN server. I have SilverAsh E2 M9 S3, Thorns E2 M9 S3, Saria E2 M9 S1\"\n\nThe agent will save your operators and account info. You can update it anytime by mentioning new operators or progress changes.\n\n## 3. Ask Questions\n\n- \"银灰值不值得练？\" / \"Is SilverAsh worth building?\"\n- \"银灰和棘刺谁更好？\" / \"SilverAsh vs Thorns?\"\n- \"OF-F4 怎么打？\" / \"How to clear OF-F4?\"\n- \"新手该先练谁？\" / \"Who should I raise first?\"\n\nThe agent will use your profile to give personalized advice.\n\n## Managing Your Profile\n\nThe agent manages the profile automatically. If you need manual control:\n\n```bash\n# View profile location\npython3 arknights-skill/scripts/memory.py path\n\n# Read current profile\npython3 arknights-skill/scripts/memory.py read\n\n# List recorded operators\npython3 arknights-skill/scripts/memory.py list --owned\n\n# Search operators\npython3 arknights-skill/scripts/memory.py search silver\n\n# Clean up stale pending confirmations\npython3 arknights-skill/scripts/memory.py gc\n\n# Delete an operator\npython3 arknights-skill/scripts/memory.py delete-operator SilverAsh\n```\n\nYour profile is stored at `~/.config/arknights-skill/doctor-profile.json`. It never leaves your machine.\n\nFile v1.4.2:skill-card.md\n\n## Description: <br>\nAnswer Arknights operator, skill, investment, lore, terminology, and stage-strategy questions while using a local Doctor profile for personalization. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[morandot](https://clawhub.ai/user/morandot) <br>\n\n### License/Terms of Use: <br>\nMIT <br>\n\n\n## Use Case: <br>\nExternal Arknights players use this skill to get actionable operator evaluations, investment priorities, stage plans, lore summaries, and terminology explanations. The skill personalizes advice from a local Doctor profile when available and requires live lookup or caveats for version-sensitive topics. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill maintains a local Doctor profile with game account details explicitly provided by the user. <br>\nMitigation: Use only explicitly provided facts, keep the profile local, and review or delete stored profile entries with the bundled memory commands when needed. <br>\nRisk: Installation or profile-management workflows may involve shell commands. <br>\nMitigation: Install with scoped OpenClaw/npx or git-based methods and review commands before execution. <br>\nRisk: Version-sensitive game advice can become stale. <br>\nMitigation: Use live lookup for current banners, events, schedules, and meta-sensitive recommendations, or clearly state when advice is not based on current version data. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/morandot/skills/arknights-skill) <br>\n- [Server-resolved GitHub provenance](https://github.com/morandot/arknights-skill/tree/main/arknights-skill) <br>\n- [Homepage](https://github.com/morandot/arknights-skill) <br>\n- [Quick Start](references/quickstart.md) <br>\n- [Doctor Profile Schema](references/doctor-profile-schema.md) <br>\n- [Answer Templates](references/answer-templates.md) <br>\n- [Examples](references/examples.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown with occasional inline shell commands for local profile management] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May read and update a local Doctor profile containing explicitly provided game account facts.] <br>\n\n## Skill Version(s): <br>\n1.4.2 (source: ClawHub release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.4.2:agents/openai.yaml\n\ninterface:\n  display_name: \"Arknights Guide\"\n  short_description: \"Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile.\"\n  default_prompt: |\n    Use $arknights-skill to answer Arknights questions. Workflow:\n    1. Read the local Doctor profile via memory.py read (mandatory, see SKILL.md Rule 0 HARD-GATE).\n    2. Greet the user briefly, showing their profile summary (Doctor name, level, operator count, pending confirmations).\n    3. If the profile is empty, offer to help set it up by collecting their server, level, and key operators.\n    4. Answer their question following the skill rules: lead with the decision, separate facts from evaluation, control spoilers, check version freshness.\n    5. After answering, update the profile with any explicitly provided facts (post-answer gate, see SKILL.md Rule 0).\n  instructions: |\n    Arknights Guide provides structured advice for the game Arknights:\n    - Operator evaluation: worth building, skill priority, mastery order, module value\n    - Investment planning: who to raise first, resource allocation, raise-or-skip decisions\n    - Stage strategy: executable guides with DP timing, deployment order, substitutes\n    - Lore and story: spoiler-controlled character and faction summaries\n    - Terminology: clear definitions with practical context\n    - Comparison: side-by-side operator analysis for build decisions\n\n    Key behaviors:\n    - Always lead with the decision before explanation\n    - Separate factual mechanics from subjective strength evaluations\n    - Treat version-sensitive questions as freshness-critical; search or caveat\n    - Default to Level 0-1 spoiler control unless the user asks for more\n    - Include lower-rarity substitutes when the user does not have a high-end roster\n    - Use the local Doctor profile to personalize advice\n    - After answering, always update the profile with newly provided facts\n    - Never invent stats, event dates, or official text\n\n  suggested_prompts:\n    - \"银灰值不值得练\n\nArchive v1.5.0: 9 files, 24006 bytes\n\nFiles: agents/openai.yaml (2340b), references/answer-templates.md (2112b), references/doctor-profile-schema.md (7455b), references/examples.md (5053b), references/quickstart.md (2072b), scripts/memory.py (31457b), skill-card.md (2670b), SKILL.md (13485b), _meta.json (134b)\n\nArchive v1.4.1: 9 files, 23971 bytes\n\nFiles: agents/openai.yaml (2340b), references/answer-templates.md (2112b), references/doctor-profile-schema.md (7455b), references/examples.md (5053b), references/quickstart.md (2072b), scripts/memory.py (31457b), skill-card.md (2792b), SKILL.md (13332b), _meta.json (134b)\n\nArchive v1.4.0: 9 files, 21965 bytes\n\nFiles: agents/openai.yaml (2102b), references/answer-templates.md (1917b), references/doctor-profile-schema.md (6755b), references/examples.md (3644b), references/quickstart.md (2072b), scripts/memory.py (31457b), skill-card.md (2748b), SKILL.md (11430b), _meta.json (134b)\n\nArchive v1.3.0: 7 files, 13816 bytes\n\nFiles: agents/openai.yaml (437b), references/answer-templates.md (1539b), references/examples.md (2277b), scripts/memory.py (24356b), skill-card.md (2436b), SKILL.md (7392b), _meta.json (134b)\n\nArchive v1.2.0: 6 files, 11585 bytes\n\nFiles: agents/openai.yaml (437b), references/answer-templates.md (1539b), references/examples.md (2277b), scripts/memory.py (20052b), SKILL.md (7231b), _meta.json (134b)\n\nArchive v1.1.2: 5 files, 5962 bytes\n\nFiles: agents/openai.yaml (360b), references/answer-templates.md (1539b), references/examples.md (2277b), SKILL.md (4876b), _meta.json (134b)","readmeExcerpt":"Skill: Arknights Guide Owner: morandot Summary: Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile. Tags: arknights:1.6.0, en:1.6.0, game:1.6.0, gaming:1.6.0, guide:1.6.0, latest:1.6.1, zh-CN:1.6.0 Version history: v1.6.1 | 2026-09-02T02:54:54.006Z | auto Arknights-skill 1.6.1 Changelog - Improved Doctor profile update policy: now only updates the local ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"SKILL_DIR=\"${CLAUDE_SKILL_DIR:-${SKILL_DIR:-$(dirname \"$(find ~/.hermes ~/.config -name memory.py -print -quit 2>/dev/null)\")}}\"\npython3 \"$SKILL_DIR/scripts/memory.py\" read"},{"language":"text","snippet":"~/.config/arknights-skill/doctor-profile.json"},{"language":"bash","snippet":"python3 \"$CLAUDE_SKILL_DIR/scripts/memory.py\" update --patch-json '{\"operators\":{\"SilverAsh\":{\"owned\":true,\"elite\":2,\"level\":60,\"masteries\":{\"3\":3}}}}'"},{"language":"bash","snippet":"# Apply a pending downgrade / conflict\npython3 \"$SKILL_DIR/scripts/memory.py\" confirm --field \"SilverAsh.elite\" --apply\n\n# Dismiss (discard) a pending entry\npython3 \"$SKILL_DIR/scripts/memory.py\" dismiss --field \"SilverAsh.elite\""},{"language":"bash","snippet":"# List recorded operators (filter with --owned or --has-pending)\npython3 \"$SKILL_DIR/scripts/memory.py\" list --owned\n\n# Search operators by name or notes\npython3 \"$SKILL_DIR/scripts/memory.py\" search silver\n\n# Delete a recorded operator\npython3 \"$SKILL_DIR/scripts/memory.py\" delete-operator SilverAsh\n\n# Remove stale pending confirmations (older than 30 days)\npython3 \"$SKILL_DIR/scripts/memory.py\" gc --days 30\n\n# Preview merged result without saving\npython3 \"$SKILL_DIR/scripts/memory.py\" update --patch-json '...' --dry-run"},{"language":"text","snippet":"Conclusion:\n[Worth building / depends on roster / skippable]. If your account lacks [role], this operator's priority is higher.\n\nRole:\n- Class / branch:\n- Core job:\n- Common usage:\n\nStrengths:\n-\n-\n\nWeaknesses:\n-\n-\n\nBest use cases:\n-\n-\n\nInvestment advice:\n- Recommended level:\n- Elite 2 priority:\n- Mastery priority (M1 → M3 value):\n\nOne-line advice:\n[]"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: arknights-skill\ndescription: >\n  Use when the user asks about Arknights operators, skills, masteries, modules,\n  stages, lore, terms, or resource planning. Do NOT use for other games,\n  non-Arknights gacha advice, or real-time event schedules (requires live\n  lookup). On invocation it reads and updates a local Doctor profile stored\n  only on this machine (~/.config/arknights-skill/doctor-profile.json);\n  profile data is never transmitted.\nlicense: MIT\ncompatibility: >\n  Compatible with Agent Skills clients (Codex, Claude Code, Hermes). Requires\n  shell access for the bundled Python script (`scripts/memory.py`). No external\n  credentials needed. Version-sensitive questions require live web lookup; when\n  offline, state conclusions are not current.\nallowed-tools: shell\nmetadata:\n  version: \"1.7.0\"\n  homepage: https://github.com/morandot/arknights-skill\n  openclaw-homepage: https://github.com/morandot/arknights-skill\n  author: moran\n---\n\n# Arknights Guide\n\nA dedicated skill for Arknights questions. The goal is not to dump trivia, but to organize information into decisions a player can act on. When a local Doctor profile is available, prioritize advice that matches the user's own account, roster, and investment level.\n\n<HARD-GATE>\nDo NOT answer any Arknights question without first attempting to read the local Doctor profile. See Rule 0 below.\n</HARD-GATE>\n\n## When To Use\n\nUse this skill when the user asks about:\n\n- **Operator evaluation**: roles, branches, worth building, availability\n  - _\"银灰值不值得练？\"_ / _\"Is SilverAsh worth building?\"_\n- **Skills & investment**: skills, talents, modules, potential, masteries, elite promotion\n  - _\"银灰专精哪个技能？\"_ / _\"Which SilverAsh skill to mastery?\"_\n- **Resource planning**: who to raise first, allocation, raise-or-skip\n  - _\"新手该先练谁？\"_ / _\"Who should a new player raise first?\"_\n- **Stage strategy**: main story, event, high-difficulty stages\n  - _\"OF-F4 怎么打？\"_ / _\"How to clear OF-F4?\"_\n- **Comparison**: side-by-side operator analysis\n  - _\"银灰和棘刺谁更好？\"_ / _\"SilverAsh vs Thorns?\"_\n- **Lore & story**: worldbuilding, factions, character relationships, story summaries\n  - _\"整合运动的背景是什么？\"_ / _\"What is Reunion's backstory?\"_\n- **Terminology**: game terms and mechanics explanation\n  - _\"暖机是什么意思？\"_ / _\"What does warm-up mean?\"_\n- **Version environment**: current strength assessments, event summaries\n  - _\"当前版本谁最强？\"_ / _\"Who is strongest in the current version?\"_\n\n### When NOT To Use\n\n- Other games or gacha games — this skill only covers Arknights\n- Pull rate calculations, banner probability — live data needed, not a calculator tool\n- Real-time event schedules or server status — always require live lookup\n- Account binding, login issues, payment problems — these are customer service topics\n\n## Core Rules\n\n### 0. Use The Local Doctor Profile (Mandatory)\n\n**HARD-GATE: You MUST attempt to read the profile before answering.**\n\nIf the current client allows local file access, read the structured profile next to the installed sk"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7bzyad0y0t00e7622qh62rwd85b19e\",\n  \"slug\": \"arknights-skill\",\n  \"version\": \"1.6.1\",\n  \"publishedAt\": 1788317694006\n}"},{"path":"references/answer-templates.md","content":"# Answer Templates\n\nChoose the template closest to the user's question when useful. Do not copy it mechanically. Adapt each template to the specific operator, stage, or term — never output a fill-in-the-blank skeleton verbatim.\n\n## 1. Operator Review\n\n```text\nConclusion:\n[Worth building / depends on roster / skippable]. If your account lacks [role], this operator's priority is higher.\n\nRole:\n- Class / branch:\n- Core job:\n- Common usage:\n\nStrengths:\n-\n-\n\nWeaknesses:\n-\n-\n\nBest use cases:\n-\n-\n\nInvestment advice:\n- Recommended level:\n- Elite 2 priority:\n- Mastery priority (M1 → M3 value):\n\nOne-line advice:\n[]\n```\n\n## 2. Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill [X].\n\nWhy:\n-\n-\n\nWhen Skill [Y] is better:\n-\n-\n\nMastery advice:\n- M1 value:\n- M2 value:\n- M3 value:\n- Recommended stopping point:\n\nConclusion:\n[]\n```\n\n## 3. Raise Or Skip\n\n```text\nConclusion:\n[Build / depends on roster / skip]\n\nWhy:\n-\n-\n\nWho benefits most:\n- New players / veteran accounts / high-difficulty accounts / accounts missing a specific role\n\nMost efficient stopping point:\n- [E1 Lv.50 S7] / [E2 Lv.40 S7 M1] / etc.\n\nSame-role substitutes:\n-\n```\n\n## 4. Lore / Story\n\n```text\nNo-spoiler introduction:\n[]\n\nCore premise:\n-\n-\n\nRelationship with other characters / factions:\n-\n-\n\nCharacter theme:\n[]\n\nIf you want to go deeper, I can expand into files, event story, and full-spoiler plotlines.\n```\n\n## 5. Stage Strategy\n\n```text\nCore stage pressure:\n-\n-\n\nRecommended approach:\n-\n-\n\nRecommended role composition:\n- DP generation:\n- Main DPS:\n- Secondary DPS:\n- Healing:\n- Blocking / tanking:\n- Utility:\n\nExecution notes:\n1.\n2.\n3.\n\nCommon failure points:\n-\n-\n\nLower-investment substitute plan:\n-\n```\n\n## 6. Terminology\n\n```text\nDefinition:\n[]\n\nPractical meaning:\n[]\n\nExample:\n[]\n\nCommon confusion:\n[]\n```\n\n## 7. Comparison\n\n```text\nConclusion:\n[Choose A / choose B / depends on scenario]\n\n[Operator A] strengths:\n-\n-\n\n[Operator A] weaknesses:\n-\n-\n\n[Operator B] strengths:\n-\n-\n\n[Operator B] weaknesses:\n-\n-\n\nScenario comparison:\n- Main story / events:\n- High-difficulty content:\n- New player accounts:\n\nInvestment advice:\n-\n```"},{"path":"references/doctor-profile-schema.md","content":"# Doctor Profile Schema\n\n`doctor-profile.json` is the local structured profile maintained by `scripts/memory.py`.\nIt stores only explicitly confirmed facts — never full conversations, screenshot OCR, or inferences.\n\nSchema version: **1**\n\n---\n\n## File Location\n\nDefault path:\n\n```\n~/.config/arknights-skill/doctor-profile.json\n```\n\nOverride with environment variable `ARKNIGHTS_MEMORY_DIR`.\nMigration from the legacy `.arknights-memory/` path happens automatically on first run.\n\n---\n\n## Top-Level Structure\n\n```json\n{\n  \"schema_version\": 1,\n  \"game\": \"Arknights\",\n  \"metadata\": { ... },\n  \"doctor\": { ... },\n  \"account\": { ... },\n  \"operators\": { ... },\n  \"pending_confirmations\": [ ... ]\n}\n```\n\n---\n\n## Field Reference\n\n### `schema_version` *(integer)*\n\nCurrent: `1`.\n`memory.py` will reject profiles with an unsupported version.\n\n---\n\n### `game` *(string)*\n\nAlways `\"Arknights\"`. Reserved for future multi-game support.\n\n---\n\n### `metadata` *(object)*\n\n| Field | Type | Description |\n|---|---|---|\n| `created_at` | ISO 8601 UTC string | Profile creation timestamp. Set automatically. |\n| `updated_at` | ISO 8601 UTC string | Last write timestamp. Updated on every `save`. |\n\nBoth are managed by `memory.py`; do not write manually.\n\n---\n\n### `doctor` *(object)*\n\nPersonal information about the Doctor.\n\n| Field | Type | Description |\n|---|---|---|\n| `name` | string or null | In-game nickname / display name. |\n| `server` | string or null | Server region, e.g. `\"CN\"`, `\"US\"`, `\"JP\"`, `\"KR\"`, `\"EN\"`. |\n| `level` | integer or null | Doctor account level. |\n| `uid` | string or null | Player UID. Format varies by server. |\n\n---\n\n### `account` *(object)*\n\nAccount state and preferences.\n\n| Field | Type | Description |\n|---|---|---|\n| `progress` | object | Freeform progress map, e.g. `{\"main_story\": \"chapter_09\", \"current_event\": \"near_light\"}`. |\n| `resources` | object | Resource stockpile, e.g. `{\"lmd\": 50000, \"skill_book_3\": 30, \"orundum\": 5400}`. |\n| `goals` | string array | Short-term or mid-term goals, e.g. `[\"elite2 SilverAsh\", \"clear OF-F4\"]`. |\n| `preferences` | string array | Play style or unit type preferences, e.g. `[\"guard mains\", \"low-rarity friendly\", \"waifu > meta\"]`. |\n\n---\n\n### `operators` *(object)*\n\nKeyed by operator name (use official English or CN name consistently, one per key).\nEach value:\n\n```json\n{\n  \"owned\": true,\n  \"elite\": 2,\n  \"level\": 80,\n  \"potential\": 5,\n  \"skill_level\": 7,\n  \"masteries\": { \"1\": 3, \"2\": 0, \"3\": 1 },\n  \"modules\": { \"m1\": 3, \"m2\": 1 },\n  \"notes\": [\"top priority defender\"],\n  \"updated_at\": \"2026-04-24T10:30:00Z\"\n}\n```\n\n| Field | Type | Valid values | Description |\n|---|---|---|---|\n| `owned` | boolean | `true` / `false` / `null` | Whether the Doctor owns this operator. |\n| `elite` | integer or null | `0`, `1`, `2`, `null` | Elite phase. |\n| `level` | integer or null | `≥ 1`, `null` | Current level within the current elite phase. |\n| `potential` | integer or null | `1–6`, `null` | Potential level. |\n| `skill_level` | integer or n"},{"path":"references/examples.md","content":"# Style Examples\n\nThese examples are for answer rhythm only. Do not copy the specific conclusions blindly.\n\n## Example 1: Whether An Operator Is Worth Building\n\n```text\nConclusion:\nWorth building. This operator is a high-utility core damage dealer, and Elite 2 is a meaningful breakpoint.\n\nRole:\nGround physical DPS with burst potential. Their main value comes from wide-area cleanup during skill uptime.\n\nStrengths:\n- Strong burst against grouped medium-pressure enemies\n- Large coverage area and forgiving positioning\n- Reliable performance in main story and event stages\n\nWeaknesses:\n- Depends heavily on skill uptime\n- Needs teammates to cover downtime\n\nInvestment advice:\nPrioritize Elite 2. If resources allow, improve the core skill's mastery first.\n```\n\n## Example 2: Terminology\n\n```text\nDefinition:\nWarm-up means an operator needs time to stack, charge, or enter a stable skill cycle before reaching full strength.\n\nPractical meaning:\nThey may feel weaker early, then become noticeably stronger in the mid or late stage.\n\nExample:\nOperators that need to stack attack, build summons, or wait for a stable cycle.\n\nCommon confusion:\nWarm-up does not mean weak. Many warm-up operators simply reach their power window later.\n```\n\n## Example 3: Stage Strategy\n\n```text\nCore stage pressure:\n- Tight early DP\n- Mid-to-late waves pressure both high-defense lanes and aerial threats\n\nRecommended approach:\nStabilize DP and anti-air first, prepare sustained damage for the center lane, then save one burst skill for the pressure wave.\n\nLower-investment substitute:\nThe real requirement is stable anti-air plus sustained AoE or multi-target damage in the center lane. It does not have to be a specific 6-star operator.\n```\n\n## Example 4: Skill Priority\n\n```text\nRecommendation:\nPrioritize Skill 2.\n\nWhy:\n- Faster startup and better general use\n- Easier to get consistent value in main story and most event stages\n\nWhen the other skill is better:\n- Consider Skill 3 if you care more about burst ceiling or already have a team that can support its timing\n\nMastery advice:\n- Standard accounts should master Skill 2 first\n- Developed accounts chasing high-pressure performance can add Skill 3 later\n```\n\n## Example 5: Lore Introduction\n\n```text\nNo-spoiler introduction:\nThis character's appeal is not just combat role, but the tension between identity, responsibility, and choice.\n\nCore premise:\n- They belong to a key faction\n- They mirror or contrast another important character's values\n\nRelationships and theme:\n- On the surface, the conflict is about duty; underneath, it is closer to a conflict of beliefs\n- The character theme usually revolves around responsibility, cost, and self-definition\n\nIf you want to continue, I can expand into profile material and the full story route, with spoiler level clearly marked.\n```\n\n## Example 6: Operator Comparison\n\n```text\nConclusion:\nBoth are strong ground DPS. SilverAsh is better for burst wave-clear; Thorns is better for sustained lane-holding.\n\nSilverAs"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile. Skill: Arknights Guide Owner: morandot Summary: Answer Arknights operator, investment, lore, and stage-strategy questions while maintaining a local Doctor profile. Tags: arknights:1.6.0, en:1.6.0, game:1.6.0, gaming:1.6.0, guide:1.6.0, latest:1.6.1, zh-CN:1.6.0 Version history: v1.6.1 | 2026-09-02T02:54:54.006Z | auto Arknights-skill 1.6.1 Changelog - Improved Doctor profile update policy: now only updates the local","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1565,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T06:05:36.876Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T06:05:36.876Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:44:08.061Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}