Maa project init
Scan and initialize a MaaFramework game or app automation project for Maa skills and MaaMCP workflows. Use when asked for maa-project-init, project-pipeline-init, basic_info.md, researching a Maa project, loading a Project Interface bundle, scanning declared resources and pipeline nodes, finding common Back/Return/Exit/Confirm nodes, mapping node relationships, generating entry flowcharts, summarizing image assets and OCR conventions, or reducing discovery cost for later Maa skill work.From its SKILL.md
npx -y skills add KhazixW2/Everything-Maa --skill maa-project-initAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
11.3 KB, as published. Nobody here has run it
Maa Project Init
Use this skill to turn a MaaFramework consumer project into a compact onboarding document for future AI sessions. It scans the project's pipeline and image resources, identifies reusable control nodes, and writes basic_info.md at the target project root.
The generated file is a producer/consumer handoff: maa-project-init produces project context, while maa-pipeline-guide, maa-pipeline-generate, maa-pipeline-graph, maa-pipeline-option, and maa-pipeline-testing consume the relevant sections before broad repository discovery.
Do not run this skill against MaaMCP itself unless the user explicitly asks to analyze MaaMCP as a consumer project. MaaMCP is the tool runtime; the normal target is a MaaFramework consumer project with a main interface.json or interface.jsonc.
Project Discovery Contract
The main Interface is the source of truth. Do not infer a MaaFramework project from an assets/... directory convention.
- Accept a root-level
interface.json/interface.jsoncor anassets/interface.json/assets/interface.jsoncas the main Interface. Both are common valid project layouts. If both locations exist, use the root-level Interface first as a deterministic tie-breaker. - Resolve every
import[]path relative to the main Interface directory. Imports may contribute only top-leveltask,option, andpreset; controller, resource, agent, and other project-level declarations remain in the main Interface. - Resolve every
resource[].pathrelative to the main Interface directory. Pipeline and image files are read from those declared resource roots. - Resolve
languages[]relative to the main Interface directory when it is present. - Accept
agentin either object form or array form; collect.pypaths from every config'schild_args. - If the main Interface or an import is missing or malformed, report the diagnostic and continue with the declarations that can be loaded. Do not silently guess resource or task roots from unrelated directories.
M9A is a standard root-Interface project: the root interface.json imports tasks/**/*.json, declares resource combinations such as resource/base plus channel overlays, and uses array-form agent with agent/bootstrap.py. Boilerplate-family projects such as MAAPVZ, MaaDuDuL, and MaaNTE commonly place the main Interface at assets/interface.json or assets/interface.jsonc; their task entries may live in the main Interface or come entirely from imports. Treat both shape families as valid acceptance cases.
Core Workflow
-
Locate the target project root.
- Prefer a user-provided path.
- Otherwise look for the main Interface using the Project Discovery Contract above.
- Treat the loaded Interface bundle as the source of resource groups, controller types, task entries, options, and agent settings.
-
Run the analyzer in summary mode first:
python "<skill-dir>/scripts/analyze_pipeline_project.py" "<project-root>" -
Inspect the summary for:
- resource groups and task entries from
interface.json - Interface import diagnostics and warnings
- pipeline file count and unique node count
- high in-degree common nodes
- Back / Return / Exit / Close / Confirm / Wait / Flag nodes
- entry task flowcharts and primary path previews
- unresolved references, isolated nodes, and cycle candidates
- image directory inventory and TemplateMatch usage
- Python
context.run_task()/run_recognition()external entries - orphan candidates after excluding interface and Python entry points
- agent script paths (declared
child_argsresolution + project_root 与 4 层 ancestor 约定入口候选 + 交叉对比)
- resource groups and task entries from
Task counts describe the merged Interface bundle's total top-level task[] entries after imports. Separator and other display-only task entries remain counted; if a report separately claims a functional-task count, it must state the filter used.
-
Generate
basic_info.mdonly after the summary looks reasonable:python "<skill-dir>/scripts/analyze_pipeline_project.py" "<project-root>" --write-basic-infoIf
basic_info.mdalready exists, the script refuses to overwrite it. Use--overwriteonly after the user explicitly confirms. -
Report where
basic_info.mdwas written and name the most important sections that still need human review. -
When handing off to another Maa skill:
- tell it to read
basic_info.mdsection 0 and the routed sections for its task - treat the document as a cache, not as source of truth
- re-check every touched node in current JSON/Python and every live claim on the current device
- if relevant source files are newer than
basic_info.md, rerun summary mode and report staleness; do not overwrite silently
- tell it to read
What The Analyzer Reads
- the main
interface.json/interface.jsoncand its directimport[]declaration files pipeline/**/*.jsonanddefault_pipeline.jsonunder each resource path declared by the main Interface- all files under each declared resource root's
image/** - static string targets passed to
context.run_task()andcontext.run_recognition()underagent/**/*.py @AgentServer.custom_action(...)registrations underagent/**/*.py- Interface
agent[]/agent.child_args里每条.py的磁盘解析状态(与运行时maa_mcp/agent_supervisor._build_subprocess_cmd同步上溯 4 层) - project_root 与 4 层 ancestor 内
agent/main.py、agent/server.py等约定入口的候选存在性(AGENT_DIR_NAMES × AGENT_ENTRY_BASENAMES,不递归子目录)
For a legacy MaaGumballs-style layout, the script should discover entries such as Start_Up, DailyTask, Reward_Execute, Shop, AutoSky, JJC, Mars, DivineForgeLand_Start, TSD_Entry, AutoCdk, and StopGumballs, then connect them to the pipeline nodes that define them. For M9A, the same acceptance check is root interface.json, all loaded task imports, all declared resource roots, and the declared bootstrap agent. For boilerplate-family projects, the equivalent check is the assets/ main Interface, all loaded task imports, declared resource roots, and the declared agent path.
Relationship Rules
Parse these pipeline link fields:
nexton_errorinterrupt
Support these node reference forms:
- plain strings:
"ConfirmButton" - lists:
["A", "B"] - NodeAttr objects:
{ "name": "A", "jump_back": true } - prefixed strings:
"[JumpBack]BackText","[Anchor]SomeNode"
Strip bracket prefixes when resolving the target node, but preserve the prefix in summaries where useful.
Entry Flowcharts
Generate bounded Mermaid flowcharts from each interface.json task entry. These diagrams are meant to orient MaaMCP and future skills quickly, not to replace a full graph database.
- Start from the task
entrynode. - Expand
next,on_error, andinterruptedges with edge labels. - Preserve branch hints such as
JumpBack,jump_back, andanchorin edge labels. - Limit depth and edge count so loops and shared utility nodes do not overwhelm
basic_info.md. - Include a short primary path text summary for agents that cannot render Mermaid.
- When a reachable node uses
action: Custom(including v2 object form), add a separate Python Agent block. Link the Pipeline node to the block as aCustomAction call, link the block back asreturns, and show the matched@AgentServer.custom_action(...)handler and source location when available.
Public Node Detection
Treat a node as likely reusable when either condition is true:
- it has high in-degree across the merged graph
- its name or behavior indicates a common UI operation
Important common categories:
- Back / Return / Exit / Close / Logout / Stop
- Confirm / Cancel / Retry
- Wait / Loading / Communicating / PowerLack
- Flag / Check / State probe
ClickKeywith Android key4- shared TemplateMatch assets such as back buttons, return buttons, confirm buttons, settings buttons
basic_info.md Contents
The generated document must be concise and useful to an AI agent. Include:
- Project overview
- Resource groups and task entries
- Main pipeline inventory
- Common public nodes
- Back / Return / Exit / popup handling
- Node relationship summary
- OCR expected text conventions
- TemplateMatch image inventory
- Resolution and ROI conventions
- Risks and TODOs
- Maa skill handoff routing and live verification status
For section 2, the "Agent script paths" subsection includes three parts:
- Declared: each
child_args.pywithStatus(resolved/unresolved/non-py/absolute) and the absolute path of resolution (if any). - Discovered: every
AGENT_DIR_NAMES × AGENT_ENTRY_BASENAMEScandidate under root + 4 ancestor levels with anExistscolumn. - Cross-check: unresolved declarations and discovered-but-unreferenced candidates. A resolved declaration is authoritative even when its filename is outside the conventional candidate list; do not call
agent/bootstrap.pyan orphan.
Warnings are emitted when an agent config has malformed child_args, when the aggregate child_args is empty or has no .py entries, or when a declared .py cannot be resolved. Discovered-but-unused conventional entries are compatibility context, not warnings. The scanner mirrors maa_mcp/agent_supervisor._build_subprocess_cmd's parent-walk semantics (AGENT_PARENT_WALK_LIMIT = 4); keep the two limits in sync if you change one.
Keep automatically detected facts separate from TODOs. Do not invent game semantics that are not present in the project files.
Optional Live MaaMCP Research
If a device or window is available and the user wants deeper game research, use MaaMCP after file scanning:
- connect to the simulator/window
- take a default
screencap - infer portrait or landscape from image width/height
- use OCR for visible text and key buttons
- add stable UI facts to
basic_info.md
Live observations must include time, controller/device, screenshot size/orientation, visible page evidence, tested node, score, and whether an action ran. If OCR and screenshot catch different frames during a transition, record them as separate observations and do not promote either one to a stable project fact.
For safe initialization validation, prefer a temporary DoNothing recognition probe derived from a known public node. Run it with start_agent=false when Custom code is unnecessary, inspect recognition.all_results, call stop_pipeline, and remove the temporary file.
This is an enhancement, not a blocker. File scanning must work without a live device.
Do Not
- Do not overwrite an existing non-empty
basic_info.mdwithout explicit confirmation. - Do not commit generated
basic_info.mdfrom another repository into MaaMCP. - Do not modify unrelated target-project files while scanning.
- Do not treat OCR/image guesses as facts unless they came from files or live MaaMCP verification.