RepoPilot

zai-org/Open-AutoGLM

An Open Phone Agent Model & Framework. Unlocking the AI Phone for Everyone

Mixed

Mixed signals — read the receipts

MixedDependency

no tests detected; no CI workflows detected

HealthyFork & modify

Has a license, tests, and CI — clean foundation to fork and modify.

HealthyLearn from

Documented and popular — useful reference codebase to read through.

MixedDeploy as-is

Scorecard "Branch-Protection" is 0/10; no CI workflows detected

  • No CI workflows detected
  • No test directory detected
  • Scorecard: default branch unprotected (0/10)
  • Last commit 2mo ago
  • 13 active contributors
  • Distributed ownership (top contributor 39% of recent commits)
  • Apache-2.0 licensed

What would improve this?

  • Use as dependency MixedHealthy if: add a test suite
  • Deploy as-is MixedHealthy if: bring "Branch-Protection" to ≥3/10 (see scorecard report)

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests + OpenSSF Scorecard

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Forkable" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Forkable
[![RepoPilot: Forkable](https://repopilot.app/api/badge/zai-org/open-autoglm?axis=fork)](https://repopilot.app/r/zai-org/open-autoglm)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card

This card auto-renders when someone shares https://repopilot.app/r/zai-org/open-autoglm on X, Slack, or LinkedIn.

Ask AI about zai-org/Open-AutoGLM

Grounded in the actual source code. Pick a starter question or write your own.

Or write your own question →

Onboarding doc

Onboarding: zai-org/Open-AutoGLM

Generated by RepoPilot · 2026-06-18 · Source

🎯Verdict

WAIT — Mixed signals — read the receipts

  • Last commit 2mo ago
  • 13 active contributors
  • Distributed ownership (top contributor 39% of recent commits)
  • Apache-2.0 licensed
  • ⚠ No CI workflows detected
  • ⚠ No test directory detected
  • ⚠ Scorecard: default branch unprotected (0/10)

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests + OpenSSF Scorecard</sub>

TL;DR

Open-AutoGLM is an open-source AI phone agent framework that controls Android and iOS devices via natural language commands, using vision-language models to understand screen content and execute multi-step automation tasks through ADB (Android Debug Bridge) or HDC (HarmonyOS Debug Connection). It combines AutoGLM vision-language models with action planning to automate phone interactions like 'open Xiaohongshu and search for food' without explicit step-by-step programming. Modular Python package: phone_agent/ contains core logic split by platform (agent.py for general orchestration, agent_ios.py and handlers for device-specific implementations), with phone_agent/adb/, phone_agent/hdc/ handling device communication via their respective protocols. Configuration and multilingual prompts live in phone_agent/config/ (apps.py, apps_ios.py, apps_harmonyos.py, prompts_*.py), while examples/ and main.py / ios.py provide entry points for different workflows.

👥Who it's for

Mobile automation engineers and AI researchers who need to build autonomous phone agents for testing, task automation, or research; developers integrating with frameworks like Midscene.js for cross-platform UI automation; and product teams at Chinese AI companies (Zhipu AI) building agentic input methods and automation tooling.

🌱Maturity & risk

Actively developed but early-stage; the repo shows recent infrastructure (GitHub Actions templates, pre-commit config) and multilingual model support (Chinese + English variants), but lacks visible CI/CD pipelines and test coverage. It appears to be a research/product project from Zhipu AI with active community incentive programs, indicating ongoing investment but not yet battle-tested at production scale.

Standard open source risks apply.

Active areas of work

Active development on multi-platform support: iOS WebDriver Agent integration (docs/ios_setup with Xcode configuration), HarmonyOS device support (apps_harmonyos.py), and internationalization (prompts_en.py alongside prompts_zh.py). A concurrent developer incentive program ('AutoGLM 实战派') is running with cash prizes for forking and reimplementation, suggesting focus on ecosystem adoption and use-case exploration.

🚀Get running

git clone https://github.com/zai-org/Open-AutoGLM.git
cd Open-AutoGLM
pip install -r requirements.txt  # Install Pillow>=12.0.0, openai>=2.9.0, requests>=2.31.0
python main.py  # For Android; or 'python ios.py' for iOS

Then configure ADB for Android (export PATH=${PATH}:~/Downloads/platform-tools) or follow docs/ios_setup/ios_setup.md for iOS WebDriver Agent setup.

Daily commands:

# Android with ADB
python main.py

# iOS with WebDriver Agent
python ios.py

# Example scripts
python examples/basic_usage.py
python examples/demo_thinking.py

Each script requires the corresponding device platform to be connected and configured (ADB for Android, XCUITest/WebDriver for iOS).

🗺️Map of the codebase

  • phone_agent/agent.py — Core agent orchestration for Android devices; implements the main decision loop that perceives screen state, plans actions, and executes phone automation
  • phone_agent/agent_ios.py — iOS-specific agent implementation; parallel to agent.py but handles iOS-specific device interaction patterns and XCTest framework integration
  • phone_agent/device_factory.py — Factory for creating device instances; abstracts over Android (ADB), iOS (XCTest), and HarmonyOS (HDC) backend selection—critical for multiplatform support
  • phone_agent/actions/handler.py — Android action handler; translates high-level agent decisions (tap, type, scroll) into ADB commands executed on the device
  • phone_agent/config/prompts.py — Centralized system prompts for the LLM agent; defines the reasoning instructions and output schema that guide agent behavior across all platforms
  • phone_agent/model/client.py — LLM client wrapper; abstracts OpenAI API calls and structured response parsing—core dependency for agent reasoning
  • main.py — Primary entry point demonstrating end-to-end agent usage; shows how to initialize device, instantiate agent, and run task loops

🛠️How to make changes

Add Support for a New Android App

  1. Add app package name and main activity to the app registry (phone_agent/config/apps.py)
  2. If the app requires special handling, add launch logic to device control flow in the action handler (phone_agent/actions/handler.py)
  3. Test by calling agent with task involving the new app; agent will recognize the app from screenshots via vision-language model (phone_agent/agent.py)

Add a New Device Platform (e.g., Windows Phone or Mock Device)

  1. Create a new directory under phone_agent/ (e.g., phone_agent/winphone/) with connection.py, device.py, input.py, screenshot.py (phone_agent/device_factory.py)
  2. Implement platform-specific device class inheriting from abstract base or matching handler interface (phone_agent/actions/handler.py)
  3. Register new platform in device factory selection logic (phone_agent/device_factory.py)
  4. Create a new agent variant (e.g., agent_winphone.py) or extend agent.py with platform-specific logic (phone_agent/agent.py)

Customize Agent Reasoning & Action Schema

  1. Edit system prompt, thought format, and action type definitions (phone_agent/config/prompts.py)
  2. Update action handler to support new action types if needed (phone_agent/actions/handler.py)
  3. Update LLM client response parser to handle modified JSON schema from model (phone_agent/model/client.py)
  4. Test with examples/demo_thinking.py to verify reasoning loop stability (examples/demo_thinking.py)

Add Multilingual Support

  1. Add new language prompt file (e.g., phone_agent/config/prompts_ja.py) following existing language pattern (phone_agent/config/prompts_zh.py)
  2. Register language variant in i18n config or agent initialization (phone_agent/config/i18n.py)
  3. Update agent initialization to accept language parameter and select correct prompt set (phone_agent/agent.py)

🔧Why these technologies

  • ADB (Android Debug Bridge) — Industry-standard protocol for Android device automation; no root required; supports screenshot capture and input injection
  • XCTest / WebDriverAgent — Apple-native testing framework; only official way to automate iOS without jailbreak; provides UI automation tree and touch synthesis
  • OpenAI API (GPT-4V / similar) — State-of-the-art vision-language model for understanding mobile UI; supports dense object detection and spatial reasoning needed for screen parsing
  • Python + PIL/Pillow — Rapid prototyping and cross-platform compatibility; Pillow handles image I/O for all platforms uniformly
  • JSON-based action schema — Structured output from LLM is deterministic and parseable; enables validation, logging, and future offline model support

⚖️Trade-offs already made

  • Single-device-per-agent instance (no concurrency within one agent)

    • Why: Simplifies state management and prompt context; avoids race conditions on shared device state
    • Consequence: Users scale by spawning multiple agent processes if they need parallel automation; adds operational overhead
  • Vision-language model required for every decision (no cached UI trees)

    • Why: Generic approach works across any app; no need to reverse-engineer or maintain app-specific parsers
    • Consequence: High LLM API cost (~$0.01–0.10 per action) and latency

🪤Traps & gotchas

OpenAI API key required: Code likely expects OPENAI_API_KEY environment variable for LLM calls (not shown in examples but referenced in openai>=2.9.0 dependency). Device platform coupling: ADB, HDC, and iOS WebDriver each require platform-specific setup (adb executable on PATH, Xcode + WebDriver Agent for iOS, HarmonyOS SDK for HDC) — mixing platforms will fail silently. Screenshot blocking I/O: adb/screenshot.py and hdc/screenshot.py likely block waiting for device response; high-latency networks may timeout. Multilingual model selection: AutoGLM-Phone-9B (Chinese-only) vs. AutoGLM-Phone-9B-Multilingual (English support) must be selected in model config; README does not show where to specify this. Sensitive operation guardrails: Code mentions confirmation mechanisms for login/auth but implementation details not visible in file list — may require manual override patterns.

🏗️Architecture

💡Concepts to learn

  • Vision-Language Model (VLM) Grounding — Open-AutoGLM's entire decision-making hinges on feeding screenshot pixels + natural language context into an LLM (AutoGLM-Phone-9B) to extract actionable intents; understanding how the model interprets visual UI is critical for debugging failures and prompt engineering.
  • Android Debug Bridge (ADB) Protocol — The repository's Android implementation (phone_agent/adb/) speaks ADB's binary wire protocol to screenshot, inject input, and query device state; understanding ADB's stateless shell commands and TCP framing is essential for adding new device capabilities or debugging connection issues.
  • Screen Coordinate Mapping & DPI Scaling — Mobile devices report screen size differently across DPI buckets and orientations; Open-AutoGLM must translate model predictions (e.g., 'click at 50% horizontal') to actual pixel coordinates respecting the device's scale factor, a non-trivial geometric problem visible in handler.py's action translation.
  • Chain-of-Thought (CoT) Prompting — The prompts_*.py files implement CoT templates (visible in config/ structure) that instruct the VLM to 'think step-by-step' about the current UI state before proposing actions; this is critical for agent reliability and is what separates Open-AutoGLM's approach from naive image captioning.
  • Multi-platform Device Abstraction Layer — The codebase abstracts Android (ADB), HarmonyOS (HDC), and iOS (WebDriver) behind a common interface; understanding this abstraction pattern in device_factory.py and handler.py is essential for porting to new platforms or understanding why iOS implementation diverges into agent_ios.py.
  • Internationalization (i18n) for Prompts — The config/prompts_zh.py vs. prompts_en.py split reflects that prompt engineering is language-specific; the model's behavior changes drastically based on prompt language, and Open-AutoGLM's decision to maintain separate prompt suites per language (not just translations) shows this is a core design concern.
  • OpenInterpreter/open-interpreter — Similar multi-modal automation framework for desktop/web, but for code execution vs. mobile UI automation; shares the 'interpret screenshot + plan + execute' architecture
  • anthropics/anthropic-sdk-python — Companion LLM toolkit; Open-AutoGLM depends on similar vision-enabled LLM APIs and uses identical patterns for vision-based planning
  • midscene/midscene.js — Explicitly listed in README as an integration target; a JavaScript/YAML UI automation framework that already adapted AutoGLM models, showing complementary ecosystem adoption
  • appium/appium — De-facto standard for mobile automation; Open-AutoGLM's adb/ and ios/ modules solve similar problems (device control, screenshot capture) but with vision-first intelligence layered on top
  • zhipu-ai/chatglm-6b — Parent Zhipu AI organization's core LLM model; Open-AutoGLM is a downstream application specialized for mobile agent tasks using Zhipu's models

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add comprehensive unit tests for phone_agent/adb and phone_agent/xctest modules

The repo has multiple device connection modules (adb, hdc, xctest) but no visible test files. These are critical for device interaction reliability. Adding pytest-based unit tests for connection.py, device.py, input.py, and screenshot.py in both adb/ and xctest/ directories would catch regressions early and help new contributors understand the expected behavior of device handlers.

  • [ ] Create tests/adb/test_connection.py for phone_agent/adb/connection.py connection lifecycle
  • [ ] Create tests/adb/test_input.py for phone_agent/adb/input.py input command parsing and execution
  • [ ] Create tests/xctest/test_screenshot.py for phone_agent/xctest/screenshot.py screenshot capture logic
  • [ ] Create tests/test_device_factory.py to test phone_agent/device_factory.py device instantiation across platforms (ADB, HDC, XCTest)
  • [ ] Add pytest configuration to requirements.txt (already optional) and update .pre-commit-config.yaml to include pytest runs

Add GitHub Actions workflow for multi-platform device handler testing

The repo supports Android (ADB), HarmonyOS (HDC), and iOS (XCTest) but lacks CI validation. A workflow in .github/workflows/ should lint and test code on each Python push to ensure phone_agent/adb/, phone_agent/hdc/, and phone_agent/xctest/ work correctly. This is critical for a multi-platform agent framework.

  • [ ] Create .github/workflows/test.yml that runs pytest on phone_agent/ and examples/
  • [ ] Add black/flake8 linting step for phone_agent/ modules (pre-commit already configured)
  • [ ] Add mypy type-checking step for phone_agent/agent.py, phone_agent/agent_ios.py, and phone_agent/model/client.py
  • [ ] Configure workflow to test against Python 3.9+ (check current minimum from requirements.txt context)

Create platform-specific integration test examples for adb/xctest/hdc with mocked device responses

examples/ only contains basic_usage.py and demo_thinking.py. The repo lacks concrete examples showing how to test device interactions without real hardware. Adding mocked integration examples would help contributors understand the phone_agent API surface and test locally.

  • [ ] Create examples/test_adb_mocked.py demonstrating mocked ADB connection, input, and screenshot capture for Android testing
  • [ ] Create examples/test_xctest_mocked.py demonstrating mocked XCTest connection for iOS testing (reference phone_agent/xctest/connection.py)
  • [ ] Create examples/test_hdc_mocked.py for HarmonyOS HDC mocking (reference phone_agent/hdc/)
  • [ ] Add docstrings explaining how to use unittest.mock or pytest fixtures with phone_agent/adb/device.py and phone_agent/xctest/device.py
  • [ ] Update README.md or create docs/testing_guide.md linking to these examples

🌿Good first issues

  • Add test suite for phone_agent/adb/input.py covering tap, swipe, and type operations — currently no test/ directory exists, and input validation is likely unverified.
  • Document the model selection flow: add a config example and code comment in phone_agent/model/__init__.py showing how to switch between AutoGLM-Phone-9B and AutoGLM-Phone-9B-Multilingual, with environment variable or YAML knob.
  • Implement graceful fallback in phone_agent/agent.py: when the vision-language model confidence is low (e.g., <0.5), route to OpenAI GPT-4V as a secondary parser instead of failing — this bridges the gap mentioned in dependencies but not exposed as a feature.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 86f5538 — Update README_en.md (zRzRzRzRzRzRzR)
  • fc51840 — Merge pull request #366 from yqyati/main (yongbin-buaa)
  • 740af72 — 更新微信群 (杨清宇)
  • 6b18d7b — Update README_en.md (zRzRzRzRzRzRzR)
  • 54dc37f — Merge pull request #358 from JaredforReal/x (zRzRzRzRzRzRzR)
  • f798c03 — add (JaredforReal)
  • 3829e7d — remove discord channel (JaredforReal)
  • 44e2cf7 — add x account (JaredforReal)
  • b38799a — Merge pull request #357 from JaredforReal/main (zRzRzRzRzRzRzR)
  • eddac90 — format (JaredforReal)

🔒Security observations

  • High · Missing Input Validation in Phone Agent Actions — phone_agent/actions/handler.py, phone_agent/actions/handler_ios.py. The codebase contains handlers for phone actions (handler.py, handler_ios.py) that interact with device input/control mechanisms. Without visible input validation, there's a risk of command injection when processing user commands or UI interactions that could be exploited to execute unintended device actions. Fix: Implement strict input validation and sanitization for all user-provided commands before passing them to device handlers. Use allowlists for permitted actions and validate parameters against expected types and ranges.
  • High · Unencrypted Communication with Devices — phone_agent/adb/connection.py, phone_agent/hdc/connection.py, phone_agent/xctest/connection.py. The device connection modules (adb/connection.py, hdc/connection.py, xctest/connection.py) likely establish connections to mobile devices without visible encryption or certificate pinning. Communications could be intercepted or manipulated. Fix: Enforce encrypted connections (TLS/SSL) for all device communications. Implement certificate pinning and verify device authenticity before accepting commands. Document security requirements for each protocol.
  • High · Potential Hardcoded Credentials in Model Client — phone_agent/model/client.py. The model client (phone_agent/model/client.py) likely handles API keys for LLM services. If credentials are hardcoded or stored insecurely, they could be exposed through version control or logs. Fix: Never hardcode credentials. Use environment variables, secure credential managers, or configuration files excluded from version control. Implement secret rotation policies and audit logs for credential access.
  • Medium · Overly Permissive Dependency Versions — requirements.txt. Dependencies like Pillow, openai, and requests are pinned to minimum versions only (e.g., 'Pillow>=12.0.0'). Without upper bounds, future breaking changes or security vulnerabilities in newer versions could be introduced unexpectedly. Fix: Use version ranges with upper bounds (e.g., 'Pillow>=12.0.0,<13.0.0'). Regularly audit and update dependencies. Consider using dependency scanning tools (e.g., pip-audit, Snyk) in CI/CD.
  • Medium · Missing Authentication/Authorization Framework — phone_agent/agent.py, phone_agent/agent_ios.py. The agent framework (phone_agent/agent.py, phone_agent/agent_ios.py) lacks visible authentication mechanisms. If exposed as a service, unauthorized users could control phone devices without proper access controls. Fix: Implement authentication (OAuth2, API keys with rate limiting) and authorization checks. Ensure only authenticated and authorized users can issue commands. Log all access and actions for audit trails.
  • Medium · Unvalidated File I/O in Screenshot Module — phone_agent/adb/screenshot.py, phone_agent/hdc/screenshot.py, phone_agent/xctest/screenshot.py. Screenshot modules (adb/screenshot.py, hdc/screenshot.py, xctest/screenshot.py) handle image files. Path traversal vulnerabilities could exist if file paths are not properly validated. Fix: Validate all file paths using secure path normalization. Restrict file operations to designated directories. Use os.path.abspath and verify paths are within allowed boundaries.
  • Medium · Sensitive Data in Configuration Files — phone_agent/config/. Configuration modules (phone_agent/config/) may contain prompts, app configurations, or timing data. If extended with credentials or API endpoints, this data could be exposed. Fix: Avoid storing sensitive data in configuration files. Use environment variables for secrets. Implement configuration validation and document which settings are safe for version control.
  • Low · Missing Security Headers and Logging — phone_agent/. No visible security-related logging or monitoring infrastructure for detecting suspicious activities or unauthorized access attempts. Fix: Implement comprehensive logging for all authentication attempts, device commands, and errors. Use structured logging with appropriate log levels. Regularly review logs for suspicious patterns.
  • Low · Commented-Out Dependencies Without Explanation — undefined. undefined Fix: undefined

LLM-derived; treat as a starting point, not a security audit.

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/zai-org/Open-AutoGLM shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live zai-org/Open-AutoGLM repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/zai-org/Open-AutoGLM.

What it runs against: a local clone of zai-org/Open-AutoGLM — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in zai-org/Open-AutoGLM | Confirms the artifact applies here, not a fork | | 2 | License is still Apache-2.0 | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code | | 5 | Last commit ≤ 101 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>zai-org/Open-AutoGLM</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of zai-org/Open-AutoGLM. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/zai-org/Open-AutoGLM.git
#   cd Open-AutoGLM
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of zai-org/Open-AutoGLM and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "zai-org/Open-AutoGLM(\\.git)?\\b" \\
  && ok "origin remote is zai-org/Open-AutoGLM" \\
  || miss "origin remote is not zai-org/Open-AutoGLM (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
  && ok "license is Apache-2.0" \\
  || miss "license drift — was Apache-2.0 at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 4. Critical files exist
test -f "phone_agent/agent.py" \\
  && ok "phone_agent/agent.py" \\
  || miss "missing critical file: phone_agent/agent.py"
test -f "phone_agent/agent_ios.py" \\
  && ok "phone_agent/agent_ios.py" \\
  || miss "missing critical file: phone_agent/agent_ios.py"
test -f "phone_agent/device_factory.py" \\
  && ok "phone_agent/device_factory.py" \\
  || miss "missing critical file: phone_agent/device_factory.py"
test -f "phone_agent/actions/handler.py" \\
  && ok "phone_agent/actions/handler.py" \\
  || miss "missing critical file: phone_agent/actions/handler.py"
test -f "phone_agent/config/prompts.py" \\
  && ok "phone_agent/config/prompts.py" \\
  || miss "missing critical file: phone_agent/config/prompts.py"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 101 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~71d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/zai-org/Open-AutoGLM"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Embed this chat in your README →

Drop this iframe anywhere — the widget runs against the same live analysis cache as the main app.

<iframe
  src="https://repopilot.app/embed/zai-org/Open-AutoGLM"
  width="100%" height="500"
  style="border:1px solid #d0d7de; border-radius:8px;"
  allow="microphone"
  loading="lazy"
></iframe>