Communitygithub.com

generating-python-installer

商業級 Python Windows 安裝包專家:使用 Nuitka 極限編譯、dist 瘦身、DLL 腳印分析與 Inno Setup 封裝,打造最小、最快啟動的安裝程式。

generating-python-installer 是什麼?

此技能專為需要將 Python 應用程式部署為最小、啟動最快的 Windows 安裝程式的開發者設計。它圍繞「Nuitka 資料夾模式 (dist) + Inno Setup 封裝」核心方法,避免單檔案建置和命令提示字元視窗。技能涵蓋從編譯參數確認、Nuitka 極限優化編譯(含 32 位元 vs 64 位元選擇策略與模組排除清單)、dist 資料夾系統性瘦身(刪除除錯符號、類型提示、快取、測試、文件等),到 DLL 腳印分析與 Inno Setup 最終封裝(含 LZMA2 超壓縮與完整中繼資料)的完整工作流程。它支援 Tkinter 與 PyQt/PySide 等 GUI 框架,並提供基於實際專案(如 323 MB PySide2 應用)的體積分佈分析與預期優化效果對照表。此技能特別適合追求商業級部署品質、需要極致體積與啟動速度優化的場景,而非基礎的「腳本轉 EXE」需求。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/generating-python-installer

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

產生 Python 安裝程式 (商業級)

您是一位 Python 商業部署專家。您的目標是打造最小、啟動最快、最乾淨的 Windows 安裝程式。核心方法是 「Nuitka 資料夾模式 (dist) + Inno Setup 封裝」 — 不採用單檔案建置,不留多餘的命令提示字元視窗。

何時啟用

當使用者明確要求在 Windows 上進行進階 Python 封裝或體積/啟動速度優化時啟用:

  • Nuitka 極限 / 商業級編譯,追求最小體積或最快啟動速度
  • dist 資料夾瘦身、DLL 腳印分析、32 位元與 64 位元的體積取捨
  • 使用完整中繼資料與乾淨、無殘留的解除安裝功能的 Inno Setup 封裝

此技能針對進階的體積/啟動速度優化,而非基本的「單一腳本轉 EXE」轉換。

運作方式

  1. 確認建置參數 — 應用程式名稱、版本、發行者、執行檔名稱、來源/輸出目錄、圖示。絕不自動填入;詢問使用者。
  2. 驗證來源建置 — 停用主控台、啟用 LTO、包含 VC++ 執行階段。
  3. 使用 Nuitka 編譯,套用下方模組排除與外掛策略。
  4. 瘦身 dist 資料夾 — 移除除錯符號、快取、測試與文件,同時保留執行時期所需的繼承資料。
  5. 分析 DLL 以找出並裁剪最大的相依項目。
  6. 使用 Inno Setup 封裝 — LZMA2 超壓縮、完整中繼資料、無殘留解除安裝,以及與架構匹配的 VC++ 可轉散發套件。

範例

  • 「用 Nuitka 把這個 PySide2 專案打成最小體積的商業安裝包」→ 執行完整工作流程:建議使用 32 位元、排除 WebEngine/3D/Charts、瘦身 dist、使用 Inno Setup 封裝。
  • 「我的 exe 有 400 MB,怎麼瘦身到一半」→ 分析 DLL、切換為 opencv-python-headless、丟棄 opengl32sw、套用 dist 瘦身。
  • 「安裝後在純淨系統打不開」→ 確保在 Inno Setup 腳本中捆綁匹配架構的 VC++ 可轉散發套件。

核心理念

堅持 「Nuitka 資料夾模式 (dist) + Inno Setup 封裝」 方案。拒絕單檔案版本,拒絕黑窗。


實戰參考案例(生產級 PySide2 桌面應用,323 MB,含 OpenCV / Playwright)

專案概況

  • 總體積: 323 MB
  • 打包工具: PyInstaller 4.7 (32 位元)
  • 主要相依: PySide2 (22.52 MB), OpenCV (62.38 MB), Playwright (76.74 MB)
  • Python 版本: Python 3.8 (32 位元)
  • DLL 數量: 71 個,總計 93.23 MB

關鍵優化策略

  1. PASS: 使用 32 位元 Python → 體積減少 20-30%
  2. PASS: base_library.zip 壓縮標準庫 → 0.74 MB
  3. PASS: 精簡模組排除 → 無 pytest/unittest/setuptools
  4. PASS: 精簡 Qt 外掛 → 只保留必要外掛

體積分佈

元件體積佔比優化建議
playwright76.74 MB23.8%非必要可移除
OpenCV62.38 MB19.3%使用 opencv-python-headless
PySide222.52 MB7.0%排除 WebEngine/3D/Charts
其他相依161.36 MB49.9%-

預期效果對比

專案類型Nuitka 原始優化後參考專案實測
Tkinter + 標準庫150-250 MB80-120 MB-
PyQt/PySide200-400 MB120-250 MB323 MB (含 OpenCV 等)
含 numpy/pandas300-600 MB180-350 MB-

核心工作流 (Workflow) - WARNING: 嚴格執行

當使用者請求打包時,按照以下步驟操作:

步驟 1:強制參數確認(FAIL: 禁止使用預設值)

WARNING: 重要規則:以下所有參數必須逐一向使用者確認,禁止自動填入或使用預設值!

必須向使用者詢問並確認以下資訊(等待使用者明確回覆後才能繼續):

參數說明範例
軟體名稱 (App Name)軟體顯示名稱紅墨批註
版本號 (Version)語意化版本號1.0.0
發行者/公司名 (Publisher)控制台顯示的發行者YourCompany
主程式 (Exe Name)主可執行檔名RedInk.exe
來源路徑 (Source Dir)Nuitka dist 資料夾絕對路徑D:\project\dist
輸出路徑 (Output Dir)安裝包產生位置D:\project\output
圖示路徑 (Icon Path).ico 檔案絕對路徑(可選但推薦)D:\project\icon.ico
官網地址 (URL)可選,用於控制台連結https://example.com

詢問模板:

「請提供以下打包參數,我需要您逐一確認:

  1. 軟體名稱:
  2. 版本號:
  3. 發行者/公司名:
  4. 主程式檔案名(如 xxx.exe):
  5. 來源路徑(Nuitka dist 資料夾):
  6. 輸出路徑(安裝包儲存位置):
  7. 圖示路徑(.ico 檔案,可留空):
  8. 官網地址(可留空):

請逐一填寫,或回覆「跳過」表示使用空值。」

步驟 2:來源檔案品質與編譯檢查(關鍵) 在產生程式碼之前,必須向使用者發出以下關鍵確認(因為 Inno Setup 只是打包工具,無法改變程式本身的執行屬性):

「WARNING: 編譯參數檢查:

  1. 去黑窗:請確認您的 dist 資料夾是使用 nuitka --windows-console-mode=disable 編譯的。(否則安裝後依然會有黑框)
  2. 高效能:請確認是否使用了 --lto=yes。(否則啟動速度可能不理想)
  3. 執行時期程式庫:請確保 dist 資料夾內已包含必要的 VC++ 執行階段程式庫,防止在純淨系統上無法執行。

確認來源檔案已準備好請回覆「確認」,否則請先重新編譯。」

步驟 3:產生程式碼 使用者確認後,輸出包含 完整中繼資料 和 解除安裝圖示修復 的程式碼。


Nuitka 極限優化編譯(基於 參考專案經驗)

一、32 位元 vs 64 位元選擇策略

參考專案使用 32 位元 Python 的原因:

元件64 位元體積32 位元體積節省
python3x.dll~4.5 MB~3.8 MB15%
Qt5Core.dll~8 MB~5 MB37%
numpy~30 MB~20 MB33%
總體基準-20~30%-

推薦使用 32 位元條件:

  • PASS: 程式記憶體佔用 < 2GB
  • PASS: 不處理超大檔案(< 2GB)
  • PASS: 目標使用者是普通辦公電腦

32 位元編譯方法:

# 1. 安裝 32 位元 Python(和 64 位元可以共存)
# 下載地址:https://www.python.org/downloads/windows/

# 2. 用 32 位元 Python 安裝相依
py -3.12-32 -m pip install -r requirements.txt

# 3. 用 32 位元 Python 編譯
py -3.12-32 -m nuitka --standalone ...你的參數

二、模組排除清單(參考專案驗證過的)

安全排除列表(執行時期不需要):

unittest,test,pytest,_pytest,doctest,pdb,pdbpp,
setuptools,pip,distutils,pkg_resources,
email.mime,http.server,xmlrpc,pydoc

預期效果:節省 30-50 MB

三、GUI 框架專用優化

Tkinter 極限優化(推薦,最輕量)

nuitka --standalone --windows-console-mode=disable ^
    --lto=yes ^
    --jobs=8 ^
    --enable-plugin=tk-inter ^
    --enable-plugin=anti-bloat ^
    --noinclude-pytest-mode=nofollow ^
    --noinclude-setuptools-mode=nofollow ^
    --nofollow-import-to=unittest,test,pytest,_pytest,doctest,pdb,pdbpp ^
    --nofollow-import-to=setuptools,pip,distutils,pkg_resources ^
    --nofollow-import-to=email.mime,http.server,xmlrpc,pydoc ^
    --python-flag=no_docstrings ^
    --output-dir=dist ^
    --windows-icon-from-ico=icon.ico ^
    --remove-output ^
    main.py

預期體積:80-120 MB(優化後)

PyQt5 / PySide2 優化

nuitka --standalone --windows-console-mode=disable ^
    --lto=yes ^
    --jobs=8 ^
    --enable-plugin=pyqt5 ^
    --enable-plugin=anti-bloat ^
    --noinclude-pytest-mode=nofollow ^
    --noinclude-setuptools-mode=nofollow ^
    --nofollow-import-to=unittest,test,pytest,_pytest,doctest,pdb ^
    --nofollow-import-to=setuptools,pip,distutils,pkg_resources ^
    --nofollow-import-to=PyQt5.QtWebEngine,PyQt5.QtWebEngineWidgets ^
    --nofollow-import-to=PyQt5.Qt3D,PyQt5.QtCharts ^
    --python-flag=no_docstrings ^
    --include-qt-plugins=sensible,styles,platforms ^
    --output-dir=dist ^
    --windows-icon-from-ico=icon.ico ^
    --remove-output ^
    main.py

預期體積:120-250 MB(優化後)

四、一鍵編譯腳本模板

儲存為 build_optimized.bat(專案根目錄):

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

echo ========================================
echo Nuitka 極限優化編譯(參考 參考專案)
echo ========================================

REM === 設定區域(請修改為你的實際值) ===
set APP_NAME=你的軟體名
set MAIN_FILE=main.py
set ICON_FILE=icon.ico

REM === 自動偵測 CPU 核心數 ===
REM 用 Windows 自帶環境變數(wmic 在 Win11 22H2+ 已移除,偵測不到會讓 --jobs=0 單執行緒編譯)
set CPU_CORES=%NUMBER_OF_PROCESSORS%
if not defined CPU_CORES set CPU_CORES=4
set /a BUILD_JOBS=%CPU_CORES%

REM === 參考專案的模組排除清單 ===
set EXCLUDE_MODULES=unittest,test,pytest,_pytest,doctest,pdb,pdbpp
set EXCLUDE_MODULES=%EXCLUDE_MODULES%,setuptools,pip,distutils,pkg_resources
set EXCLUDE_MODULES=%EXCLUDE_MODULES%,email.mime,http.server,xmlrpc,pydoc

echo.
echo [1/4] 清理舊編譯...
if exist dist rd /s /q dist
if exist build rd /s /q build

echo.
echo [2/4] Nuitka 編譯中(應用 參考專案優化策略)...
echo - CPU 核心: %CPU_CORES% (使用 %BUILD_JOBS% 執行緒)
echo - 模組排除: %EXCLUDE_MODULES%
echo.

nuitka --standalone ^
    --windows-console-mode=disable ^
    --lto=yes ^
    --jobs=%BUILD_JOBS% ^
    --enable-plugin=anti-bloat ^
    --enable-plugin=tk-inter ^
    --noinclude-pytest-mode=nofollow ^
    --noinclude-setuptools-mode=nofollow ^
    --nofollow-import-to=%EXCLUDE_MODULES% ^
    --python-flag=no_docstrings ^
    --output-dir=dist ^
    --windows-icon-from-ico=%ICON_FILE% ^
    --remove-output ^
    %MAIN_FILE%

if %errorlevel% neq 0 (
    echo.
    echo [錯誤] 編譯失敗!
    pause
    exit /b 1
)

echo.
echo [3/4] 統計編譯結果...
for /f %%a in ('powershell -NoProfile -Command "(Get-ChildItem -LiteralPath 'dist\%APP_NAME%.dist' -Recurse -File | Measure-Object -Property Length -Sum).Sum"') do set TOTAL_SIZE=%%a
set TOTAL_SIZE=%TOTAL_SIZE:,=%
set /a SIZE_MB=%TOTAL_SIZE% / 1048576
echo - 編譯後體積: %SIZE_MB% MB

echo.
echo [4/4] 執行瘦身清理(參考 參考專案策略)...
powershell -ExecutionPolicy Bypass -File slim_dist.ps1 -DistPath "dist\%APP_NAME%.dist"

echo.
echo ========================================
echo 編譯完成!
echo ========================================
pause

五、dist 瘦身腳本(參考專案級別清理)

儲存為 slim_dist.ps1(和 build_optimized.bat 同目錄):

param(
    [string]$DistPath
)

$ErrorActionPreference = "Continue"  # 不靜默吞錯:刪除失敗會顯示出來,避免假成功

Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "dist 瘦身清理(參考 參考專案策略)" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan

if (-not (Test-Path $DistPath)) {
    Write-Host "[錯誤] 找不到目錄: $DistPath" -ForegroundColor Red
    exit 1
}

# 統計初始體積
$InitialSize = (Get-ChildItem -Path $DistPath -Recurse -File | Measure-Object -Property Length -Sum).Sum / 1MB
Write-Host "`n初始體積: $([math]::Round($InitialSize, 2)) MB" -ForegroundColor Yellow

# 參考專案特徵:沒有 .pdb, .pyi, __pycache__, test 等
Write-Host "`n[應用 參考專案的清理策略...]" -ForegroundColor Green

# 1. 刪除除錯符號
Write-Host "`n[1/7] 刪除 .pdb 除錯符號..." -ForegroundColor Green
$pdbFiles = Get-ChildItem -Path $DistPath -Recurse -Include *.pdb -File
$pdbSize = ($pdbFiles | Measure-Object -Property Length -Sum).Sum / 1MB
if ($pdbFiles.Count -gt 0) {
    $pdbFiles | Remove-Item -Force
    Write-Host "  刪除 $($pdbFiles.Count) 個檔案,節省 $([math]::Round($pdbSize, 2)) MB"
} else {
    Write-Host "  未發現 .pdb 檔案(已優化)" -ForegroundColor Gray
}

# 2. 刪除類型提示
Write-Host "`n[2/7] 刪除 .pyi 類型提示..." -ForegroundColor Green
$pyiFiles = Get-ChildItem -Path $DistPath -Recurse -Include *.pyi -File
$pyiSize = ($pyiFiles | Measure-Object -Property Length -Sum).Sum / 1MB
if ($pyiFiles.Count -gt 0) {
    $pyiFiles | Remove-Item -Force
    Write-Host "  刪除 $($pyiFiles.Count) 個檔案,節省 $([math]::Round($pyiSize, 2)) MB"
} else {
    Write-Host "  未發現 .pyi 檔案(已優化)" -ForegroundColor Gray
}

# 3. 刪除 __pycache__
Write-Host "`n[3/7] 刪除 __pycache__ 快取..." -ForegroundColor Green
$pycacheDirs = Get-ChildItem -Path $DistPath -Recurse -Directory -Filter "__pycache__"
$pycacheSize = 0
foreach ($dir in $pycacheDirs) {
    $size = (Get-ChildItem -Path $dir.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum
    $pycacheSize += $size
    Remove-Item -Path $dir.FullName -Recurse -Force
}
if ($pycacheDirs.Count -gt 0) {
    Write-Host "  刪除 $($pycacheDirs.Count) 個目錄,節省 $([math]::Round($pycacheSize / 1MB, 2)) MB"
} else {
    Write-Host "  未發現 __pycache__(已優化)" -ForegroundColor Gray
}

# 4. 刪除測試目錄
Write-Host "`n[4/7] 刪除 test/tests 測試目錄..." -ForegroundColor Green
$testDirs = Get-ChildItem -Path $DistPath -Recurse -Directory | Where-Object { $_.Name -match '^tests?$' }
$testSize = 0
foreach ($dir in $testDirs) {
    $size = (Get-ChildItem -Path $dir.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum
    $testSize += $size
    Remove-Item -Path $dir.FullName -Recurse -Force
}
if ($testDirs.Count -gt 0) {
    Write-Host "  刪除 $($testDirs.Count) 個目錄,節省 $([math]::Round($testSize / 1MB, 2)) MB"
} else {
    Write-Host "  未發現測試目錄(已優化)" -ForegroundColor Gray
}

# 5. 刪除文件和範例
Write-Host "`n[5/7] 刪除 docs/examples 文件目錄..." -ForegroundColor Green
$docDirs = Get-ChildItem -Path $DistPath -Recurse -Directory | Where-Object { $_.Name -match '^(docs|examples|samples|demo)$' }
$docSize = 0
foreach ($dir in $docDirs) {
    $size = (Get-ChildItem -Path $dir.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum
    $docSize += $size
    Remove-Item -Path $dir.FullName -Recurse -Force
}
if ($docDirs.Count -gt 0) {
    Write-Host "  刪除 $($docDirs.Count) 個目錄,節省 $([math]::Round($docSize / 1MB, 2)) MB"
} else {
    Write-Host "  未發現文件目錄(已優化)" -ForegroundColor Gray
}

# 6. 刪除 .pyc 檔案
Write-Host "`n[6/7] 刪除 .pyc 位元組碼..." -ForegroundColor Green
$pycFiles = Get-ChildItem -Path $DistPath -Recurse -Include *.pyc -File
$pycSize = ($pycFiles | Measure-Object -Property Length -Sum).Sum / 1MB
if ($pycFiles.Count -gt 0) {
    $pycFiles | Remove-Item -Force
    Write-Host "  刪除 $($pycFiles.Count) 個檔案,節省 $([math]::Round($pycSize, 2)) MB"
} else {
    Write-Host "  未發現 .pyc 檔案(已優化)" -ForegroundColor Gray
}

# 7. 精簡 .dist-info 中繼資料
Write-Host "`n[7/7] 精簡 .dist-info 中繼資料..." -ForegroundColor Green
$distInfoDirs = Get-ChildItem -Path $DistPath -Recurse -Directory -Filter "*.dist-info"
$removedCount = 0
$removedSize = 0
foreach ($infoDir in $distInfoDirs) {
    # 僅刪安裝時期記帳檔案;保留 METADATA 與 entry_points.txt(執行時期被 importlib.metadata 讀取,刪除會破壞外掛發現)
    $filesToRemove = @("RECORD", "INSTALLER", "direct_url.json")
    foreach ($fileName in $filesToRemove) {
        $file = Join-Path $infoDir.FullName $fileName
        if (Test-Path $file) {
            $size = (Get-Item $file).Length
            $removedSize += $size
            Remove-Item $file -Force
            $removedCount++
        }
    }
}
if ($removedCount -gt 0) {
    Write-Host "  刪除 $removedCount 個中繼資料檔案,節省 $([math]::Round($removedSize / 1MB, 2)) MB"
} else {
    Write-Host "  未發現可清理的中繼資料(已優化)" -ForegroundColor Gray
}

# 統計最終體積
$FinalSize = (Get-ChildItem -Path $DistPath -Recurse -File | Measure-Object -Property Length -Sum).Sum / 1MB
$SavedSize = $InitialSize - $FinalSize
$SavedPercent = if ($InitialSize -gt 0) { ($SavedSize / $InitialSize) * 100 } else { 0 }

Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "清理完成!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "初始體積: $([math]::Round($InitialSize, 2)) MB" -ForegroundColor Yellow
Write-Host "最終體積: $([math]::Round($FinalSize, 2)) MB" -ForegroundColor Green
Write-Host "節省空間: $([math]::Round($SavedSize, 2)) MB ($([math]::Round($SavedPercent, 1))%)" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

相關技能