能力标签
CLI自动化框架
⚙️
Agent工作流

CLI自动化框架

基于 Python · 无代码搭建完整 AI 自动化流程
英文名:cliany-site
⭐ 9 Stars 💻 Python 📄 MIT 🏷 AI 8.0分
8.0AI 综合评分
browser-automationchrome-cdpclipython
✦ AI Skill Hub 推荐

AI Skill Hub 强烈推荐:CLI自动化框架 是一款优质的Agent工作流。AI 综合评分 8.0 分,在同类工具中表现稳健。如果你正在寻找可靠的Agent工作流解决方案,这是一个值得深入了解的选择。

📚 深度解析

CLI自动化框架 是一套完整的 AI Agent 自动化工作流方案。随着 AI 能力的不断提升,基于 Agent 的自动化工作流正在成为提升个人和团队效率的核心方式。区别于传统的 RPA 自动化(模拟鼠标键盘操作),AI Agent 工作流通过理解任务意图、动态规划执行路径,能够处理更复杂的非结构化任务。

CLI自动化框架 工作流的设计遵循"最小配置,最大复用"原则:核心逻辑已经封装好,用户只需配置自己的 API Key 和业务参数即可快速上手。工作流内置错误处理和重试机制,在网络波动或 API 限速等情况下仍能稳定运行,适合作为生产环境的自动化基础设施。

在实际部署时,建议先在测试环境中运行 3-5 次,验证各个环节的输出结果符合预期,再部署到生产环境。AI Skill Hub 评分 8.0 分,是同类 Agent 工作流中的精选推荐。

📋 工具概览

浏览器自动化到CLI框架,集成浏览器使用、LLMs和CDP

CLI自动化框架 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。

GitHub Stars
⭐ 9
开发语言
Python
支持平台
Windows / macOS / Linux
维护状态
轻量级项目,按需更新
开源协议
MIT
AI 综合评分
8.0 分
工具类型
Agent工作流
Forks

📖 中文文档

以下内容由 AI Skill Hub 根据项目信息自动整理,如需查看完整原始文档请访问底部「原始来源」。

浏览器自动化到CLI框架,集成浏览器使用、LLMs和CDP

CLI自动化框架 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。

📌 核心特色
  • 可视化 Agent 工作流编排,无需编写复杂代码
  • 支持多步骤自动化任务链,实现全流程无人值守
  • 与外部 API、数据库和第三方服务无缝集成
  • 内置错误处理与自动重试机制,保障稳定运行
  • 提供可复用的自动化模板,快速在同类场景部署
🎯 主要使用场景
  • 自动化日常重复性工作,将精力集中于创造性任务
  • 构建数据采集 → 处理 → 输出的完整自动化管线
  • 实现跨平台、跨系统的数据流转和业务协同
以下安装命令基于项目开发语言和类型自动生成,实际以官方 README 为准。
安装命令
# 方式一:pip 安装(推荐)
pip install cliany.site

# 方式二:虚拟环境安装(推荐生产环境)
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install cliany.site

# 方式三:从源码安装(获取最新功能)
git clone https://github.com/pearjelly/cliany.site
cd cliany.site
pip install -e .

# 验证安装
python -c "import cliany.site; print('安装成功')"
📋 安装步骤说明
  1. 访问 GitHub 仓库获取工作流文件
  2. 在对应平台(Dify / Flowise / Make 等)中找到「导入工作流」功能
  3. 上传工作流文件
  4. 按照提示配置必要的环境变量和 API Key
  5. 运行测试确认流程正常后投入使用
以下用法示例由 AI Skill Hub 整理,涵盖最常见的使用场景。
常用命令 / 代码示例
# 命令行使用
cliany.site --help

# 基本用法
cliany.site input_file -o output_file

# Python 代码中调用
import cliany.site

# 示例
result = cliany.site.process("input")
print(result)
以下配置示例基于典型使用场景生成,具体参数请参照官方文档调整。
配置示例
# cliany.site 配置文件示例(config.yml)
app:
  name: "cliany.site"
  debug: false
  log_level: "INFO"

# 运行时指定配置文件
cliany.site --config config.yml

# 或通过环境变量配置
export CLIANY.SITE_API_KEY="your-key"
export CLIANY.SITE_OUTPUT_DIR="./output"
📑 README 深度解析 真实文档 完整度 92/100 查看 GitHub 原文 →
以下内容由系统直接从 GitHub README 解析整理,保留代码块、表格与列表结构。

cliany-site

PyPI version Python CI License

🌐 Languages: English | 简体中文
Turn repeated browser workflows into reusable CLI commands.

cliany-site observes a browser workflow through Chrome CDP, uses an LLM to turn it into a site-specific command, and replays that command as structured JSON. Start with a quick readiness check, then review a maintained case or automate a workflow of your own.

Start here: 10-minute success path · Release history

Architecture Overview

cliany-site/src/cliany_site/
├── cli.py              # Main entry point, SafeGroup global exception capture
├── config.py           # Unified configuration center (env + .env)
├── errors.py           # Exception hierarchy + error codes
├── response.py         # JSON envelope {ok, data, error, meta} (v1)
├── logging_config.py   # Structured logging (JSON format + masking)
├── sdk.py              # Python SDK (sync + async)
├── server.py           # HTTP API service (aiohttp)
├── security.py         # Session encryption (Fernet + Keychain)
├── sandbox.py          # Sandbox policy execution
├── audit.py            # Code security audit (AST analysis)
├── marketplace.py      # Adapter marketplace (pack/install/rollback)
├── browser/            # CDP connection + AXTree + Chrome start + iframe
├── explorer/           # LLM workflow exploration + atom extraction + verification
├── codegen/            # Code generation (template/param inference/deduplication/merge)
├── workflow/           # YAML orchestration + batch execution
├── commands/           # Built-in CLI commands
└── tui/                # Textual terminal UI

Features

Core Capabilities

  • Zero-Intrusion Exploration — Chrome CDP captures page AXTree without script injection.
  • LLM-Driven Code Generation — Claude / GPT-4o understands page semantics and generates Python CLI commands automatically.
  • LLM Call Retry Mechanism — Automatic retries during network fluctuations to improve exploration success rates.
  • Retryable LLM Outage Signalexplore --json reports gateway, rate-limit, provider connection, or service outages as E_LLM_UNAVAILABLE with sanitized retry details instead of raw upstream HTML.
  • Unified JSON Envelope — All commands support --json, outputting a machine-readable {ok, data, error, meta} envelope (v1).
  • Persistent Sessions — Maintains Cookie / LocalStorage login states across commands.
  • Dynamic Adapter Loading — Automatically registers CLI subcommands by domain, allowing for easy expansion.
  • Automatic Browser Management — Manages Chrome debugging instances or experimental Obscura binaries automatically.
  • Data Extraction with Quality Signals — Extracts structured page data, saves Markdown reports, and keeps empty/partial results visible through data.quality; generated data commands require actual extracted results unless they explicitly model a legitimate zero-match result.

Enterprise Features

  • Headless & Remote Browsers — Supports --headless and --cdp-url ws://host:port for running in servers or Docker.
  • Obscura Lifecycle Management — Dedicated obscura command group for binary installation, rollback, and health checks.
  • YAML Workflow Orchestration — Declarative multi-step workflows with data passing, conditional logic, and retry strategies.
  • Data-Driven Batch Execution — CSV/JSON batch parameters with concurrency control and summary reports.
  • Encrypted Session Storage — Fernet symmetric encryption with system Keychain integration for key management.
  • Sandbox Execution Mode--sandbox preflights generated adapter actions before atom execution; SDK and HTTP callers can opt in to the same local boundary.
  • Generated Code Security Audit — AST static analysis detects dangerous patterns like eval/exec/os.system.

Security Features

  • Session Encryption: Fernet symmetric encryption with keys stored in system Keychain (macOS Keychain / Linux Secret Service); falls back to file keys if Keychain is unavailable.
  • Sandbox Mode: For newly generated adapters, root --sandbox preflights the initial URL and recorded actions before atom execution. SDK execute(..., sandbox=True) and HTTP POST /execute with "sandbox": true use the same boundary; violations return E_SANDBOX_VIOLATION before Chrome starts.
  • Code Audit: Automatic AST scanning of codegen output to detect dangerous calls like eval / exec.

Explore web workflow (requires LLM)

cliany-site explore "https://github.com" "Search and view results" --json

Fail fast if all rows are empty or required fields are blank

cliany-site browser extract \ --selector ".result-card" \ --mode list \ --fields-json '{"title": ".title", "url": "a@href"}' \ --strict-quality \ --json ```

Structured extraction responses include data.quality. Generated list-, search-, read-, and extract- adapter commands, plus any command containing an extract action, enforce that summary. Their expects_nonempty contract defaults to true: zero data, missing required fields, and partial rows return E_EMPTY_RESULT. A command may declare expects_nonempty=false only when zero matches are a valid outcome; it then returns ok=true for that outcome while retaining data.quality as the machine-readable row-count and data-quality signal. For failed structured object rows, data.quality.field_blank_rows identifies the affected 1-based row numbers for each missing or blank field, so a field mapping or page-content problem can be located without guessing. Re-running explore for a command applies this rule to its newly generated code, but existing installed adapters are not silently rewritten. Missing required fields and partial results, including partially missing required fields, remain failures even when zero matches are permitted, so automation can distinguish "command ran", "no matching data was expected", and "data needs review".

Installation

```bash

Install via PyPI

pip install cliany-site

Or install from source

git clone https://github.com/pearjelly/cliany.site.git cd cliany.site pip install -e . ```

Server and Docker Browser Setup

--headless and --cdp-url are root CLI options, so they must appear before the command they configure, including explore and serve.

```bash

1. Install Obscura binary (version >= 0.1.0)

cliany-site obscura install 0.1.0 --json

1. Install adapter

cliany-site market install https://github.com/pearjelly/cliany.site/releases/download/v0.14.1/demo.suiteondemand.com-0.14.1.cliany-adapter.tar.gz --sha256 1671dd92d3828cecb1f04f41eefceb7bdc727d0dee1f35d4f14ca360432ced31

2. Strictly verify the installed adapter before login or replay

cliany-site verify demo.suiteondemand.com --strict --json

ASF Jenkins (Build Status)

cliany-site market install https://github.com/pearjelly/cliany.site/releases/download/v0.14.1/builds.apache.org-0.14.1.cliany-adapter.tar.gz --sha256 b09710acbabfb5465a6e04b5b140a4ffa4aa24795a2b4ada60eeabbddddea0c2
cliany-site verify builds.apache.org --strict --json
cliany-site builds.apache.org list-jobs --json
Disclaimer: These demo sites are operated by third parties and may be temporarily unavailable. cliany-site only provides the CLI shim; we do not control the demo data or uptime.

{"status":"ok","service":"cliany-site","version":"<installed-version>"}

curl -i http://localhost:8080/doctor

Preflight or install a publisher-provided remote package with a pinned digest

cliany-site market install https://publisher.example/releases/github.com-1.0.0.cliany-adapter.tar.gz --sha256 <64-hex-sha256> --dry-run --json

A successful dry run only validates the package. Remove --dry-run to install before verify <domain>.

Install adapter after reviewing dry_run, package_sha256, version, installed_version, files, would_replace, would_create_backup, and requires_force

Quick Start (v0.11.0+)

For a guided first run, see 10-minute success path. It guides you from installation through doctor to maintained cases, then points successful users toward the Real Demo Case Proposal path for contributing new public read-only cases.

For upcoming work, see the user-facing public roadmap and the maintainer Q3 roadmap.

Usage Examples

Discover maintained real demo cases

cliany-site cases --json cliany-site cases --status candidate --promotion-plan cliany-site cases --json --status candidate --promotion-plan cliany-site cases --case-id pypi-project-search --json cliany-site cases --case-id pypi-project-search --issue-template cliany-site cases --case-id pypi-project-search --evidence-bundle cliany-site cases --case-id pypi-project-search --evidence-bundle --json

Try Real Demos

The following adapters are available as downloadable assets on GitHub Release v0.14.1. The maintained case index lives in cases/README.md and cases/manifest.json. The install commands below use the published HTTPS asset and its release SHA-256. Add --dry-run --json first when you want to verify a package without installing it. For the doctor-guided active demo path, execute data.summary.demo_adapter_quickstart.recommended_commands, not the compatibility commands list: it uses verify --strict, so a static validation failure, including a missing or unloadable commands.py, exits nonzero and prevents the following read-only command from running in a sequential script. An occupied install target starts at that gate and never triggers an automatic overwrite. The compatibility verify_command remains available for diagnostic, exit-zero reporting. For a human first run, cliany-site doctor now prints that same three-command path when the active demo target is absent: fixed-SHA published install, verify --strict, then the read-only command. It only prints guidance; it never installs, executes, or overwrites an adapter for the user. Use cliany-site cases --json to inspect active demos, candidate workflows, offline validation commands, and candidate promotion next actions from the CLI; promotion_evidence_summary.primary_next_task points automation at the first candidate task to advance, while promotion_evidence_summary.primary_next_task_acceptance_criteria states the proof required for that task. Add --promotion-plan to print the candidate promotion queue across all matched candidates; combine it with --json to read promotion_plan.primary_next_item, promotion_plan.primary_runbook, promotion_plan.primary_issue_template_command, per-candidate primary tasks, the expected release asset name in expected_adapter_package, per-candidate issue_template_json_command, and the incomplete task_queue. Use cliany-site cases --case-id pypi-project-search --json to open one case with validation and promotion details, including promotion_command_plan_summary; omit --json for a copy-friendly human handoff with Promotion Tasks. The candidate human handoff also renders preflight_required, preflight_blocker, and runbook_first, so contributors see the live LLM gate before starting a real explore. Add --issue-template to print a GitHub issue body for a candidate promotion task, including Acceptance Criteria, expected_adapter_package, a Primary Runbook, LLM preflight Command SHA-256, Promotion Command Plan Summary, Promotion Command Plan command_sha256 sub-lines plus source / missing metadata, standard LLM/doctor blocker comments, Doctor Preflight Evidence Fields, and a Doctor Preflight Evidence Template with paste-ready placeholders for cliany-site doctor --llm-live --require-capability generate_adapters --json output; combine it with --json to also read issue_template_primary_task, issue_template_promotion_command_plan_summary, the same acceptance, runbook, preflight fields, structured doctor_preflight_evidence_template, plus doctor_preflight_evidence_template_field_count / doctor_preflight_evidence_template_sha256 without parsing Markdown. Add --evidence-bundle to print a structured local evidence checklist; combine it with --json for a machine-readable evidence bundle, including promotion_command_plan_summary and a promotion_command_plan that starts with llm_live_preflight before adapter package, metadata validation, and online smoke commands, per-step promotion_command_plan[*].command_sha256 drift checks, primary_next_task_runbook and primary_next_task_runbook_first_command for the current ordered checklist, llm_live_preflight_required, llm_live_preflight_command_sha256, doctor_preflight_evidence_fields, doctor_preflight_evidence_template, doctor_preflight_state_fields, doctor_preflight_state_statuses, and the template/state count/hash aliases on the adapter package task, expected_adapter_package for the package artifact, plus acceptance_criteria for the proof each evidence task must attach. Use python scripts/plan_next_iteration.py --issues-dir /tmp/cliany-candidate-issues to generate reviewable candidate issue artifacts; planner JSON exposes candidate_promotions[*].issue_template_command, candidate_promotions[*].issue_template_json_command, candidate_promotions[*].promotion_command_plan_summary, candidate_promotions[*].doctor_preflight_evidence_template, candidate_promotions[*].doctor_preflight_state_statuses, and template/state hash aliases, while issue-metadata.json and the artifacts README show the same Issue Template / Issue Template JSON handoff and promotion_command_plan_summary alongside Primary Evidence Status, Primary Acceptance Criteria, primary_next_task_acceptance_criteria, compact case_promotion_evidence_primary_runbook_steps / hash fields, case_promotion_evidence_primary_runbook_first_command, case_promotion_evidence_primary_llm_live_preflight_required, case_promotion_evidence_primary_llm_live_preflight_command_sha256, case_promotion_evidence_primary_llm_live_preflight_blocker_comment, case_promotion_evidence_primary_doctor_preflight_blocker_comment, case_promotion_evidence_primary_doctor_preflight_evidence_template_sha256, case_promotion_doctor_preflight_evidence_template_sha256, doctor_preflight_evidence_fields, doctor_preflight_state_fields, doctor_preflight_state_statuses, required_labels, required_label_count, required_labels_sha256, and case_promotion_llm_live_preflight_evidence_fields count/hash aliases before maintainers create issues or compare artifact drift. Candidate human output labels an eventual adapter command as not runnable until its package has been published and installed and verify --strict has passed; it is never an active demo quick command. When planner artifacts include --doctor-json, their public issue body uses the same distinction: attached doctor preflight evidence is shown separately from pending adapter package evidence, and a blocked provider produces a recovery-and-rerun handoff without making candidate explore runnable. --promotion-plan --json also mirrors doctor template drift metadata onto promotion_plan.primary_doctor_preflight_evidence_template_field_count, promotion_plan.primary_doctor_preflight_evidence_template_sha256, promotion_plan.primary_llm_live_preflight_command_sha256, each candidate's primary_doctor_preflight_evidence_template_sha256, and each incomplete task_queue[*].doctor_preflight_evidence_template_sha256 / task_queue[*].llm_live_preflight_command_sha256, so queue-only bots can compare the current doctor evidence contract without opening a full evidence bundle. scripts/validate_cases.py --json now carries the same drift signal on promotion_evidence_summary.primary_next_task.doctor_preflight_evidence_template_sha256 plus the doctor_preflight_state_fields / doctor_preflight_state_statuses contract; scripts/validate_cases.py --report renders primary_doctor_preflight_evidence_template_field_count and primary_doctor_preflight_evidence_template_sha256 in the Candidate Promotion Evidence Summary table; plain scripts/validate_cases.py --strict also prints promotion_evidence_primary_doctor_preflight_evidence_template_field_count, promotion_evidence_primary_doctor_preflight_evidence_template_sha256, and promotion_evidence_primary_llm_live_preflight_command_sha256 for stdout-only validation logs. Evidence bundles also expose doctor_preflight_evidence_selectors, mapping semantic fields such as checks[llm_live].details.error_code to actual doctor JSON selectors such as data.checks[name="llm_live"].details.error_code; doctor_preflight_state_statuses mirrors the extractor states ready, blocked, and missing_fields. The doctor_preflight_state_fields contract lists preflight_state.status, preflight_state.ready_for_adapter_package, preflight_state.primary_reason, preflight_state.reason_codes, and preflight_state.next_action; doctor_preflight_state_statuses is limited to ready, blocked, and missing_fields, so README-only maintainers can tell whether to continue to explore or attach blocker evidence first. Candidate promotion treats summary.capabilities.run_browser_workflows.ready=false, summary.llm_live_preflight.ready=false, generate_adapters.ready=false, or any llm_live warning/error such as E_LLM_UNAVAILABLE provider connection failures as blocker evidence; keep adapter_package pending or blocked instead of fabricating adapter package proof. When the live gate blocks promotion, save the doctor result with cliany-site doctor --llm-live --require-capability generate_adapters --json > /tmp/cliany-doctor-preflight.json, then run cliany-site cases --case-id pypi-project-search --evidence-bundle --doctor-json /tmp/cliany-doctor-preflight.json --json or cliany-site cases --case-id pypi-project-search --issue-template --doctor-json /tmp/cliany-doctor-preflight.json; the output includes doctor_preflight_evidence_values, doctor_preflight_evidence_ok, doctor_preflight_evidence_missing_count, doctor_preflight_evidence_null_count, doctor_preflight_evidence_null_fields, and doctor_preflight_state on the bundle and primary adapter_package task. A nullable field is present in doctor JSON with value null; a missing field has no matching selector, so automation can handle connection-level failures without conflating them with schema drift.

To keep already-open candidate issues aligned with the current strict handoff, run python scripts/audit_candidate_issues.py --repo pearjelly/cliany.site --json. It is read-only by default and reports current, stale, missing, duplicate, and unexpected labeled issue states with body hashes. When a saved live-preflight result is available, add --doctor-json /tmp/cliany-doctor-preflight.json so the audit compares bodies against that exact gate state and includes its source path, value hash, and runnable state in local JSON output. Public issue bodies retain the value hash and extracted gate evidence, but omit the local source path. When that evidence is attached, the primary task labels package evidence separately and tells contributors to wait for provider recovery before rerunning the strict preflight; it never turns a blocked preflight into package or explore evidence. The human-readable report also prints an unexpected issue's actual title and URL so the blocker can be located without parsing JSON. Only use --apply --confirm-rewrite after reviewing stale bodies and resolving missing, duplicate, or unexpected issues; it will not create, close, or promote issues.

If a stale public candidate issue already contains a Doctor Preflight Evidence snapshot, audit_candidate_issues.py --apply --confirm-rewrite refuses to replace it without the current --doctor-json; the JSON report returns doctor_json_required_before_rewrite and lists the protected issue numbers. This prevents a no-evidence placeholder template from erasing a real blocker snapshot.

If the GitHub API or network is unavailable while auditing, the JSON result returns retryable E_GITHUB_UNAVAILABLE with a retry action. Treat that as “remote issue state not read”, not as missing; do not run --apply until a later read succeeds.

The doctor evidence contract includes summary.capabilities.generate_adapters.local_ready and summary.capabilities.generate_adapters.local_blockers. These fields show whether local prerequisites remain healthy when the live provider is blocked; they do not replace summary.llm_live_preflight.ready=true as the gate for candidate explore.

When the audit reports a missing candidate issue, read its issue_template_command (for example cliany-site cases --case-id pypi-project-search --issue-template --json) and review the generated body before creating anything. The audit only supplies the handoff; it never creates a public issue.

If the GitHub GraphQL request ends with an EOF, the audit reports retryable E_GITHUB_UNAVAILABLE rather than synthesizing issue state. Wait for the remote API and rerun; do not apply changes while the issue list was not read.

SuiteCRM Demo (Enterprise CRM)

```bash

3. Login (opens browser — use demo account from https://demo.suiteondemand.com/)

cliany-site login https://demo.suiteondemand.com/

Check environment

cliany-site doctor --json

Configuration

```bash

Verify Environment

cliany-site doctor --json
cliany-site doctor --llm-live --require-capability generate_adapters --json

By default, doctor checks local configuration, CDP, directories, and keys without calling the LLM provider. data.summary.ready_for_explore and data.summary.capabilities.generate_adapters.local_ready remain local configuration signals; local_blockers explains only those local prerequisites, while live_blockers separately reports an omitted or failed provider preflight. Automation must require data.summary.ready_for_live_explore=true (or the equivalent capability field) before a real explore. A retryable provider failure can therefore leave local_ready=true while overall ready=false and live_blockers=["llm_live"]. The capability's next_step gives the exact strict retry command. Before a longer explore, use --llm-live --require-capability generate_adapters for a strict provider gate; a missing key returns nonzero with E_LLM_DISABLED, an upstream outage returns E_LLM_UNAVAILABLE, and both preserve the full checks in error.details. Ordinary doctor --json also returns a stable code such as E_CDP_UNAVAILABLE when a hard check fails, instead of collapsing the diagnostic into E_UNKNOWN. Human output names the missing-key configuration fix separately from an upstream retry.

Optional live provider preflight for automation before explore

curl -i "http://localhost:8080/doctor?llm_live=true&require_capability=generate_adapters" curl -i http://localhost:8080/adapters

Python SDK

import asyncio

from cliany_site.sdk import ClanySite


async def main():
    async with ClanySite() as cs:
        result = await cs.verify("github.com")

    if not result["success"]:
        error = result["error"] or {}
        raise RuntimeError(f"{error.get('code')}: {error.get('message')}")

    print(result["data"]["results"][0])


asyncio.run(main())

SDK methods return the standard {success, data, error} envelope. doctor() now exposes the same structured checks and summary contract as the CLI, including stable hard-blocker error codes and error.details diagnostics. It does not call a provider by default; use doctor(llm_live=True, require_capability="generate_adapters") only when an automation explicitly needs the live preflight before explore. llm_live must be an actual Python boolean: strings, numbers, and None return E_INVALID_PARAM before CDP or provider checks, so a truthy string cannot accidentally start a live preflight. explore(url, workflow_description) requires a non-blank text workflow and navigate(url) accepts only whitespace-free HTTP(S) URLs with a host; invalid input returns an error envelope before creating an explorer or browser session. Direct SDK control values are equally strict: explore(force=...), execute(..., params=..., dry_run=..., sandbox=...), and list_adapters(detail=...) reject malformed values with E_INVALID_PARAM before adapter lookup or browser work. save_session(domain) also accepts only a host with an optional valid port, rejecting credentials, paths, whitespace, and invalid ports before it opens Chrome. The synchronous execute() helper also accepts sandbox=True and forwards the same local preflight. verify(domain) performs the same strict static checks as cliany-site verify <domain> --strict: metadata, generated module safety, manifest integrity, and whether commands.py actually exports a loadable Click group. It does not open Chrome or contact an LLM. An adapter directory, metadata.json, commands.py, manifest, or manifest-declared file that is a symbolic link is rejected as security_issue before its contents are read or a module is imported. Direct root CLI adapter dispatch now also applies the generated-module source scan before importing commands.py: banned patterns and non-UTF-8 modules return E_VERIFY_STATIC with security_issue. When a manifest is present, it also checks every declared file hash before import; a mismatch returns E_VERIFY_STATIC with manifest_error. It returns ADAPTER_NOT_FOUND for an absent adapter and E_VERIFY_STATIC with data.results-compatible diagnostics when verification fails. Run the strict live-provider preflight before calling explore; configured credentials alone are not evidence that adapter generation is available.

The synchronous save_session(domain, cdp_url=..., headless=...) helper has the same host validation and browser configuration path as await ClanySite(...).save_session(domain); it does not bypass Chrome or session safeguards.

HTTP API

Sandbox preflight

Newly generated adapter commands honor root --sandbox before any atom command starts. SDK callers can use execute(domain, command, sandbox=True), while POST /execute accepts a boolean sandbox field. The parameter-resolved action list is checked locally before Chrome starts. Cross-domain navigation, dangerous URL schemes, JavaScript execution, and downloads return E_SANDBOX_VIOLATION / 422; this local result does not prove Chrome, LLM, or third-party workflow readiness.

```bash

Start a local API server with the default Chrome connection

cliany-site serve --port 8080

Call API

curl -i http://localhost:8080/health

Command Reference

CommandArgumentsDescription
doctor[--json]Check environment (CDP, LLM Key, directory structure).
login <url>[--json]Open URL to wait for login and save session.
explore <url> <workflow>[--json] [--interactive] [--extend <domain>] [--record]Explore workflow and generate adapter.
list[--json]List generated adapters.
cases[--case-id <id>] [--status <status>] [--detail] [--issue-template] [--evidence-bundle] [--promotion-plan] [--json]List maintained real demo cases and candidate workflows.
verify <domain>[--json]Statically verify adapter schema, signatures, and dependency integrity.
migrate[--json] [--dry-run]Migrate all legacy adapters to schema v3.
replay <domain>[--session <id>] [--step]Replay exploration recording with screenshots and actions.
check <domain>[--json] [--fix]Check adapter health status.
obscura <subcommand>install/use/status/clean/rollback/upgrade/doctorManage experimental Obscura browser provider.
tuiStart TUI management interface.
serve[--host] [--port]Start HTTP API service.
market publish <domain>[--version] [--json]Pack and export adapter.
market install <source>[--sha256] [--force] [--dry-run] [--json]Install a local package or an HTTPS package with a pinned SHA-256.
market uninstall <domain>[--json]Uninstall adapter.
market rollback <domain>[--index] [--json]Rollback to a backup version.
workflow run <file>[--json] [--dry-run]Execute YAML workflow.
workflow validate <file>[--json]Validate workflow file.
workflow batch <adapter> <cmd> <data>[--concurrency] [--json]Batch execution.
report list[--domain] [--json]List execution reports.
report show <id>[--json]View report details.
<domain> <command>[--json] [args...]Execute a command from an adapter.

Global Options: --json --verbose --debug --cdp-url <ws://host:port> --headless --sandbox --explain --force-browser --diagnose

Ecosystem Integration

  • Python SDKfrom cliany_site import explore, execute for programmatic calls.
  • HTTP APIcliany-site serve --port 8080 starts a REST API service.
  • Adapter Marketplace — Pack, install, uninstall, and rollback adapters to share automation capabilities within teams.
  • TUI Management Interface — A Textual-based terminal UI for visual adapter management.
  • iframe/Shadow DOM — Recursive AXTree collection with cross-origin iframe and Shadow DOM penetration.

Basic Workflow

```bash

1. Explore workflow

cliany-site explore "https://github.com" "Search repository and view README" --json

Include adapter metadata when it is needed by an integration

curl -i "http://localhost:8080/adapters?detail=true" curl -i "http://localhost:8080/verify?domain=github.com" curl -X POST http://localhost:8080/explore \ -H "Content-Type: application/json" \ -d '{"url": "https://github.com", "workflow": "搜索仓库"}' ```

GET /health confirms that the HTTP service is reachable and returns its service name plus installed package version. It is a liveness probe, not proof that CDP or an LLM provider is ready; GET /doctor returns the same structured checks, summary, stable hard-blocker codes, and repair guidance as the CLI. It does not contact the provider unless llm_live=true is explicit; require_capability=generate_adapters requires that flag. GET /adapters?detail=true includes adapter metadata. The llm_live, detail, require_capability, and domain query keys may each appear at most once. llm_live and detail accept only true/false, 1/0, or yes/no; invalid booleans or repeated keys return 400 instead of silently changing the selected response shape, capability, or adapter domain. Unavailable Chrome, LLM, or a required capability returns 503. Choose exactly one browser path: --headless starts Chrome for this process, while --cdp-url connects to an existing remote Chrome. Do not place either option after serve.

GET /verify requires exactly one safe domain query parameter and runs the strict static adapter checks without connecting to Chrome or an LLM. A repeated domain returns BAD_REQUEST / 400; invalid directory names return E_INVALID_PARAM / 400; missing adapters return 404; and an installed adapter with unsafe, missing, unreadable, unloadable, or symbolic-link core files returns E_VERIFY_STATIC / 422 with the cliany-site verify <domain> --strict --json repair path. Before browser startup, POST /execute applies the same local static contract: it rejects a symbolic-link adapter directory, metadata, command module, or manifest before reading or importing it, and a present manifest must have ordinary declared files with matching hashes. This does not prove Chrome, LLM, or third-party workflow readiness. Mutating endpoints accept JSON objects only and reject unknown fields with BAD_REQUEST / 400: POST /explore accepts url, workflow, legacy workflow_description, and force; POST /execute accepts domain, command, params, dry_run, and sandbox; POST /login accepts url. params must be an object, force / dry_run / sandbox must be booleans, and required url, workflow, domain, and command fields must be non-empty strings. For POST /explore and POST /login, url must also be an http or https URL with a host and no whitespace; unsupported schemes, missing hosts, and malformed URLs return BAD_REQUEST / 400 before the SDK or browser runs. Direct ClanySite.explore() and ClanySite.login() use that same URL contract and return INVALID_URL before constructing an explorer or browser session. Arrays, objects, and blank strings return BAD_REQUEST / 400 before reaching the HTTP API SDK boundary, so malformed JSON cannot become an unexpected server error. Other responses preserve the SDK envelope: 503 for unavailable Chrome or LLM dependencies, and 500 for an unexpected server failure.

YAML Workflow Orchestration

```yaml

workflow.yaml

name: GitHub Search Process steps: - name: Search Repository adapter: github.com command: search params: query: "cliany-site" - name: View Details adapter: github.com command: view params: repo: "$prev.data.results[0].name"

bash cliany-site workflow run workflow.yaml --json cliany-site workflow validate workflow.yaml --json ```

Preflight the local adapter package (no runtime writes)

cliany-site market install ~/.cliany-site/packages/github.com-1.0.0.cliany-adapter.tar.gz --dry-run --json

If requires_force is true, use would_replace to confirm presence and compare version with installed_version when available; the dry run stayed read-only, so use --force only when you intend to replace the installed adapter.

cliany-site market install ~/.cliany-site/packages/github.com-1.0.0.cliany-adapter.tar.gz

🇨🇳 中文文档镜像 AI 翻译 2026-06-17
英文原文章节由系统翻译为中文摘要,便于快速理解。完整原文见上方 "📑 README 深度解析"。
📌 简介

cliany-site 是一个强大的 Web 自动化与智能探索工具,旨在通过 LLM 驱动的方式简化复杂的网页交互任务。它结合了 Chrome CDP 技术与先进的语言模型,能够理解页面语义并自动生成执行指令,为开发者提供从零侵入式探索到结构化数据提取的全栈解决方案。

⚡ 功能介绍

核心功能涵盖了基于 Chrome CDP 的零侵入式页面 AXTree 捕获,支持由 Claude 或 GPT-4o 驱动的智能代码生���。系统内置了完善的 LLM 调用重试机制,能够应对网络波动;同时提供企业级特性,如 Headless 模式、远程浏览器支持(Docker/远程 CDP URL)、Obscura 生命周期管理以及基于 YAML 的声明式工作流编排。

📋 环境依赖

使用 explore 工作流进行智能网页探索时,需要配置并接入 LLM(如 Claude 或 GPT-4o)的 API 密钥。此外,系统支持通过 --json 模式输出结构化结果,以便于集成到其他自动化流水线中。

🛠 安装步骤(Docker/pip/源码)

您可以通过 PyPI 进行快速安装:使用 `pip install cliany-site`;或者通过源码安装:使用 `git clone` 克隆仓库后,在项目根目录下执行 `pip install -e .` 进行开发模式安装。

🚀 使用教程

对于初学者,建议参考官方提供的 [10-minute success path] 文档进行引导式体验。系统支持从真实的 Demo Adapter 开始运行,在完成 LLM 配置后,您可以尝试通过 `cliany-site explore` 命令发起智能探索任务,或使用 `browser extract` 进行高精度的结构化数据抓取。

⚙️ 配置说明(含 MCP / env)

项目通过统一的 configuration center 管理配置,支持 .env 文件与环境变量。您可以使用 `cliany-site doctor` 命令检查当前环境状态,或使用 `--llm-live` 参数进行 LLM 服务的预检,确保 API 调用链路畅通。

🔌 API 说明

cliany-site 提供双重调用方式:开发者可以使用 Python SDK 进行异步编程集成;也可以通过 `cliany-site serve` 启动 HTTP API 服务,利用 RESTful 接口(如 /explore, /doctor)实现跨语言的远程调用。

🔄 工作流/模块

cliany-site 构建了一个完整的生态系统:提供 Python SDK 用于程序化调用,支持 HTTP API 快速构建微服务,并拥有 Adapter Marketplace(适配器市场)用于团队间共享自动化能力。通过 TUI 管理界面与 YAML 工作流,您可以轻松实现复杂的多步自动化任务编排。

🎯 aiskill88 AI 点评 A 级 2026-06-17

高质量的开源AI工作流框架,具有较强的实用价值

📚 实用指南(长尾问题)
适合谁
  • 构建多智能体协作系统的 Agent 开发者
最佳实践
  • 生产部署优先使用 Docker Compose 隔离依赖,并挂载 volume 持久化数据
  • Agent 任务先做 dry-run 验证工具调用链,再开启自主执行
常见错误
  • API key 直接提交到 git 仓库(请用 .env 并加入 .gitignore)
  • 容器内无法访问宿主机 localhost — 使用 host.docker.internal
  • Python 依赖冲突:建议用 venv / uv 隔离环境
部署方案
  • Docker:cliany-site 提供官方镜像,docker compose up 一键启动
  • CLI:直接 npm install -g / pip install,命令行调用
  • 云端托管:可放在 Vercel / Railway / Fly.io 等 PaaS 平台
相关搜索
cliany-site 中文教程cliany-site 安装报错怎么办cliany-site Docker 部署cliany-site Agent 工作流cliany-site 与同类工具对比cliany-site 最佳实践cliany-site 适合谁用

⚡ 核心功能

👥 适合谁
  • 构建多智能体协作系统的 Agent 开发者
⭐ 最佳实践
  • 生产部署优先使用 Docker Compose 隔离依赖,并挂载 volume 持久化数据
  • Agent 任务先做 dry-run 验证工具调用链,再开启自主执行
⚠️ 常见错误
  • API key 直接提交到 git 仓库(请用 .env 并加入 .gitignore)
  • 容器内无法访问宿主机 localhost — 使用 host.docker.internal
  • Python 依赖冲突:建议用 venv / uv 隔离环境

👥 适合人群

自动化工程师和运维人员项目经理和业务分析师希望减少重复性工作的专业人士数字化转型团队

🎯 使用场景

  • 自动化日常重复性工作,将精力集中于创造性任务
  • 构建数据采集 → 处理 → 输出的完整自动化管线
  • 实现跨平台、跨系统的数据流转和业务协同

⚖️ 优点与不足

✅ 优点
  • +MIT 协议,可免费商用
  • +大幅减少重复性人工操作
  • +可视化流程,清晰直观
  • +可扩展性强,支持复杂场景
⚠️ 不足
  • 初始配置和调试需投入一定时间
  • 强依赖外部服务的稳定性
  • 复杂场景需具备一定技术基础
⚠️ 使用须知

AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。

建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。

📄 License 说明

✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。

🔗 相关工具推荐

📚 相关教程推荐
📰 相关 AI 新闻
🍿 AI 圈相关吃瓜
🗺️ 相关解决方案
🧩 你可能还需要
基于当前 Skill 的能力图谱,自动补全的工具组合

❓ 常见问题 FAQ

cliany-site 是一款Python开发的AI辅助工具。开源AI工作流:A browser automation-to-CLI framework. Leveraging browser-use, LLMs, and the CDP。⭐9 · Python 主要应用场景包括:自动化浏览器操作和数据处理。
💡 AI Skill Hub 点评

总体来看,CLI自动化框架 是一款质量优秀的Agent工作流,在同类工具中具备一定竞争力。AI Skill Hub 将持续追踪其更新动态,建议收藏备用,结合自身场景选择合适时机引入使用。

⬇️ 获取与下载
⬇ 下载源码 ZIP

✅ MIT 协议 · 可免费商用 · 直接从 aiskill88 服务器下载,无需跳转 GitHub

📚 深入学习 CLI自动化框架
查看分步骤安装教程和完整使用指南,快速上手这款工具
🌐 原始信息
原始名称 cliany-site
原始描述 开源AI工作流:A browser automation-to-CLI framework. Leveraging browser-use, LLMs, and the CDP。⭐9 · Python
Topics browser-automationchrome-cdpclipython
GitHub https://github.com/pearjelly/cliany.site
License MIT
语言 Python
🔗 原始来源
🐙 GitHub 仓库  https://github.com/pearjelly/cliany.site 🌐 官方网站  https://www.cliany.site

收录时间:2026-06-17 · 更新时间:2026-06-20 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。

📺 订阅 AI Skill Hub Daily Telegram 频道
每天 8 条精选 AI Skill、MCP、Agent 与自动化工具推送
加入频道 →