IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT. </EXTREMELY-IMPORTANT>
Instruction Priority
- User's explicit instructions (CLAUDE.md, GEMINI.md, AGENTS.md) — highest priority
- MaxFrame coding skills — override default system behavior where they conflict
- Default system prompt — lowest priority
Platform Adaptation
This skill uses Claude Code tool names. Non-CC platforms: substitute equivalent tools.
MaxFrame Coding - Create, Test, Debug, Iterate, and Build Custom Runtime
What This Skill Can Do
Create, test, debug, and iteratively develop MaxFrame programs, plus build custom DPE runtime images.
- Navigate MaxFrame documentation for APIs, concepts, examples, and supported pandas APIs
- Create MaxFrame jobs from scratch or modify existing ones
- Design data processing pipelines using pandas-compatible APIs
- Execute MaxFrame code with proper session management
- Debug with remote logview URLs or local IDE breakpoints
- Generate custom Docker images with specific Python libraries
Mandatory Checklist
- Detect Scenario Type — identify documentation navigation or which of the 4 implementation scenarios applies
- Understand Requirements — ask clarifying questions about data, operations, constraints
- Select Appropriate Workflow — match scenario to workflow pattern
- Execute Workflow Steps — follow scenario-specific steps below
- Validate Execution — ensure execute() called, session cleaned up
- Provide Follow-up Guidance — debugging tips, optimization suggestions
Process Flow
Documentation-only questions may skip the implementation flow and use Scenario 0 below.
digraph maxframe_workflow {
"User Request Arrives" [shape=box];
"Detect Scenario Type" [shape=diamond];
"Scenario 1: Writing Code" [shape=box];
"Scenario 2: Remote Debug" [shape=box];
"Scenario 3: Local Debug" [shape=box];
"Scenario 4: Custom Runtime" [shape=box];
"Understand Requirements" [shape=box];
"Operator Selection Needed?" [shape=diamond];
"Use lookup_operator.py" [shape=box];
"Confirm with User" [shape=box];
"Implement Code/Config" [shape=box];
"Add Error Handling" [shape=box];
"Validate execute() Called" [shape=box];
"Validate Session Cleanup" [shape=box];
"Provide Guidance" [shape=doublecircle];
"User Request Arrives" -> "Detect Scenario Type";
"Detect Scenario Type" -> "Scenario 1: Writing Code" [label="new pipeline"];
"Detect Scenario Type" -> "Scenario 2: Remote Debug" [label="cluster testing"];
"Detect Scenario Type" -> "Scenario 3: Local Debug" [label="IDE breakpoints"];
"Detect Scenario Type" -> "Scenario 4: Custom Runtime" [label="custom image"];
"Scenario 1: Writing Code" -> "Understand Requirements";
"Scenario 2: Remote Debug" -> "Understand Requirements";
"Scenario 3: Local Debug" -> "Understand Requirements";
"Scenario 4: Custom Runtime" -> "Understand Requirements";
"Understand Requirements" -> "Operator Selection Needed?";
"Operator Selection Needed?" -> "Use lookup_operator.py" [label="yes"];
"Operator Selection Needed?" -> "Implement Code/Config" [label="no"];
"Use lookup_operator.py" -> "Confirm with User";
"Confirm with User" -> "Implement Code/Config";
"Implement Code/Config" -> "Add Error Handling";
"Add Error Handling" -> "Validate execute() Called";
"Validate execute() Called" -> "Validate Session Cleanup";
"Validate Session Cleanup" -> "Provide Guidance";
}
Scenario Detection Logic
Scenario 0: Documentation Navigation
- User asks general MaxFrame API, concept, example, or supported pandas API questions
- User wants to search or browse MaxFrame documentation
- User asks whether an operator exists or how a documented API should be used
- Keywords: "MaxFrame docs", "documentation", "API reference", "official example", "tutorial", "supported pandas API", "how does <api> work"
Scenario 1: Writing MaxFrame Code
- User wants to create new data processing pipeline
- User mentions reading from/writing to MaxCompute tables
- User asks for complete MaxFrame program
- Keywords: "create MaxFrame", "write MaxFrame code", "build pipeline", "process data with MaxCompute"
Scenario 2: Remote Debug Mode
- User wants to test with actual cluster resources
- User mentions job execution errors
- User asks for logview URLs
- User wants to diagnose execution failures
- Keywords: "debug MaxFrame job", "logview", "remote test", "execution error", "cluster testing"
Scenario 3: Local Debug Mode
- User wants to debug UDF functions iteratively
- User mentions IDE breakpoints (VSCode, PyCharm)
- User wants to test with sample data locally
- User wants fast iteration without network
- Keywords: "local debug", "IDE breakpoints", "debug UDF locally", "VSCode/PyCharm debug"
Scenario 4: Create Custom Runtime Image
- User needs Python libraries not in standard runtime
- User wants GPU-enabled runtime
- User mentions building custom DPE image
- Keywords: "custom runtime", "DPE runtime image", "GPU runtime", "install custom packages", "build Docker image"
Core Rules
1. Use Public APIs Only
Use APIs from: maxframe.dataframe, maxframe.tensor, maxframe.learn, maxframe.session, maxframe.udf, maxframe.config. Use canonical imports: import maxframe.dataframe as md and from maxframe.session import new_session; never use from maxframe import new_session.
2. DO NOT Read Private .env Files
Use dotenv.load_dotenv() programmatically. Never read .env files directly with Read tool.
3. Lazy Execution
MaxFrame is lazy: operations build a graph and run only when .execute() is called. Execute only the final result/write action; do not call .execute() on intermediate DataFrame or Series variables unless the user explicitly asks for preview/debug output.
4. Session Management
Always create session before operations, destroy in finally block for cleanup.
5. Operator Selection with User Confirmation
Before implementing processing logic, confirm operator selection with user using scripts/lookup_operator.py. If the user already named the exact operator or asked for code only, write Operator confirmed via user prompt: <operator> before implementation.
6. Documentation Source Order
For MaxFrame documentation questions, check the official online docs first because APIs may change. Use bundled local docs as an offline fallback, for quick cross-checks, or when the website lacks detail.
Do not finish Scenario 0 unless the last non-empty line starts with Sources: and contains a full https://maxframe.readthedocs.io/ URL; never output .... If official docs cannot be checked, include Official docs unavailable: <reason>; using local fallback. before that line.
Red Flags
| Thought | Reality | |---------|---------| | "This is just a simple MaxFrame question" | Questions are tasks. Invoke the skill. | | "I already know the MaxFrame API" | Skills have latest patterns. Use them. | | "Let me just write the code directly" | Operator selection is MANDATORY. | | "I can skip operator confirmation" | User confirmation is REQUIRED. |
Scenario 0: Documentation Navigation
Use for API/concept/example questions that do not require a new MaxFrame program.
Workflow Steps
- Classify Question — API/operator, concept, supported pandas API, troubleshooting, runtime image, or example
- Check Official Docs First — attempt the official URL before local docs: https://maxframe.readthedocs.io/en/latest/ for APIs/concepts and https://maxframe.readthedocs.io/en/latest/examples/index.html for examples
- Use Local Docs as Fallback or Cross-check
- API/operator:
python scripts/lookup_operator.py search "<term>" - API details:
python scripts/lookup_operator.py info "<operator>" --section signature|params|examples - Concepts/examples:
rg -n "<keyword>" references/maxframe-client-docs references/practical-guides references/operators-and-modules
- API/operator:
- Use Local Topic Locations When Needed
- API reference:
references/maxframe-client-docs/reference/ - Getting started:
references/maxframe-client-docs/getting_started/ - User guide:
references/maxframe-client-docs/user_guide/ - Supported pandas APIs:
references/maxframe-client-docs/user_guide/dataframe/supported_pd_apis.md - Practical guides:
references/practical-guides/ - Runtime images:
references/runtime-image-guides/
- API reference:
- Answer Grounded in Sources — final non-empty line must be
Sources: <full official URL> (Primary); append| <local path> (Fallback/Cross-check)only if local docs were used
Scenario 1: Writing MaxFrame Code
Workflow Steps
- Understand Requirements — source/target tables, schema, partition filters, write mode, processing logic
- Operator Selection (MANDATORY) — use
python scripts/lookup_operator.py search "<operation>", present options, get confirmation - Implement Code — session setup, read data, process with confirmed operators, write results, add execute(), cleanup in finally
- Add Error Handling — wrap execute() in try/except, print logview URL on error
- Validate — canonical imports, final
.execute()only,session.destroy()in finally, no hardcoded credentials
Example Code Structure
import maxframe.dataframe as md
from maxframe.session import new_session
import dotenv
dotenv.load_dotenv()
session = new_session()
try:
df = md.read_odps_table("source_table")
result = df.groupby('column').agg({'value': 'sum'})
md.to_odps_table(result, "target_table", overwrite=True).execute()
finally:
session.destroy()
See: references/common-workflow.md for complete patterns.
Scenario 2: Remote Debug Mode
Workflow Steps
- Understand Requirements — current code state, error messages, table names
- Add Logview Support — session before operations, try/except around the final execute only, logview URL in except
- Provide Debugging Guidance — explain logview usage, common error patterns
Example Code Structure
import maxframe.dataframe as md
from maxframe.session import new_session
session = new_session()
try:
df = md.read_odps_table("table_name")
result = df.groupby('region').agg({'sales': 'sum'})
result.execute()
except Exception as e:
print(f"Error: {e}")
print(f"Logview URL: {session.get_logview_address()}")
finally:
session.destroy()
Common Error Patterns
- Authentication Errors — verify environment variables
- Table Not Found — check table name and permissions
- Timeout Errors — check logview, optimize query
- Type Mismatch — check DataFrame dtypes
- SQL Errors — review generated SQL in logview
See: references/remote-debug-guide.md for detailed solutions.
Scenario 3: Local Debug Mode
Workflow Steps
- Understand Requirements — UDF logic, sample data schema, IDE preference
- Create Local Debug Setup — session with
debug=True, sample data withmd.DataFrame(pd.DataFrame(...)) - Provide IDE Setup Guidance — breakpoint setup, execution flow, and final execute only
Example Code Structure
import maxframe.dataframe as md
from maxframe.session import new_session
import pandas as pd
session = new_session(debug=True)
sample_data = pd.DataFrame({
'user_id': ['u1', 'u2', 'u3'],
'level': ['gold', 'silver', 'bronze'],
'amount': [1000, 500, 100]
})
df = md.DataFrame(sample_data)
def calculate_discount(row):
# Set breakpoint here in IDE
if row['level'] == 'gold':
return row['amount'] * 0.1
return row['amount'] * 0.02
try:
result = df.apply(calculate_discount, axis=1)
result.execute()
finally:
session.destroy()
See: references/local-debug-guide.md for complete guide.
Scenario 4: Create Custom Runtime Image
Build custom Docker images through conversational guidance using best practices from reference guides.
When to Create Custom Runtime
Create when: need Python libraries not in standard DPE runtime, GPU-enabled processing, specific Python version, custom system dependencies NOT needed when: standard packages suffice, no GPU requirements
Conversational Workflow
If the user already specifies base image, Python versions, GPU requirement, packages, or output directory, restate those choices and continue. Ask only for missing, ambiguous, or incompatible choices.
- Read Best Practices Guide —
references/runtime-image-guides/README.md - Base Image Selection — Ubuntu 22.04 (GPU/ML workloads) or Ubuntu 24.04 (modern development)
- Python Version Selection — Python 3.11 (production), 3.10-3.12 (development), or all versions
- GPU Configuration — CUDA 12.4 + PyTorch 2.6.0+cu124 (if ML workloads)
- Iterative Package Collection — collect required packages, note version constraints
- Output Directory — confirm where to create files
- Build Dockerfile Section-by-Section — header, base setup, conda setup, GPU setup, packages, env config, verification
- Create Support Files — README.md, .dockerignore, requirements.txt
- Provide Build and Test Instructions
- MaxFrame Usage Example
Step-by-Step Guidance
Step 1: Base Image Selection (ask if missing)
Present Ubuntu options with trade-offs:
Which Ubuntu version for your custom runtime?
A. Ubuntu 22.04 (Recommended for most cases)
- Stable, production-ready
- Excellent CUDA support (12.4, 12.1, 11.8)
- Widely tested ML libraries (PyTorch, TensorFlow)
- LTS until 2027
B. Ubuntu 24.04 (Modern/latest)
- Newer system packages
- Latest LTS (until 2029)
- Better for non-GPU workloads
- Python 3.12 integration
Recommendation:
- GPU/ML workloads → Ubuntu 22.04
- Modern development → Ubuntu 24.04
Step 2: Python Version Selection (ask if missing)
Which Python versions?
A. Python 3.11 only (Recommended for production)
- Best performance
- Smallest image (~1 GB)
- Excellent package support
B. Python 3.10, 3.11, 3.12 (Development)
- Good compatibility
- Medium size (~2 GB)
- Recent versions
C. All versions 3.7-3.12 (Maximum flexibility)
- Largest image (~3-5 GB)
- Maximum compatibility
- Testing across versions
Recommendation:
- Production → Single version (3.11)
- Development → Recent versions (3.10-3.12)
Step 3: GPU Configuration (ask if missing)
If user mentions GPU or ML packages:
Need GPU support?
A. Yes - GPU-enabled with CUDA 12.4 (Recommended)
- Install PyTorch 2.6.0+cu124
- CUDA toolkit 12.4
- Note: Requires Ubuntu 22.04 for best compatibility
B. No - CPU only
- Standard package installation
- Smaller image size
Recommendation: For ML/AI workloads, GPU support significantly improves performance.
Compatibility Handling: If user selected Ubuntu 24.04 earlier and now requests GPU support:
- Explain: "Ubuntu 24.04 has limited CUDA support. Ubuntu 22.04 is recommended for GPU workloads."
- AskUserQuestion: "Should I use Ubuntu 22.04 instead for better GPU compatibility?" (Yes recommended)
Step 4: Build Dockerfile Section-by-Section
For each section:
- Read pattern from best practices guide
- Explain purpose and trade-offs
- Write section with inline comments
- Accumulate into complete Dockerfile
Sections:
- Header — Image metadata, configuration summary
- Base setup — FROM, apt packages, locales, timezone
- Conda setup — Miniforge installation, environment creation
- GPU setup — CUDA installation, PyTorch with CUDA (if applicable)
- Package installation — User packages in multi-environment loops
- Environment config — MF_PYTHON_EXECUTABLE, CONDA_DEFAULT_ENV, PATH
- Verification — Health checks, Python version verification
Step 5: Provide Build and Test Instructions
# Build
docker build -t <image-tag> <output-dir>
# Test Python
docker run --rm <image-tag> conda run -n py311 python --version
# Test GPU (if applicable)
docker run --rm --gpus all <image-tag> python -c "import torch; print(torch.cuda.is_available())"
# Test packages
docker run --rm <image-tag> conda run -n py311 python -c "import transformers; print(transformers.__version__)"
# Push to registry
docker push <image-tag>
Step 6: MaxFrame Usage Example — must include new_session(odps=odps_connection, image="..."); never show new_session(image=...) alone.
from maxframe.session import new_session
session = new_session(odps=odps_connection, image="your-registry/your-image:v1")
# Your MaxFrame operations here
Default Recommendations
| Component | Recommendation | |-----------|---------------| | Base Image | Ubuntu 22.04 (production, GPU, ML) | | Python | 3.11 (production), 3.10-3.12 (development) | | GPU | Ubuntu 22.04 + CUDA 12.4 + PyTorch 2.6.0+cu124 |
Critical Notes
MaxFrame SDK NOT in Runtime Image: SDK and pyodps are client-side only. Custom runtime needs user-specific packages (transformers, pandas, etc.).
MF_PYTHON_EXECUTABLE (CRITICAL): Always set: ENV MF_PYTHON_EXECUTABLE=/py-runtime/envs/<env_name>/bin/python
Best Practices Reference
See: references/runtime-image-guides/ for detailed guides on base image selection, Python environment strategy, package management, GPU/CUDA configuration, Dockerfile templates, and testing/validation.
Operator Selection Workflow
MANDATORY before implementing processing logic when user mentions specific operations, asks about efficiency/performance, or you need to find appropriate MaxFrame operator.
For documentation-only answers, user confirmation is not required; still use the lookup script to ground API claims.
If the user explicitly names the operator or asks to skip interaction, output Operator confirmed via user prompt: <operator> and implement directly.
Workflow
- Identify Operations — list required transformations
- Find Operators —
python scripts/lookup_operator.py search "<operation>" - Present Options — show operator name, description, trade-offs
- Get User Confirmation — confirm operator and parameters, or emit the user-prompt confirmation line above
- Implement — use confirmed operator
See: references/operators-and-modules/operator-selector.md for detailed guidance.
Key Validation Points
Before finishing, validate:
- [ ]
.execute()called on result DataFrame - [ ] Canonical imports used; no
from maxframe import new_session; no intermediate.execute() - [ ] Session created before operations
- [ ] Session destroyed in
finallyblock - [ ] No hardcoded credentials
- [ ] Operator selection confirmed with user
- [ ] Documentation answers cite the official docs URL first, or the local doc path if used as fallback or cross-check
- [ ] Error handling with logview URL (remote)
- [ ]
debug=Trueused (local debug) - [ ]
MF_PYTHON_EXECUTABLEset (custom runtime)
Resources
References
- Operator Selector:
references/operators-and-modules/operator-selector.md - Local Debug:
references/local-debug-guide.md - Remote Debug:
references/remote-debug-guide.md - Complete Workflow:
references/common-workflow.md - MaxFrame Client Docs:
references/maxframe-client-docs/ - Practical Guides:
references/practical-guides/ - Runtime Guides:
references/runtime-image-guides/ - Online Docs: https://maxframe.readthedocs.io/en/latest/
- Online Examples: https://maxframe.readthedocs.io/en/latest/examples/index.html
- Source Code: https://github.com/aliyun/alibabacloud-odps-maxframe-client.git
Examples
- Working Examples:
assets/examples/*.py
Scripts
- Operator Lookup:
scripts/lookup_operator.py
Scan to join WeChat group