diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..b3ebfcb8b
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,5 @@
+# Keep platform-specific scripts with safe line endings.
+*.sh text eol=lf
+*.command text eol=lf
+*.ps1 text eol=crlf
+*.bat text eol=crlf
diff --git a/.github/workflows/desktop-release-package.yml b/.github/workflows/desktop-release-package.yml
new file mode 100644
index 000000000..4c320ddb1
--- /dev/null
+++ b/.github/workflows/desktop-release-package.yml
@@ -0,0 +1,721 @@
+name: Build Desktop Portable Packages
+
+# Triggers:
+# - workflow_dispatch -> build CI artifacts for testing (choose a target platform)
+# - push tag desktop-portable-* -> build all three platforms and publish them
+# together into ONE GitHub Release (tag = the pushed tag)
+# Plain pushes to branches do NOT build (avoids 3 heavy Rust builds per commit).
+"on":
+ push:
+ tags:
+ - "desktop-portable-*"
+ workflow_dispatch:
+ inputs:
+ target:
+ description: "Which platform(s) to build (artifacts only; release happens on tag push)"
+ required: false
+ default: "all"
+ type: choice
+ options:
+ - "all"
+ - "windows"
+ - "linux"
+ - "macos"
+
+permissions:
+ contents: write
+
+jobs:
+ # ----------------------------------------------------------------------------
+ build-windows:
+ name: Windows portable
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event.inputs.target == 'all' || github.event.inputs.target == 'windows' }}
+ runs-on: windows-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v5
+ with:
+ node-version: 20
+
+ - name: Set up Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Cache Rust build
+ uses: Swatinem/rust-cache@v2
+ with:
+ workspaces: frontends/desktop/src-tauri -> target
+
+ - name: Install desktop dependencies
+ working-directory: frontends/desktop
+ run: npm install
+
+ - name: Build Windows desktop exe
+ working-directory: frontends/desktop
+ run: npm run tauri build -- --bundles nsis
+
+ - name: Assemble self-contained portable bundle
+ shell: bash
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ set -euo pipefail
+
+ EXE_SRC="$(find frontends/desktop/src-tauri/target/release -maxdepth 1 -type f -name 'ga-desktop.exe' | head -n 1)"
+ [[ -n "$EXE_SRC" ]] || { echo "ga-desktop.exe not found" >&2; exit 1; }
+
+ PKG="artifacts/windows/GenericAgent-Desktop-Windows-Portable"
+ RUNTIME="$PKG/runtime"
+ mkdir -p "$RUNTIME"
+
+ # exe at the top level, named GenericAgent (typical portable form)
+ cp "$EXE_SRC" "$PKG/GenericAgent.exe"
+ cp frontends/desktop/packaging/scripts/windows/install_windows.ps1 "$RUNTIME/install_windows.ps1"
+ # Uninstaller: double-click entry at top level, worker script under runtime/.
+ cp frontends/desktop/packaging/scripts/windows/uninstall.bat "$PKG/uninstall.bat"
+ cp frontends/desktop/packaging/scripts/windows/uninstall_windows.ps1 "$RUNTIME/uninstall_windows.ps1"
+
+ # Embedded Python (python-build-standalone, windows x86_64, 3.12 install_only).
+ # browser_download_url is URL-encoded ('+' -> '%2B'); match loosely with '.*'.
+ PBS_URL="$(curl -fsSL -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest \
+ | grep -o '"browser_download_url": *"[^"]*"' \
+ | grep 'cpython-3\.12\.[0-9].*x86_64-pc-windows-msvc-install_only\.tar\.gz' \
+ | head -1 | sed -E 's/.*"(https[^"]+)"/\1/')"
+ [[ -n "$PBS_URL" ]] || { echo "Could not resolve python-build-standalone download URL" >&2; exit 1; }
+ echo "Python build-standalone: $PBS_URL"
+ curl -fsSL -o /tmp/pbs.tar.gz "$PBS_URL"
+ tar -xzf /tmp/pbs.tar.gz -C "$RUNTIME" # extracts a 'python/' dir (python.exe at top)
+ PY="$RUNTIME/python/python.exe"
+ "$PY" --version
+
+ # App-local UCRT: python-build-standalone links the Universal CRT dynamically
+ # and does NOT bundle it. Win10/11 ship UCRT in-box, but stripped/older images
+ # may not -> python.exe fails to load (missing api-ms-win-crt-*.dll). Copy the
+ # redistributable UCRT DLLs next to python.exe (Microsoft-supported app-local
+ # deployment). Pure SDK source, no System32 fallback, hard-fail if absent so we
+ # never ship a bundle from an unexpected source.
+ UCRT_SRC="$(ls -d "/c/Program Files (x86)/Windows Kits/10/Redist/"*/ucrt/DLLs/x64 2>/dev/null | sort -V | tail -1)"
+ [[ -n "$UCRT_SRC" ]] || { echo "Windows SDK UCRT redist dir not found on runner" >&2; exit 1; }
+ echo "UCRT source: $UCRT_SRC"
+ cp "$UCRT_SRC"/api-ms-win-crt-*.dll "$RUNTIME/python/"
+ cp "$UCRT_SRC"/ucrtbase.dll "$RUNTIME/python/"
+ test -f "$RUNTIME/python/api-ms-win-crt-runtime-l1-1-0.dll" \
+ || { echo "UCRT DLLs missing after copy" >&2; exit 1; }
+
+ # Offline wheels (native win_amd64 wheels for the embedded python)
+ mkdir -p "$RUNTIME/wheels"
+ "$PY" -m pip download --dest "$RUNTIME/wheels" \
+ "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil \
+ fastapi uvicorn websockets pydantic setuptools wheel
+
+ # Runtime source (project root minus heavy/dev/build dirs)
+ mkdir -p "$RUNTIME/app"
+ tar \
+ --exclude='./.git' --exclude='./.github' \
+ --exclude='./frontends/desktop/src-tauri' \
+ --exclude='./frontends/desktop/node_modules' \
+ --exclude='./frontends/desktop/packaging' --exclude='./docs' \
+ --exclude='./assets/demo' --exclude='./assets/images' \
+ --exclude='./assets/GenericAgent_Technical_Report.pdf' \
+ --exclude='./artifacts' \
+ --exclude='*/node_modules' --exclude='*/target' \
+ --exclude='*/.venv' --exclude='./.venv' \
+ --exclude='*/__pycache__' --exclude='*.pyc' \
+ -cf - . | tar -xf - -C "$RUNTIME/app"
+ test -f "$RUNTIME/app/agentmain.py"
+ test -f "$RUNTIME/app/frontends/desktop_bridge.py"
+ test -f "$RUNTIME/app/frontends/desktop/static/index.html"
+
+ # Drop python debug symbols (.pdb) to slim the package (~80MB)
+ find "$RUNTIME/python" -name '*.pdb' -delete 2>/dev/null || true
+
+ cat > "$PKG/readme.txt" <<'EOF'
+ ================ 中文 ================
+ GenericAgent Desktop — Windows 便携版(自包含)
+
+ 无需安装 Python、无需联网装依赖、无需源码仓库——全部已内置。
+
+ 前置条件
+ - Windows 10/11 x64
+ - Microsoft Edge WebView2 运行时(Win11 一般自带;缺失时首次运行会提示安装)
+
+ 使用
+ 1. 解压到任意目录(路径建议不含特殊字符)。
+ 2. 双击 GenericAgent.exe。
+ 3. 首次启动会自动离线准备运行环境(建虚拟环境、装依赖),界面显示进度,完成后进入主界面。
+ 4. 之后启动直接秒进。
+
+ 说明
+ - 想真正对话,仍需在程序里配置模型 / API Key。
+ - 如果 Windows Defender 防火墙拦截 `127.0.0.1` / `localhost` 回环连接,程序可能无法启动或连接本机服务。请允许 `GenericAgent.exe` 和 `runtime\python\python.exe` 通过防火墙,然后重启桌面端。
+ - 首次准备完成后不要移动本文件夹;若已移动,删除 runtime\app\.venv 后重新启动即可重建。
+ - runtime\ 是内置运行环境与源码,正常使用无需改动。
+
+ ================ English ================
+ GenericAgent Desktop — Windows Portable (self-contained)
+
+ No Python install, no internet for dependencies, no source checkout — everything is bundled.
+
+ Requirements
+ - Windows 10/11 x64
+ - Microsoft Edge WebView2 runtime (usually preinstalled on Win11; you are prompted if missing)
+
+ Usage
+ 1. Extract anywhere (a path without special characters is recommended).
+ 2. Double-click GenericAgent.exe.
+ 3. The first launch prepares the runtime offline (creates a venv, installs deps) with a
+ progress UI, then opens the main window.
+ 4. Subsequent launches start instantly.
+
+ Notes
+ - To actually chat, configure a model / API key inside the app.
+ - If Windows Defender Firewall blocks the `127.0.0.1` / `localhost` loopback connection, the app may fail to start or reach its local service. Allow `GenericAgent.exe` and `runtime\python\python.exe` through the firewall, then restart the desktop app.
+ - Do not move this folder after the first setup; if you did, delete runtime\app\.venv and relaunch to rebuild.
+ - runtime\ holds the bundled runtime and source; no need to touch it.
+ EOF
+ sed -i 's/^ //' "$PKG/readme.txt"
+
+ echo "Package tree (top levels):"
+ find "$PKG" -maxdepth 2 -printf '%y %p\n' | sort | head -40
+
+ - name: Zip portable package
+ shell: pwsh
+ run: |
+ New-Item -ItemType Directory -Force -Path artifacts/windows/out | Out-Null
+ Compress-Archive -Path artifacts/windows/GenericAgent-Desktop-Windows-Portable `
+ -DestinationPath artifacts/windows/out/GenericAgent-Desktop-Windows-Portable.zip -Force
+ $h = Get-FileHash artifacts/windows/out/GenericAgent-Desktop-Windows-Portable.zip -Algorithm SHA256
+ "{0} GenericAgent-Desktop-Windows-Portable.zip" -f $h.Hash.ToLowerInvariant() |
+ Set-Content -Encoding ASCII artifacts/windows/out/SHA256SUMS-windows.txt
+ Get-ChildItem artifacts/windows/out | Format-Table Name, Length
+
+ - name: Upload workflow artifact
+ uses: actions/upload-artifact@v7
+ with:
+ name: GenericAgent-Desktop-Windows-Portable-${{ github.run_number }}
+ path: |
+ artifacts/windows/out/GenericAgent-Desktop-Windows-Portable.zip
+ artifacts/windows/out/SHA256SUMS-windows.txt
+ if-no-files-found: error
+
+ - name: Publish into unified Release (tag push only)
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ set -euo pipefail
+ TAG_NAME="${{ github.ref_name }}"
+ TITLE="GenericAgent Desktop ${TAG_NAME}"
+ cat > "${RUNNER_TEMP:-/tmp}/ga_notes.md" <<'EOF'
+ GenericAgent Desktop 桌面版 / Desktop
+
+ 无需自行安装 Python、无需联网安装依赖、无需源码;首次启动会自动准备内置运行环境。
+ No separate Python install, no internet for dependencies, no source checkout required; the bundled runtime is prepared on first launch.
+
+ ## 安装方法 / Installation
+ - Windows: 下载 `GenericAgent-Desktop-Windows-Portable.zip`,解压后双击 `GenericAgent.exe` 启动。卸载时先退出应用,再双击包内 `uninstall.bat`,最后删除整个解压目录。
+ Download `GenericAgent-Desktop-Windows-Portable.zip`, extract it, then double-click `GenericAgent.exe`. To uninstall, quit the app, double-click `uninstall.bat`, then delete the extracted folder.
+ - Linux: 下载 `GenericAgent-Desktop-Linux-Portable.tar.gz`,解压后执行 `chmod +x GenericAgent.AppImage`,再运行 `./GenericAgent.AppImage`。卸载时先退出应用,再运行 `./uninstall.sh`,最后删除整个解压目录。
+ Download `GenericAgent-Desktop-Linux-Portable.tar.gz`, extract it, run `chmod +x GenericAgent.AppImage`, then launch `./GenericAgent.AppImage`. To uninstall, quit the app, run `./uninstall.sh`, then delete the extracted folder.
+ - macOS: 下载 `GenericAgent-Desktop-macOS.dmg`,双击打开 DMG,把 `GenericAgent.app` 拖入 `Applications`,之后在“应用程序 / Applications”中启动。若出现“无法验证开发者”等提示,先双击 DMG 内的 `open_anyway.command`,再启动。卸载时先退出应用,再从 Applications 删除 `GenericAgent.app`。
+ Download `GenericAgent-Desktop-macOS.dmg`, open it, drag `GenericAgent.app` to `Applications`, then launch it from Applications. If macOS says the developer cannot be verified, double-click `open_anyway.command` inside the DMG first, then launch again. To uninstall, quit the app, then delete `GenericAgent.app` from Applications.
+
+ ## 首次启动 / First launch
+ 首次启动会自动离线准备运行环境(安装依赖),有进度条,完成后进入主界面;之后启动会更快。
+ The first launch prepares the runtime offline (installs deps) with a progress bar, then opens the main window; later launches are faster.
+
+ ## 说明 / Notes
+ - 想真正对话需在程序内配置模型 / API Key。Configure a model / API key in-app to start chatting.
+ - Windows Defender 防火墙可能会拦截 `127.0.0.1` / `localhost` 回环连接,导致程序无法启动或连接本机服务;请允许 `GenericAgent.exe` 和随包的 `python.exe` 通过防火墙后重启。Windows Defender Firewall may block the local loopback connection; allow `GenericAgent.exe` and the bundled `python.exe` through the firewall, then restart the app.
+ - Windows/Linux 为便携包,可整体移动到任意目录后继续使用。Windows/Linux packages are portable and can be moved as a whole folder.
+ - Windows/Linux 包内附 `readme.txt`(中英)。Windows/Linux packages include a bilingual `readme.txt`.
+ EOF
+ # Create the shared release if it does not exist yet (another OS job may win the race).
+ # Race-safe: the 3 OS jobs share ONE release. Retry create until the release
+ # actually exists (a simultaneous create from another job can fail), so the
+ # upload below never races a not-yet-created release.
+ for _ in $(seq 1 15); do
+ gh release view "$TAG_NAME" >/dev/null 2>&1 && break
+ gh release create "$TAG_NAME" --target "${{ github.sha }}" --title "$TITLE" --notes-file "${RUNNER_TEMP:-/tmp}/ga_notes.md" --prerelease 2>/dev/null || true
+ sleep 3
+ done
+ gh release upload "$TAG_NAME" artifacts/windows/out/* --clobber
+
+ # ----------------------------------------------------------------------------
+ build-linux:
+ name: Linux portable
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event.inputs.target == 'all' || github.event.inputs.target == 'linux' }}
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v5
+ with:
+ node-version: 20
+
+ - name: Set up Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Cache Rust build
+ uses: Swatinem/rust-cache@v2
+ with:
+ workspaces: frontends/desktop/src-tauri -> target
+
+ - name: Install Tauri Linux dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y \
+ libwebkit2gtk-4.1-dev \
+ libgtk-3-dev \
+ libayatana-appindicator3-dev \
+ librsvg2-dev \
+ patchelf
+
+ - name: Install desktop dependencies
+ working-directory: frontends/desktop
+ run: npm install
+
+ - name: Build Linux AppImage
+ working-directory: frontends/desktop
+ run: npm run tauri build -- --bundles appimage
+
+ - name: Assemble self-contained portable bundle
+ shell: bash
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ set -euo pipefail
+ APPIMAGE_SRC="$(find frontends/desktop/src-tauri/target/release/bundle/appimage -maxdepth 1 -type f -name '*.AppImage' | head -n 1)"
+ [[ -n "$APPIMAGE_SRC" ]] || { echo "No AppImage found" >&2; exit 1; }
+
+ PKG="artifacts/linux/GenericAgent-Desktop-Linux-Portable"
+ RUNTIME="$PKG/runtime"
+ mkdir -p "$RUNTIME"
+
+ # Stable internal name so the generated .desktop Exec= never changes on upgrades.
+ cp "$APPIMAGE_SRC" "$PKG/GenericAgent.AppImage"
+ chmod +x "$PKG/GenericAgent.AppImage"
+ # Icon for the generated .desktop launcher (Icon= needs a real image file on Linux).
+ cp frontends/desktop/src-tauri/icons/icon.png "$PKG/GenericAgent.png"
+ cp frontends/desktop/packaging/scripts/linux/install_linux.sh "$RUNTIME/install_linux.sh"
+ chmod +x "$RUNTIME/install_linux.sh"
+ # Uninstaller: top-level entry next to the AppImage.
+ cp frontends/desktop/packaging/scripts/linux/uninstall.sh "$PKG/uninstall.sh"
+ chmod +x "$PKG/uninstall.sh"
+
+ # Embedded Python (python-build-standalone, linux x86_64, 3.12 install_only).
+ PBS_URL="$(curl -fsSL -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest \
+ | grep -o '"browser_download_url": *"[^"]*"' \
+ | grep 'cpython-3\.12\.[0-9].*x86_64-unknown-linux-gnu-install_only\.tar\.gz' \
+ | head -1 | sed -E 's/.*"(https[^"]+)"/\1/')"
+ [[ -n "$PBS_URL" ]] || { echo "Could not resolve python-build-standalone download URL" >&2; exit 1; }
+ echo "Python build-standalone: $PBS_URL"
+ curl -fsSL -o /tmp/pbs.tar.gz "$PBS_URL"
+ tar -xzf /tmp/pbs.tar.gz -C "$RUNTIME" # extracts a 'python/' dir
+ PY="$RUNTIME/python/bin/python3"
+ "$PY" --version
+
+ # Offline wheels (native linux wheels for the embedded python)
+ mkdir -p "$RUNTIME/wheels"
+ "$PY" -m pip download --dest "$RUNTIME/wheels" \
+ "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil \
+ fastapi uvicorn websockets pydantic setuptools wheel
+
+ # Runtime source (project root minus heavy/dev/build dirs)
+ mkdir -p "$RUNTIME/app"
+ tar \
+ --exclude='./.git' --exclude='./.github' \
+ --exclude='./frontends/desktop/src-tauri' \
+ --exclude='./frontends/desktop/node_modules' \
+ --exclude='./frontends/desktop/packaging' --exclude='./docs' \
+ --exclude='./assets/demo' --exclude='./assets/images' \
+ --exclude='./assets/GenericAgent_Technical_Report.pdf' \
+ --exclude='./artifacts' \
+ --exclude='*/node_modules' --exclude='*/target' \
+ --exclude='*/.venv' --exclude='./.venv' \
+ --exclude='*/__pycache__' --exclude='*.pyc' \
+ -cf - . | tar -xf - -C "$RUNTIME/app"
+ test -f "$RUNTIME/app/agentmain.py"
+ test -f "$RUNTIME/app/frontends/desktop_bridge.py"
+ test -f "$RUNTIME/app/frontends/desktop/static/index.html"
+
+ # Drop python debug/cache bits to slim the package
+ find "$RUNTIME/python" -name '__pycache__' -type d -prune -exec rm -rf {} + 2>/dev/null || true
+
+ cat > "$PKG/readme.txt" <<'EOF'
+ ================ 中文 ================
+ GenericAgent Desktop — Linux 便携版(自包含)
+
+ 无需安装 Python、无需联网装依赖、无需源码仓库——全部已内置。
+
+ 前置条件
+ - Linux x86_64(glibc,常见发行版即可)
+ - 桌面环境 + FUSE(运行 AppImage 所需;多数发行版自带)
+
+ 使用
+ 1. 解压到任意目录(路径建议不含特殊字符)。
+ 2. 给 AppImage 执行权限并运行:
+ chmod +x GenericAgent.AppImage
+ ./GenericAgent.AppImage
+ 3. 首次启动会自动离线准备运行环境(建虚拟环境、装依赖),界面显示进度,完成后进入主界面。
+ 4. 之后启动直接秒进。
+
+ 说明
+ - 想真正对话,仍需在程序里配置模型 / API Key。
+ - 首次准备完成后不要移动本文件夹;若已移动,删除 runtime/app/.venv 后重新启动即可重建。
+ - runtime/ 是内置运行环境与源码,正常使用无需改动。
+
+ ================ English ================
+ GenericAgent Desktop — Linux Portable (self-contained)
+
+ No Python install, no internet for dependencies, no source checkout — everything is bundled.
+
+ Requirements
+ - Linux x86_64 (glibc; common distributions work)
+ - A desktop environment + FUSE (required to run the AppImage; preinstalled on most distros)
+
+ Usage
+ 1. Extract anywhere (a path without special characters is recommended).
+ 2. Make the AppImage executable and run it:
+ chmod +x GenericAgent.AppImage
+ ./GenericAgent.AppImage
+ 3. The first launch prepares the runtime offline (creates a venv, installs deps) with a
+ progress UI, then opens the main window.
+ 4. Subsequent launches start instantly.
+
+ Notes
+ - To actually chat, configure a model / API key inside the app.
+ - Do not move this folder after the first setup; if you did, delete runtime/app/.venv and relaunch to rebuild.
+ - runtime/ holds the bundled runtime and source; no need to touch it.
+ EOF
+ sed -i 's/^ //' "$PKG/readme.txt"
+
+ mkdir -p artifacts/linux/out
+ tar -C artifacts/linux -czf artifacts/linux/out/GenericAgent-Desktop-Linux-Portable.tar.gz GenericAgent-Desktop-Linux-Portable
+ ( cd artifacts/linux/out && sha256sum GenericAgent-Desktop-Linux-Portable.tar.gz > SHA256SUMS-linux.txt )
+
+ tar -tzf artifacts/linux/out/GenericAgent-Desktop-Linux-Portable.tar.gz > /tmp/pkglist.txt
+ echo "Package contents (first 40 of $(wc -l < /tmp/pkglist.txt) entries):"
+ head -40 /tmp/pkglist.txt
+ ls -lh artifacts/linux/out
+
+ - name: Upload workflow artifact
+ uses: actions/upload-artifact@v7
+ with:
+ name: GenericAgent-Desktop-Linux-Portable-${{ github.run_number }}
+ path: |
+ artifacts/linux/out/GenericAgent-Desktop-Linux-Portable.tar.gz
+ artifacts/linux/out/SHA256SUMS-linux.txt
+ if-no-files-found: error
+
+ - name: Publish into unified Release (tag push only)
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ set -euo pipefail
+ TAG_NAME="${{ github.ref_name }}"
+ TITLE="GenericAgent Desktop ${TAG_NAME}"
+ cat > "${RUNNER_TEMP:-/tmp}/ga_notes.md" <<'EOF'
+ GenericAgent Desktop 桌面版 / Desktop
+
+ 无需自行安装 Python、无需联网安装依赖、无需源码;首次启动会自动准备内置运行环境。
+ No separate Python install, no internet for dependencies, no source checkout required; the bundled runtime is prepared on first launch.
+
+ ## 安装方法 / Installation
+ - Windows: 下载 `GenericAgent-Desktop-Windows-Portable.zip`,解压后双击 `GenericAgent.exe` 启动。卸载时先退出应用,再双击包内 `uninstall.bat`,最后删除整个解压目录。
+ Download `GenericAgent-Desktop-Windows-Portable.zip`, extract it, then double-click `GenericAgent.exe`. To uninstall, quit the app, double-click `uninstall.bat`, then delete the extracted folder.
+ - Linux: 下载 `GenericAgent-Desktop-Linux-Portable.tar.gz`,解压后执行 `chmod +x GenericAgent.AppImage`,再运行 `./GenericAgent.AppImage`。卸载时先退出应用,再运行 `./uninstall.sh`,最后删除整个解压目录。
+ Download `GenericAgent-Desktop-Linux-Portable.tar.gz`, extract it, run `chmod +x GenericAgent.AppImage`, then launch `./GenericAgent.AppImage`. To uninstall, quit the app, run `./uninstall.sh`, then delete the extracted folder.
+ - macOS: 下载 `GenericAgent-Desktop-macOS.dmg`,双击打开 DMG,把 `GenericAgent.app` 拖入 `Applications`,之后在“应用程序 / Applications”中启动。若出现“无法验证开发者”等提示,先双击 DMG 内的 `open_anyway.command`,再启动。卸载时先退出应用,再从 Applications 删除 `GenericAgent.app`。
+ Download `GenericAgent-Desktop-macOS.dmg`, open it, drag `GenericAgent.app` to `Applications`, then launch it from Applications. If macOS says the developer cannot be verified, double-click `open_anyway.command` inside the DMG first, then launch again. To uninstall, quit the app, then delete `GenericAgent.app` from Applications.
+
+ ## 首次启动 / First launch
+ 首次启动会自动离线准备运行环境(安装依赖),有进度条,完成后进入主界面;之后启动会更快。
+ The first launch prepares the runtime offline (installs deps) with a progress bar, then opens the main window; later launches are faster.
+
+ ## 说明 / Notes
+ - 想真正对话需在程序内配置模型 / API Key。Configure a model / API key in-app to start chatting.
+ - Windows Defender 防火墙可能会拦截 `127.0.0.1` / `localhost` 回环连接,导致程序无法启动或连接本机服务;请允许 `GenericAgent.exe` 和随包的 `python.exe` 通过防火墙后重启。Windows Defender Firewall may block the local loopback connection; allow `GenericAgent.exe` and the bundled `python.exe` through the firewall, then restart the app.
+ - Windows/Linux 为便携包,可整体移动到任意目录后继续使用。Windows/Linux packages are portable and can be moved as a whole folder.
+ - Windows/Linux 包内附 `readme.txt`(中英)。Windows/Linux packages include a bilingual `readme.txt`.
+ EOF
+ # Race-safe: the 3 OS jobs share ONE release. Retry create until the release
+ # actually exists (a simultaneous create from another job can fail), so the
+ # upload below never races a not-yet-created release.
+ for _ in $(seq 1 15); do
+ gh release view "$TAG_NAME" >/dev/null 2>&1 && break
+ gh release create "$TAG_NAME" --target "${{ github.sha }}" --title "$TITLE" --notes-file "${RUNNER_TEMP:-/tmp}/ga_notes.md" --prerelease 2>/dev/null || true
+ sleep 3
+ done
+ gh release upload "$TAG_NAME" artifacts/linux/out/* --clobber
+
+ # ----------------------------------------------------------------------------
+ build-macos:
+ name: macOS DMG
+ if: ${{ startsWith(github.ref, 'refs/tags/') || github.event.inputs.target == 'all' || github.event.inputs.target == 'macos' }}
+ runs-on: macos-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v5
+ with:
+ node-version: 20
+
+ - name: Set up Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Cache Rust build
+ uses: Swatinem/rust-cache@v2
+ with:
+ workspaces: frontends/desktop/src-tauri -> target
+
+ - name: Install desktop dependencies
+ working-directory: frontends/desktop
+ run: npm install
+
+ - name: Build macOS .app
+ working-directory: frontends/desktop
+ run: npm run tauri build -- --bundles app
+
+ - name: Assemble self-contained portable bundle and DMG app
+ shell: bash
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ set -euo pipefail
+ APP_SRC="$(find frontends/desktop/src-tauri/target/release/bundle/macos -maxdepth 1 -name '*.app' -type d | head -n 1)"
+ [[ -n "$APP_SRC" ]] || { echo "No .app found" >&2; exit 1; }
+
+ # Build one runtime/ tree, then reuse it for both macOS deliverables:
+ # 1) Portable zip: GenericAgent.app + runtime/ + helper scripts.
+ # 2) Standard DMG: GenericAgent.app with runtime embedded in Contents/Resources/runtime.
+ RUNTIME_SRC="artifacts/macos/runtime-src"
+ mkdir -p "$RUNTIME_SRC"
+ cp frontends/desktop/packaging/scripts/macos/install_macos.sh "$RUNTIME_SRC/install_macos.sh"
+ chmod +x "$RUNTIME_SRC/install_macos.sh"
+
+ # Embedded Python (python-build-standalone, macOS, 3.12 install_only; aarch64 preferred).
+ PBS_URL="$(python3 - <<'PY'
+ import json, os, urllib.request
+ api='https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest'
+ req=urllib.request.Request(api)
+ token=os.environ.get('GH_TOKEN')
+ if token:
+ req.add_header('Authorization', 'Bearer ' + token)
+ data=json.load(urllib.request.urlopen(req, timeout=60))
+ assets=data.get('assets', [])
+ for arch in ('aarch64-apple-darwin', 'x86_64-apple-darwin'):
+ for a in assets:
+ name=a.get('name','')
+ if 'cpython-3.12' in name and arch in name and name.endswith('install_only.tar.gz') and 'stripped' not in name:
+ print(a['browser_download_url']); raise SystemExit
+ raise SystemExit('No suitable python-build-standalone macOS asset found')
+ PY
+ )"
+ echo "Python build-standalone: $PBS_URL"
+ curl -L --fail --retry 3 -o /tmp/pbs-macos.tar.gz "$PBS_URL"
+ tar -xzf /tmp/pbs-macos.tar.gz -C "$RUNTIME_SRC" # extracts a 'python/' dir
+ PY="$RUNTIME_SRC/python/bin/python3"
+ "$PY" --version
+
+ # Offline wheels
+ mkdir -p "$RUNTIME_SRC/wheels"
+ "$PY" -m pip download --dest "$RUNTIME_SRC/wheels" \
+ "requests>=2.28" "beautifulsoup4>=4.12" "bottle>=0.12" "simple-websocket-server>=0.4" "aiohttp>=3.9" psutil \
+ fastapi uvicorn websockets pydantic setuptools wheel
+
+ # Runtime source (project root minus heavy/dev/build dirs) — bsdtar exclude syntax.
+ mkdir -p "$RUNTIME_SRC/app"
+ tar \
+ --exclude='.git' --exclude='.github' \
+ --exclude='frontends/desktop/src-tauri' \
+ --exclude='frontends/desktop/node_modules' \
+ --exclude='frontends/desktop/packaging' --exclude='docs' \
+ --exclude='assets/demo' --exclude='assets/images' \
+ --exclude='assets/GenericAgent_Technical_Report.pdf' \
+ --exclude='artifacts' \
+ --exclude='*/node_modules' --exclude='*/target' \
+ --exclude='*/.venv' --exclude='.venv' \
+ --exclude='*/__pycache__' --exclude='*.pyc' \
+ -cf - . | tar -xf - -C "$RUNTIME_SRC/app"
+ test -f "$RUNTIME_SRC/app/agentmain.py"
+ test -f "$RUNTIME_SRC/app/frontends/desktop_bridge.py"
+ test -f "$RUNTIME_SRC/app/frontends/desktop/static/index.html"
+
+ PORTABLE="artifacts/macos/GenericAgent-Desktop-macOS-Portable"
+ DMG_STAGE="artifacts/macos/dmg-stage"
+ DMG_APP="$DMG_STAGE/GenericAgent.app"
+ mkdir -p "$PORTABLE" "$DMG_STAGE"
+
+ # Portable zip: keep the existing release shape and helper scripts.
+ ditto "$APP_SRC" "$PORTABLE/GenericAgent.app"
+ ditto "$RUNTIME_SRC" "$PORTABLE/runtime"
+ cp frontends/desktop/packaging/scripts/macos/uninstall.command "$PORTABLE/uninstall.command"
+ chmod +x "$PORTABLE/uninstall.command"
+ cat > "$PORTABLE/Start GenericAgent.command" <<'EOF'
+ #!/bin/bash
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+ xattr -cr "$DIR/GenericAgent.app" 2>/dev/null || true
+ open "$DIR/GenericAgent.app"
+ EOF
+ chmod +x "$PORTABLE/Start GenericAgent.command"
+
+ cat > "$PORTABLE/readme.txt" <<'EOF'
+ ================ 中文 ================
+ GenericAgent Desktop — macOS 便携版(自包含)
+
+ 无需安装 Python、无需联网装依赖、无需源码仓库——全部已内置。
+
+ 使用
+ 推荐:双击 “Start GenericAgent.command” 启动。也可直接双击 GenericAgent.app。
+ 请保持目录结构不变:GenericAgent.app 与 runtime/ 必须在同一目录下。
+
+ 卸载
+ 双击 uninstall.command,或退出程序后删除整个便携文件夹。
+
+ ================ English ================
+ GenericAgent Desktop — macOS Portable (self-contained)
+
+ No Python install, no internet for dependencies, no source checkout — everything is bundled.
+
+ Usage
+ Recommended: double-click "Start GenericAgent.command". You can also double-click GenericAgent.app.
+ Keep the folder layout intact: GenericAgent.app and runtime/ must stay in the same directory.
+
+ Uninstall
+ Double-click uninstall.command, or quit the app and delete the whole portable folder.
+ EOF
+ sed -i '' 's/^ //' "$PORTABLE/readme.txt"
+
+ codesign --force --deep --sign - "$PORTABLE/GenericAgent.app"
+ codesign --verify --deep --strict "$PORTABLE/GenericAgent.app" || true
+
+ # Standard DMG: GenericAgent.app + Applications alias + first-launch helper/guide.
+ ditto "$APP_SRC" "$DMG_APP"
+ mkdir -p "$DMG_APP/Contents/Resources"
+ ditto "$RUNTIME_SRC" "$DMG_APP/Contents/Resources/runtime"
+ codesign --force --deep --sign - "$DMG_APP"
+ codesign --verify --deep --strict "$DMG_APP" || true
+ ln -s /Applications "$DMG_STAGE/Applications"
+
+ cat > "$DMG_STAGE/open_anyway.command" <<'EOF'
+ #!/bin/bash
+ set -e
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+ TARGET="/Applications/GenericAgent.app"
+ if [[ ! -d "$TARGET" ]]; then
+ TARGET="$DIR/GenericAgent.app"
+ fi
+ xattr -cr "$TARGET" 2>/dev/null || true
+ osascript -e 'display dialog "GenericAgent 已处理完成。请将 GenericAgent.app 拖入 Applications 后,从 Applications 中启动;如果已经安装,可以直接重新打开。" buttons {"OK"} default button "OK"' >/dev/null 2>&1 || true
+ EOF
+ chmod +x "$DMG_STAGE/open_anyway.command"
+
+ cat > "$DMG_STAGE/readme.txt" <<'EOF'
+ ================ 中文 ================
+ GenericAgent Desktop — macOS DMG 安装版
+
+ 安装
+ 1. 双击打开 GenericAgent-Desktop-macOS.dmg。
+ 2. 将 GenericAgent.app 拖入 Applications。
+ 3. 打开“应用程序 / Applications”,双击 GenericAgent.app 启动。
+
+ 若出现“无法验证开发者”“Apple 无法检查其是否包含恶意软件”或无法打开:
+ 1. 回到 DMG 窗口。
+ 2. 双击“open_anyway.command”。
+ 3. 再从 Applications 中打开 GenericAgent.app。
+ 也可以右键 GenericAgent.app,选择“打开”。
+
+ 卸载
+ 先退出 GenericAgent,再从 Applications 删除 GenericAgent.app。
+
+ ================ English ================
+ GenericAgent Desktop — macOS DMG installer
+
+ Installation
+ 1. Open GenericAgent-Desktop-macOS.dmg.
+ 2. Drag GenericAgent.app to Applications.
+ 3. Open Applications and launch GenericAgent.app.
+
+ If macOS says the developer cannot be verified, Apple cannot check it for malicious software, or the app cannot be opened:
+ 1. Go back to the DMG window.
+ 2. Double-click "open_anyway.command".
+ 3. Launch GenericAgent.app from Applications again.
+ You can also right-click GenericAgent.app and choose Open.
+
+ Uninstall
+ Quit GenericAgent, then delete GenericAgent.app from Applications.
+ EOF
+ sed -i '' 's/^ //' "$DMG_STAGE/readme.txt"
+
+ mkdir -p artifacts/macos/out
+ hdiutil create \
+ -volname "GenericAgent Desktop" \
+ -srcfolder "$DMG_STAGE" \
+ -ov \
+ -format UDZO \
+ "artifacts/macos/out/GenericAgent-Desktop-macOS.dmg"
+ shasum -a 256 "artifacts/macos/out/GenericAgent-Desktop-macOS.dmg" \
+ > "artifacts/macos/out/GenericAgent-Desktop-macOS.dmg.sha256"
+
+ echo "DMG stage tree:"
+ find "$DMG_STAGE" -maxdepth 2 -print | sort
+
+ - name: Upload workflow artifact
+ uses: actions/upload-artifact@v7
+ with:
+ name: GenericAgent-Desktop-macOS-DMG-${{ github.run_number }}
+ path: artifacts/macos/out/*
+ if-no-files-found: error
+
+ - name: Publish into unified Release (tag push only)
+ if: ${{ startsWith(github.ref, 'refs/tags/') }}
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ set -euo pipefail
+ TAG_NAME="${{ github.ref_name }}"
+ TITLE="GenericAgent Desktop ${TAG_NAME}"
+ cat > "${RUNNER_TEMP:-/tmp}/ga_notes.md" <<'EOF'
+ GenericAgent Desktop 桌面版 / Desktop
+
+ 无需自行安装 Python、无需联网安装依赖、无需源码;首次启动会自动准备内置运行环境。
+ No separate Python install, no internet for dependencies, no source checkout required; the bundled runtime is prepared on first launch.
+
+ ## 安装方法 / Installation
+ - Windows: 下载 `GenericAgent-Desktop-Windows-Portable.zip`,解压后双击 `GenericAgent.exe` 启动。卸载时先退出应用,再双击包内 `uninstall.bat`,最后删除整个解压目录。
+ Download `GenericAgent-Desktop-Windows-Portable.zip`, extract it, then double-click `GenericAgent.exe`. To uninstall, quit the app, double-click `uninstall.bat`, then delete the extracted folder.
+ - Linux: 下载 `GenericAgent-Desktop-Linux-Portable.tar.gz`,解压后执行 `chmod +x GenericAgent.AppImage`,再运行 `./GenericAgent.AppImage`。卸载时先退出应用,再运行 `./uninstall.sh`,最后删除整个解压目录。
+ Download `GenericAgent-Desktop-Linux-Portable.tar.gz`, extract it, run `chmod +x GenericAgent.AppImage`, then launch `./GenericAgent.AppImage`. To uninstall, quit the app, run `./uninstall.sh`, then delete the extracted folder.
+ - macOS: 下载 `GenericAgent-Desktop-macOS.dmg`,双击打开 DMG,把 `GenericAgent.app` 拖入 `Applications`,之后在“应用程序 / Applications”中启动。若出现“无法验证开发者”等提示,先双击 DMG 内的 `open_anyway.command`,再启动。卸载时先退出应用,再从 Applications 删除 `GenericAgent.app`。
+ Download `GenericAgent-Desktop-macOS.dmg`, open it, drag `GenericAgent.app` to `Applications`, then launch it from Applications. If macOS says the developer cannot be verified, double-click `open_anyway.command` inside the DMG first, then launch again. To uninstall, quit the app, then delete `GenericAgent.app` from Applications.
+
+ ## 首次启动 / First launch
+ 首次启动会自动离线准备运行环境(安装依赖),有进度条,完成后进入主界面;之后启动会更快。
+ The first launch prepares the runtime offline (installs deps) with a progress bar, then opens the main window; later launches are faster.
+
+ ## 说明 / Notes
+ - 想真正对话需在程序内配置模型 / API Key。Configure a model / API key in-app to start chatting.
+ - Windows Defender 防火墙可能会拦截 `127.0.0.1` / `localhost` 回环连接,导致程序无法启动或连接本机服务;请允许 `GenericAgent.exe` 和随包的 `python.exe` 通过防火墙后重启。Windows Defender Firewall may block the local loopback connection; allow `GenericAgent.exe` and the bundled `python.exe` through the firewall, then restart the app.
+ - Windows/Linux 为便携包,可整体移动到任意目录后继续使用。Windows/Linux packages are portable and can be moved as a whole folder.
+ - Windows/Linux 包内附 `readme.txt`(中英)。Windows/Linux packages include a bilingual `readme.txt`.
+ EOF
+ # Race-safe: the 3 OS jobs share ONE release. Retry create until the release
+ # actually exists (a simultaneous create from another job can fail), so the
+ # upload below never races a not-yet-created release.
+ for _ in $(seq 1 15); do
+ gh release view "$TAG_NAME" >/dev/null 2>&1 && break
+ gh release create "$TAG_NAME" --target "${{ github.sha }}" --title "$TITLE" --notes-file "${RUNNER_TEMP:-/tmp}/ga_notes.md" --prerelease 2>/dev/null || true
+ sleep 3
+ done
+ gh release upload "$TAG_NAME" artifacts/macos/out/* --clobber
diff --git a/.gitignore b/.gitignore
index c8ca6bf0d..232f07953 100644
Binary files a/.gitignore and b/.gitignore differ
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..fb9f4116e
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,44 @@
+# Contributing to GenericAgent
+
+## Why This File Is Short
+
+GenericAgent's core is ~3K lines. Every file in this repo will be read by AI agents — potentially thousands of times. Extra words cost real tokens and push useful context out of the window, increasing hallucinations. This document practices what it preaches: **say only what matters.**
+
+## Before You Contribute
+
+1. **Read the codebase first.** It's small enough to read in one sitting. Understand the philosophy before proposing changes.
+2. **Open an Issue first** for anything non-trivial. Discuss before coding.
+
+## Code Standards
+
+All PRs go through a strict automated code review skill. Key expectations:
+
+- **Self-documenting code, minimal comments.** If code needs a paragraph to explain, rewrite it.
+- **Compact and visually uniform.** Fewer lines, consistent line lengths, no fluff.
+- **Small change radius.** Changing A shouldn't ripple through B, C, D.
+- **More features → less code.** Good abstractions make the codebase shrink, not grow.
+- **Let it crash by failure radius.** Critical errors fail loud; trivial ones pass silently. No blanket try-catch.
+
+> ⚠️ This review is deliberately strict — most AI-generated code (e.g. Claude Code output) will not pass as-is. Read the full principles before submitting.
+
+## Skill Contributions
+
+GenericAgent evolves through skills. Not all skills belong in the core repo:
+
+| Type | Where it goes | Example |
+|---|---|---|
+| **Fundamental / universal** | Core repo (`memory/`) | File search, clipboard, basic web ops |
+| **Domain-specific / niche** | Skill Marketplace *(coming soon)* | Stock screening, food delivery, specific API integrations |
+
+If your skill only makes sense for a specific workflow, it's a marketplace candidate, not a core PR.
+
+## PR Checklist
+
+- [ ] Issue linked or context explained in ≤3 sentences
+- [ ] Code passes the [review principles] self-check:
+ 1. Can I safely modify this locally without reading the whole codebase?
+ 2. Is there a clear core abstraction — new features add implementations, not modify old logic?
+ 3. Are change points converging at boundaries, not scattered everywhere?
+ 4. On failure, can I quickly locate the responsible module?
+- [ ] Net line count: ideally negative or zero for refactors
+- [ ] No unnecessary dependencies added
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..641d051c0
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 lsdefine
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 8c7e2ff30..43d4ad314 100644
--- a/README.md
+++ b/README.md
@@ -1,281 +1,818 @@
-# GenericAgent — 3,300 Lines to Full OS Autonomy
+
-[English](#english) | [中文](#chinese)
+
-
+# GenericAgent
-A minimalist autonomous agent framework that gives any LLM physical-level control over your PC — browser, terminal, file system, keyboard, mouse, screen vision, and mobile devices — in ~3,300 lines of Python.
+**A Minimal, Self-Evolving Autonomous Agent Framework**
-No Electron. No Docker. No Mac Mini. No 500K-line codebase. No paid installation service.
+*~3K lines of seed code · 9 atomic tools · ~100-line Agent Loop*
-## See It in Action
+
-
-
-
"Order me a milk tea" — navigates a delivery app, picks items, and checks out.
-
"Find GEM stocks with EXPMA golden cross, turnover > 5%" — quantitative screening via mootdx.
-
-
+
+
+
+
+
+
+
+
+
+
+
+**[English](#-english) · [中文](#-中文)**
+
+
+
+> 📌 **Official:** GitHub + https://gaagent.ai only. DintalClaw is the sole authorized commercial partner; others are not affiliated.
+
+---
+
+
+
+## 🌟 Overview
+
+**GenericAgent** is a minimal, self-evolving autonomous agent framework. Its core is just **~3K lines of code**. Through **9 atomic tools + a ~100-line Agent Loop**, it grants any LLM system-level control over a local computer — covering browser, terminal, filesystem, keyboard/mouse input, screen vision, and mobile devices (ADB).
+
+> Design philosophy — **don't preload skills, evolve them.**
+
+Every time GenericAgent solves a new task, it automatically crystallizes the execution path into a reusable **Skill**. The longer you use it, the more skills accumulate — forming a personal skill tree grown entirely from 3K lines of seed code.
+
+> 🤖 **Self-Bootstrap Proof** — Everything in this repository, from installing Git and running `git init` to every commit message, was completed autonomously by GenericAgent. The author never opened a terminal once.
+
+### 📑 Table of Contents
+
+- [Key Features](#-key-features)
+- [Demo Showcase](#-demo-showcase)
+- [Quick Start](#-quick-start)
+- [Usage](#-usage)
+- [Unlocking Advanced Capabilities](#-unlocking-advanced-capabilities)
+- [Architecture](#-architecture)
+- [Self-Evolution Mechanism](#-self-evolution-mechanism)
+- [Comparison](#-comparison)
+- [Evaluation](#-evaluation)
+- [Roadmap & News](#-roadmap--news)
+- [Community & Support](#-community--support)
+- [License](#-license)
+
+---
+
+## 📋 Key Features
+
+| Feature | Description |
+| :--- | :--- |
+| 🧬 **Self-Evolving** | Automatically crystallizes each task into a Skill. Capabilities grow with every use, forming your personal skill tree. |
+| 🪶 **Minimal Architecture** | ~3K lines of core code. Agent Loop is ~100 lines. No complex dependencies, zero deployment overhead. |
+| ⚡ **Strong Execution** | **TMWebdriver** injects into a real browser (preserving login sessions). 9 atomic tools take direct control of the system. |
+| 🔌 **High Compatibility** | Supports Claude / Gemini / Kimi / MiniMax and other major models. Cross-platform. |
+| 💰 **Token Efficient** | <30K context window — a fraction of the 200K–1M other agents consume. Less noise, fewer hallucinations, higher success rate, lower cost. |
+
+---
+
+## 🎯 Demo Showcase
-
-
Autonomous web exploration — browses and summarizes on its own schedule.
-
"Find expenses over ¥2K in the past 3 months" — drives Alipay on a phone via ADB.
-
WeChat batch messaging — yes, it can drive WeChat too.
-
+
+
🛡️ Real-Browser CAPTCHA Survival
+
🌐 Autonomous Web Exploration
+
+
+
+
+
+
+
While configuring a Discord bot, an hCaptcha "Are you human?" challenge pops up mid-task — GA's real browser session passes it and the task continues. See Browser Realness.
+
Autonomously browses and periodically summarizes web content.
+
+
+
🧋 Food Delivery Order
+
📈 Quantitative Stock Screening
+
+
+
+
+
+
+
"Order me a milk tea" — navigates the delivery app, selects items, completes checkout.
+
"Find GEM stocks with EXPMA golden cross, turnover > 5%" — quantitative screening.
+
+
+
💰 Expense Tracking
+
💬 Batch Messaging
+
+
+
+
+
+
+
"Find expenses over ¥2K in the last 3 months" — drives Alipay via ADB.
+
Sends bulk WeChat messages, fully driving the WeChat client.
+
-## What Happens When You Use It
+---
+
+## 🚀 Quick Start
+
+> ⚠️ **Python version**: use **Python 3.11 or 3.12**. **Do not** use Python 3.14 — it is incompatible with `pywebview` and a few other GA dependencies.
+>
+> 📖 Detailed installation guide: **[installation.md](docs/installation.md)** · **[installation_zh.md(中文)](docs/installation_zh.md)**
+### For LLM Agents
+
+Fetch the installation guide and follow it:
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/lsdefine/GenericAgent/refs/heads/main/docs/installation.md
```
-You: "Read my WeChat messages"
-Agent: installs dependencies → reverse-engineers DB → writes reader script → saves as SOP
-Next time: instant recall, zero setup.
-You: "Monitor stock prices and alert me"
-Agent: installs mootdx → builds screening workflow → sets up scheduled task → saves as SOP
-Next time: one sentence to run.
+### For Humans
+
+#### Method 1 — Clone & install *(recommended)*
-You: "Send this file via Gmail"
-Agent: configures OAuth → writes send script → saves as SOP
-Next time: just works.
+```bash
+git clone https://github.com/lsdefine/GenericAgent.git && cd GenericAgent
+uv venv && uv pip install -e ".[ui]"
+cp mykey_template_en.py mykey.py # fill in your LLM API key
```
-**Dogfooding**: This repository — from installing Git to `git init`, writing this README, to every commit message — was built entirely by GenericAgent without the author opening a terminal once.
+Dependencies are deliberately tiered: the agent core needs only `requests`, plus four lightweight packages (`beautifulsoup4`, `bottle`, `simple-websocket-server`, `aiohttp`) for TMWebdriver's local server. The `[ui]` extra pulls in frontend libraries (Streamlit, `prompt_toolkit`/`rich` for the TUI, …) — install it for the bundled UIs, or skip it entirely and drive the agent headless. No Playwright, no LangChain, no browser binaries to download.
-Every task the agent solves becomes a permanent skill. After a few weeks, your instance has a unique skill tree — grown entirely from 3,300 lines of seed code.
+Then launch:
-## The Seed Philosophy
+```bash
+python frontends/tui_v3.py # Terminal UI (recommended)
+python launch.pyw # Streamlit web UI
+```
-Most agent frameworks ship as finished products. GenericAgent ships as a **seed**.
+#### Method 2 — One-line installer *(convenience)*
-The 5 core SOPs define how the agent thinks, remembers, and operates. From there, every new capability is discovered and recorded by the agent itself:
+Sets up a self-contained directory with an isolated Python environment, Git, and a ready-to-run package. The script is in [`assets/`](assets/) if you'd like to read it first.
-1. You ask it to do something new
-2. It figures out how (install dependencies, write scripts, test)
-3. It saves the procedure as a new SOP in its memory
-4. Next time, it recalls and executes directly
+**Windows PowerShell**
-The agent doesn't just execute — it **learns and remembers**.
+```powershell
+powershell -ExecutionPolicy Bypass -c "$env:GLOBAL=1; irm https://raw.githubusercontent.com/lsdefine/GenericAgent/main/assets/ga_install.ps1 | iex"
+```
-## Quick Start
+**Linux / macOS**
```bash
-# 1. Clone
-git clone https://github.com/lsdefine/pc-agent-loop.git
-cd pc-agent-loop
+GLOBAL=1 bash -c "$(curl -fsSL https://raw.githubusercontent.com/lsdefine/GenericAgent/main/assets/ga_install.sh)"
+```
+
+> 💡 GenericAgent grows its environment **through the Agent itself** — don't pre-install everything. See [Unlocking Advanced Capabilities](#-unlocking-advanced-capabilities) below.
-# 2. Install minimal deps
-pip install streamlit pywebview
+---
-# 3. Configure API key
-cp mykey_template.py mykey.py
-# Edit mykey.py with your LLM API key
+## 💻 Usage
-# 4. Launch
-python launch.pyw
-```
+### Frontends
-**Also runs on Android** — tested successfully on Termux with `python agentmain.py` (CLI frontend):
+#### Terminal UI *(recommended)*
+
+A lightweight, scrollback-first terminal interface built on `prompt_toolkit` + `rich`. Supports multiple concurrent sessions and real-time streaming.
```bash
-# In Termux
-cd /sdcard/ga
-python agentmain.py
+python frontends/tui_v3.py
```
-Once running, tell the agent: *"Execute web setup SOP to unlock browser tools"* — it handles the rest. See [WELCOME_NEW_USER.md](WELCOME_NEW_USER.md) for the full bootstrap sequence.
+
+⚠️ Windows TUI Troubleshooting
+
+TUI rendering on Windows can be flaky depending on terminal + font. Common causes:
-## vs. Alternatives
+1. `prompt_toolkit` / `rich` are not on the latest version — `pip install -U prompt_toolkit rich` first.
+2. PowerShell / cmd ship with terminals that have rough Unicode + key-binding support. **Prefer Git Bash on Windows**, which is much better behaved.
+3. If it still looks broken, ask GA itself to fix it:
+ > *"My experience using `frontends/tui_v3.py` in PowerShell / cmd / Git Bash on Windows is very poor — lots of incompatibility. Please refer to Claude Code's best practices for the Windows terminal and fix all font and rendering incompatibilities."*
-| | GenericAgent | OpenClaw | Claude Code |
-|---|---|---|---|
-| Codebase | ~3,300 lines | ~530,000 lines | Open-source (large) |
-| Deploy | `pip install` + API key | Multi-service orchestration | CLI + subscription |
-| Browser | Injects into real browser (keeps login state) | Sandboxed/headless | Via MCP plugins |
-| OS Control | Keyboard, mouse, vision, ADB | Multi-agent delegation | File + terminal |
-| Self-evolution | Grows SOPs & tools autonomously | Plugin ecosystem | Stateless per session |
-| Core shipped | 10 .py + 5 SOPs | Hundreds of modules | Rich CLI toolkit |
+
-## How It Works
+#### Streamlit UI
+```bash
+python launch.pyw
```
-User instruction
- ↓
-┌─────────────────────┐
-│ agent_loop.py (92L) │ ← Sense-Think-Act cycle
-│ "What do I know? │
-│ What should I do?" │
-└────────┬────────────┘
- ↓
-┌─────────────────────┐
-│ 7 Atomic Tools │ ← All capabilities derive from these
-│ code_run │ Execute any Python/PowerShell
-│ file_read/write │ Direct disk access
-│ file_patch │ Surgical code edits
-│ web_scan │ Read live web pages
-│ web_execute_js │ Control browser DOM
-│ ask_user │ Human-in-the-loop
-└────────┬────────────┘
- ↓
-┌─────────────────────┐
-│ Memory System │ ← Persistent across sessions
-│ L0: Meta-SOP │ How to manage memory itself
-│ L2: Global Facts │ Environment, credentials, paths
-│ L3: Task SOPs │ Learned procedures (self-growing)
-└─────────────────────┘
+
+### Bot Interface (IM)
+
+GenericAgent also supports IM frontends such as Telegram, Discord, and Lark.
+
+| Platform | Command |
+| :--- | :--- |
+| Telegram | `python frontends/tgapp.py` |
+| Discord | `python frontends/dcapp.py` |
+| Lark / Feishu | `python frontends/fsapp.py` |
+
+> WeChat, QQ, WeCom and DingTalk are also supported — see the Chinese section below.
+> For detailed setup, ask GenericAgent itself.
+
+---
+
+## 🔓 Unlocking Advanced Capabilities
+
+In GA, advanced capabilities are unlocked by **instructing the agent**, not by reading
+docs or installing extras. Each instruction below makes GA read its pre-installed SOPs
+(battle-tested playbooks in its memory), install whatever is missing, adapt to your OS,
+and persist the result into its own memory.
+
+| Capability | Just tell GA |
+| :--- | :--- |
+| 🌐 Web automation | *"Set up your web automation capability."* — GA guides you through the one manual step: dragging the bundled Chrome extension into `chrome://extensions`. |
+| 🔤 OCR | *"Set up your OCR capability with rapidocr and save it to memory."* |
+| 👁️ Vision | *"Set up your vision capability from the template in memory/."* — GA copies the template, wires it to your existing LLM keys, and self-tests. |
+| 🖱️ Computer use | *"Probe this system and set up your computer-use capability."* |
+
+> 💡 **About language**: the pre-installed SOPs are written in Chinese — GA reads them
+> natively, so this never blocks you. If you prefer an English knowledge base, just say:
+> *"Read your pre-installed SOPs and rewrite them in English (keep code, paths and error
+> strings verbatim)."*
+>
+> 🌍 **About platforms**: the SOPs were honed on Windows, but cross-platform adaptation is
+> itself a GA task — on macOS/Linux, GA swaps in the platform equivalents (window
+> enumeration, input control, screenshots) on its own. Same self-evolution principle.
+
+---
+
+## 🧠 Architecture
+
+GenericAgent accomplishes complex tasks through **Layered Memory × Minimal Toolset × Autonomous Execution Loop**, continuously accumulating experience during execution.
+
+### 1️⃣ Layered Memory System
+
+> *Memory crystallizes throughout task execution, letting the agent build stable, efficient working patterns over time.*
+
+| Layer | Name | Description |
+| :---: | :--- | :--- |
+| **L0** | Meta Rules | Core behavioral rules and system constraints |
+| **L1** | Insight Index | Minimal memory index for fast routing and recall |
+| **L2** | Global Facts | Stable knowledge accumulated over long-term operation |
+| **L3** | Task Skills / SOPs | Reusable workflows for completing specific task types |
+| **L4** | Session Archive | Archived task records distilled from finished sessions for long-horizon recall |
+
+### 2️⃣ Autonomous Execution Loop
+
+> *Perceive environment state → Task reasoning → Execute tools → Write experience to memory → Loop*
+
+The entire core loop is just **~100 lines of code** ([`agent_loop.py`](agent_loop.py)).
+
+### 3️⃣ Minimal Toolset
+
+> *GenericAgent provides only **9 atomic tools**, forming the foundational capabilities for interacting with the outside world.*
+
+| Tool | Function |
+| :--- | :--- |
+| `code_run` | Execute arbitrary code (Python / PowerShell) |
+| `file_read` | Read files |
+| `file_write` | Write / create / overwrite files |
+| `file_patch` | Patch / modify files |
+| `web_scan` | Perceive web content |
+| `web_execute_js` | Control browser behavior |
+| `ask_user` | Human-in-the-loop confirmation |
+| `update_working_checkpoint` | *(memory)* Short-term working notepad |
+| `start_long_term_update` | *(memory)* Distill long-term memory |
+
+### 4️⃣ Capability Extension
+
+> *Capable of dynamically creating new tools.*
+
+Via `code_run`, GenericAgent can dynamically install Python packages, write new scripts, call external APIs, or control hardware at runtime — crystallizing temporary abilities into permanent tools.
+
+
+
+ GenericAgent Workflow Diagram
+
+
+---
+
+## 🧬 Self-Evolution Mechanism
+
+This is what fundamentally distinguishes GenericAgent from every other agent framework.
+
+```text
+[New Task]
+ │
+ ▼
+[Autonomous Exploration] ─► install deps · write scripts · debug · verify
+ │
+ ▼
+[Crystallize into Skill] ─► write to memory layer
+ │
+ ▼
+[Direct Recall on Next Similar Task]
```
-The agent starts with 7 primitive tools. Through `code_run`, it can install packages, write scripts, and interface with any hardware or API — effectively manufacturing new tools at runtime.
+| What you say | First time | Every time after |
+| :--- | :--- | :--- |
+| *"Read my WeChat messages"* | Install deps → reverse DB → write read script → save Skill | **one-line invoke** |
+| *"Give me a morning digest of Hacker News"* | Write scraper → build digest → schedule daily run → save Skill | **one-line invoke** |
+| *"Monitor stocks and alert me"* | Install `mootdx` → build selection flow → configure cron → save Skill | **one-line start** |
+| *"Send this file via Gmail"* | Configure OAuth → write send script → save Skill | **ready to use** |
-
-What Ships in the Box
+After a few weeks, your agent instance will have a skill tree no one else in the world has — all grown from 3K lines of seed code.
-**Core engine** (runs the agent):
-- `agent_loop.py` — Sense-Think-Act loop (92 lines)
-- `ga.py` — Tool definitions and execution
-- `sidercall.py` — LLM communication (multi-backend)
-- `agentmain.py` — Session orchestration
+---
-**Interface** (talk to the agent):
-- `stapp.py` — Streamlit web UI
-- `tgapp.py` — Telegram bot interface
-- `launch.pyw` — One-click launcher with floating window
+## 📊 Comparison
-**Infrastructure**:
-- `TMWebDriver.py` — Browser injection bridge (not Selenium — injects JS into your real browser via Tampermonkey)
-- `simphtml.py` — HTML→text cleaner for web perception
+| Feature | **GenericAgent** | OpenClaw | Claude Code |
+| :--- | :---: | :---: | :---: |
+| **Codebase** | ~3K lines | ~530,000 lines | Open-sourced (large) |
+| **Deployment** | `pip install` + API Key | Multi-service orchestration | CLI + subscription |
+| **Browser Control** | Real browser (session preserved) | Sandbox / headless browser | Via MCP plugin |
+| **OS Control** | Mouse/kbd, vision, ADB | Multi-agent delegation | File + terminal |
+| **Self-Evolution** | Autonomous skill growth | Plugin ecosystem | Stateless between sessions |
+| **Out of the Box** | Few core files + starter skills | Hundreds of modules | Rich CLI toolset |
-**5 Core SOPs** (shipped, version-controlled):
-1. `memory_management_sop` — L0 constitution: how the agent manages its own memory
-2. `autonomous_operation_sop` — Self-directed task execution
-3. `scheduled_task_sop` — Cron-like recurring tasks
-4. `web_setup_sop` — Browser environment bootstrap
-5. `ljqCtrl_sop` — Desktop physical control (keyboard, mouse, DPI-aware)
+---
-Everything else — Gmail integration, WeChat automation, vision APIs, game downloaders, stock analysis workflows — the agent builds and memorizes on its own through use.
+## 📈 Evaluation
-
+> 📂 Full evaluation datasets and results: [**JinyiHan99/GA-Technical-Report**](https://github.com/JinyiHan99/GA-Technical-Report/tree/main)
+
+We evaluate GenericAgent across **five dimensions**:
+
+| # | Dimension | Question | Benchmarks |
+| :---: | :--- | :--- | :--- |
+| 1 | **Task Completion & Token Efficiency** | Can GA complete hard tasks more cheaply than leading agents? | SOP-Bench, Lifelong AgentBench, RealFin-Benchmark |
+| 2 | **Tool-Use Efficiency** | Can a minimal atomic toolset solve what specialized toolsets solve, with less overhead? | Tool Efficiency Benchmark (11 simple + 5 long-horizon) |
+| 3 | **Memory System Effectiveness** | Does condensed hierarchical memory beat full/redundant memory and embedding-based retrievers? | SOP-Bench (dangerous goods), LoCoMo, 20-skill stress test |
+| 4 | **Self-Evolution Capability** | Can the agent distill experience into reusable SOPs and code, without intervention? | 9-round LangChain longitudinal study, 8-task cross-task web benchmark |
+| 5 | **Web Browsing Capability** | Does density-driven design survive the open web? | WebCanvas, BrowseComp-ZH, Custom Tasks (22) |
+
+Baselines across these dimensions include **Claude Code**, **OpenAI CodeX**, and **OpenClaw**, evaluated under *Claude Sonnet 4.6*, *Claude Opus 4.6*, *GPT-5.4*, and *MiniMax M2.7* backbones.
+
+
+
+
+
+ Tool-use efficiency radar. GA dominates token, request, and tool-call axes while preserving quality across four task dimensions.
+
+
+
+ Cross-task self-evolution. Second- and third-run GA executions converge to a stable low-cost regime across eight web tasks, while OpenClaw shows no such convergence.
+
+
+
+
+### Browser Realness of GA Web Tools (TMWebdriver)
+
+GA web tools are powered by **TMWebdriver** — a local WebSocket server plus a Chrome extension — running through a **real, persistent Chrome/Chromium session** rather than a disposable headless sandbox, preserving cookies, login state, extensions, GPU/WebGL behavior, and normal browser-session fingerprints.
+
+| Detection Service / Signal | Vanilla Headless Automation | GA Web Tools | Notes |
+| :--- | :---: | :---: | :--- |
+| SannySoft headless test | Often detected | ✅ 56/56 passed | `bot.sannysoft.com` |
+| bot.incolumitas.com | Commonly fails webdriver / CDP checks | ✅ 36/36 passed | `WEBDRIVER`, `SELENIUM_DRIVER`, `webDriverAdvanced` all OK |
+| BrowserScan bot detection | Often abnormal | ✅ Normal | `browserscan.net` |
+| Device & Browser Info bot test | Multiple bot flags | ✅ Human / `isBot=false` | `deviceandbrowserinfo.com` |
+| FingerprintJS bot detection demo | Often detected | ✅ Passed | Demo flow completed without bot verdict |
+| reCAPTCHA v3 demo | Low bot-like score | ✅ 0.9 human-like score | Score-based risk signal; 0.9 is above typical production thresholds |
+
+For reCAPTCHA v3, `0.9` is not a "checkbox solved" result; it is the high-confidence human-like score returned by the risk model, typically sufficient to avoid extra challenges in production flows.
+
+---
+
+## 📅 Roadmap & News
+
+- **2026-05-23** — 🆕 **TUI v3 released** (`frontends/tui_v3.py`). Block-based scrollback with proper resize reflow, per-terminal color profile for cross-terminal parity, and feature parity with v2.
+- **2026-05-18** — 🆕 **Morphling mode**. Project-level skill absorption — extract goal + tests from any external repo, then decide per component: call, rewrite, or discard. See `memory/morphling_sop.md`.
+- **2026-05-17** — 🆕 **Goal Hive mode**. Multi-worker cooperative Goal mode — BBS-coordinated master/workers running long-horizon objectives in parallel. See `memory/goal_hive_sop.md`.
+- **2026-05-15** — 🖥️ **Desktop GUI released**. One-line installs ship a ready-to-run desktop app (`frontends/GenericAgent.exe`). Developers launch via `python launch.pyw`.
+- **2026-05-14** — 🆕 **Conductor sub-agent orchestration**. Spawn, supervise, and auto-clean parallel sub-agents; first-class delegation primitives complementing `/btw` side-questions.
+- **2026-05-12** — 🆕 **TUI v2 released** (`frontends/tuiapp_v2.py`). Refined Textual frontend with image-paste folding, file paste, block-delete, Ctrl+C copy, history navigation, and `/llm` / `/export` / `/continue` pickers.
+- **2026-05-08** — 🆕 **Goal mode** (`reflect/goal_mode.py`). Time-budget-driven self-driven loop — "keep optimizing X for N hours" with no premature delivery.
+- **2026-04-21** — 📄 [**Technical Report on arXiv**](https://arxiv.org/abs/2604.17091) — *GenericAgent: A Token-Efficient Self-Evolving LLM Agent via Contextual Information Density Maximization*.
+- **2026-04-11** — Introduced **L4 session archive memory** and scheduler cron integration.
+- **2026-03-23** — Personal WeChat supported as a bot frontend.
+- **2026-03-10** — [Released million-scale Skill Library](https://mp.weixin.qq.com/s/q2gQ7YvWoiAcwxzaiwpuiQ?scene=1&click_id=7) *(Chinese)*.
+- **2026-03-08** — [Released "Dintal Claw" — a GenericAgent-powered government-affairs bot](https://mp.weixin.qq.com/s/eiEhwo-j6S-WpLxgBnNxBg) *(Chinese)*.
+- **2026-03-01** — [Featured by Jiqizhixin (机器之心)](https://mp.weixin.qq.com/s/uVWpTTF5I1yzAENV_qm7yg) *(Chinese)*.
+- **2026-01-16** — GenericAgent **V1.0** public release.
---
-
+## ⭐ Community & Support
-# GenericAgent — 3,300 行代码,完整 OS 级自主控制
+If this project helped you, please consider leaving a **Star!** 🙏
+
+### 🚩 Friendly Links
+
+Thanks to the **LinuxDo** community for the support!
+
+[](https://linux.do/)
+
+**Community GUIs** *(independent open-source projects)*:
+
+- [chilishark27/ga-manager](https://github.com/chilishark27/ga-manager)
+- [wangjc683/galley](https://github.com/wangjc683/galley) — Out-of-the-box local agent workbench with a bundled GA runtime (CPython 3.11 + deps), native GUI/CLI, multi-session + Project orchestration, local-first.
+- [FroStorM/A3Agent](https://github.com/FroStorM/A3Agent/tree/workbench)
+- [Fwind43/GenericAgent-Admin](https://github.com/Fwind43/GenericAgent-Admin) — Go + React desktop admin panel: service lifecycle management, native chat, Goal mode, BBS team board, file editor, model config wizard, TMWebDriver monitor, self-update, and Windows tray/desktop-pet integration.
+
+---
+
+## 📄 License
+
+Distributed under the **MIT License**. See [`LICENSE`](LICENSE) for full text.
+
+> *Disclaimer: The official GenericAgent channels are this GitHub repository and https://gaagent.ai. DintalClaw is currently the only officially authorized commercial partner; any other third-party website, organization, or individual using the GenericAgent name is not official unless explicitly listed here.*
+
+---
-一个极简自主 Agent 框架。用约 3,300 行 Python,让任意 LLM 获得对你 PC 的物理级控制能力——浏览器、终端、文件系统、键鼠、屏幕视觉、移动设备。
+
-不需要 Electron,不需要 Docker,不需要 Mac Mini,不需要 53 万行代码,不需要付费安装服务。
+## 🌟 项目简介
-## 用起来是什么样的
+**GenericAgent** 是一个极简、可自我进化的自主 Agent 框架。核心仅 **~3K 行代码**,通过 **9 个原子工具 + ~100 行 Agent Loop**,赋予任意 LLM 对本地计算机的系统级控制能力,覆盖浏览器、终端、文件系统、键鼠输入、屏幕视觉及移动设备(ADB)。
+> 设计哲学 —— **不预设技能,靠进化获得能力。**
+
+每解决一个新任务,GenericAgent 就将执行路径自动固化为 Skill,供后续直接调用。使用时间越长,沉淀的技能越多,形成一棵完全属于你、从 3K 行种子代码生长出来的专属技能树。
+
+> 🤖 **自举实证** — 本仓库的一切,从安装 Git、`git init` 到每一条 commit message,均由 GenericAgent 自主完成。作者全程未打开过一次终端。
+
+### 📑 目录
+
+- [核心特性](#-核心特性)
+- [实例展示](#-实例展示)
+- [快速开始](#-快速开始)
+- [使用方式](#-使用方式)
+- [架构设计](#-架构设计)
+- [自我进化机制](#-自我进化机制)
+- [与同类产品对比](#-与同类产品对比)
+- [评测](#-评测)
+- [路线图与最新动态](#-路线图与最新动态)
+- [社区与支持](#-社区与支持)
+- [许可](#-许可)
+
+---
+
+## 📋 核心特性
+
+| 特性 | 说明 |
+| :--- | :--- |
+| 🧬 **自我进化** | 每次任务自动沉淀 Skill,能力随使用持续增长,形成专属技能树 |
+| 🪶 **极简架构** | ~3K 行核心代码,Agent Loop 约百行,无复杂依赖,部署零负担 |
+| ⚡ **强执行力** | 注入真实浏览器(保留登录态),9 个原子工具直接接管系统 |
+| 🔌 **高兼容性** | 支持 Claude / Gemini / Kimi / MiniMax 等主流模型,跨平台运行 |
+| 💰 **极致省 Token** | 上下文窗口不到 30K,是其他 Agent(200K–1M)的零头;噪声更少、幻觉更低、成功率更高,成本低一个数量级 |
+
+---
+
+## 🎯 实例展示
+
+
+
+
🧋 外卖下单
+
📈 量化选股
+
+
+
+
+
+
+
"Order me a milk tea" — 自动导航外卖 App,选品并完成结账
+
"Find GEM stocks with EXPMA golden cross, turnover > 5%" — 量化条件筛股