



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-0f910d8806d5761b.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-a7abd4d4c49ac593.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-5fc4c4a9cb41e596.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-ed0cee9214dedabd.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-78a2491d538dab5a.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-c26b63d7c532d0a2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-a6f60cea68c08405.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-f66faf28b2ea18b6.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-6701f6218c53cf5b.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-7037fa46ae124d97.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-97df7784617ce1ea.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-9be9fe6313f476af.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-62747e27e61258dc.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-b04ca6fccda778e2.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-72bd7d974b5ac1cc.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-4c5c0895f723f870.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_caches_react_shell","actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","actions_runners_react_shell","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_ahp_tool_call_timing","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_base_model_policy_row","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_early_task_provisioning","copilot_chat_persist_session_drafts","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_awps_batching","copilot_mission_control_early_stop","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_discussion_comment_trigger","copilot_swe_agent_discussion_opened_trigger","copilot_swe_agent_discussion_updated_trigger","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_assigned_trigger","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_issue_labeled_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_assigned_trigger","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_labeled_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_ready_for_review_trigger","copilot_swe_agent_pull_request_review_requested_trigger","copilot_swe_agent_pull_request_review_submitted_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_sub_issue_added_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_web_integration_cutover","copilot_workbench_sunset_redirect","dashboard_agents_module_auth_token_check","dashboard_indexeddb_caching","fgpat_permissions_selector_redesign","glc_code_quality_repo_settings_workflow_config","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_team_vs_personal","issue_relative_time_micro","issue_viewer_paved_path","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_header_feedback","milestone_closed_issues_prioritization","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","primer_react_timeline_list_semantics","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_copilot_attribution_header","pull_request_overview_merge_control","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_navigation_shortcuts","pull_request_virtualization_image_estimate","pull_request_virtualization_loader_batching","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_logged_out_repository_header","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_declutter","repo_pulls_dashboard_ga","repo_pulls_dashboard_persistence","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_nav_spark_models_removed","speculation_rules_ui_service","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","update_issue_suggestions","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-3663bcaacc724f4c.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-721126455a2225e3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-156c6259e31cc551.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-f6ce38f47c2e1d56.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-804a14996977c014.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-fb5d13278eb42203.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tp-ea613009a991e211.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-107a7753389a8a2d.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.25915bc98fb322a6.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-52ed81112a548e10.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e8810f64c443fb9b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-fe7e72f699fdf493.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-9da36843ba9d191d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-9a1160b939f2cd52.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3h-55903cf2303047ad.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hk-0d35a1220587d888.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-c964b1a3671f2a92.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-1d800d09e9a8720a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-1ad12374da9777f2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-531d35538b61fd0d.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-bf5e3b2aee197122.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-5e0b3ae3c4036207.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-752acdc868e2da64.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-e87ffadced20a3c9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-75bc55d9971828b7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a9-34620c7b13885011.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-643d2814115561a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t6-5d0869970ac0aac0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pb0-a5c5ec36d311aeef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6n-afcf86ccabc4cad2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zj-f08c728cf00018aa.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/o6-2a1c68d269710ee9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h9a-c6405aa090de0e84.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/vy6-3c3e6e96629c2ce4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/js-4eb97d5803e657c0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g7-baf9e817ae102b01.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/unc-96389cade7bad821.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/nu-65322a6997c6c93c.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-5dd3809b5c8bac3c.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.3792087592bf207a.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-4318f0f4c608f3dd.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-7afef75d393cf294.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/op-acddf38478d45ef9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-461e4b09f2e67ee5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qmp-c7cfba40cf5a93b0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-148a74299e5a01ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-a52ba56147f77909.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4u-ec4874f70bfd5d76.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s0-481bd34f90bc2bd7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y5-ed17e73b4c0bd15e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4-be595475cdbf7d4b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8-23a3c5ff8eef412d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-27679061f16e1495.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/iu-9806a0291a782cbe.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ftx-39fb490e3c1d778f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zi-32a0c3c081ea5cce.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sg-7a5d50475874c0e1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pd-6a8710840033e042.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/86g-ec28c25ed7d5de06.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sn-1bab7384818953b7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/iq-6d4ecf6d2fb6993c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p2-7d8e7cee5b46cb45.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7d-2e3cc25d719f3a95.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4d-76d8acdf21a33266.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tsb-e0f6288ab985d9d2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lf-910ef220ce85c660.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2j-2f19c1afd2ceaf93.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/me-f1476ec44a29f34a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p2u-e654a57b1a70c47d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5d-d97cc006d4da4d9b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r5-38f013bc2c0fd298.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r6s-9039f5619230a653.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9e-cece06724bf6ea3b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/x9-3e077a3a37a73f9f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pj-87629cb5389d7663.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eq-3764fd5f66494289.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/13-d889936dff7e5c0f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/44-8193eea4af825ead.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/v4-9c1327d212e52a0d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/id-7f39706ba9007db6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ah-271362a1ed227d03.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s1g-d434d712bca59d3a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/vz-d7f4a583896f872e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/47-c8c0ce2700acc5be.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-4118a687d0150749.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/pj.75627bfeb9ceb1da.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ah.2623f7c6ecbe2ecd.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/47.78770c57a48a810c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.37656c95a9729fb9.module.css" />


  <title>OpenCLI/README.zh-CN.md at main · jackwener/OpenCLI · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:d2f1acce-2c33-e43c-7a3f-ecc2914757ec">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="B218:1748:A909643:DC8ECF1:6ACA6DFB" data-pjax-transient="true"/><meta name="html-safe-nonce" content="38baeafbaec52327dbca743e0cd466209e5d9c418da098c015dc12f93d6f07c1" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMjE4OjE3NDg6QTkwOTY0MzpEQzhFQ0YxOjZBQ0E2REZCIiwidmlzaXRvcl9pZCI6IjI4NTM3OTg5MjQzNTg2NzU5NjMiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="cd380d340a18907fb72a0cbc6717e069547e50218a53e37551df6529ba70a5e8" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:1181982220" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="Make Any Website into CLI &amp; Use your logged-in browser by AI agent.  - OpenCLI/README.zh-CN.md at main · jackwener/OpenCLI">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/jackwener/OpenCLI/blob/main/README.zh-CN.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/fb38da016aca5ebe3b3cfc5c6a9f6ed92cdf8c4173cf6fe08762903f8442d6df/jackwener/OpenCLI" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="OpenCLI/README.zh-CN.md at main · jackwener/OpenCLI" /><meta name="twitter:description" content="Make Any Website into CLI &amp; Use your logged-in browser by AI agent.  - jackwener/OpenCLI" />
  <meta property="og:image" content="https://opengraph.githubassets.com/fb38da016aca5ebe3b3cfc5c6a9f6ed92cdf8c4173cf6fe08762903f8442d6df/jackwener/OpenCLI" /><meta property="og:image:alt" content="Make Any Website into CLI &amp; Use your logged-in browser by AI agent.  - jackwener/OpenCLI" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="OpenCLI/README.zh-CN.md at main · jackwener/OpenCLI" /><meta property="og:url" content="https://github.com/jackwener/OpenCLI/blob/main/README.zh-CN.md" /><meta property="og:description" content="Make Any Website into CLI &amp; Use your logged-in browser by AI agent.  - jackwener/OpenCLI" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="d05be8f8b6905b6460fc264e80447721dfee1e32cf9e4291c4bf58f160c9f705" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="c4a65e47b0c850e1157ae8e66298070851d7e3b558038de5a3b4ff7a93e630ed" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="a80b0545b169f440b929ce2b977c76b6988f014cca6513fb83c5df6581635fb3" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="af51c6f9d659be0324665373df3ee542f817dbd7f66f352a087935f2ceabe545" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/jackwener/OpenCLI git https://github.com/jackwener/OpenCLI.git">

  <meta name="octolytics-dimension-user_id" content="30525741" /><meta name="octolytics-dimension-user_login" content="jackwener" /><meta name="octolytics-dimension-repository_id" content="1181982220" /><meta name="octolytics-dimension-repository_nwo" content="jackwener/OpenCLI" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="1181982220" /><meta name="octolytics-dimension-repository_network_root_nwo" content="jackwener/OpenCLI" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="3b1bb5b10f5c7fd1769d56e38b15dfddb34052a8" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/19-c660652a0a1639be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-47c5223d8d1af8ef.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.d53d993320d57e14.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-install-banner-partial-3c87deb7f0f20434.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-install-banner-partial.7b357012e82003e7.module.css" />

<react-partial
  partial-name="app-install-banner-partial"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>


          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/et9-7eeec247c287fca4.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/94v-e20946127faa8f6e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-892a9e99cc92858d.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jag-441e702bfd4c7904.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hw-8ce7888b57d0a23c.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/rq-0ec82a12cf538a4d.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/1m-a7a4c022483b2713.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-70703fe17422eb58.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.fbc35b3d20e988ff.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/1m.fec8b575d0e5234f.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2Fjackwener%2FOpenCLI%2Fblob%2Fmain%2FREADME.zh-CN.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=jackwener%2FOpenCLI","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/jackwener/OpenCLI/blob/main/README.zh-CN.md\",\"user_id\":null}}","auth_hydro_click_hmac":"60049aeb0acf9135db04074c033ca1b6723a08f1cdbe89d1e216fc641858b57c","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2Fjackwener%2FOpenCLI%2Fblob%2Fmain%2FREADME.zh-CN.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/jackwener/OpenCLI/blob/main/README.zh-CN.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="60049aeb0acf9135db04074c033ca1b6723a08f1cdbe89d1e216fc641858b57c"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2Fjackwener%2FOpenCLI%2Fblob%2Fmain%2FREADME.zh-CN.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/jackwener/OpenCLI/blob/main/README.zh-CN.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="60049aeb0acf9135db04074c033ca1b6723a08f1cdbe89d1e216fc641858b57c"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=jackwener%2FOpenCLI" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/jackwener/OpenCLI/blob/main/README.zh-CN.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="60049aeb0acf9135db04074c033ca1b6723a08f1cdbe89d1e216fc641858b57c"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-4e0e1593-3c4f-40b2-94b9-b8c7ef76f11e" aria-labelledby="tooltip-46056b9c-7f8e-4bae-b328-2c0e7908616f" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-46056b9c-7f8e-4bae-b328-2c0e7908616f" for="icon-button-4e0e1593-3c4f-40b2-94b9-b8c7ef76f11e" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>






  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      








  

    <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ym-6bc2c9bf8112c038.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sk2-8deeef9351be3911.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ni-3e194d222c7770bf.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7x-71d30cb240cd901f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wwk-ad869086822937b1.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a1-9f79841ecac1da8e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wzg-40a3213b3e83400b.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5f-64f8e7d5bcbd4787.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z5-b53a93078d026f1e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8h-cef26f68c1331011.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fq-3ce13a77e863807a.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a7-596b507bd20acddc.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xfx-c82d8352413aea0a.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j4-b3a9e87fa7878a98.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/global-nav-bar-29c7aef68ee9db41.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/pj.75627bfeb9ceb1da.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-nav-bar.2f2560cba06ab359.module.css" />

<react-partial
  partial-name="global-nav-bar"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"contextRegion":{"crumbs":[{"crumb_type":"user","label":"jackwener","is_root":false,"href":"/jackwener"},{"crumb_type":"repository","label":"OpenCLI","is_root":false,"href":"/jackwener/OpenCLI"}],"localNavigation":[{"id":"code","icon":"code","label":"Code","href":"/jackwener/OpenCLI","selectedLinks":["repo_source","repo_downloads","repo_commits","repo_releases","repo_tags","repo_branches","repo_packages","repo_deployments","repo_attestations"],"popoverTarget":false,"commandId":"repositories:go-to-code","reactNav":{"appTarget":"code-view","anchor":"code-view-repo-link"},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"issues","icon":"issue-opened","label":"Issues","href":"/jackwener/OpenCLI/issues","selectedLinks":["repo_issues","repo_labels","repo_milestones"],"count":122,"popoverTarget":false,"commandId":"repositories:go-to-issues","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"pull-requests","icon":"git-pull-request","label":"Pull requests","href":"/jackwener/OpenCLI/pulls","selectedLinks":["repo_pulls","checks"],"count":213,"popoverTarget":false,"commandId":"repositories:go-to-pull-requests","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"actions","icon":"play","label":"Actions","href":"/jackwener/OpenCLI/actions","selectedLinks":["repo_actions"],"popoverTarget":false,"commandId":"repositories:go-to-actions","reactNav":{"appTarget":"actions-workflows","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"projects","icon":"table","label":"Projects","href":"/jackwener/OpenCLI/projects","selectedLinks":["repo_projects","new_repo_project","repo_project"],"popoverTarget":false,"commandId":"repositories:go-to-projects","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"security-and-quality","icon":"shield","label":"Security and quality","href":"/jackwener/OpenCLI/security","selectedLinks":["security","overview","alerts","policy","token_scanning","code_scanning"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-security","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"insights","icon":"graph","label":"Insights","href":"/jackwener/OpenCLI/pulse","selectedLinks":["repo_graphs","repo_contributors","dependency_graph","dependabot_updates","pulse","people","community"],"popoverTarget":false,"commandId":"repositories:go-to-insights","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}}],"localNavigationUpdateChannel":null,"selectedLink":"repo_source"},"owner":null,"headerLogo":{"href":"/","aria-label":"Homepage "},"notifications":{"indicatorMode":"disabled","websocketChannel":null,"fetchIndicatorSrc":"/notifications/indicator","fetchIndicatorEnabled":false},"issues":{"href":"/issues"},"pulls":{"href":"/pulls"},"contributedRepos":{"href":"/repos"},"copilot":{"show":false,"showAgentsButton":false,"showRelaunchAnnouncement":false,"copilotChatUrl":null,"copilotApiUrl":"https://api.githubcopilot.com"},"search":{"show":true,"showCommandPalette":false,"isSearchPage":false,"isJumpToSearch":false,"searchContext":{"scope":"repo:jackwener/OpenCLI","current_repo_name":"OpenCLI","current_repo_nwo":"jackwener/OpenCLI","user_id":"jackwener"}},"commandPalette":null,"enterpriseBar":{"show":false},"globalTransactionalMessage":[],"payloadsUrl":"/_global-navigation/payloads.json?can_toggle_site_admin_and_employee_status=0\u0026is_admin_mode_on=0\u0026is_ui_opted_out=0\u0026show_ui_opt_out=0\u0026v=7","contextRegionUrl":"/_global-navigation/context-region.json"}}</script>
  <div data-target="react-partial.reactRoot"><header aria-label="Global navigation menu" data-component="Stack" class="GlobalNav styles-module__appHeader__YzYWk prc-Stack-Stack-UQ9k6" data-gap="none" data-direction="vertical" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="none"><div data-component="Stack" class="prc-Stack-Stack-UQ9k6" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="center" data-padding="none"><div data-testid="top-nav-center" data-component="Stack" class="styles-module__center__R3QRv styles-module__withLocalNavigation__rjTJ_ GlobalNavBar-module__loggedOut__Jv1rk prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="normal"><nav class="styles-module__contextRegion__VbSp2 prc-Breadcrumbs-BreadcrumbsBase-3Gb-B" aria-label="Breadcrumbs" data-overflow="menu" data-variant="normal" data-component="Breadcrumbs"><ol class="prc-Breadcrumbs-BreadcrumbsList-BKjpe"><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/jackwener" data-discover="true"><span class="">jackwener</span></a></li><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/jackwener/OpenCLI" data-discover="true"><span class="styles-module__contextCrumbLast__tI2e3">OpenCLI</span></a></li></ol></nav></div><div data-testid="top-nav-right" data-component="Stack" class="styles-module__right__mlBQg styles-module__withLocalNavigation__rjTJ_ styles-module__rightWithResponsiveCreateButton__SKn2W prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="normal"></div></div><h2 class="prc-src-InternalVisuallyHidden-2YaI6">Repository navigation</h2><nav class="prc-components-UnderlineWrapper-eT-Yj prc-UnderlineNav-UnderlineWrapper-GWONT LocalNavigation-module__LocalNavigation__b0Xc0" aria-label="Repository" data-variant="inset" data-overflow-mode="wrap" data-hide-icons-breakpoint="medium"><ul class="prc-UnderlineNav-ItemsList-oj8gN prc-components-UnderlineItemList-xKlKC" role="list"><li role="presentation" aria-hidden="true" class="prc-UnderlineNav-WrapSpacer--aLgz"></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a aria-current="page" data-tab-item="code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/jackwener/OpenCLI" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" data-content="Code">Code</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="issues" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/jackwener/OpenCLI/issues" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg></span><span data-component="text" data-content="Issues">Issues</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">122</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->122<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="pull-requests" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/jackwener/OpenCLI/pulls" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></span><span data-component="text" data-content="Pull requests">Pull requests</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">213</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->213<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="actions" data-react-nav="actions-workflows" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/jackwener/OpenCLI/actions" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-play" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg></span><span data-component="text" data-content="Actions">Actions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="projects" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/jackwener/OpenCLI/projects" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-table" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path></svg></span><span data-component="text" data-content="Projects">Projects</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="security-and-quality" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/jackwener/OpenCLI/security" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg></span><span data-component="text" data-content="Security and quality">Security and quality</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="insights" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/jackwener/OpenCLI/pulse" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-graph" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></span><span data-component="text" data-content="Insights">Insights</span></a></li></ul><div class="prc-UnderlineNav-MoreButtonContainer-Dnrq6"><div class="prc-UnderlineNav-MoreButtonDivider-dN0a-"></div><button data-component="overflow-menu-button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk prc-UnderlineNav-MoreButton-Y8soj" data-loading="false" data-size="medium" data-variant="invisible" id="_R_2ktp_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3"><span>More<span class="prc-src-InternalVisuallyHidden-2YaI6"> items</span></span></span></span><span data-component="trailingAction" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></nav><div class="d-none"></div></header></div>
</react-partial>


  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/jackwener/OpenCLI/blob/main/README.zh-CN.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"OpenCLI","anchor":"opencli","htmlText":"OpenCLI"},{"level":2,"text":"快速开始","anchor":"快速开始","htmlText":"快速开始"},{"level":3,"text":"1. 安装 OpenCLI","anchor":"1-安装-opencli","htmlText":"1. 安装 OpenCLI"},{"level":3,"text":"2. 安装 Browser Bridge 扩展","anchor":"2-安装-browser-bridge-扩展","htmlText":"2. 安装 Browser Bridge 扩展"},{"level":3,"text":"3. 验证环境","anchor":"3-验证环境","htmlText":"3. 验证环境"},{"level":3,"text":"4. 跑第一个命令","anchor":"4-跑第一个命令","htmlText":"4. 跑第一个命令"},{"level":2,"text":"给人类用户","anchor":"给人类用户","htmlText":"给人类用户"},{"level":2,"text":"扩展 OpenCLI","anchor":"扩展-opencli","htmlText":"扩展 OpenCLI"},{"level":2,"text":"给 AI Agent","anchor":"给-ai-agent","htmlText":"给 AI Agent"},{"level":3,"text":"安装 skill（同时也用于更新）","anchor":"安装-skill同时也用于更新","htmlText":"安装 skill（同时也用于更新）"},{"level":3,"text":"选择哪个 skill","anchor":"选择哪个-skill","htmlText":"选择哪个 skill"},{"level":3,"text":"工作原理","anchor":"工作原理","htmlText":"工作原理"},{"level":2,"text":"为新站点写适配器","anchor":"为新站点写适配器","htmlText":"为新站点写适配器"},{"level":2,"text":"配置","anchor":"配置","htmlText":"配置"},{"level":2,"text":"内置命令","anchor":"内置命令","htmlText":"内置命令"},{"level":2,"text":"下载支持","anchor":"下载支持","htmlText":"下载支持"},{"level":3,"text":"支持的平台","anchor":"支持的平台","htmlText":"支持的平台"},{"level":3,"text":"前置依赖","anchor":"前置依赖","htmlText":"前置依赖"},{"level":3,"text":"使用示例","anchor":"使用示例","htmlText":"使用示例"},{"level":2,"text":"输出格式","anchor":"输出格式","htmlText":"输出格式"},{"level":2,"text":"退出码","anchor":"退出码","htmlText":"退出码"},{"level":2,"text":"插件","anchor":"插件","htmlText":"插件"},{"level":2,"text":"常见问题排查","anchor":"常见问题排查","htmlText":"常见问题排查"},{"level":2,"text":"Star History","anchor":"star-history","htmlText":"Star History"},{"level":2,"text":"License","anchor":"license","htmlText":"License"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOpenCLI\u003c/h1\u003e\u003ca id=\"user-content-opencli\" class=\"anchor\" aria-label=\"Permalink: OpenCLI\" href=\"#opencli\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e把任意网站变成 CLI \u0026amp; 在你的登录态浏览器上跑 Browser Use。\u003c/strong\u003e\n把网站和浏览器会话，统一变成适合人类与 AI Agent 使用的确定性接口。\n或者在任意页面上跑 Browser Use —— 导航、填表单、点击、抓取、自动化。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"/jackwener/OpenCLI/blob/main/README.md\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/9235b10ece11147f47e98b82cb20eef471fa12035f920044bdab2613d11f57ff/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d456e676c6973682d3144344544383f7374796c653d666c61742d737175617265\" alt=\"English\" data-canonical-src=\"https://img.shields.io/badge/docs-English-1D4ED8?style=flat-square\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/@jackwener/opencli\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/a473ac28e9e6c18199a92372f3a2927c4a9ffab4ffbd9804971bddd525a7aff1/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f406a61636b77656e65722f6f70656e636c693f7374796c653d666c61742d737175617265\" alt=\"npm\" data-canonical-src=\"https://img.shields.io/npm/v/@jackwener/opencli?style=flat-square\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://nodejs.org\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/d0a4df62586afa7c0b7bfc772c0d52c804b4c2f11040b50c089c98be0b5cc905/68747470733a2f2f696d672e736869656c64732e696f2f6e6f64652f762f406a61636b77656e65722f6f70656e636c693f7374796c653d666c61742d737175617265\" alt=\"Node.js Version\" data-canonical-src=\"https://img.shields.io/node/v/@jackwener/opencli?style=flat-square\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003ca href=\"/jackwener/OpenCLI/blob/main/LICENSE\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/c499123b4da461a015b1374ed9cb83989cd937273efef6d0d1aafd6e91242a39/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f6c2f406a61636b77656e65722f6f70656e636c693f7374796c653d666c61742d737175617265\" alt=\"License\" data-canonical-src=\"https://img.shields.io/npm/l/@jackwener/opencli?style=flat-square\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eOpenCLI 是 \u003cstrong\u003egeneral-purpose browser automation CLI\u003c/strong\u003e，可以作为 \u003cstrong\u003eagent-browser 的替代工具\u003c/strong\u003e。导航、检查页面、点击、填表、提取和截图无需 site adapter；内置 adapters 为重复任务提供可复用的确定性命令。参见 \u003ca href=\"/jackwener/OpenCLI/blob/main/docs/zh/guide/agent-browser-alternative.md\"\u003eOpenCLI vs agent-browser 与迁移指南\u003c/a\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eOpenCLI 可以用同一套 CLI 做三类事情：\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003e直接使用现成适配器\u003c/strong\u003e：B站、知乎、小红书、Twitter/X、Reddit、HackerNews 等 \u003ca href=\"#%E5%86%85%E7%BD%AE%E5%91%BD%E4%BB%A4\"\u003e100+ 站点\u003c/a\u003e 开箱即用。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e让 AI Agent 操作任意网站\u003c/strong\u003e：在你的 AI Agent（Claude Code、Cursor 等）中安装 \u003ccode\u003eopencli-browser\u003c/code\u003e skill，Agent 就能用你的已登录浏览器导航、点击、输入/填充、提取任意网页内容。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e把新网站写成 CLI\u003c/strong\u003e：用 \u003ccode\u003eopencli browser\u003c/code\u003e 原语 + \u003ccode\u003eopencli-adapter-author\u003c/code\u003e skill，从站点侦察、API 发现、字段解码到 \u003ccode\u003eopencli browser verify\u003c/code\u003e 一条龙。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e快速开始\u003c/h2\u003e\u003ca id=\"user-content-快速开始\" class=\"anchor\" aria-label=\"Permalink: 快速开始\" href=\"#快速开始\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1. 安装 OpenCLI\u003c/h3\u003e\u003ca id=\"user-content-1-安装-opencli\" class=\"anchor\" aria-label=\"Permalink: 1. 安装 OpenCLI\" href=\"#1-安装-opencli\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果你是在自己的电脑上使用，优先安装 \u003cstrong\u003eOpenCLIApp\u003c/strong\u003e。它会内置\nOpenCLI runtime，帮你安装 / 修复受管理的 \u003ccode\u003eopencli\u003c/code\u003e 命令，并提供系统托盘\nUI 来做环境诊断、更新、浏览器登录态保活和网页转 Markdown。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e方式 A — OpenCLIApp（macOS / Windows 推荐）：\u003c/strong\u003e\n从 \u003ca href=\"https://opencli.info/download\" rel=\"nofollow\"\u003ehttps://opencli.info/download\u003c/a\u003e 下载最新版 App，安装后打开一次，在\nSystem 页面安装或修复 \u003ccode\u003eopencli\u003c/code\u003e 命令。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e方式 B — npm 全局安装（纯 CLI / CI / 服务器）：\u003c/strong\u003e\n通过 npm 安装时，OpenCLI 要求 \u003cstrong\u003eNode.js \u0026gt;= 20.18.1\u003c/strong\u003e。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"node --version\nnpm install -g @jackwener/opencli\"\u003e\u003cpre\u003enode --version\nnpm install -g @jackwener/opencli\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2. 安装 Browser Bridge 扩展\u003c/h3\u003e\u003ca id=\"user-content-2-安装-browser-bridge-扩展\" class=\"anchor\" aria-label=\"Permalink: 2. 安装 Browser Bridge 扩展\" href=\"#2-安装-browser-bridge-扩展\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOpenCLI 通过轻量 Browser Bridge 扩展和本地微型 daemon 与 Chrome/Chromium 通信。daemon 会按需自动启动。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e方式 A — Chrome Web Store（推荐）：\u003c/strong\u003e\n在 \u003ca href=\"https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk\" rel=\"nofollow\"\u003eChrome Web Store\u003c/a\u003e 安装 \u003cstrong\u003eOpenCLI\u003c/strong\u003e 扩展。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e方式 B — 手动安装：\u003c/strong\u003e\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e到 GitHub \u003ca href=\"https://github.com/jackwener/opencli/releases\"\u003eReleases 页面\u003c/a\u003e 下载最新的 \u003ccode\u003eopencli-extension-v{version}.zip\u003c/code\u003e。\u003c/li\u003e\n\u003cli\u003e解压后打开 \u003ccode\u003echrome://extensions\u003c/code\u003e，启用 \u003cstrong\u003e开发者模式\u003c/strong\u003e。\u003c/li\u003e\n\u003cli\u003e点击 \u003cstrong\u003e加载已解压的扩展程序\u003c/strong\u003e，选择解压后的目录。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3. 验证环境\u003c/h3\u003e\u003ca id=\"user-content-3-验证环境\" class=\"anchor\" aria-label=\"Permalink: 3. 验证环境\" href=\"#3-验证环境\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"opencli doctor\"\u003e\u003cpre\u003eopencli doctor\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4. 跑第一个命令\u003c/h3\u003e\u003ca id=\"user-content-4-跑第一个命令\" class=\"anchor\" aria-label=\"Permalink: 4. 跑第一个命令\" href=\"#4-跑第一个命令\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"opencli list\nopencli hackernews top --limit 5\nopencli bilibili hot --limit 5\"\u003e\u003cpre\u003eopencli list\nopencli hackernews top --limit 5\nopencli bilibili hot --limit 5\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e给人类用户\u003c/h2\u003e\u003ca id=\"user-content-给人类用户\" class=\"anchor\" aria-label=\"Permalink: 给人类用户\" href=\"#给人类用户\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果你只是想稳定地调用网站或桌面应用能力，主路径很简单：\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eopencli list\u003c/code\u003e 查看当前所有命令\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopencli \u0026lt;site\u0026gt; \u0026lt;command\u0026gt;\u003c/code\u003e 调用内置或生成好的适配器\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopencli doctor\u003c/code\u003e 处理浏览器连通性问题\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e扩展 OpenCLI\u003c/h2\u003e\u003ca id=\"user-content-扩展-opencli\" class=\"anchor\" aria-label=\"Permalink: 扩展 OpenCLI\" href=\"#扩展-opencli\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果你想新增自己的命令，先看 \u003ca href=\"/jackwener/OpenCLI/blob/main/docs/zh/guide/extending-opencli.md\"\u003e扩展 OpenCLI\u003c/a\u003e。README 只保留入口；目录结构、源码管理方式和安装命令放在文档里。\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e需求\u003c/th\u003e\n\u003cth\u003e推荐路径\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e把个人网站命令放在自己的 Git repo\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eopencli plugin create\u003c/code\u003e + \u003ccode\u003eopencli plugin install file://...\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e快速写一个本机私人 adapter\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eopencli browser init \u0026lt;site\u0026gt;/\u0026lt;command\u0026gt;\u003c/code\u003e，放在 \u003ccode\u003e~/.opencli/clis/\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e本地修改官方 adapter\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eopencli adapter eject \u0026lt;site\u0026gt;\u003c/code\u003e + \u003ccode\u003eopencli adapter reset \u0026lt;site\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e发布或安装第三方命令\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eopencli plugin install github:user/repo\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e给 AI Agent\u003c/h2\u003e\u003ca id=\"user-content-给-ai-agent\" class=\"anchor\" aria-label=\"Permalink: 给 AI Agent\" href=\"#给-ai-agent\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOpenCLI 的 browser 命令是给 AI Agent 用的——不是手动执行的。把 skill 安装到你的 AI Agent（Claude Code、Cursor 等）中，Agent 就能用你的已登录 Chrome 会话替你操作网站。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e安装 skill（同时也用于更新）\u003c/h3\u003e\u003ca id=\"user-content-安装-skill同时也用于更新\" class=\"anchor\" aria-label=\"Permalink: 安装 skill（同时也用于更新）\" href=\"#安装-skill同时也用于更新\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"npx skills add jackwener/opencli\"\u003e\u003cpre\u003enpx skills add jackwener/opencli\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e或只装需要的 skill：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"npx skills add jackwener/opencli --skill opencli-adapter-author\nnpx skills add jackwener/opencli --skill opencli-autofix\nnpx skills add jackwener/opencli --skill opencli-browser\nnpx skills add jackwener/opencli --skill opencli-usage\"\u003e\u003cpre\u003enpx skills add jackwener/opencli --skill opencli-adapter-author\nnpx skills add jackwener/opencli --skill opencli-autofix\nnpx skills add jackwener/opencli --skill opencli-browser\nnpx skills add jackwener/opencli --skill opencli-usage\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e选择哪个 skill\u003c/h3\u003e\u003ca id=\"user-content-选择哪个-skill\" class=\"anchor\" aria-label=\"Permalink: 选择哪个 skill\" href=\"#选择哪个-skill\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSkill\u003c/th\u003e\n\u003cth\u003e适用场景\u003c/th\u003e\n\u003cth\u003e你对 AI Agent 说的话\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eopencli-adapter-author\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e为新站点写可复用适配器，或给已有站点添加命令\u003c/td\u003e\n\u003ctd\u003e\"帮我做一个抖音热门的适配器\" / \"帮我做一个抓取这个页面热帖的命令\"\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eopencli-autofix\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e内置命令失败时修复已有适配器\u003c/td\u003e\n\u003ctd\u003e\"\u003ccode\u003eopencli zhihu hot\u003c/code\u003e 返回空了，修一下\"\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eopencli-browser\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e实时驱动 Chrome 页面——导航、填表单、点击、抓取\u003c/td\u003e\n\u003ctd\u003e\"帮我看看小红书的通知\" / \"帮我填一下这个表单\" / \"用浏览器命令抓取这个页面\"\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eopencli-usage\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e所有命令和站点的快速参考\u003c/td\u003e\n\u003ctd\u003e\"OpenCLI 有哪些 Twitter 相关的命令？\"\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e工作原理\u003c/h3\u003e\u003ca id=\"user-content-工作原理\" class=\"anchor\" aria-label=\"Permalink: 工作原理\" href=\"#工作原理\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e安装 \u003ccode\u003eopencli-browser\u003c/code\u003e skill 后，你的 AI Agent 可以：\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003e导航\u003c/strong\u003e到任意 URL，使用你的已登录浏览器\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e读取\u003c/strong\u003e页面内容——通过结构化 DOM 快照（不是截图）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e交互\u003c/strong\u003e——点击按钮、填写表单、选择选项、按键\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e提取\u003c/strong\u003e页面数据或拦截网络 API 响应\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e等待\u003c/strong\u003e元素、文本或页面跳转\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003eAgent 在内部自动处理所有 \u003ccode\u003eopencli browser\u003c/code\u003e 命令——你只需用自然语言描述想做的事。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eSkill 参考文档：\u003c/strong\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"/jackwener/OpenCLI/blob/main/skills/opencli-browser/SKILL.md\"\u003e\u003ccode\u003eskills/opencli-browser/SKILL.md\u003c/code\u003e\u003c/a\u003e — 实时驱动 Chrome（导航、填表单、点击、抓取）\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/jackwener/OpenCLI/blob/main/skills/opencli-adapter-author/SKILL.md\"\u003e\u003ccode\u003eskills/opencli-adapter-author/SKILL.md\u003c/code\u003e\u003c/a\u003e — 给新站点写适配器，全流程\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/jackwener/OpenCLI/blob/main/skills/opencli-autofix/SKILL.md\"\u003e\u003ccode\u003eskills/opencli-autofix/SKILL.md\u003c/code\u003e\u003c/a\u003e — 修复已有适配器\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/jackwener/OpenCLI/blob/main/skills/opencli-usage/SKILL.md\"\u003e\u003ccode\u003eskills/opencli-usage/SKILL.md\u003c/code\u003e\u003c/a\u003e — 命令和站点参考\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003ebrowser\u003c/code\u003e 可用命令包括：\u003ccode\u003eopen\u003c/code\u003e、\u003ccode\u003estate\u003c/code\u003e、\u003ccode\u003eclick\u003c/code\u003e、\u003ccode\u003etype\u003c/code\u003e、\u003ccode\u003efill\u003c/code\u003e、\u003ccode\u003eselect\u003c/code\u003e、\u003ccode\u003ekeys\u003c/code\u003e、\u003ccode\u003ewait\u003c/code\u003e、\u003ccode\u003eget\u003c/code\u003e、\u003ccode\u003efind\u003c/code\u003e、\u003ccode\u003eextract\u003c/code\u003e、\u003ccode\u003eframes\u003c/code\u003e、\u003ccode\u003escreenshot\u003c/code\u003e、\u003ccode\u003escroll\u003c/code\u003e、\u003ccode\u003eback\u003c/code\u003e、\u003ccode\u003eeval\u003c/code\u003e、\u003ccode\u003enetwork\u003c/code\u003e、\u003ccode\u003etab list\u003c/code\u003e、\u003ccode\u003etab new\u003c/code\u003e、\u003ccode\u003etab select\u003c/code\u003e、\u003ccode\u003etab close\u003c/code\u003e、\u003ccode\u003einit\u003c/code\u003e、\u003ccode\u003everify\u003c/code\u003e、\u003ccode\u003eclose\u003c/code\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eopencli browser\u003c/code\u003e 命令必须紧跟一个 \u003ccode\u003e\u0026lt;session\u0026gt;\u003c/code\u003e 位置参数。\u003ccode\u003eopencli browser work open \u0026lt;url\u0026gt;\u003c/code\u003e 和 \u003ccode\u003eopencli browser work tab new [url]\u003c/code\u003e 都会返回 target ID。\u003ccode\u003eopencli browser work tab list\u003c/code\u003e 用来查看当前已存在 tab 的 target ID，再通过 \u003ccode\u003e--tab \u0026lt;targetId\u0026gt;\u003c/code\u003e 把命令明确路由到某个 tab。\u003ccode\u003etab new\u003c/code\u003e 只会新建 tab，不会改变默认浏览器目标；只有显式执行 \u003ccode\u003etab select \u0026lt;targetId\u0026gt;\u003c/code\u003e，才会把该 tab 设为同一 session 后续未指定 target 的默认目标。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e为新站点写适配器\u003c/h2\u003e\u003ca id=\"user-content-为新站点写适配器\" class=\"anchor\" aria-label=\"Permalink: 为新站点写适配器\" href=\"#为新站点写适配器\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e当你需要的网站还没覆盖时，用 \u003ccode\u003eopencli-adapter-author\u003c/code\u003e skill，全流程：\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003e侦察\u003c/strong\u003e站点，分类 pattern（SPA / SSR / JSONP / Token / Streaming）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e发现\u003c/strong\u003e endpoint——network 精读、initial state、bundle 搜索、token 溯源，或 interceptor 兜底\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e定认证\u003c/strong\u003e——\u003ccode\u003ePUBLIC\u003c/code\u003e / \u003ccode\u003eCOOKIE\u003c/code\u003e / \u003ccode\u003eINTERCEPT\u003c/code\u003e / \u003ccode\u003eUI\u003c/code\u003e / \u003ccode\u003eLOCAL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e字段解码\u003c/strong\u003e + 设计输出列\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopencli browser recon analyze \u0026lt;url\u0026gt;\u003c/code\u003e → \u003ccode\u003eopencli browser recon init \u0026lt;site\u0026gt;/\u0026lt;name\u0026gt;\u003c/code\u003e → 写适配器 → \u003ccode\u003eopencli browser recon verify \u0026lt;site\u0026gt;/\u0026lt;name\u0026gt;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e站点知识沉到 \u003ccode\u003e~/.opencli/sites/\u0026lt;site\u0026gt;/\u003c/code\u003e，下次同站点直接吃缓存\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e配置\u003c/h2\u003e\u003ca id=\"user-content-配置\" class=\"anchor\" aria-label=\"Permalink: 配置\" href=\"#配置\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e变量\u003c/th\u003e\n\u003cth\u003e默认值\u003c/th\u003e\n\u003cth\u003e说明\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOPENCLI_WINDOW\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e命令默认值\u003c/td\u003e\n\u003ctd\u003e设为 \u003ccode\u003eforeground\u003c/code\u003e 或 \u003ccode\u003ebackground\u003c/code\u003e 来覆盖 Browser Bridge 窗口位置。浏览器型命令也支持 \u003ccode\u003e--window \u0026lt;foreground|background\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOPENCLI_SITE_SESSION\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eadapter 默认值\u003c/td\u003e\n\u003ctd\u003e设为 \u003ccode\u003eephemeral\u003c/code\u003e 或 \u003ccode\u003epersistent\u003c/code\u003e，覆盖浏览器型 adapter 命令的 \u003ccode\u003esiteSession\u003c/code\u003e 元数据。\u003ccode\u003eephemeral\u003c/code\u003e 会在命令结束时关闭一次性自动化窗口；\u003ccode\u003epersistent\u003c/code\u003e 会复用该站点的 session。命令级 \u003ccode\u003e--site-session\u003c/code\u003e 优先。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOPENCLI_BROWSER_CONNECT_TIMEOUT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e45\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e浏览器连接超时（秒）\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOPENCLI_BROWSER_COMMAND_TIMEOUT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e60\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e单个浏览器命令超时（秒）\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOPENCLI_CDP_ENDPOINT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003eChrome DevTools Protocol 端点，用于远程浏览器\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOPENCLI_CDP_TARGET\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e按 URL 子串过滤 CDP target（如 \u003ccode\u003edetail.1688.com\u003c/code\u003e）\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eOPENCLI_VERBOSE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e启用详细日志（\u003ccode\u003e-v\u003c/code\u003e 也可以）\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eDEBUG_SNAPSHOT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e设为 \u003ccode\u003e1\u003c/code\u003e 输出 DOM 快照调试信息\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eBrowser Bridge daemon 与扩展的通信端口固定为 \u003ccode\u003elocalhost:19825\u003c/code\u003e，不再支持通过 \u003ccode\u003eOPENCLI_DAEMON_PORT\u003c/code\u003e 配置自定义端口。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eopencli browser *\u003c/code\u003e 必须紧跟一个 \u003ccode\u003e\u0026lt;session\u0026gt;\u003c/code\u003e 位置参数，默认使用前台窗口，并保留该 session 的 tab lease，直到你手动执行 \u003ccode\u003eopencli browser \u0026lt;session\u0026gt; close\u003c/code\u003e 或等空闲超时。浏览器型 adapter 默认使用后台 adapter 窗口并在命令结束后释放一次性 tab lease；如果需要调试最终页面，可以传 \u003ccode\u003e--window foreground --keep-tab true\u003c/code\u003e。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e内置命令\u003c/h2\u003e\u003ca id=\"user-content-内置命令\" class=\"anchor\" aria-label=\"Permalink: 内置命令\" href=\"#内置命令\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e运行 \u003ccode\u003eopencli list\u003c/code\u003e 查看完整注册表。\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e站点\u003c/th\u003e\n\u003cth\u003e命令\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003exiaohongshu\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003eask\u003c/code\u003e \u003ccode\u003enote\u003c/code\u003e \u003ccode\u003ecomments\u003c/code\u003e \u003ccode\u003enotifications\u003c/code\u003e \u003ccode\u003efeed\u003c/code\u003e \u003ccode\u003euser\u003c/code\u003e \u003ccode\u003esaved\u003c/code\u003e \u003ccode\u003eliked\u003c/code\u003e \u003ccode\u003edownload\u003c/code\u003e \u003ccode\u003epublish\u003c/code\u003e \u003ccode\u003efollow\u003c/code\u003e \u003ccode\u003eunfollow\u003c/code\u003e \u003ccode\u003ecreator-notes\u003c/code\u003e \u003ccode\u003ecreator-note-detail\u003c/code\u003e \u003ccode\u003ecreator-notes-summary\u003c/code\u003e \u003ccode\u003ecreator-profile\u003c/code\u003e \u003ccode\u003ecreator-stats\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ebilibili\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ehot\u003c/code\u003e \u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003eme\u003c/code\u003e \u003ccode\u003efavorite\u003c/code\u003e \u003ccode\u003ehistory\u003c/code\u003e \u003ccode\u003efeed\u003c/code\u003e \u003ccode\u003esubtitle\u003c/code\u003e \u003ccode\u003esummary\u003c/code\u003e \u003ccode\u003evideo\u003c/code\u003e \u003ccode\u003ecomments\u003c/code\u003e \u003ccode\u003edynamic\u003c/code\u003e \u003ccode\u003eranking\u003c/code\u003e \u003ccode\u003efollowing\u003c/code\u003e \u003ccode\u003efollow\u003c/code\u003e \u003ccode\u003eunfollow\u003c/code\u003e \u003ccode\u003euser-videos\u003c/code\u003e \u003ccode\u003edownload\u003c/code\u003e \u003ccode\u003ecreator-stats\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ezhihu\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ehot\u003c/code\u003e \u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003equestion\u003c/code\u003e \u003ccode\u003edownload\u003c/code\u003e \u003ccode\u003efollow\u003c/code\u003e \u003ccode\u003elike\u003c/code\u003e \u003ccode\u003efavorite\u003c/code\u003e \u003ccode\u003ecomment\u003c/code\u003e \u003ccode\u003eanswer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ehackernews\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etop\u003c/code\u003e \u003ccode\u003enew\u003c/code\u003e \u003ccode\u003ebest\u003c/code\u003e \u003ccode\u003eask\u003c/code\u003e \u003ccode\u003eshow\u003c/code\u003e \u003ccode\u003ejobs\u003c/code\u003e \u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003euser\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ehltv\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003eplayer-summary\u003c/code\u003e \u003ccode\u003eplayer-matches\u003c/code\u003e \u003ccode\u003eplayer-form\u003c/code\u003e \u003ccode\u003eplayer-map-pool\u003c/code\u003e \u003ccode\u003eplayer-vs-team\u003c/code\u003e \u003ccode\u003eplayer-teammate-impact\u003c/code\u003e \u003ccode\u003eplayer-duel\u003c/code\u003e \u003ccode\u003ematch-map\u003c/code\u003e \u003ccode\u003ematch-series\u003c/code\u003e \u003ccode\u003eteam-matches\u003c/code\u003e \u003ccode\u003eteam-map-pool\u003c/code\u003e \u003ccode\u003eevent-matches\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003egeogebra\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eeval\u003c/code\u003e \u003ccode\u003eadd-point\u003c/code\u003e \u003ccode\u003eadd-line\u003c/code\u003e \u003ccode\u003eadd-circle\u003c/code\u003e \u003ccode\u003eadd-polygon\u003c/code\u003e \u003ccode\u003etriangle\u003c/code\u003e \u003ccode\u003ehexagon\u003c/code\u003e \u003ccode\u003elist\u003c/code\u003e \u003ccode\u003einfo\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003elinkedin\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003econnect\u003c/code\u003e \u003ccode\u003einbox\u003c/code\u003e \u003ccode\u003ejob-detail\u003c/code\u003e \u003ccode\u003ejobs-preferences\u003c/code\u003e \u003ccode\u003epost-analytics\u003c/code\u003e \u003ccode\u003eposts\u003c/code\u003e \u003ccode\u003eprofile-experience\u003c/code\u003e \u003ccode\u003eprofile-projects\u003c/code\u003e \u003ccode\u003eprofile-read\u003c/code\u003e \u003ccode\u003eprofile-analytics\u003c/code\u003e \u003ccode\u003esafe-send\u003c/code\u003e \u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003epeople-search\u003c/code\u003e \u003ccode\u003eservices-read\u003c/code\u003e \u003ccode\u003esent-invitations\u003c/code\u003e \u003ccode\u003ethread-snapshot\u003c/code\u003e \u003ccode\u003etimeline\u003c/code\u003e \u003ccode\u003esalesnav-search\u003c/code\u003e \u003ccode\u003esalesnav-inbox\u003c/code\u003e \u003ccode\u003esalesnav-message\u003c/code\u003e \u003ccode\u003esalesnav-thread\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ereddit\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ehot\u003c/code\u003e \u003ccode\u003efrontpage\u003c/code\u003e \u003ccode\u003epopular\u003c/code\u003e \u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003esubreddit\u003c/code\u003e \u003ccode\u003eread\u003c/code\u003e \u003ccode\u003euser\u003c/code\u003e \u003ccode\u003euser-posts\u003c/code\u003e \u003ccode\u003euser-comments\u003c/code\u003e \u003ccode\u003eupvote\u003c/code\u003e \u003ccode\u003esave\u003c/code\u003e \u003ccode\u003ecomment\u003c/code\u003e \u003ccode\u003esubscribe\u003c/code\u003e \u003ccode\u003esaved\u003c/code\u003e \u003ccode\u003eupvoted\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003etwitter\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etrending\u003c/code\u003e \u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003etimeline\u003c/code\u003e \u003ccode\u003etweets\u003c/code\u003e \u003ccode\u003elists\u003c/code\u003e \u003ccode\u003elist-tweets\u003c/code\u003e \u003ccode\u003elist-create\u003c/code\u003e \u003ccode\u003elist-delete\u003c/code\u003e \u003ccode\u003elist-add\u003c/code\u003e \u003ccode\u003elist-add-batch\u003c/code\u003e \u003ccode\u003elist-remove\u003c/code\u003e \u003ccode\u003elist-remove-batch\u003c/code\u003e \u003ccode\u003ebookmarks\u003c/code\u003e \u003ccode\u003eprofile\u003c/code\u003e \u003ccode\u003ethread\u003c/code\u003e \u003ccode\u003efollowing\u003c/code\u003e \u003ccode\u003efollowers\u003c/code\u003e \u003ccode\u003enotifications\u003c/code\u003e \u003ccode\u003epost\u003c/code\u003e \u003ccode\u003ereply\u003c/code\u003e \u003ccode\u003edelete\u003c/code\u003e \u003ccode\u003elike\u003c/code\u003e \u003ccode\u003elikes\u003c/code\u003e \u003ccode\u003earticle\u003c/code\u003e \u003ccode\u003efollow\u003c/code\u003e \u003ccode\u003eunfollow\u003c/code\u003e \u003ccode\u003ebookmark\u003c/code\u003e \u003ccode\u003eunbookmark\u003c/code\u003e \u003ccode\u003edownload\u003c/code\u003e \u003ccode\u003eaccept\u003c/code\u003e \u003ccode\u003ereply-dm\u003c/code\u003e \u003ccode\u003eblock\u003c/code\u003e \u003ccode\u003eunblock\u003c/code\u003e \u003ccode\u003ehide-reply\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eclaude\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eask\u003c/code\u003e \u003ccode\u003esend\u003c/code\u003e \u003ccode\u003enew\u003c/code\u003e \u003ccode\u003estatus\u003c/code\u003e \u003ccode\u003eread\u003c/code\u003e \u003ccode\u003ehistory\u003c/code\u003e \u003ccode\u003edetail\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003egemini\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003enew\u003c/code\u003e \u003ccode\u003eask\u003c/code\u003e \u003ccode\u003eimage\u003c/code\u003e \u003ccode\u003edeep-research\u003c/code\u003e \u003ccode\u003edeep-research-result\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003enotebooklm\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estatus\u003c/code\u003e \u003ccode\u003elist\u003c/code\u003e \u003ccode\u003eopen\u003c/code\u003e \u003ccode\u003ecurrent\u003c/code\u003e \u003ccode\u003eget\u003c/code\u003e \u003ccode\u003ehistory\u003c/code\u003e \u003ccode\u003esummary\u003c/code\u003e \u003ccode\u003enote-list\u003c/code\u003e \u003ccode\u003enotes-get\u003c/code\u003e \u003ccode\u003esource-list\u003c/code\u003e \u003ccode\u003esource-get\u003c/code\u003e \u003ccode\u003esource-fulltext\u003c/code\u003e \u003ccode\u003esource-guide\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eamazon\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ebestsellers\u003c/code\u003e \u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003eproduct\u003c/code\u003e \u003ccode\u003eoffer\u003c/code\u003e \u003ccode\u003ediscussion\u003c/code\u003e \u003ccode\u003emovers-shakers\u003c/code\u003e \u003ccode\u003enew-releases\u003c/code\u003e \u003ccode\u003erankings\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eupwork\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003esearch\u003c/code\u003e \u003ccode\u003efeed\u003c/code\u003e \u003ccode\u003edetail\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eslock\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003emessage-send\u003c/code\u003e \u003ccode\u003emessage-read\u003c/code\u003e \u003ccode\u003emessage-search\u003c/code\u003e \u003ccode\u003echannel-list\u003c/code\u003e \u003ccode\u003echannel-info\u003c/code\u003e \u003ccode\u003echannel-create\u003c/code\u003e \u003ccode\u003echannel-members\u003c/code\u003e \u003ccode\u003echannel-join\u003c/code\u003e \u003ccode\u003etask-list\u003c/code\u003e \u003ccode\u003etask-create\u003c/code\u003e \u003ccode\u003etask-claim\u003c/code\u003e \u003ccode\u003etask-status\u003c/code\u003e \u003ccode\u003etask-convert\u003c/code\u003e \u003ccode\u003etask-delete\u003c/code\u003e \u003ccode\u003ethread-list\u003c/code\u003e \u003ccode\u003ethread-follow\u003c/code\u003e \u003ccode\u003eattachment-upload\u003c/code\u003e \u003ccode\u003eattachment-download\u003c/code\u003e \u003ccode\u003ebookmark-add\u003c/code\u003e \u003ccode\u003einbox\u003c/code\u003e \u003ccode\u003edm-list\u003c/code\u003e \u003ccode\u003eserver-list\u003c/code\u003e \u003ccode\u003eserver-use\u003c/code\u003e \u003ccode\u003ewhoami\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ehuodongxing\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eevents\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003emidjourney\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elogin\u003c/code\u003e \u003ccode\u003ewhoami\u003c/code\u003e \u003ccode\u003esettings\u003c/code\u003e \u003ccode\u003equota\u003c/code\u003e \u003ccode\u003egenerate\u003c/code\u003e \u003ccode\u003edescribe\u003c/code\u003e \u003ccode\u003ehistory\u003c/code\u003e \u003ccode\u003estatus\u003c/code\u003e \u003ccode\u003eaction\u003c/code\u003e \u003ccode\u003edownload\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e精选清单 — \u003cstrong\u003e\u003ca href=\"/jackwener/OpenCLI/blob/main/docs/adapters/index.md\"\u003e→ 查看全部 100+ 站点和命令\u003c/a\u003e\u003c/strong\u003e（小红书 / B站 / 知乎 / Twitter / Reddit / 抖音 / 微博 / 微信读书 / 小宇宙 / 1688 / 夸克 / Spotify / 牛客 / arxiv / Chess.com / Bilibili / 等）。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e下载支持\u003c/h2\u003e\u003ca id=\"user-content-下载支持\" class=\"anchor\" aria-label=\"Permalink: 下载支持\" href=\"#下载支持\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOpenCLI 支持从各平台下载图片、视频和文章。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e支持的平台\u003c/h3\u003e\u003ca id=\"user-content-支持的平台\" class=\"anchor\" aria-label=\"Permalink: 支持的平台\" href=\"#支持的平台\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e平台\u003c/th\u003e\n\u003cth\u003e内容类型\u003c/th\u003e\n\u003cth\u003e说明\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e小红书\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e图片、视频\u003c/td\u003e\n\u003ctd\u003e下载笔记中的所有媒体文件\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eB站\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e视频\u003c/td\u003e\n\u003ctd\u003e需要安装 \u003ccode\u003eyt-dlp\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eTwitter/X\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e图片、视频\u003c/td\u003e\n\u003ctd\u003e从用户媒体页或单条推文下载\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePixiv\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e图片\u003c/td\u003e\n\u003ctd\u003e下载原始画质插画，支持多页作品\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e1688\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e图片、视频\u003c/td\u003e\n\u003ctd\u003e下载商品页中可见的商品素材\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e小宇宙\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e音频、转录\u003c/td\u003e\n\u003ctd\u003e使用本地凭证下载单集音频和转录 JSON / 文本\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e知乎\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e文章（Markdown）\u003c/td\u003e\n\u003ctd\u003e导出文章，可选下载图片到本地\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e微信公众号\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e文章（Markdown）\u003c/td\u003e\n\u003ctd\u003e导出微信公众号文章为 Markdown\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003e豆瓣\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e图片\u003c/td\u003e\n\u003ctd\u003e下载电影条目的海报 / 剧照图片\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e前置依赖\u003c/h3\u003e\u003ca id=\"user-content-前置依赖\" class=\"anchor\" aria-label=\"Permalink: 前置依赖\" href=\"#前置依赖\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e下载流媒体平台的视频需要安装 \u003ccode\u003eyt-dlp\u003c/code\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 安装 yt-dlp\npip install yt-dlp\n# 或者\nbrew install yt-dlp\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 安装 yt-dlp\u003c/span\u003e\npip install yt-dlp\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 或者\u003c/span\u003e\nbrew install yt-dlp\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用示例\u003c/h3\u003e\u003ca id=\"user-content-使用示例\" class=\"anchor\" aria-label=\"Permalink: 使用示例\" href=\"#使用示例\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 下载小红书笔记中的图片/视频\nopencli xiaohongshu download \u0026quot;https://www.xiaohongshu.com/search_result/\u0026lt;id\u0026gt;?xsec_token=...\u0026quot; --output ./xhs\nopencli xiaohongshu download \u0026quot;https://xhslink.com/...\u0026quot; --output ./xhs\nopencli rednote download \u0026quot;https://www.rednote.com/search_result/\u0026lt;id\u0026gt;?xsec_token=...\u0026quot; --output ./rednote\n\n# 下载B站视频（需要 yt-dlp）\nopencli bilibili download BV1xxx --output ./bilibili\nopencli bilibili download BV1xxx --quality 1080p  # 指定画质\n\n# 下载 Twitter 用户的媒体\nopencli twitter download elonmusk --limit 20 --output ./twitter\n\n# 下载单条推文的媒体\nopencli twitter download --tweet-url \u0026quot;https://x.com/user/status/123\u0026quot; --output ./twitter\n\n# 下载豆瓣电影海报 / 剧照\nopencli douban download 30382501 --output ./douban\n\n# 下载 1688 商品页中的图片 / 视频素材\nopencli 1688 download 841141931191 --output ./1688-downloads\n\n# 下载小宇宙单集音频\nopencli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou\n\n# 下载小宇宙单集转录\nopencli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts\n\n# 导出知乎文章为 Markdown\nopencli zhihu download \u0026quot;https://zhuanlan.zhihu.com/p/xxx\u0026quot; --output ./zhihu\n\n# 导出并下载图片\nopencli zhihu download \u0026quot;https://zhuanlan.zhihu.com/p/xxx\u0026quot; --download-images\n\n# 导出微信公众号文章为 Markdown\nopencli weixin download --url \u0026quot;https://mp.weixin.qq.com/s/xxx\u0026quot; --output ./weixin\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 下载小红书笔记中的图片/视频\u003c/span\u003e\nopencli xiaohongshu download \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://www.xiaohongshu.com/search_result/\u0026lt;id\u0026gt;?xsec_token=...\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --output ./xhs\nopencli xiaohongshu download \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://xhslink.com/...\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --output ./xhs\nopencli rednote download \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://www.rednote.com/search_result/\u0026lt;id\u0026gt;?xsec_token=...\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --output ./rednote\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 下载B站视频（需要 yt-dlp）\u003c/span\u003e\nopencli bilibili download BV1xxx --output ./bilibili\nopencli bilibili download BV1xxx --quality 1080p  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 指定画质\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 下载 Twitter 用户的媒体\u003c/span\u003e\nopencli twitter download elonmusk --limit 20 --output ./twitter\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 下载单条推文的媒体\u003c/span\u003e\nopencli twitter download --tweet-url \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://x.com/user/status/123\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --output ./twitter\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 下载豆瓣电影海报 / 剧照\u003c/span\u003e\nopencli douban download 30382501 --output ./douban\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 下载 1688 商品页中的图片 / 视频素材\u003c/span\u003e\nopencli 1688 download 841141931191 --output ./1688-downloads\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 下载小宇宙单集音频\u003c/span\u003e\nopencli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 下载小宇宙单集转录\u003c/span\u003e\nopencli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 导出知乎文章为 Markdown\u003c/span\u003e\nopencli zhihu download \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://zhuanlan.zhihu.com/p/xxx\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --output ./zhihu\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 导出并下载图片\u003c/span\u003e\nopencli zhihu download \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://zhuanlan.zhihu.com/p/xxx\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --download-images\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 导出微信公众号文章为 Markdown\u003c/span\u003e\nopencli weixin download --url \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttps://mp.weixin.qq.com/s/xxx\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e --output ./weixin\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eopencli xiaoyuzhou download\u003c/code\u003e 和 \u003ccode\u003etranscript\u003c/code\u003e 需要本地小宇宙凭证：\u003ccode\u003e~/.opencli/xiaoyuzhou.json\u003c/code\u003e。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e输出格式\u003c/h2\u003e\u003ca id=\"user-content-输出格式\" class=\"anchor\" aria-label=\"Permalink: 输出格式\" href=\"#输出格式\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e所有内置命令都支持 \u003ccode\u003e--format\u003c/code\u003e / \u003ccode\u003e-f\u003c/code\u003e，可选值为 \u003ccode\u003etable\u003c/code\u003e、\u003ccode\u003ejson\u003c/code\u003e、\u003ccode\u003eyaml\u003c/code\u003e、\u003ccode\u003emd\u003c/code\u003e、\u003ccode\u003ecsv\u003c/code\u003e。\n\u003ccode\u003elist\u003c/code\u003e 命令也支持同样的格式参数，同时继续兼容 \u003ccode\u003e--json\u003c/code\u003e。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"opencli list -f yaml            # 用 YAML 列出命令注册表\nopencli bilibili hot -f table   # 默认：富文本表格\nopencli bilibili hot -f json    # JSON（适合传给 jq 或者各类 AI Agent）\nopencli bilibili hot -f yaml    # YAML（更适合人类直接阅读）\nopencli bilibili hot -f md      # Markdown\nopencli bilibili hot -f csv     # CSV\nopencli bilibili hot -v         # 详细模式：展示管线执行步骤调试信息\"\u003e\u003cpre\u003eopencli list -f yaml            \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 用 YAML 列出命令注册表\u003c/span\u003e\nopencli bilibili hot -f table   \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 默认：富文本表格\u003c/span\u003e\nopencli bilibili hot -f json    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e JSON（适合传给 jq 或者各类 AI Agent）\u003c/span\u003e\nopencli bilibili hot -f yaml    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e YAML（更适合人类直接阅读）\u003c/span\u003e\nopencli bilibili hot -f md      \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Markdown\u003c/span\u003e\nopencli bilibili hot -f csv     \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e CSV\u003c/span\u003e\nopencli bilibili hot -v         \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 详细模式：展示管线执行步骤调试信息\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e退出码\u003c/h2\u003e\u003ca id=\"user-content-退出码\" class=\"anchor\" aria-label=\"Permalink: 退出码\" href=\"#退出码\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eopencli 遵循 Unix \u003ccode\u003esysexits.h\u003c/code\u003e，CI / 脚本可按失败模式分支：\u003ccode\u003e0\u003c/code\u003e 成功、\u003ccode\u003e66\u003c/code\u003e 无数据、\u003ccode\u003e69\u003c/code\u003e Browser Bridge 未连接、\u003ccode\u003e75\u003c/code\u003e 超时、\u003ccode\u003e77\u003c/code\u003e 需要认证、\u003ccode\u003e78\u003c/code\u003e 配置错误、\u003ccode\u003e130\u003c/code\u003e Ctrl-C。完整参考：\u003ca href=\"/jackwener/OpenCLI/blob/main/docs/zh/guide/exit-codes.md\"\u003edocs/zh/guide/exit-codes.md\u003c/a\u003e。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e插件\u003c/h2\u003e\u003ca id=\"user-content-插件\" class=\"anchor\" aria-label=\"Permalink: 插件\" href=\"#插件\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e通过社区贡献的插件扩展 OpenCLI。插件使用与内置命令相同的 JS 格式，启动时自动发现。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"opencli plugin install github:user/opencli-plugin-my-tool  # 安装\nopencli plugin list                                         # 查看已安装\nopencli plugin update my-tool                               # 更新到最新\nopencli plugin update --all                                 # 更新全部已安装插件\nopencli plugin uninstall my-tool                            # 卸载\"\u003e\u003cpre\u003eopencli plugin install github:user/opencli-plugin-my-tool  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 安装\u003c/span\u003e\nopencli plugin list                                         \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 查看已安装\u003c/span\u003e\nopencli plugin update my-tool                               \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 更新到最新\u003c/span\u003e\nopencli plugin update --all                                 \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 更新全部已安装插件\u003c/span\u003e\nopencli plugin uninstall my-tool                            \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e 卸载\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e当 plugin 的版本被记录到 \u003ccode\u003e~/.opencli/plugins.lock.json\u003c/code\u003e 后，\u003ccode\u003eopencli plugin list\u003c/code\u003e 也会显示对应的短 commit hash。\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e插件\u003c/th\u003e\n\u003cth\u003e类型\u003c/th\u003e\n\u003cth\u003e描述\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/ByteYue/opencli-plugin-github-trending\"\u003eopencli-plugin-github-trending\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eJS\u003c/td\u003e\n\u003ctd\u003eGitHub Trending 仓库\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/ByteYue/opencli-plugin-hot-digest\"\u003eopencli-plugin-hot-digest\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eJS\u003c/td\u003e\n\u003ctd\u003e多平台热榜聚合\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/Astro-Han/opencli-plugin-juejin\"\u003eopencli-plugin-juejin\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eJS\u003c/td\u003e\n\u003ctd\u003e稀土掘金热门文章\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/flobo3/opencli-plugin-vk\"\u003eopencli-plugin-vk\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eJS\u003c/td\u003e\n\u003ctd\u003eVK (VKontakte) 动态、信息流和搜索\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/genoooool/opencli-plugin-x-article-publisher\"\u003eopencli-plugin-x-article-publisher\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eJS\u003c/td\u003e\n\u003ctd\u003e通过 OpenCLI 与 xPoster 将带本地图片的 Markdown 发布为 X 长文\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e详见 \u003ca href=\"/jackwener/OpenCLI/blob/main/docs/zh/guide/plugins.md\"\u003e插件指南\u003c/a\u003e 了解如何创建自己的插件。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e常见问题排查\u003c/h2\u003e\u003ca id=\"user-content-常见问题排查\" class=\"anchor\" aria-label=\"Permalink: 常见问题排查\" href=\"#常见问题排查\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003e\"Extension not connected\" 报错\u003c/strong\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e确保你已从 \u003ca href=\"https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk\" rel=\"nofollow\"\u003eChrome Web Store\u003c/a\u003e 安装 OpenCLI 扩展，且在 \u003ccode\u003echrome://extensions\u003c/code\u003e 中\u003cstrong\u003e已启用\u003c/strong\u003e。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\"attach failed: Cannot access a chrome-extension:// URL\" 报错\u003c/strong\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e其他 Chrome/Chromium 扩展（如 youmind、New Tab Override 或 AI 助手类扩展）可能产生冲突。请尝试\u003cstrong\u003e暂时禁用其他扩展\u003c/strong\u003e后重试。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e返回空数据，或者报错 \"Unauthorized\"\u003c/strong\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eChrome/Chromium 里的登录态可能已经过期。请打开当前页面，在新标签页重新手工登录或刷新该页面。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNode API 错误 / 缺少 \u003ccode\u003efetch\u003c/code\u003e / 旧 Node 启动即崩\u003c/strong\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eOpenCLI 要求 \u003cstrong\u003eNode.js \u0026gt;= 20.18.1\u003c/strong\u003e。先执行 \u003ccode\u003enode --version\u003c/code\u003e，如果版本过低先升级，再重试命令。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDaemon 问题\u003c/strong\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e检查 daemon 状态：\u003ccode\u003ecurl localhost:19825/status\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e查看扩展日志：\u003ccode\u003ecurl localhost:19825/logs\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStar History\u003c/h2\u003e\u003ca id=\"user-content-star-history\" class=\"anchor\" aria-label=\"Permalink: Star History\" href=\"#star-history\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://star-history.dera.page/#jackwener/opencli\u0026amp;Date\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/b01e0a5917f5b4fbf01fb666bcadd63f1fdd4c47955cd1ba348c50fa8e9819b6/68747470733a2f2f737461722d686973746f72792e646572612e706167652f7376673f7265706f733d6a61636b77656e65722f6f70656e636c6926747970653d44617465\" alt=\"Star History Chart\" data-canonical-src=\"https://star-history.dera.page/svg?repos=jackwener/opencli\u0026amp;type=Date\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLicense\u003c/h2\u003e\u003ca id=\"user-content-license\" class=\"anchor\" aria-label=\"Permalink: License\" href=\"#license\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"/jackwener/OpenCLI/blob/main/LICENSE\"\u003eApache-2.0\u003c/a\u003e\u003c/p\u003e\n\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"OpenCLI","fully_qualified_name":"OpenCLI","kind":"section_1","ident_start":2,"ident_end":9,"extent_start":0,"extent_end":18874,"ident_utf16":{"start":{"line_number":0,"utf16_col":2},"end":{"line_number":0,"utf16_col":9}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":323,"utf16_col":0}}},{"name":"快速开始","fully_qualified_name":"快速开始","kind":"section_2","ident_start":1671,"ident_end":1683,"extent_start":1668,"extent_end":3188,"ident_utf16":{"start":{"line_number":19,"utf16_col":3},"end":{"line_number":19,"utf16_col":7}},"extent_utf16":{"start":{"line_number":19,"utf16_col":0},"end":{"line_number":65,"utf16_col":0}}},{"name":"1. 安装 OpenCLI","fully_qualified_name":"1. 安装 OpenCLI","kind":"section_3","ident_start":1689,"ident_end":1706,"extent_start":1685,"extent_end":2358,"ident_utf16":{"start":{"line_number":21,"utf16_col":4},"end":{"line_number":21,"utf16_col":17}},"extent_utf16":{"start":{"line_number":21,"utf16_col":0},"end":{"line_number":39,"utf16_col":0}}},{"name":"2. 安装 Browser Bridge 扩展","fully_qualified_name":"2. 安装 Browser Bridge 扩展","kind":"section_3","ident_start":2362,"ident_end":2393,"extent_start":2358,"extent_end":3022,"ident_utf16":{"start":{"line_number":39,"utf16_col":4},"end":{"line_number":39,"utf16_col":27}},"extent_utf16":{"start":{"line_number":39,"utf16_col":0},"end":{"line_number":51,"utf16_col":0}}},{"name":"3. 验证环境","fully_qualified_name":"3. 验证环境","kind":"section_3","ident_start":3026,"ident_end":3041,"extent_start":3022,"extent_end":3071,"ident_utf16":{"start":{"line_number":51,"utf16_col":4},"end":{"line_number":51,"utf16_col":11}},"extent_utf16":{"start":{"line_number":51,"utf16_col":0},"end":{"line_number":57,"utf16_col":0}}},{"name":"4. 跑第一个命令","fully_qualified_name":"4. 跑第一个命令","kind":"section_3","ident_start":3075,"ident_end":3096,"extent_start":3071,"extent_end":3188,"ident_utf16":{"start":{"line_number":57,"utf16_col":4},"end":{"line_number":57,"utf16_col":13}},"extent_utf16":{"start":{"line_number":57,"utf16_col":0},"end":{"line_number":65,"utf16_col":0}}},{"name":"给人类用户","fully_qualified_name":"给人类用户","kind":"section_2","ident_start":3191,"ident_end":3206,"extent_start":3188,"extent_end":3453,"ident_utf16":{"start":{"line_number":65,"utf16_col":3},"end":{"line_number":65,"utf16_col":8}},"extent_utf16":{"start":{"line_number":65,"utf16_col":0},"end":{"line_number":73,"utf16_col":0}}},{"name":"扩展 OpenCLI","fully_qualified_name":"扩展 OpenCLI","kind":"section_2","ident_start":3456,"ident_end":3470,"extent_start":3453,"extent_end":4112,"ident_utf16":{"start":{"line_number":73,"utf16_col":3},"end":{"line_number":73,"utf16_col":13}},"extent_utf16":{"start":{"line_number":73,"utf16_col":0},"end":{"line_number":84,"utf16_col":0}}},{"name":"给 AI Agent","fully_qualified_name":"给 AI Agent","kind":"section_2","ident_start":4115,"ident_end":4127,"extent_start":4112,"extent_end":7237,"ident_utf16":{"start":{"line_number":84,"utf16_col":3},"end":{"line_number":84,"utf16_col":13}},"extent_utf16":{"start":{"line_number":84,"utf16_col":0},"end":{"line_number":134,"utf16_col":0}}},{"name":"安装 skill（同时也用于更新）","fully_qualified_name":"安装 skill（同时也用于更新）","kind":"section_3","ident_start":4348,"ident_end":4387,"extent_start":4344,"extent_end":4710,"ident_utf16":{"start":{"line_number":88,"utf16_col":4},"end":{"line_number":88,"utf16_col":21}},"extent_utf16":{"start":{"line_number":88,"utf16_col":0},"end":{"line_number":103,"utf16_col":0}}},{"name":"选择哪个 skill","fully_qualified_name":"选择哪个 skill","kind":"section_3","ident_start":4714,"ident_end":4732,"extent_start":4710,"extent_end":5456,"ident_utf16":{"start":{"line_number":103,"utf16_col":4},"end":{"line_number":103,"utf16_col":14}},"extent_utf16":{"start":{"line_number":103,"utf16_col":0},"end":{"line_number":112,"utf16_col":0}}},{"name":"工作原理","fully_qualified_name":"工作原理","kind":"section_3","ident_start":5460,"ident_end":5472,"extent_start":5456,"extent_end":7237,"ident_utf16":{"start":{"line_number":112,"utf16_col":4},"end":{"line_number":112,"utf16_col":8}},"extent_utf16":{"start":{"line_number":112,"utf16_col":0},"end":{"line_number":134,"utf16_col":0}}},{"name":"为新站点写适配器","fully_qualified_name":"为新站点写适配器","kind":"section_2","ident_start":7240,"ident_end":7264,"extent_start":7237,"extent_end":7899,"ident_utf16":{"start":{"line_number":134,"utf16_col":3},"end":{"line_number":134,"utf16_col":11}},"extent_utf16":{"start":{"line_number":134,"utf16_col":0},"end":{"line_number":145,"utf16_col":0}}},{"name":"配置","fully_qualified_name":"配置","kind":"section_2","ident_start":7902,"ident_end":7908,"extent_start":7899,"extent_end":9474,"ident_utf16":{"start":{"line_number":145,"utf16_col":3},"end":{"line_number":145,"utf16_col":5}},"extent_utf16":{"start":{"line_number":145,"utf16_col":0},"end":{"line_number":162,"utf16_col":0}}},{"name":"内置命令","fully_qualified_name":"内置命令","kind":"section_2","ident_start":9477,"ident_end":9489,"extent_start":9474,"extent_end":12663,"ident_utf16":{"start":{"line_number":162,"utf16_col":3},"end":{"line_number":162,"utf16_col":7}},"extent_utf16":{"start":{"line_number":162,"utf16_col":0},"end":{"line_number":188,"utf16_col":0}}},{"name":"下载支持","fully_qualified_name":"下载支持","kind":"section_2","ident_start":12666,"ident_end":12678,"extent_start":12663,"extent_end":15259,"ident_utf16":{"start":{"line_number":188,"utf16_col":3},"end":{"line_number":188,"utf16_col":7}},"extent_utf16":{"start":{"line_number":188,"utf16_col":0},"end":{"line_number":259,"utf16_col":0}}},{"name":"支持的平台","fully_qualified_name":"支持的平台","kind":"section_3","ident_start":12745,"ident_end":12760,"extent_start":12741,"extent_end":13507,"ident_utf16":{"start":{"line_number":192,"utf16_col":4},"end":{"line_number":192,"utf16_col":9}},"extent_utf16":{"start":{"line_number":192,"utf16_col":0},"end":{"line_number":206,"utf16_col":0}}},{"name":"前置依赖","fully_qualified_name":"前置依赖","kind":"section_3","ident_start":13511,"ident_end":13523,"extent_start":13507,"extent_end":13658,"ident_utf16":{"start":{"line_number":206,"utf16_col":4},"end":{"line_number":206,"utf16_col":8}},"extent_utf16":{"start":{"line_number":206,"utf16_col":0},"end":{"line_number":217,"utf16_col":0}}},{"name":"使用示例","fully_qualified_name":"使用示例","kind":"section_3","ident_start":13662,"ident_end":13674,"extent_start":13658,"extent_end":15259,"ident_utf16":{"start":{"line_number":217,"utf16_col":4},"end":{"line_number":217,"utf16_col":8}},"extent_utf16":{"start":{"line_number":217,"utf16_col":0},"end":{"line_number":259,"utf16_col":0}}},{"name":"输出格式","fully_qualified_name":"输出格式","kind":"section_2","ident_start":15262,"ident_end":15274,"extent_start":15259,"extent_end":15917,"ident_utf16":{"start":{"line_number":259,"utf16_col":3},"end":{"line_number":259,"utf16_col":7}},"extent_utf16":{"start":{"line_number":259,"utf16_col":0},"end":{"line_number":274,"utf16_col":0}}},{"name":"退出码","fully_qualified_name":"退出码","kind":"section_2","ident_start":15920,"ident_end":15929,"extent_start":15917,"extent_end":16215,"ident_utf16":{"start":{"line_number":274,"utf16_col":3},"end":{"line_number":274,"utf16_col":6}},"extent_utf16":{"start":{"line_number":274,"utf16_col":0},"end":{"line_number":278,"utf16_col":0}}},{"name":"插件","fully_qualified_name":"插件","kind":"section_2","ident_start":16218,"ident_end":16224,"extent_start":16215,"extent_end":17677,"ident_utf16":{"start":{"line_number":278,"utf16_col":3},"end":{"line_number":278,"utf16_col":5}},"extent_utf16":{"start":{"line_number":278,"utf16_col":0},"end":{"line_number":302,"utf16_col":0}}},{"name":"常见问题排查","fully_qualified_name":"常见问题排查","kind":"section_2","ident_start":17680,"ident_end":17698,"extent_start":17677,"extent_end":18670,"ident_utf16":{"start":{"line_number":302,"utf16_col":3},"end":{"line_number":302,"utf16_col":9}},"extent_utf16":{"start":{"line_number":302,"utf16_col":0},"end":{"line_number":316,"utf16_col":0}}},{"name":"Star History","fully_qualified_name":"Star History","kind":"section_2","ident_start":18673,"ident_end":18685,"extent_start":18670,"extent_end":18838,"ident_utf16":{"start":{"line_number":316,"utf16_col":3},"end":{"line_number":316,"utf16_col":15}},"extent_utf16":{"start":{"line_number":316,"utf16_col":0},"end":{"line_number":320,"utf16_col":0}}},{"name":"License","fully_qualified_name":"License","kind":"section_2","ident_start":18841,"ident_end":18848,"extent_start":18838,"extent_end":18874,"ident_utf16":{"start":{"line_number":320,"utf16_col":3},"end":{"line_number":320,"utf16_col":10}},"extent_utf16":{"start":{"line_number":320,"utf16_col":0},"end":{"line_number":323,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":1181982220,"defaultBranch":"main","name":"OpenCLI","ownerLogin":"jackwener","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2026-03-14T22:10:23.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/30525741?v=4","public":true,"private":false,"isOrgOwned":false,"isArchived":false},"currentUser":null,"uploadToken":"blekkJ7OPtqXvMyhGYDUTMtnjStfYnycNssPWUFGgtZysMaSnOa3ckRJE8KFySfrlfrBWNno2pKFld8YwpTnRQ","allShortcutsEnabled":false,"treeExpanded":true,"path":"README.zh-CN.md","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1791609030.0","canEdit":false,"currentOid":"77af6bc433c1818a4abb1c8928e2a7fd0bbae376"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"autoresearch","path":"autoresearch","contentType":"directory"},{"name":"cases","path":"cases","contentType":"directory"},{"name":"clis","path":"clis","contentType":"directory"},{"name":"designs","path":"designs","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"extension","path":"extension","contentType":"directory"},{"name":"scripts","path":"scripts","contentType":"directory"},{"name":"skills","path":"skills","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"CHANGELOG.md","path":"CHANGELOG.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"PRIVACY.md","path":"PRIVACY.md","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"README.zh-CN.md","path":"README.zh-CN.md","contentType":"file"},{"name":"TESTING.md","path":"TESTING.md","contentType":"file"},{"name":"bun.lock","path":"bun.lock","contentType":"file"},{"name":"cli-manifest.json","path":"cli-manifest.json","contentType":"file"},{"name":"llms.txt","path":"llms.txt","contentType":"file"},{"name":"package-lock.json","path":"package-lock.json","contentType":"file"},{"name":"package.json","path":"package.json","contentType":"file"},{"name":"tsconfig.json","path":"tsconfig.json","contentType":"file"},{"name":"vitest.config.ts","path":"vitest.config.ts","contentType":"file"}],"totalCount":26}},"fileTreeProcessingTime":6.0760950000000005,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1791609030.0","canEdit":false,"refType":"branch","currentOid":"77af6bc433c1818a4abb1c8928e2a7fd0bbae376","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"README.zh-CN.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/jackwener/OpenCLI/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"README.zh-CN.md","displayUrl":"https://github.com/jackwener/OpenCLI/blob/main/README.zh-CN.md?raw=true","headerInfo":{"blobSize":"18.4 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"475e5f5","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fjackwener%2FOpenCLI%2Fblob%2Fmain%2FREADME.zh-CN.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"323","truncatedSloc":"235"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/jackwener/OpenCLI/blob/main/README.zh-CN.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/jackwener/OpenCLI/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/jackwener/OpenCLI/raw/refs/heads/main/README.zh-CN.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["# OpenCLI","","\u003e **把任意网站变成 CLI \u0026 在你的登录态浏览器上跑 Browser Use。**","\u003e 把网站和浏览器会话，统一变成适合人类与 AI Agent 使用的确定性接口。","\u003e 或者在任意页面上跑 Browser Use —— 导航、填表单、点击、抓取、自动化。","","[![English](https://img.shields.io/badge/docs-English-1D4ED8?style=flat-square)](./README.md)","[![npm](https://img.shields.io/npm/v/@jackwener/opencli?style=flat-square)](https://www.npmjs.com/package/@jackwener/opencli)","[![Node.js Version](https://img.shields.io/node/v/@jackwener/opencli?style=flat-square)](https://nodejs.org)","[![License](https://img.shields.io/npm/l/@jackwener/opencli?style=flat-square)](./LICENSE)","","OpenCLI 是 **general-purpose browser automation CLI**，可以作为 **agent-browser 的替代工具**。导航、检查页面、点击、填表、提取和截图无需 site adapter；内置 adapters 为重复任务提供可复用的确定性命令。参见 [OpenCLI vs agent-browser 与迁移指南](./docs/zh/guide/agent-browser-alternative.md)。","","OpenCLI 可以用同一套 CLI 做三类事情：","","- **直接使用现成适配器**：B站、知乎、小红书、Twitter/X、Reddit、HackerNews 等 [100+ 站点](#内置命令) 开箱即用。","- **让 AI Agent 操作任意网站**：在你的 AI Agent（Claude Code、Cursor 等）中安装 `opencli-browser` skill，Agent 就能用你的已登录浏览器导航、点击、输入/填充、提取任意网页内容。","- **把新网站写成 CLI**：用 `opencli browser` 原语 + `opencli-adapter-author` skill，从站点侦察、API 发现、字段解码到 `opencli browser verify` 一条龙。","","## 快速开始","","### 1. 安装 OpenCLI","","如果你是在自己的电脑上使用，优先安装 **OpenCLIApp**。它会内置","OpenCLI runtime，帮你安装 / 修复受管理的 `opencli` 命令，并提供系统托盘","UI 来做环境诊断、更新、浏览器登录态保活和网页转 Markdown。","","**方式 A — OpenCLIApp（macOS / Windows 推荐）：**","从 \u003chttps://opencli.info/download\u003e 下载最新版 App，安装后打开一次，在","System 页面安装或修复 `opencli` 命令。","","**方式 B — npm 全局安装（纯 CLI / CI / 服务器）：**","通过 npm 安装时，OpenCLI 要求 **Node.js \u003e= 20.18.1**。","","```bash","node --version","npm install -g @jackwener/opencli","```","","### 2. 安装 Browser Bridge 扩展","","OpenCLI 通过轻量 Browser Bridge 扩展和本地微型 daemon 与 Chrome/Chromium 通信。daemon 会按需自动启动。","","**方式 A — Chrome Web Store（推荐）：**","在 [Chrome Web Store](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk) 安装 **OpenCLI** 扩展。","","**方式 B — 手动安装：**","1. 到 GitHub [Releases 页面](https://github.com/jackwener/opencli/releases) 下载最新的 `opencli-extension-v{version}.zip`。","2. 解压后打开 `chrome://extensions`，启用 **开发者模式**。","3. 点击 **加载已解压的扩展程序**，选择解压后的目录。","","### 3. 验证环境","","```bash","opencli doctor","```","","### 4. 跑第一个命令","","```bash","opencli list","opencli hackernews top --limit 5","opencli bilibili hot --limit 5","```","","## 给人类用户","","如果你只是想稳定地调用网站或桌面应用能力，主路径很简单：","","- `opencli list` 查看当前所有命令","- `opencli \u003csite\u003e \u003ccommand\u003e` 调用内置或生成好的适配器","- `opencli doctor` 处理浏览器连通性问题","","## 扩展 OpenCLI","","如果你想新增自己的命令，先看 [扩展 OpenCLI](./docs/zh/guide/extending-opencli.md)。README 只保留入口；目录结构、源码管理方式和安装命令放在文档里。","","| 需求 | 推荐路径 |","|------|----------|","| 把个人网站命令放在自己的 Git repo | `opencli plugin create` + `opencli plugin install file://...` |","| 快速写一个本机私人 adapter | `opencli browser init \u003csite\u003e/\u003ccommand\u003e`，放在 `~/.opencli/clis/` |","| 本地修改官方 adapter | `opencli adapter eject \u003csite\u003e` + `opencli adapter reset \u003csite\u003e` |","| 发布或安装第三方命令 | `opencli plugin install github:user/repo` |","","## 给 AI Agent","","OpenCLI 的 browser 命令是给 AI Agent 用的——不是手动执行的。把 skill 安装到你的 AI Agent（Claude Code、Cursor 等）中，Agent 就能用你的已登录 Chrome 会话替你操作网站。","","### 安装 skill（同时也用于更新）","","```bash","npx skills add jackwener/opencli","```","","或只装需要的 skill：","","```bash","npx skills add jackwener/opencli --skill opencli-adapter-author","npx skills add jackwener/opencli --skill opencli-autofix","npx skills add jackwener/opencli --skill opencli-browser","npx skills add jackwener/opencli --skill opencli-usage","```","","### 选择哪个 skill","","| Skill | 适用场景 | 你对 AI Agent 说的话 |","|-------|---------|-------------------|","| **opencli-adapter-author** | 为新站点写可复用适配器，或给已有站点添加命令 | \"帮我做一个抖音热门的适配器\" / \"帮我做一个抓取这个页面热帖的命令\" |","| **opencli-autofix** | 内置命令失败时修复已有适配器 | \"`opencli zhihu hot` 返回空了，修一下\" |","| **opencli-browser** | 实时驱动 Chrome 页面——导航、填表单、点击、抓取 | \"帮我看看小红书的通知\" / \"帮我填一下这个表单\" / \"用浏览器命令抓取这个页面\" |","| **opencli-usage** | 所有命令和站点的快速参考 | \"OpenCLI 有哪些 Twitter 相关的命令？\" |","","### 工作原理","","安装 `opencli-browser` skill 后，你的 AI Agent 可以：","","1. **导航**到任意 URL，使用你的已登录浏览器","2. **读取**页面内容——通过结构化 DOM 快照（不是截图）","3. **交互**——点击按钮、填写表单、选择选项、按键","4. **提取**页面数据或拦截网络 API 响应","5. **等待**元素、文本或页面跳转","","Agent 在内部自动处理所有 `opencli browser` 命令——你只需用自然语言描述想做的事。","","**Skill 参考文档：**","- [`skills/opencli-browser/SKILL.md`](./skills/opencli-browser/SKILL.md) — 实时驱动 Chrome（导航、填表单、点击、抓取）","- [`skills/opencli-adapter-author/SKILL.md`](./skills/opencli-adapter-author/SKILL.md) — 给新站点写适配器，全流程","- [`skills/opencli-autofix/SKILL.md`](./skills/opencli-autofix/SKILL.md) — 修复已有适配器","- [`skills/opencli-usage/SKILL.md`](./skills/opencli-usage/SKILL.md) — 命令和站点参考","","`browser` 可用命令包括：`open`、`state`、`click`、`type`、`fill`、`select`、`keys`、`wait`、`get`、`find`、`extract`、`frames`、`screenshot`、`scroll`、`back`、`eval`、`network`、`tab list`、`tab new`、`tab select`、`tab close`、`init`、`verify`、`close`。","","`opencli browser` 命令必须紧跟一个 `\u003csession\u003e` 位置参数。`opencli browser work open \u003curl\u003e` 和 `opencli browser work tab new [url]` 都会返回 target ID。`opencli browser work tab list` 用来查看当前已存在 tab 的 target ID，再通过 `--tab \u003ctargetId\u003e` 把命令明确路由到某个 tab。`tab new` 只会新建 tab，不会改变默认浏览器目标；只有显式执行 `tab select \u003ctargetId\u003e`，才会把该 tab 设为同一 session 后续未指定 target 的默认目标。","","## 为新站点写适配器","","当你需要的网站还没覆盖时，用 `opencli-adapter-author` skill，全流程：","","1. **侦察**站点，分类 pattern（SPA / SSR / JSONP / Token / Streaming）","2. **发现** endpoint——network 精读、initial state、bundle 搜索、token 溯源，或 interceptor 兜底","3. **定认证**——`PUBLIC` / `COOKIE` / `INTERCEPT` / `UI` / `LOCAL`","4. **字段解码** + 设计输出列","5. `opencli browser recon analyze \u003curl\u003e` → `opencli browser recon init \u003csite\u003e/\u003cname\u003e` → 写适配器 → `opencli browser recon verify \u003csite\u003e/\u003cname\u003e`","6. 站点知识沉到 `~/.opencli/sites/\u003csite\u003e/`，下次同站点直接吃缓存","","## 配置","","| 变量 | 默认值 | 说明 |","|------|--------|------|","| `OPENCLI_WINDOW` | 命令默认值 | 设为 `foreground` 或 `background` 来覆盖 Browser Bridge 窗口位置。浏览器型命令也支持 `--window \u003cforeground\\|background\u003e` |","| `OPENCLI_SITE_SESSION` | adapter 默认值 | 设为 `ephemeral` 或 `persistent`，覆盖浏览器型 adapter 命令的 `siteSession` 元数据。`ephemeral` 会在命令结束时关闭一次性自动化窗口；`persistent` 会复用该站点的 session。命令级 `--site-session` 优先。 |","| `OPENCLI_BROWSER_CONNECT_TIMEOUT` | `45` | 浏览器连接超时（秒） |","| `OPENCLI_BROWSER_COMMAND_TIMEOUT` | `60` | 单个浏览器命令超时（秒） |","| `OPENCLI_CDP_ENDPOINT` | — | Chrome DevTools Protocol 端点，用于远程浏览器 |","| `OPENCLI_CDP_TARGET` | — | 按 URL 子串过滤 CDP target（如 `detail.1688.com`） |","| `OPENCLI_VERBOSE` | `false` | 启用详细日志（`-v` 也可以） |","| `DEBUG_SNAPSHOT` | — | 设为 `1` 输出 DOM 快照调试信息 |","","Browser Bridge daemon 与扩展的通信端口固定为 `localhost:19825`，不再支持通过 `OPENCLI_DAEMON_PORT` 配置自定义端口。","","`opencli browser *` 必须紧跟一个 `\u003csession\u003e` 位置参数，默认使用前台窗口，并保留该 session 的 tab lease，直到你手动执行 `opencli browser \u003csession\u003e close` 或等空闲超时。浏览器型 adapter 默认使用后台 adapter 窗口并在命令结束后释放一次性 tab lease；如果需要调试最终页面，可以传 `--window foreground --keep-tab true`。","","## 内置命令","","运行 `opencli list` 查看完整注册表。","","| 站点 | 命令 |","|------|------|","| **xiaohongshu** | `search` `ask` `note` `comments` `notifications` `feed` `user` `saved` `liked` `download` `publish` `follow` `unfollow` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` |","| **bilibili** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `summary` `video` `comments` `dynamic` `ranking` `following` `follow` `unfollow` `user-videos` `download` `creator-stats` |","| **zhihu** | `hot` `search` `question` `download` `follow` `like` `favorite` `comment` `answer` |","| **hackernews** | `top` `new` `best` `ask` `show` `jobs` `search` `user` |","| **hltv** | `search` `player-summary` `player-matches` `player-form` `player-map-pool` `player-vs-team` `player-teammate-impact` `player-duel` `match-map` `match-series` `team-matches` `team-map-pool` `event-matches` |","| **geogebra** | `eval` `add-point` `add-line` `add-circle` `add-polygon` `triangle` `hexagon` `list` `info` |","| **linkedin** | `connect` `inbox` `job-detail` `jobs-preferences` `post-analytics` `posts` `profile-experience` `profile-projects` `profile-read` `profile-analytics` `safe-send` `search` `people-search` `services-read` `sent-invitations` `thread-snapshot` `timeline` `salesnav-search` `salesnav-inbox` `salesnav-message` `salesnav-thread` |","| **reddit** | `hot` `frontpage` `popular` `search` `subreddit` `read` `user` `user-posts` `user-comments` `upvote` `save` `comment` `subscribe` `saved` `upvoted` |","| **twitter** | `trending` `search` `timeline` `tweets` `lists` `list-tweets` `list-create` `list-delete` `list-add` `list-add-batch` `list-remove` `list-remove-batch` `bookmarks` `profile` `thread` `following` `followers` `notifications` `post` `reply` `delete` `like` `likes` `article` `follow` `unfollow` `bookmark` `unbookmark` `download` `accept` `reply-dm` `block` `unblock` `hide-reply` |","| **claude** | `ask` `send` `new` `status` `read` `history` `detail` |","| **gemini** | `new` `ask` `image` `deep-research` `deep-research-result` |","| **notebooklm** | `status` `list` `open` `current` `get` `history` `summary` `note-list` `notes-get` `source-list` `source-get` `source-fulltext` `source-guide` |","| **amazon** | `bestsellers` `search` `product` `offer` `discussion` `movers-shakers` `new-releases` `rankings` |","| **upwork** | `search` `feed` `detail` |","| **slock** | `message-send` `message-read` `message-search` `channel-list` `channel-info` `channel-create` `channel-members` `channel-join` `task-list` `task-create` `task-claim` `task-status` `task-convert` `task-delete` `thread-list` `thread-follow` `attachment-upload` `attachment-download` `bookmark-add` `inbox` `dm-list` `server-list` `server-use` `whoami` |","| **huodongxing** | `events` |","| **midjourney** | `login` `whoami` `settings` `quota` `generate` `describe` `history` `status` `action` `download` |","","精选清单 — **[→ 查看全部 100+ 站点和命令](./docs/adapters/index.md)**（小红书 / B站 / 知乎 / Twitter / Reddit / 抖音 / 微博 / 微信读书 / 小宇宙 / 1688 / 夸克 / Spotify / 牛客 / arxiv / Chess.com / Bilibili / 等）。","","## 下载支持","","OpenCLI 支持从各平台下载图片、视频和文章。","","### 支持的平台","","| 平台 | 内容类型 | 说明 |","|------|----------|------|","| **小红书** | 图片、视频 | 下载笔记中的所有媒体文件 |","| **B站** | 视频 | 需要安装 `yt-dlp` |","| **Twitter/X** | 图片、视频 | 从用户媒体页或单条推文下载 |","| **Pixiv** | 图片 | 下载原始画质插画，支持多页作品 |","| **1688** | 图片、视频 | 下载商品页中可见的商品素材 |","| **小宇宙** | 音频、转录 | 使用本地凭证下载单集音频和转录 JSON / 文本 |","| **知乎** | 文章（Markdown） | 导出文章，可选下载图片到本地 |","| **微信公众号** | 文章（Markdown） | 导出微信公众号文章为 Markdown |","| **豆瓣** | 图片 | 下载电影条目的海报 / 剧照图片 |","","### 前置依赖","","下载流媒体平台的视频需要安装 `yt-dlp`：","","```bash","# 安装 yt-dlp","pip install yt-dlp","# 或者","brew install yt-dlp","```","","### 使用示例","","```bash","# 下载小红书笔记中的图片/视频","opencli xiaohongshu download \"https://www.xiaohongshu.com/search_result/\u003cid\u003e?xsec_token=...\" --output ./xhs","opencli xiaohongshu download \"https://xhslink.com/...\" --output ./xhs","opencli rednote download \"https://www.rednote.com/search_result/\u003cid\u003e?xsec_token=...\" --output ./rednote","","# 下载B站视频（需要 yt-dlp）","opencli bilibili download BV1xxx --output ./bilibili","opencli bilibili download BV1xxx --quality 1080p  # 指定画质","","# 下载 Twitter 用户的媒体","opencli twitter download elonmusk --limit 20 --output ./twitter","","# 下载单条推文的媒体","opencli twitter download --tweet-url \"https://x.com/user/status/123\" --output ./twitter","","# 下载豆瓣电影海报 / 剧照","opencli douban download 30382501 --output ./douban","","# 下载 1688 商品页中的图片 / 视频素材","opencli 1688 download 841141931191 --output ./1688-downloads","","# 下载小宇宙单集音频","opencli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou","","# 下载小宇宙单集转录","opencli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts","","# 导出知乎文章为 Markdown","opencli zhihu download \"https://zhuanlan.zhihu.com/p/xxx\" --output ./zhihu","","# 导出并下载图片","opencli zhihu download \"https://zhuanlan.zhihu.com/p/xxx\" --download-images","","# 导出微信公众号文章为 Markdown","opencli weixin download --url \"https://mp.weixin.qq.com/s/xxx\" --output ./weixin","```","","`opencli xiaoyuzhou download` 和 `transcript` 需要本地小宇宙凭证：`~/.opencli/xiaoyuzhou.json`。","","## 输出格式","","所有内置命令都支持 `--format` / `-f`，可选值为 `table`、`json`、`yaml`、`md`、`csv`。","`list` 命令也支持同样的格式参数，同时继续兼容 `--json`。","","```bash","opencli list -f yaml            # 用 YAML 列出命令注册表","opencli bilibili hot -f table   # 默认：富文本表格","opencli bilibili hot -f json    # JSON（适合传给 jq 或者各类 AI Agent）","opencli bilibili hot -f yaml    # YAML（更适合人类直接阅读）","opencli bilibili hot -f md      # Markdown","opencli bilibili hot -f csv     # CSV","opencli bilibili hot -v         # 详细模式：展示管线执行步骤调试信息","```","","## 退出码","","opencli 遵循 Unix `sysexits.h`，CI / 脚本可按失败模式分支：`0` 成功、`66` 无数据、`69` Browser Bridge 未连接、`75` 超时、`77` 需要认证、`78` 配置错误、`130` Ctrl-C。完整参考：[docs/zh/guide/exit-codes.md](./docs/zh/guide/exit-codes.md)。","","## 插件","","通过社区贡献的插件扩展 OpenCLI。插件使用与内置命令相同的 JS 格式，启动时自动发现。","","```bash","opencli plugin install github:user/opencli-plugin-my-tool  # 安装","opencli plugin list                                         # 查看已安装","opencli plugin update my-tool                               # 更新到最新","opencli plugin update --all                                 # 更新全部已安装插件","opencli plugin uninstall my-tool                            # 卸载","```","","当 plugin 的版本被记录到 `~/.opencli/plugins.lock.json` 后，`opencli plugin list` 也会显示对应的短 commit hash。","","| 插件 | 类型 | 描述 |","|------|------|------|","| [opencli-plugin-github-trending](https://github.com/ByteYue/opencli-plugin-github-trending) | JS | GitHub Trending 仓库 |","| [opencli-plugin-hot-digest](https://github.com/ByteYue/opencli-plugin-hot-digest) | JS | 多平台热榜聚合 |","| [opencli-plugin-juejin](https://github.com/Astro-Han/opencli-plugin-juejin) | JS | 稀土掘金热门文章 |","| [opencli-plugin-vk](https://github.com/flobo3/opencli-plugin-vk) | JS | VK (VKontakte) 动态、信息流和搜索 |","| [opencli-plugin-x-article-publisher](https://github.com/genoooool/opencli-plugin-x-article-publisher) | JS | 通过 OpenCLI 与 xPoster 将带本地图片的 Markdown 发布为 X 长文 |","","详见 [插件指南](./docs/zh/guide/plugins.md) 了解如何创建自己的插件。","","## 常见问题排查","","- **\"Extension not connected\" 报错**","  - 确保你已从 [Chrome Web Store](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk) 安装 OpenCLI 扩展，且在 `chrome://extensions` 中**已启用**。","- **\"attach failed: Cannot access a chrome-extension:// URL\" 报错**","  - 其他 Chrome/Chromium 扩展（如 youmind、New Tab Override 或 AI 助手类扩展）可能产生冲突。请尝试**暂时禁用其他扩展**后重试。","- **返回空数据，或者报错 \"Unauthorized\"**","  - Chrome/Chromium 里的登录态可能已经过期。请打开当前页面，在新标签页重新手工登录或刷新该页面。","- **Node API 错误 / 缺少 `fetch` / 旧 Node 启动即崩**","  - OpenCLI 要求 **Node.js \u003e= 20.18.1**。先执行 `node --version`，如果版本过低先升级，再重试命令。","- **Daemon 问题**","  - 检查 daemon 状态：`curl localhost:19825/status`","  - 查看扩展日志：`curl localhost:19825/logs`","","## Star History","","[![Star History Chart](https://star-history.dera.page/svg?repos=jackwener/opencli\u0026type=Date)](https://star-history.dera.page/#jackwener/opencli\u0026Date)","","## License","","[Apache-2.0](./LICENSE)"],"stylingDirectives":[[[0,9,"pl-mh"],[2,9,"pl-en"]],[],[[0,44,"pl-ent"],[0,2,"pl-ent"],[2,4,"pl-s"],[42,44,"pl-s"]],[[0,40,"pl-ent"],[0,2,"pl-ent"]],[[0,44,"pl-ent"],[0,2,"pl-ent"]],[[0,0,"pl-ent"]],[[0,1,"pl-s"],[1,3,"pl-s"],[10,11,"pl-s"],[11,12,"pl-s"],[12,78,"pl-corl"],[78,80,"pl-s"],[80,81,"pl-s"],[81,92,"pl-corl"],[92,93,"pl-s"]],[[0,1,"pl-s"],[1,3,"pl-s"],[6,7,"pl-s"],[7,8,"pl-s"],[8,73,"pl-corl"],[73,75,"pl-s"],[75,76,"pl-s"],[76,124,"pl-corl"],[124,125,"pl-s"]],[[0,1,"pl-s"],[1,3,"pl-s"],[18,19,"pl-s"],[19,20,"pl-s"],[20,86,"pl-corl"],[86,88,"pl-s"],[88,89,"pl-s"],[89,107,"pl-corl"],[107,108,"pl-s"]],[[0,1,"pl-s"],[1,3,"pl-s"],[10,11,"pl-s"],[11,12,"pl-s"],[12,77,"pl-corl"],[77,79,"pl-s"],[79,80,"pl-s"],[80,89,"pl-corl"],[89,90,"pl-s"]],[],[[10,12,"pl-s"],[50,52,"pl-s"],[58,60,"pl-s"],[79,81,"pl-s"],[149,150,"pl-s"],[180,181,"pl-s"],[181,182,"pl-s"],[182,226,"pl-corl"],[226,227,"pl-s"]],[],[],[],[[0,1,"pl-v"],[2,4,"pl-s"],[13,15,"pl-s"],[56,57,"pl-s"],[64,65,"pl-s"],[65,66,"pl-s"],[66,71,"pl-corl"],[71,72,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[21,23,"pl-s"],[62,63,"pl-s"],[63,78,"pl-c1"],[78,79,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[14,16,"pl-s"],[19,20,"pl-s"],[20,35,"pl-c1"],[35,36,"pl-s"],[42,43,"pl-s"],[43,65,"pl-c1"],[65,66,"pl-s"],[92,93,"pl-s"],[93,115,"pl-c1"],[115,116,"pl-s"]],[],[[0,7,"pl-mh"],[3,7,"pl-en"]],[],[[0,17,"pl-mh"],[4,17,"pl-en"]],[],[[19,21,"pl-s"],[31,33,"pl-s"]],[[30,31,"pl-s"],[31,38,"pl-c1"],[38,39,"pl-s"]],[],[],[[0,2,"pl-s"],[40,42,"pl-s"]],[[2,3,"pl-s"],[3,32,"pl-corl"],[32,33,"pl-s"]],[[15,16,"pl-s"],[16,23,"pl-c1"],[23,24,"pl-s"]],[],[[0,2,"pl-s"],[36,38,"pl-s"]],[[22,24,"pl-s"],[42,44,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[],[[0,3,"pl-s"]],[],[[0,27,"pl-mh"],[4,27,"pl-en"]],[],[],[],[[0,2,"pl-s"],[30,32,"pl-s"]],[[2,3,"pl-s"],[19,20,"pl-s"],[20,21,"pl-s"],[21,102,"pl-corl"],[102,103,"pl-s"],[107,109,"pl-s"],[116,118,"pl-s"]],[],[[0,2,"pl-s"],[14,16,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[12,13,"pl-s"],[24,25,"pl-s"],[25,26,"pl-s"],[26,71,"pl-corl"],[71,72,"pl-s"],[79,80,"pl-s"],[80,112,"pl-c1"],[112,113,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[9,10,"pl-s"],[10,29,"pl-c1"],[29,30,"pl-s"],[34,36,"pl-s"],[41,43,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[6,8,"pl-s"],[18,20,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[0,3,"pl-s"]],[],[[0,13,"pl-mh"],[4,13,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,27,"pl-c1"],[27,28,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"]],[],[[0,13,"pl-mh"],[3,13,"pl-en"]],[],[[15,16,"pl-s"],[26,27,"pl-s"],[27,28,"pl-s"],[28,64,"pl-corl"],[64,65,"pl-s"]],[],[[0,1,"pl-ml"],[5,6,"pl-ml"],[12,13,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"]],[[0,1,"pl-ml"],[24,25,"pl-ml"],[26,27,"pl-s"],[27,48,"pl-c1"],[48,49,"pl-s"],[52,53,"pl-s"],[53,86,"pl-c1"],[86,87,"pl-s"],[88,89,"pl-ml"]],[[0,1,"pl-ml"],[20,21,"pl-ml"],[22,23,"pl-s"],[23,60,"pl-c1"],[60,61,"pl-s"],[65,66,"pl-s"],[66,82,"pl-c1"],[82,83,"pl-s"],[84,85,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[19,20,"pl-s"],[20,48,"pl-c1"],[48,49,"pl-s"],[52,53,"pl-s"],[53,81,"pl-c1"],[81,82,"pl-s"],[83,84,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[15,16,"pl-s"],[16,55,"pl-c1"],[55,56,"pl-s"],[57,58,"pl-ml"]],[],[[0,13,"pl-mh"],[3,13,"pl-en"]],[],[],[],[[0,21,"pl-mh"],[4,21,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[],[],[],[[0,3,"pl-s"]],[],[[0,14,"pl-mh"],[4,14,"pl-en"]],[],[[0,1,"pl-ml"],[8,9,"pl-ml"],[15,16,"pl-ml"],[33,34,"pl-ml"]],[[0,1,"pl-ml"],[8,9,"pl-ml"],[18,19,"pl-ml"],[38,39,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[26,28,"pl-s"],[29,30,"pl-ml"],[54,55,"pl-ml"],[93,94,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[19,21,"pl-s"],[22,23,"pl-ml"],[39,40,"pl-ml"],[42,43,"pl-s"],[43,60,"pl-c1"],[60,61,"pl-s"],[72,73,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[19,21,"pl-s"],[22,23,"pl-ml"],[53,54,"pl-ml"],[99,100,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[17,19,"pl-s"],[20,21,"pl-ml"],[35,36,"pl-ml"],[66,67,"pl-ml"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[],[[3,4,"pl-s"],[4,19,"pl-c1"],[19,20,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[7,9,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[7,9,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[7,9,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[7,9,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[7,9,"pl-s"]],[],[[16,17,"pl-s"],[17,32,"pl-c1"],[32,33,"pl-s"]],[],[[0,2,"pl-s"],[13,15,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,4,"pl-s"],[4,35,"pl-c1"],[35,36,"pl-s"],[36,37,"pl-s"],[37,38,"pl-s"],[38,71,"pl-corl"],[71,72,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,4,"pl-s"],[4,42,"pl-c1"],[42,43,"pl-s"],[43,44,"pl-s"],[44,45,"pl-s"],[45,85,"pl-corl"],[85,86,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,4,"pl-s"],[4,35,"pl-c1"],[35,36,"pl-s"],[36,37,"pl-s"],[37,38,"pl-s"],[38,71,"pl-corl"],[71,72,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,4,"pl-s"],[4,33,"pl-c1"],[33,34,"pl-s"],[34,35,"pl-s"],[35,36,"pl-s"],[36,67,"pl-corl"],[67,68,"pl-s"]],[],[[0,1,"pl-s"],[1,8,"pl-c1"],[8,9,"pl-s"],[17,18,"pl-s"],[18,22,"pl-c1"],[22,23,"pl-s"],[24,25,"pl-s"],[25,30,"pl-c1"],[30,31,"pl-s"],[32,33,"pl-s"],[33,38,"pl-c1"],[38,39,"pl-s"],[40,41,"pl-s"],[41,45,"pl-c1"],[45,46,"pl-s"],[47,48,"pl-s"],[48,52,"pl-c1"],[52,53,"pl-s"],[54,55,"pl-s"],[55,61,"pl-c1"],[61,62,"pl-s"],[63,64,"pl-s"],[64,68,"pl-c1"],[68,69,"pl-s"],[70,71,"pl-s"],[71,75,"pl-c1"],[75,76,"pl-s"],[77,78,"pl-s"],[78,81,"pl-c1"],[81,82,"pl-s"],[83,84,"pl-s"],[84,88,"pl-c1"],[88,89,"pl-s"],[90,91,"pl-s"],[91,98,"pl-c1"],[98,99,"pl-s"],[100,101,"pl-s"],[101,107,"pl-c1"],[107,108,"pl-s"],[109,110,"pl-s"],[110,120,"pl-c1"],[120,121,"pl-s"],[122,123,"pl-s"],[123,129,"pl-c1"],[129,130,"pl-s"],[131,132,"pl-s"],[132,136,"pl-c1"],[136,137,"pl-s"],[138,139,"pl-s"],[139,143,"pl-c1"],[143,144,"pl-s"],[145,146,"pl-s"],[146,153,"pl-c1"],[153,154,"pl-s"],[155,156,"pl-s"],[156,164,"pl-c1"],[164,165,"pl-s"],[166,167,"pl-s"],[167,174,"pl-c1"],[174,175,"pl-s"],[176,177,"pl-s"],[177,187,"pl-c1"],[187,188,"pl-s"],[189,190,"pl-s"],[190,199,"pl-c1"],[199,200,"pl-s"],[201,202,"pl-s"],[202,206,"pl-c1"],[206,207,"pl-s"],[208,209,"pl-s"],[209,215,"pl-c1"],[215,216,"pl-s"],[217,218,"pl-s"],[218,223,"pl-c1"],[223,224,"pl-s"]],[],[[0,1,"pl-s"],[1,16,"pl-c1"],[16,17,"pl-s"],[27,28,"pl-s"],[28,37,"pl-c1"],[37,38,"pl-s"],[44,45,"pl-s"],[45,76,"pl-c1"],[76,77,"pl-s"],[80,81,"pl-s"],[81,115,"pl-c1"],[115,116,"pl-s"],[132,133,"pl-s"],[133,162,"pl-c1"],[162,163,"pl-s"],[194,195,"pl-s"],[195,211,"pl-c1"],[211,212,"pl-s"],[228,229,"pl-s"],[229,236,"pl-c1"],[236,237,"pl-s"],[266,267,"pl-s"],[267,288,"pl-c1"],[288,289,"pl-s"]],[],[[0,11,"pl-mh"],[3,11,"pl-en"]],[],[[15,16,"pl-s"],[16,38,"pl-c1"],[38,39,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[7,9,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[7,9,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[8,10,"pl-s"],[12,13,"pl-s"],[13,19,"pl-c1"],[19,20,"pl-s"],[23,24,"pl-s"],[24,30,"pl-c1"],[30,31,"pl-s"],[34,35,"pl-s"],[35,44,"pl-c1"],[44,45,"pl-s"],[48,49,"pl-s"],[49,51,"pl-c1"],[51,52,"pl-s"],[55,56,"pl-s"],[56,61,"pl-c1"],[61,62,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[9,11,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[3,4,"pl-s"],[4,39,"pl-c1"],[39,40,"pl-s"],[43,44,"pl-s"],[44,84,"pl-c1"],[84,85,"pl-s"],[95,96,"pl-s"],[96,138,"pl-c1"],[138,139,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"],[10,11,"pl-s"],[11,35,"pl-c1"],[35,36,"pl-s"]],[],[[0,5,"pl-mh"],[3,5,"pl-en"]],[],[[0,1,"pl-ml"],[5,6,"pl-ml"],[11,12,"pl-ml"],[16,17,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[16,17,"pl-ml"],[23,24,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[19,20,"pl-ml"],[27,28,"pl-ml"],[32,33,"pl-s"],[33,43,"pl-c1"],[43,44,"pl-s"],[47,48,"pl-s"],[48,58,"pl-c1"],[58,59,"pl-s"],[94,95,"pl-s"],[95,128,"pl-c1"],[128,129,"pl-s"],[130,131,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[25,26,"pl-ml"],[39,40,"pl-ml"],[44,45,"pl-s"],[45,54,"pl-c1"],[54,55,"pl-s"],[58,59,"pl-s"],[59,69,"pl-c1"],[69,70,"pl-s"],[90,91,"pl-s"],[91,102,"pl-c1"],[102,103,"pl-s"],[108,109,"pl-s"],[109,118,"pl-c1"],[118,119,"pl-s"],[138,139,"pl-s"],[139,149,"pl-c1"],[149,150,"pl-s"],[171,172,"pl-s"],[172,186,"pl-c1"],[186,187,"pl-s"],[192,193,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,34,"pl-c1"],[34,35,"pl-s"],[36,37,"pl-ml"],[38,39,"pl-s"],[39,41,"pl-c1"],[41,42,"pl-s"],[43,44,"pl-ml"],[56,57,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,34,"pl-c1"],[34,35,"pl-s"],[36,37,"pl-ml"],[38,39,"pl-s"],[39,41,"pl-c1"],[41,42,"pl-s"],[43,44,"pl-ml"],[58,59,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[25,26,"pl-ml"],[29,30,"pl-ml"],[67,68,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[23,24,"pl-ml"],[27,28,"pl-ml"],[53,54,"pl-s"],[54,69,"pl-c1"],[69,70,"pl-s"],[72,73,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,18,"pl-c1"],[18,19,"pl-s"],[20,21,"pl-ml"],[22,23,"pl-s"],[23,28,"pl-c1"],[28,29,"pl-s"],[30,31,"pl-ml"],[39,40,"pl-s"],[40,42,"pl-c1"],[42,43,"pl-s"],[49,50,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[19,20,"pl-ml"],[23,24,"pl-ml"],[28,29,"pl-s"],[29,30,"pl-c1"],[30,31,"pl-s"],[46,47,"pl-ml"]],[],[[34,35,"pl-s"],[35,50,"pl-c1"],[50,51,"pl-s"],[59,60,"pl-s"],[60,79,"pl-c1"],[79,80,"pl-s"]],[],[[0,1,"pl-s"],[1,18,"pl-c1"],[18,19,"pl-s"],[27,28,"pl-s"],[28,37,"pl-c1"],[37,38,"pl-s"],[86,87,"pl-s"],[87,118,"pl-c1"],[118,119,"pl-s"],[195,196,"pl-s"],[196,231,"pl-c1"],[231,232,"pl-s"]],[],[[0,7,"pl-mh"],[3,7,"pl-en"]],[],[[3,4,"pl-s"],[4,16,"pl-c1"],[16,17,"pl-s"]],[],[[0,1,"pl-ml"],[5,6,"pl-ml"],[10,11,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[14,15,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[15,17,"pl-s"],[18,19,"pl-ml"],[20,21,"pl-s"],[21,27,"pl-c1"],[27,28,"pl-s"],[29,30,"pl-s"],[30,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-s"],[36,40,"pl-c1"],[40,41,"pl-s"],[42,43,"pl-s"],[43,51,"pl-c1"],[51,52,"pl-s"],[53,54,"pl-s"],[54,67,"pl-c1"],[67,68,"pl-s"],[69,70,"pl-s"],[70,74,"pl-c1"],[74,75,"pl-s"],[76,77,"pl-s"],[77,81,"pl-c1"],[81,82,"pl-s"],[83,84,"pl-s"],[84,89,"pl-c1"],[89,90,"pl-s"],[91,92,"pl-s"],[92,97,"pl-c1"],[97,98,"pl-s"],[99,100,"pl-s"],[100,108,"pl-c1"],[108,109,"pl-s"],[110,111,"pl-s"],[111,118,"pl-c1"],[118,119,"pl-s"],[120,121,"pl-s"],[121,127,"pl-c1"],[127,128,"pl-s"],[129,130,"pl-s"],[130,138,"pl-c1"],[138,139,"pl-s"],[140,141,"pl-s"],[141,154,"pl-c1"],[154,155,"pl-s"],[156,157,"pl-s"],[157,176,"pl-c1"],[176,177,"pl-s"],[178,179,"pl-s"],[179,200,"pl-c1"],[200,201,"pl-s"],[202,203,"pl-s"],[203,218,"pl-c1"],[218,219,"pl-s"],[220,221,"pl-s"],[221,234,"pl-c1"],[234,235,"pl-s"],[236,237,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[12,14,"pl-s"],[15,16,"pl-ml"],[17,18,"pl-s"],[18,21,"pl-c1"],[21,22,"pl-s"],[23,24,"pl-s"],[24,30,"pl-c1"],[30,31,"pl-s"],[32,33,"pl-s"],[33,35,"pl-c1"],[35,36,"pl-s"],[37,38,"pl-s"],[38,46,"pl-c1"],[46,47,"pl-s"],[48,49,"pl-s"],[49,56,"pl-c1"],[56,57,"pl-s"],[58,59,"pl-s"],[59,63,"pl-c1"],[63,64,"pl-s"],[65,66,"pl-s"],[66,74,"pl-c1"],[74,75,"pl-s"],[76,77,"pl-s"],[77,84,"pl-c1"],[84,85,"pl-s"],[86,87,"pl-s"],[87,92,"pl-c1"],[92,93,"pl-s"],[94,95,"pl-s"],[95,103,"pl-c1"],[103,104,"pl-s"],[105,106,"pl-s"],[106,113,"pl-c1"],[113,114,"pl-s"],[115,116,"pl-s"],[116,123,"pl-c1"],[123,124,"pl-s"],[125,126,"pl-s"],[126,135,"pl-c1"],[135,136,"pl-s"],[137,138,"pl-s"],[138,144,"pl-c1"],[144,145,"pl-s"],[146,147,"pl-s"],[147,155,"pl-c1"],[155,156,"pl-s"],[157,158,"pl-s"],[158,169,"pl-c1"],[169,170,"pl-s"],[171,172,"pl-s"],[172,180,"pl-c1"],[180,181,"pl-s"],[182,183,"pl-s"],[183,196,"pl-c1"],[196,197,"pl-s"],[198,199,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[9,11,"pl-s"],[12,13,"pl-ml"],[14,15,"pl-s"],[15,18,"pl-c1"],[18,19,"pl-s"],[20,21,"pl-s"],[21,27,"pl-c1"],[27,28,"pl-s"],[29,30,"pl-s"],[30,38,"pl-c1"],[38,39,"pl-s"],[40,41,"pl-s"],[41,49,"pl-c1"],[49,50,"pl-s"],[51,52,"pl-s"],[52,58,"pl-c1"],[58,59,"pl-s"],[60,61,"pl-s"],[61,65,"pl-c1"],[65,66,"pl-s"],[67,68,"pl-s"],[68,76,"pl-c1"],[76,77,"pl-s"],[78,79,"pl-s"],[79,86,"pl-c1"],[86,87,"pl-s"],[88,89,"pl-s"],[89,95,"pl-c1"],[95,96,"pl-s"],[97,98,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[14,16,"pl-s"],[17,18,"pl-ml"],[19,20,"pl-s"],[20,23,"pl-c1"],[23,24,"pl-s"],[25,26,"pl-s"],[26,29,"pl-c1"],[29,30,"pl-s"],[31,32,"pl-s"],[32,36,"pl-c1"],[36,37,"pl-s"],[38,39,"pl-s"],[39,42,"pl-c1"],[42,43,"pl-s"],[44,45,"pl-s"],[45,49,"pl-c1"],[49,50,"pl-s"],[51,52,"pl-s"],[52,56,"pl-c1"],[56,57,"pl-s"],[58,59,"pl-s"],[59,65,"pl-c1"],[65,66,"pl-s"],[67,68,"pl-s"],[68,72,"pl-c1"],[72,73,"pl-s"],[74,75,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[8,10,"pl-s"],[11,12,"pl-ml"],[13,14,"pl-s"],[14,20,"pl-c1"],[20,21,"pl-s"],[22,23,"pl-s"],[23,37,"pl-c1"],[37,38,"pl-s"],[39,40,"pl-s"],[40,54,"pl-c1"],[54,55,"pl-s"],[56,57,"pl-s"],[57,68,"pl-c1"],[68,69,"pl-s"],[70,71,"pl-s"],[71,86,"pl-c1"],[86,87,"pl-s"],[88,89,"pl-s"],[89,103,"pl-c1"],[103,104,"pl-s"],[105,106,"pl-s"],[106,128,"pl-c1"],[128,129,"pl-s"],[130,131,"pl-s"],[131,142,"pl-c1"],[142,143,"pl-s"],[144,145,"pl-s"],[145,154,"pl-c1"],[154,155,"pl-s"],[156,157,"pl-s"],[157,169,"pl-c1"],[169,170,"pl-s"],[171,172,"pl-s"],[172,184,"pl-c1"],[184,185,"pl-s"],[186,187,"pl-s"],[187,200,"pl-c1"],[200,201,"pl-s"],[202,203,"pl-s"],[203,216,"pl-c1"],[216,217,"pl-s"],[218,219,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[12,14,"pl-s"],[15,16,"pl-ml"],[17,18,"pl-s"],[18,22,"pl-c1"],[22,23,"pl-s"],[24,25,"pl-s"],[25,34,"pl-c1"],[34,35,"pl-s"],[36,37,"pl-s"],[37,45,"pl-c1"],[45,46,"pl-s"],[47,48,"pl-s"],[48,58,"pl-c1"],[58,59,"pl-s"],[60,61,"pl-s"],[61,72,"pl-c1"],[72,73,"pl-s"],[74,75,"pl-s"],[75,83,"pl-c1"],[83,84,"pl-s"],[85,86,"pl-s"],[86,93,"pl-c1"],[93,94,"pl-s"],[95,96,"pl-s"],[96,100,"pl-c1"],[100,101,"pl-s"],[102,103,"pl-s"],[103,107,"pl-c1"],[107,108,"pl-s"],[109,110,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[12,14,"pl-s"],[15,16,"pl-ml"],[17,18,"pl-s"],[18,25,"pl-c1"],[25,26,"pl-s"],[27,28,"pl-s"],[28,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-s"],[36,46,"pl-c1"],[46,47,"pl-s"],[48,49,"pl-s"],[49,65,"pl-c1"],[65,66,"pl-s"],[67,68,"pl-s"],[68,82,"pl-c1"],[82,83,"pl-s"],[84,85,"pl-s"],[85,90,"pl-c1"],[90,91,"pl-s"],[92,93,"pl-s"],[93,111,"pl-c1"],[111,112,"pl-s"],[113,114,"pl-s"],[114,130,"pl-c1"],[130,131,"pl-s"],[132,133,"pl-s"],[133,145,"pl-c1"],[145,146,"pl-s"],[147,148,"pl-s"],[148,165,"pl-c1"],[165,166,"pl-s"],[167,168,"pl-s"],[168,177,"pl-c1"],[177,178,"pl-s"],[179,180,"pl-s"],[180,186,"pl-c1"],[186,187,"pl-s"],[188,189,"pl-s"],[189,202,"pl-c1"],[202,203,"pl-s"],[204,205,"pl-s"],[205,218,"pl-c1"],[218,219,"pl-s"],[220,221,"pl-s"],[221,237,"pl-c1"],[237,238,"pl-s"],[239,240,"pl-s"],[240,255,"pl-c1"],[255,256,"pl-s"],[257,258,"pl-s"],[258,266,"pl-c1"],[266,267,"pl-s"],[268,269,"pl-s"],[269,284,"pl-c1"],[284,285,"pl-s"],[286,287,"pl-s"],[287,301,"pl-c1"],[301,302,"pl-s"],[303,304,"pl-s"],[304,320,"pl-c1"],[320,321,"pl-s"],[322,323,"pl-s"],[323,338,"pl-c1"],[338,339,"pl-s"],[340,341,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,16,"pl-s"],[16,19,"pl-c1"],[19,20,"pl-s"],[21,22,"pl-s"],[22,31,"pl-c1"],[31,32,"pl-s"],[33,34,"pl-s"],[34,41,"pl-c1"],[41,42,"pl-s"],[43,44,"pl-s"],[44,50,"pl-c1"],[50,51,"pl-s"],[52,53,"pl-s"],[53,62,"pl-c1"],[62,63,"pl-s"],[64,65,"pl-s"],[65,69,"pl-c1"],[69,70,"pl-s"],[71,72,"pl-s"],[72,76,"pl-c1"],[76,77,"pl-s"],[78,79,"pl-s"],[79,89,"pl-c1"],[89,90,"pl-s"],[91,92,"pl-s"],[92,105,"pl-c1"],[105,106,"pl-s"],[107,108,"pl-s"],[108,114,"pl-c1"],[114,115,"pl-s"],[116,117,"pl-s"],[117,121,"pl-c1"],[121,122,"pl-s"],[123,124,"pl-s"],[124,131,"pl-c1"],[131,132,"pl-s"],[133,134,"pl-s"],[134,143,"pl-c1"],[143,144,"pl-s"],[145,146,"pl-s"],[146,151,"pl-c1"],[151,152,"pl-s"],[153,154,"pl-s"],[154,161,"pl-c1"],[161,162,"pl-s"],[163,164,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[11,13,"pl-s"],[14,15,"pl-ml"],[16,17,"pl-s"],[17,25,"pl-c1"],[25,26,"pl-s"],[27,28,"pl-s"],[28,34,"pl-c1"],[34,35,"pl-s"],[36,37,"pl-s"],[37,45,"pl-c1"],[45,46,"pl-s"],[47,48,"pl-s"],[48,54,"pl-c1"],[54,55,"pl-s"],[56,57,"pl-s"],[57,62,"pl-c1"],[62,63,"pl-s"],[64,65,"pl-s"],[65,76,"pl-c1"],[76,77,"pl-s"],[78,79,"pl-s"],[79,90,"pl-c1"],[90,91,"pl-s"],[92,93,"pl-s"],[93,104,"pl-c1"],[104,105,"pl-s"],[106,107,"pl-s"],[107,115,"pl-c1"],[115,116,"pl-s"],[117,118,"pl-s"],[118,132,"pl-c1"],[132,133,"pl-s"],[134,135,"pl-s"],[135,146,"pl-c1"],[146,147,"pl-s"],[148,149,"pl-s"],[149,166,"pl-c1"],[166,167,"pl-s"],[168,169,"pl-s"],[169,178,"pl-c1"],[178,179,"pl-s"],[180,181,"pl-s"],[181,188,"pl-c1"],[188,189,"pl-s"],[190,191,"pl-s"],[191,197,"pl-c1"],[197,198,"pl-s"],[199,200,"pl-s"],[200,209,"pl-c1"],[209,210,"pl-s"],[211,212,"pl-s"],[212,221,"pl-c1"],[221,222,"pl-s"],[223,224,"pl-s"],[224,237,"pl-c1"],[237,238,"pl-s"],[239,240,"pl-s"],[240,244,"pl-c1"],[244,245,"pl-s"],[246,247,"pl-s"],[247,252,"pl-c1"],[252,253,"pl-s"],[254,255,"pl-s"],[255,261,"pl-c1"],[261,262,"pl-s"],[263,264,"pl-s"],[264,268,"pl-c1"],[268,269,"pl-s"],[270,271,"pl-s"],[271,276,"pl-c1"],[276,277,"pl-s"],[278,279,"pl-s"],[279,286,"pl-c1"],[286,287,"pl-s"],[288,289,"pl-s"],[289,295,"pl-c1"],[295,296,"pl-s"],[297,298,"pl-s"],[298,306,"pl-c1"],[306,307,"pl-s"],[308,309,"pl-s"],[309,317,"pl-c1"],[317,318,"pl-s"],[319,320,"pl-s"],[320,330,"pl-c1"],[330,331,"pl-s"],[332,333,"pl-s"],[333,341,"pl-c1"],[341,342,"pl-s"],[343,344,"pl-s"],[344,350,"pl-c1"],[350,351,"pl-s"],[352,353,"pl-s"],[353,361,"pl-c1"],[361,362,"pl-s"],[363,364,"pl-s"],[364,369,"pl-c1"],[369,370,"pl-s"],[371,372,"pl-s"],[372,379,"pl-c1"],[379,380,"pl-s"],[381,382,"pl-s"],[382,392,"pl-c1"],[392,393,"pl-s"],[394,395,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,16,"pl-s"],[16,19,"pl-c1"],[19,20,"pl-s"],[21,22,"pl-s"],[22,26,"pl-c1"],[26,27,"pl-s"],[28,29,"pl-s"],[29,32,"pl-c1"],[32,33,"pl-s"],[34,35,"pl-s"],[35,41,"pl-c1"],[41,42,"pl-s"],[43,44,"pl-s"],[44,48,"pl-c1"],[48,49,"pl-s"],[50,51,"pl-s"],[51,58,"pl-c1"],[58,59,"pl-s"],[60,61,"pl-s"],[61,67,"pl-c1"],[67,68,"pl-s"],[69,70,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,16,"pl-s"],[16,19,"pl-c1"],[19,20,"pl-s"],[21,22,"pl-s"],[22,25,"pl-c1"],[25,26,"pl-s"],[27,28,"pl-s"],[28,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-s"],[36,49,"pl-c1"],[49,50,"pl-s"],[51,52,"pl-s"],[52,72,"pl-c1"],[72,73,"pl-s"],[74,75,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[14,16,"pl-s"],[17,18,"pl-ml"],[19,20,"pl-s"],[20,26,"pl-c1"],[26,27,"pl-s"],[28,29,"pl-s"],[29,33,"pl-c1"],[33,34,"pl-s"],[35,36,"pl-s"],[36,40,"pl-c1"],[40,41,"pl-s"],[42,43,"pl-s"],[43,50,"pl-c1"],[50,51,"pl-s"],[52,53,"pl-s"],[53,56,"pl-c1"],[56,57,"pl-s"],[58,59,"pl-s"],[59,66,"pl-c1"],[66,67,"pl-s"],[68,69,"pl-s"],[69,76,"pl-c1"],[76,77,"pl-s"],[78,79,"pl-s"],[79,88,"pl-c1"],[88,89,"pl-s"],[90,91,"pl-s"],[91,100,"pl-c1"],[100,101,"pl-s"],[102,103,"pl-s"],[103,114,"pl-c1"],[114,115,"pl-s"],[116,117,"pl-s"],[117,127,"pl-c1"],[127,128,"pl-s"],[129,130,"pl-s"],[130,145,"pl-c1"],[145,146,"pl-s"],[147,148,"pl-s"],[148,160,"pl-c1"],[160,161,"pl-s"],[162,163,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,16,"pl-s"],[16,27,"pl-c1"],[27,28,"pl-s"],[29,30,"pl-s"],[30,36,"pl-c1"],[36,37,"pl-s"],[38,39,"pl-s"],[39,46,"pl-c1"],[46,47,"pl-s"],[48,49,"pl-s"],[49,54,"pl-c1"],[54,55,"pl-s"],[56,57,"pl-s"],[57,67,"pl-c1"],[67,68,"pl-s"],[69,70,"pl-s"],[70,84,"pl-c1"],[84,85,"pl-s"],[86,87,"pl-s"],[87,99,"pl-c1"],[99,100,"pl-s"],[101,102,"pl-s"],[102,110,"pl-c1"],[110,111,"pl-s"],[112,113,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,16,"pl-s"],[16,22,"pl-c1"],[22,23,"pl-s"],[24,25,"pl-s"],[25,29,"pl-c1"],[29,30,"pl-s"],[31,32,"pl-s"],[32,38,"pl-c1"],[38,39,"pl-s"],[40,41,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[9,11,"pl-s"],[12,13,"pl-ml"],[14,15,"pl-s"],[15,27,"pl-c1"],[27,28,"pl-s"],[29,30,"pl-s"],[30,42,"pl-c1"],[42,43,"pl-s"],[44,45,"pl-s"],[45,59,"pl-c1"],[59,60,"pl-s"],[61,62,"pl-s"],[62,74,"pl-c1"],[74,75,"pl-s"],[76,77,"pl-s"],[77,89,"pl-c1"],[89,90,"pl-s"],[91,92,"pl-s"],[92,106,"pl-c1"],[106,107,"pl-s"],[108,109,"pl-s"],[109,124,"pl-c1"],[124,125,"pl-s"],[126,127,"pl-s"],[127,139,"pl-c1"],[139,140,"pl-s"],[141,142,"pl-s"],[142,151,"pl-c1"],[151,152,"pl-s"],[153,154,"pl-s"],[154,165,"pl-c1"],[165,166,"pl-s"],[167,168,"pl-s"],[168,178,"pl-c1"],[178,179,"pl-s"],[180,181,"pl-s"],[181,192,"pl-c1"],[192,193,"pl-s"],[194,195,"pl-s"],[195,207,"pl-c1"],[207,208,"pl-s"],[209,210,"pl-s"],[210,221,"pl-c1"],[221,222,"pl-s"],[223,224,"pl-s"],[224,235,"pl-c1"],[235,236,"pl-s"],[237,238,"pl-s"],[238,251,"pl-c1"],[251,252,"pl-s"],[253,254,"pl-s"],[254,271,"pl-c1"],[271,272,"pl-s"],[273,274,"pl-s"],[274,293,"pl-c1"],[293,294,"pl-s"],[295,296,"pl-s"],[296,308,"pl-c1"],[308,309,"pl-s"],[310,311,"pl-s"],[311,316,"pl-c1"],[316,317,"pl-s"],[318,319,"pl-s"],[319,326,"pl-c1"],[326,327,"pl-s"],[328,329,"pl-s"],[329,340,"pl-c1"],[340,341,"pl-s"],[342,343,"pl-s"],[343,353,"pl-c1"],[353,354,"pl-s"],[355,356,"pl-s"],[356,362,"pl-c1"],[362,363,"pl-s"],[364,365,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[15,17,"pl-s"],[18,19,"pl-ml"],[20,21,"pl-s"],[21,27,"pl-c1"],[27,28,"pl-s"],[29,30,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[14,16,"pl-s"],[17,18,"pl-ml"],[19,20,"pl-s"],[20,25,"pl-c1"],[25,26,"pl-s"],[27,28,"pl-s"],[28,34,"pl-c1"],[34,35,"pl-s"],[36,37,"pl-s"],[37,45,"pl-c1"],[45,46,"pl-s"],[47,48,"pl-s"],[48,53,"pl-c1"],[53,54,"pl-s"],[55,56,"pl-s"],[56,64,"pl-c1"],[64,65,"pl-s"],[66,67,"pl-s"],[67,75,"pl-c1"],[75,76,"pl-s"],[77,78,"pl-s"],[78,85,"pl-c1"],[85,86,"pl-s"],[87,88,"pl-s"],[88,94,"pl-c1"],[94,95,"pl-s"],[96,97,"pl-s"],[97,103,"pl-c1"],[103,104,"pl-s"],[105,106,"pl-s"],[106,114,"pl-c1"],[114,115,"pl-s"],[116,117,"pl-ml"]],[],[[7,9,"pl-s"],[9,10,"pl-s"],[27,28,"pl-s"],[28,29,"pl-s"],[29,53,"pl-corl"],[53,54,"pl-s"],[54,56,"pl-s"]],[],[[0,7,"pl-mh"],[3,7,"pl-en"]],[],[],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-ml"],[5,6,"pl-ml"],[12,13,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[7,9,"pl-s"],[10,11,"pl-ml"],[18,19,"pl-ml"],[33,34,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[6,8,"pl-s"],[9,10,"pl-ml"],[14,15,"pl-ml"],[21,22,"pl-s"],[22,28,"pl-c1"],[28,29,"pl-s"],[30,31,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[13,15,"pl-s"],[16,17,"pl-ml"],[24,25,"pl-ml"],[40,41,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[9,11,"pl-s"],[12,13,"pl-ml"],[17,18,"pl-ml"],[35,36,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[8,10,"pl-s"],[11,12,"pl-ml"],[19,20,"pl-ml"],[35,36,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[7,9,"pl-s"],[10,11,"pl-ml"],[18,19,"pl-ml"],[46,47,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[6,8,"pl-s"],[9,10,"pl-ml"],[24,25,"pl-ml"],[41,42,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[9,11,"pl-s"],[12,13,"pl-ml"],[27,28,"pl-ml"],[49,50,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[6,8,"pl-s"],[9,10,"pl-ml"],[14,15,"pl-ml"],[33,34,"pl-ml"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[],[[15,16,"pl-s"],[16,22,"pl-c1"],[22,23,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,11,"pl-c"],[0,1,"pl-c"]],[],[[0,4,"pl-c"],[0,1,"pl-c"]],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[4,8,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,16,"pl-c"],[0,1,"pl-c"]],[[29,92,"pl-s"],[29,30,"pl-pds"],[91,92,"pl-pds"]],[[29,54,"pl-s"],[29,30,"pl-pds"],[53,54,"pl-pds"]],[[25,84,"pl-s"],[25,26,"pl-pds"],[83,84,"pl-pds"]],[],[[0,19,"pl-c"],[0,1,"pl-c"]],[],[[50,56,"pl-c"],[50,51,"pl-c"]],[],[[0,18,"pl-c"],[0,1,"pl-c"]],[],[],[[0,11,"pl-c"],[0,1,"pl-c"]],[[37,68,"pl-s"],[37,38,"pl-pds"],[67,68,"pl-pds"]],[],[[0,15,"pl-c"],[0,1,"pl-c"]],[],[],[[0,24,"pl-c"],[0,1,"pl-c"]],[],[],[[0,11,"pl-c"],[0,1,"pl-c"]],[],[],[[0,11,"pl-c"],[0,1,"pl-c"]],[],[],[[0,18,"pl-c"],[0,1,"pl-c"]],[[23,57,"pl-s"],[23,24,"pl-pds"],[56,57,"pl-pds"]],[],[[0,9,"pl-c"],[0,1,"pl-c"]],[[23,57,"pl-s"],[23,24,"pl-pds"],[56,57,"pl-pds"]],[],[[0,21,"pl-c"],[0,1,"pl-c"]],[[30,62,"pl-s"],[30,31,"pl-pds"],[61,62,"pl-pds"]],[[0,3,"pl-s"]],[],[[0,1,"pl-s"],[1,28,"pl-c1"],[28,29,"pl-s"],[32,33,"pl-s"],[33,43,"pl-c1"],[43,44,"pl-s"],[55,56,"pl-s"],[56,82,"pl-c1"],[82,83,"pl-s"]],[],[[0,7,"pl-mh"],[3,7,"pl-en"]],[],[[10,11,"pl-s"],[11,19,"pl-c1"],[19,20,"pl-s"],[23,24,"pl-s"],[24,26,"pl-c1"],[26,27,"pl-s"],[33,34,"pl-s"],[34,39,"pl-c1"],[39,40,"pl-s"],[41,42,"pl-s"],[42,46,"pl-c1"],[46,47,"pl-s"],[48,49,"pl-s"],[49,53,"pl-c1"],[53,54,"pl-s"],[55,56,"pl-s"],[56,58,"pl-c1"],[58,59,"pl-s"],[60,61,"pl-s"],[61,64,"pl-c1"],[64,65,"pl-s"]],[[0,1,"pl-s"],[1,5,"pl-c1"],[5,6,"pl-s"],[27,28,"pl-s"],[28,34,"pl-c1"],[34,35,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[32,48,"pl-c"],[32,33,"pl-c"]],[[32,42,"pl-c"],[32,33,"pl-c"]],[[32,61,"pl-c"],[32,33,"pl-c"]],[[32,49,"pl-c"],[32,33,"pl-c"]],[[32,42,"pl-c"],[32,33,"pl-c"]],[[32,37,"pl-c"],[32,33,"pl-c"]],[[32,51,"pl-c"],[32,33,"pl-c"]],[[0,3,"pl-s"]],[],[[0,6,"pl-mh"],[3,6,"pl-en"]],[],[[16,17,"pl-s"],[17,27,"pl-c1"],[27,28,"pl-s"],[45,46,"pl-s"],[46,47,"pl-c1"],[47,48,"pl-s"],[52,53,"pl-s"],[53,55,"pl-c1"],[55,56,"pl-s"],[61,62,"pl-s"],[62,64,"pl-c1"],[64,65,"pl-s"],[85,86,"pl-s"],[86,88,"pl-c1"],[88,89,"pl-s"],[93,94,"pl-s"],[94,96,"pl-c1"],[96,97,"pl-s"],[103,104,"pl-s"],[104,106,"pl-c1"],[106,107,"pl-s"],[113,114,"pl-s"],[114,117,"pl-c1"],[117,118,"pl-s"],[131,132,"pl-s"],[159,160,"pl-s"],[160,161,"pl-s"],[161,190,"pl-corl"],[190,191,"pl-s"]],[],[[0,5,"pl-mh"],[3,5,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[59,63,"pl-c"],[59,60,"pl-c"]],[[60,67,"pl-c"],[60,61,"pl-c"]],[[60,67,"pl-c"],[60,61,"pl-c"]],[[60,71,"pl-c"],[60,61,"pl-c"]],[[60,64,"pl-c"],[60,61,"pl-c"]],[[0,3,"pl-s"]],[],[[17,18,"pl-s"],[18,46,"pl-c1"],[46,47,"pl-s"],[50,51,"pl-s"],[51,70,"pl-c1"],[70,71,"pl-s"]],[],[[0,1,"pl-ml"],[5,6,"pl-ml"],[10,11,"pl-ml"],[15,16,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[14,15,"pl-ml"],[21,22,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[33,34,"pl-s"],[34,35,"pl-s"],[35,92,"pl-corl"],[92,93,"pl-s"],[94,95,"pl-ml"],[99,100,"pl-ml"],[120,121,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[28,29,"pl-s"],[29,30,"pl-s"],[30,82,"pl-corl"],[82,83,"pl-s"],[84,85,"pl-ml"],[89,90,"pl-ml"],[99,100,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[24,25,"pl-s"],[25,26,"pl-s"],[26,76,"pl-corl"],[76,77,"pl-s"],[78,79,"pl-ml"],[83,84,"pl-ml"],[94,95,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[20,21,"pl-s"],[21,22,"pl-s"],[22,65,"pl-corl"],[65,66,"pl-s"],[67,68,"pl-ml"],[72,73,"pl-ml"],[99,100,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[37,38,"pl-s"],[38,39,"pl-s"],[39,102,"pl-corl"],[102,103,"pl-s"],[104,105,"pl-ml"],[109,110,"pl-ml"],[158,159,"pl-ml"]],[],[[3,4,"pl-s"],[8,9,"pl-s"],[9,10,"pl-s"],[10,36,"pl-corl"],[36,37,"pl-s"]],[],[[0,9,"pl-mh"],[3,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[32,34,"pl-s"]],[[2,3,"pl-v"],[10,11,"pl-s"],[27,28,"pl-s"],[28,29,"pl-s"],[29,110,"pl-corl"],[110,111,"pl-s"],[129,130,"pl-s"],[130,149,"pl-c1"],[149,150,"pl-s"],[152,154,"pl-s"],[157,159,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[63,65,"pl-s"]],[[2,3,"pl-v"],[74,76,"pl-s"],[84,86,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[29,31,"pl-s"]],[[2,3,"pl-v"]],[[0,1,"pl-v"],[2,4,"pl-s"],[21,22,"pl-s"],[22,27,"pl-c1"],[27,28,"pl-s"],[42,44,"pl-s"]],[[2,3,"pl-v"],[15,17,"pl-s"],[35,37,"pl-s"],[42,43,"pl-s"],[43,57,"pl-c1"],[57,58,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[13,15,"pl-s"]],[[2,3,"pl-v"],[17,18,"pl-s"],[18,45,"pl-c1"],[45,46,"pl-s"]],[[2,3,"pl-v"],[11,12,"pl-s"],[12,37,"pl-c1"],[37,38,"pl-s"]],[],[[0,15,"pl-mh"],[3,15,"pl-en"]],[],[[0,1,"pl-s"],[1,3,"pl-s"],[21,22,"pl-s"],[22,23,"pl-s"],[23,91,"pl-corl"],[91,93,"pl-s"],[93,94,"pl-s"],[94,148,"pl-corl"],[148,149,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-s"],[11,12,"pl-s"],[12,13,"pl-s"],[13,22,"pl-corl"],[22,23,"pl-s"]]],"colorizedLines":null}},"title":"OpenCLI/README.zh-CN.md at main · jackwener/OpenCLI","appPayload":{},"meta":{"title":"OpenCLI/README.zh-CN.md at main · jackwener/OpenCLI"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/jackwener/OpenCLI" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/jackwener/OpenCLI/tree/main" data-discover="true">OpenCLI</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">README.zh-CN.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_1cpla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_1cpla9lik5_ _R_1cpla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_1cpla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7p9la9lik5_" id="_R_99la9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7p9la9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7pdla9lik5_" id="_R_9dla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7pdla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/jackwener/OpenCLI/commits/main/README.zh-CN.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/jackwener/OpenCLI/commits/main/README.zh-CN.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="18.4 KB" style="--truncate-max-width:100%"><span>323 lines (235 loc) · 18.4 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/jackwener/OpenCLI/tree/main" data-discover="true">OpenCLI</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">README.zh-CN.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="18.4 KB" style="--truncate-max-width:100%"><span>323 lines (235 loc) · 18.4 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/jackwener/OpenCLI/raw/refs/heads/main/README.zh-CN.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">OpenCLI</h1><a id="user-content-opencli" class="anchor" aria-label="Permalink: OpenCLI" href="#opencli"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<blockquote>
<p dir="auto"><strong>把任意网站变成 CLI &amp; 在你的登录态浏览器上跑 Browser Use。</strong>
把网站和浏览器会话，统一变成适合人类与 AI Agent 使用的确定性接口。
或者在任意页面上跑 Browser Use —— 导航、填表单、点击、抓取、自动化。</p>
</blockquote>
<p dir="auto"><a href="/jackwener/OpenCLI/blob/main/README.md"><img src="https://camo.githubusercontent.com/9235b10ece11147f47e98b82cb20eef471fa12035f920044bdab2613d11f57ff/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d456e676c6973682d3144344544383f7374796c653d666c61742d737175617265" alt="English" data-canonical-src="https://img.shields.io/badge/docs-English-1D4ED8?style=flat-square" style="max-width: 100%;"></a>
<a href="https://www.npmjs.com/package/@jackwener/opencli" rel="nofollow"><img src="https://camo.githubusercontent.com/a473ac28e9e6c18199a92372f3a2927c4a9ffab4ffbd9804971bddd525a7aff1/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f406a61636b77656e65722f6f70656e636c693f7374796c653d666c61742d737175617265" alt="npm" data-canonical-src="https://img.shields.io/npm/v/@jackwener/opencli?style=flat-square" style="max-width: 100%;"></a>
<a href="https://nodejs.org" rel="nofollow"><img src="https://camo.githubusercontent.com/d0a4df62586afa7c0b7bfc772c0d52c804b4c2f11040b50c089c98be0b5cc905/68747470733a2f2f696d672e736869656c64732e696f2f6e6f64652f762f406a61636b77656e65722f6f70656e636c693f7374796c653d666c61742d737175617265" alt="Node.js Version" data-canonical-src="https://img.shields.io/node/v/@jackwener/opencli?style=flat-square" style="max-width: 100%;"></a>
<a href="/jackwener/OpenCLI/blob/main/LICENSE"><img src="https://camo.githubusercontent.com/c499123b4da461a015b1374ed9cb83989cd937273efef6d0d1aafd6e91242a39/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f6c2f406a61636b77656e65722f6f70656e636c693f7374796c653d666c61742d737175617265" alt="License" data-canonical-src="https://img.shields.io/npm/l/@jackwener/opencli?style=flat-square" style="max-width: 100%;"></a></p>
<p dir="auto">OpenCLI 是 <strong>general-purpose browser automation CLI</strong>，可以作为 <strong>agent-browser 的替代工具</strong>。导航、检查页面、点击、填表、提取和截图无需 site adapter；内置 adapters 为重复任务提供可复用的确定性命令。参见 <a href="/jackwener/OpenCLI/blob/main/docs/zh/guide/agent-browser-alternative.md">OpenCLI vs agent-browser 与迁移指南</a>。</p>
<p dir="auto">OpenCLI 可以用同一套 CLI 做三类事情：</p>
<ul dir="auto">
<li><strong>直接使用现成适配器</strong>：B站、知乎、小红书、Twitter/X、Reddit、HackerNews 等 <a href="#%E5%86%85%E7%BD%AE%E5%91%BD%E4%BB%A4">100+ 站点</a> 开箱即用。</li>
<li><strong>让 AI Agent 操作任意网站</strong>：在你的 AI Agent（Claude Code、Cursor 等）中安装 <code>opencli-browser</code> skill，Agent 就能用你的已登录浏览器导航、点击、输入/填充、提取任意网页内容。</li>
<li><strong>把新网站写成 CLI</strong>：用 <code>opencli browser</code> 原语 + <code>opencli-adapter-author</code> skill，从站点侦察、API 发现、字段解码到 <code>opencli browser verify</code> 一条龙。</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">快速开始</h2><a id="user-content-快速开始" class="anchor" aria-label="Permalink: 快速开始" href="#快速开始"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">1. 安装 OpenCLI</h3><a id="user-content-1-安装-opencli" class="anchor" aria-label="Permalink: 1. 安装 OpenCLI" href="#1-安装-opencli"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">如果你是在自己的电脑上使用，优先安装 <strong>OpenCLIApp</strong>。它会内置
OpenCLI runtime，帮你安装 / 修复受管理的 <code>opencli</code> 命令，并提供系统托盘
UI 来做环境诊断、更新、浏览器登录态保活和网页转 Markdown。</p>
<p dir="auto"><strong>方式 A — OpenCLIApp（macOS / Windows 推荐）：</strong>
从 <a href="https://opencli.info/download" rel="nofollow">https://opencli.info/download</a> 下载最新版 App，安装后打开一次，在
System 页面安装或修复 <code>opencli</code> 命令。</p>
<p dir="auto"><strong>方式 B — npm 全局安装（纯 CLI / CI / 服务器）：</strong>
通过 npm 安装时，OpenCLI 要求 <strong>Node.js &gt;= 20.18.1</strong>。</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="node --version
npm install -g @jackwener/opencli"><pre>node --version
npm install -g @jackwener/opencli</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">2. 安装 Browser Bridge 扩展</h3><a id="user-content-2-安装-browser-bridge-扩展" class="anchor" aria-label="Permalink: 2. 安装 Browser Bridge 扩展" href="#2-安装-browser-bridge-扩展"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">OpenCLI 通过轻量 Browser Bridge 扩展和本地微型 daemon 与 Chrome/Chromium 通信。daemon 会按需自动启动。</p>
<p dir="auto"><strong>方式 A — Chrome Web Store（推荐）：</strong>
在 <a href="https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk" rel="nofollow">Chrome Web Store</a> 安装 <strong>OpenCLI</strong> 扩展。</p>
<p dir="auto"><strong>方式 B — 手动安装：</strong></p>
<ol dir="auto">
<li>到 GitHub <a href="https://github.com/jackwener/opencli/releases">Releases 页面</a> 下载最新的 <code>opencli-extension-v{version}.zip</code>。</li>
<li>解压后打开 <code>chrome://extensions</code>，启用 <strong>开发者模式</strong>。</li>
<li>点击 <strong>加载已解压的扩展程序</strong>，选择解压后的目录。</li>
</ol>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">3. 验证环境</h3><a id="user-content-3-验证环境" class="anchor" aria-label="Permalink: 3. 验证环境" href="#3-验证环境"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="opencli doctor"><pre>opencli doctor</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">4. 跑第一个命令</h3><a id="user-content-4-跑第一个命令" class="anchor" aria-label="Permalink: 4. 跑第一个命令" href="#4-跑第一个命令"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="opencli list
opencli hackernews top --limit 5
opencli bilibili hot --limit 5"><pre>opencli list
opencli hackernews top --limit 5
opencli bilibili hot --limit 5</pre></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">给人类用户</h2><a id="user-content-给人类用户" class="anchor" aria-label="Permalink: 给人类用户" href="#给人类用户"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">如果你只是想稳定地调用网站或桌面应用能力，主路径很简单：</p>
<ul dir="auto">
<li><code>opencli list</code> 查看当前所有命令</li>
<li><code>opencli &lt;site&gt; &lt;command&gt;</code> 调用内置或生成好的适配器</li>
<li><code>opencli doctor</code> 处理浏览器连通性问题</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">扩展 OpenCLI</h2><a id="user-content-扩展-opencli" class="anchor" aria-label="Permalink: 扩展 OpenCLI" href="#扩展-opencli"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">如果你想新增自己的命令，先看 <a href="/jackwener/OpenCLI/blob/main/docs/zh/guide/extending-opencli.md">扩展 OpenCLI</a>。README 只保留入口；目录结构、源码管理方式和安装命令放在文档里。</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>需求</th>
<th>推荐路径</th>
</tr>
</thead>
<tbody>
<tr>
<td>把个人网站命令放在自己的 Git repo</td>
<td><code>opencli plugin create</code> + <code>opencli plugin install file://...</code></td>
</tr>
<tr>
<td>快速写一个本机私人 adapter</td>
<td><code>opencli browser init &lt;site&gt;/&lt;command&gt;</code>，放在 <code>~/.opencli/clis/</code></td>
</tr>
<tr>
<td>本地修改官方 adapter</td>
<td><code>opencli adapter eject &lt;site&gt;</code> + <code>opencli adapter reset &lt;site&gt;</code></td>
</tr>
<tr>
<td>发布或安装第三方命令</td>
<td><code>opencli plugin install github:user/repo</code></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">给 AI Agent</h2><a id="user-content-给-ai-agent" class="anchor" aria-label="Permalink: 给 AI Agent" href="#给-ai-agent"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">OpenCLI 的 browser 命令是给 AI Agent 用的——不是手动执行的。把 skill 安装到你的 AI Agent（Claude Code、Cursor 等）中，Agent 就能用你的已登录 Chrome 会话替你操作网站。</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">安装 skill（同时也用于更新）</h3><a id="user-content-安装-skill同时也用于更新" class="anchor" aria-label="Permalink: 安装 skill（同时也用于更新）" href="#安装-skill同时也用于更新"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="npx skills add jackwener/opencli"><pre>npx skills add jackwener/opencli</pre></div>
<p dir="auto">或只装需要的 skill：</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="npx skills add jackwener/opencli --skill opencli-adapter-author
npx skills add jackwener/opencli --skill opencli-autofix
npx skills add jackwener/opencli --skill opencli-browser
npx skills add jackwener/opencli --skill opencli-usage"><pre>npx skills add jackwener/opencli --skill opencli-adapter-author
npx skills add jackwener/opencli --skill opencli-autofix
npx skills add jackwener/opencli --skill opencli-browser
npx skills add jackwener/opencli --skill opencli-usage</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">选择哪个 skill</h3><a id="user-content-选择哪个-skill" class="anchor" aria-label="Permalink: 选择哪个 skill" href="#选择哪个-skill"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Skill</th>
<th>适用场景</th>
<th>你对 AI Agent 说的话</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>opencli-adapter-author</strong></td>
<td>为新站点写可复用适配器，或给已有站点添加命令</td>
<td>"帮我做一个抖音热门的适配器" / "帮我做一个抓取这个页面热帖的命令"</td>
</tr>
<tr>
<td><strong>opencli-autofix</strong></td>
<td>内置命令失败时修复已有适配器</td>
<td>"<code>opencli zhihu hot</code> 返回空了，修一下"</td>
</tr>
<tr>
<td><strong>opencli-browser</strong></td>
<td>实时驱动 Chrome 页面——导航、填表单、点击、抓取</td>
<td>"帮我看看小红书的通知" / "帮我填一下这个表单" / "用浏览器命令抓取这个页面"</td>
</tr>
<tr>
<td><strong>opencli-usage</strong></td>
<td>所有命令和站点的快速参考</td>
<td>"OpenCLI 有哪些 Twitter 相关的命令？"</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">工作原理</h3><a id="user-content-工作原理" class="anchor" aria-label="Permalink: 工作原理" href="#工作原理"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">安装 <code>opencli-browser</code> skill 后，你的 AI Agent 可以：</p>
<ol dir="auto">
<li><strong>导航</strong>到任意 URL，使用你的已登录浏览器</li>
<li><strong>读取</strong>页面内容——通过结构化 DOM 快照（不是截图）</li>
<li><strong>交互</strong>——点击按钮、填写表单、选择选项、按键</li>
<li><strong>提取</strong>页面数据或拦截网络 API 响应</li>
<li><strong>等待</strong>元素、文本或页面跳转</li>
</ol>
<p dir="auto">Agent 在内部自动处理所有 <code>opencli browser</code> 命令——你只需用自然语言描述想做的事。</p>
<p dir="auto"><strong>Skill 参考文档：</strong></p>
<ul dir="auto">
<li><a href="/jackwener/OpenCLI/blob/main/skills/opencli-browser/SKILL.md"><code>skills/opencli-browser/SKILL.md</code></a> — 实时驱动 Chrome（导航、填表单、点击、抓取）</li>
<li><a href="/jackwener/OpenCLI/blob/main/skills/opencli-adapter-author/SKILL.md"><code>skills/opencli-adapter-author/SKILL.md</code></a> — 给新站点写适配器，全流程</li>
<li><a href="/jackwener/OpenCLI/blob/main/skills/opencli-autofix/SKILL.md"><code>skills/opencli-autofix/SKILL.md</code></a> — 修复已有适配器</li>
<li><a href="/jackwener/OpenCLI/blob/main/skills/opencli-usage/SKILL.md"><code>skills/opencli-usage/SKILL.md</code></a> — 命令和站点参考</li>
</ul>
<p dir="auto"><code>browser</code> 可用命令包括：<code>open</code>、<code>state</code>、<code>click</code>、<code>type</code>、<code>fill</code>、<code>select</code>、<code>keys</code>、<code>wait</code>、<code>get</code>、<code>find</code>、<code>extract</code>、<code>frames</code>、<code>screenshot</code>、<code>scroll</code>、<code>back</code>、<code>eval</code>、<code>network</code>、<code>tab list</code>、<code>tab new</code>、<code>tab select</code>、<code>tab close</code>、<code>init</code>、<code>verify</code>、<code>close</code>。</p>
<p dir="auto"><code>opencli browser</code> 命令必须紧跟一个 <code>&lt;session&gt;</code> 位置参数。<code>opencli browser work open &lt;url&gt;</code> 和 <code>opencli browser work tab new [url]</code> 都会返回 target ID。<code>opencli browser work tab list</code> 用来查看当前已存在 tab 的 target ID，再通过 <code>--tab &lt;targetId&gt;</code> 把命令明确路由到某个 tab。<code>tab new</code> 只会新建 tab，不会改变默认浏览器目标；只有显式执行 <code>tab select &lt;targetId&gt;</code>，才会把该 tab 设为同一 session 后续未指定 target 的默认目标。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">为新站点写适配器</h2><a id="user-content-为新站点写适配器" class="anchor" aria-label="Permalink: 为新站点写适配器" href="#为新站点写适配器"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">当你需要的网站还没覆盖时，用 <code>opencli-adapter-author</code> skill，全流程：</p>
<ol dir="auto">
<li><strong>侦察</strong>站点，分类 pattern（SPA / SSR / JSONP / Token / Streaming）</li>
<li><strong>发现</strong> endpoint——network 精读、initial state、bundle 搜索、token 溯源，或 interceptor 兜底</li>
<li><strong>定认证</strong>——<code>PUBLIC</code> / <code>COOKIE</code> / <code>INTERCEPT</code> / <code>UI</code> / <code>LOCAL</code></li>
<li><strong>字段解码</strong> + 设计输出列</li>
<li><code>opencli browser recon analyze &lt;url&gt;</code> → <code>opencli browser recon init &lt;site&gt;/&lt;name&gt;</code> → 写适配器 → <code>opencli browser recon verify &lt;site&gt;/&lt;name&gt;</code></li>
<li>站点知识沉到 <code>~/.opencli/sites/&lt;site&gt;/</code>，下次同站点直接吃缓存</li>
</ol>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">配置</h2><a id="user-content-配置" class="anchor" aria-label="Permalink: 配置" href="#配置"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>变量</th>
<th>默认值</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>OPENCLI_WINDOW</code></td>
<td>命令默认值</td>
<td>设为 <code>foreground</code> 或 <code>background</code> 来覆盖 Browser Bridge 窗口位置。浏览器型命令也支持 <code>--window &lt;foreground|background&gt;</code></td>
</tr>
<tr>
<td><code>OPENCLI_SITE_SESSION</code></td>
<td>adapter 默认值</td>
<td>设为 <code>ephemeral</code> 或 <code>persistent</code>，覆盖浏览器型 adapter 命令的 <code>siteSession</code> 元数据。<code>ephemeral</code> 会在命令结束时关闭一次性自动化窗口；<code>persistent</code> 会复用该站点的 session。命令级 <code>--site-session</code> 优先。</td>
</tr>
<tr>
<td><code>OPENCLI_BROWSER_CONNECT_TIMEOUT</code></td>
<td><code>45</code></td>
<td>浏览器连接超时（秒）</td>
</tr>
<tr>
<td><code>OPENCLI_BROWSER_COMMAND_TIMEOUT</code></td>
<td><code>60</code></td>
<td>单个浏览器命令超时（秒）</td>
</tr>
<tr>
<td><code>OPENCLI_CDP_ENDPOINT</code></td>
<td>—</td>
<td>Chrome DevTools Protocol 端点，用于远程浏览器</td>
</tr>
<tr>
<td><code>OPENCLI_CDP_TARGET</code></td>
<td>—</td>
<td>按 URL 子串过滤 CDP target（如 <code>detail.1688.com</code>）</td>
</tr>
<tr>
<td><code>OPENCLI_VERBOSE</code></td>
<td><code>false</code></td>
<td>启用详细日志（<code>-v</code> 也可以）</td>
</tr>
<tr>
<td><code>DEBUG_SNAPSHOT</code></td>
<td>—</td>
<td>设为 <code>1</code> 输出 DOM 快照调试信息</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Browser Bridge daemon 与扩展的通信端口固定为 <code>localhost:19825</code>，不再支持通过 <code>OPENCLI_DAEMON_PORT</code> 配置自定义端口。</p>
<p dir="auto"><code>opencli browser *</code> 必须紧跟一个 <code>&lt;session&gt;</code> 位置参数，默认使用前台窗口，并保留该 session 的 tab lease，直到你手动执行 <code>opencli browser &lt;session&gt; close</code> 或等空闲超时。浏览器型 adapter 默认使用后台 adapter 窗口并在命令结束后释放一次性 tab lease；如果需要调试最终页面，可以传 <code>--window foreground --keep-tab true</code>。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">内置命令</h2><a id="user-content-内置命令" class="anchor" aria-label="Permalink: 内置命令" href="#内置命令"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">运行 <code>opencli list</code> 查看完整注册表。</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>站点</th>
<th>命令</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>xiaohongshu</strong></td>
<td><code>search</code> <code>ask</code> <code>note</code> <code>comments</code> <code>notifications</code> <code>feed</code> <code>user</code> <code>saved</code> <code>liked</code> <code>download</code> <code>publish</code> <code>follow</code> <code>unfollow</code> <code>creator-notes</code> <code>creator-note-detail</code> <code>creator-notes-summary</code> <code>creator-profile</code> <code>creator-stats</code></td>
</tr>
<tr>
<td><strong>bilibili</strong></td>
<td><code>hot</code> <code>search</code> <code>me</code> <code>favorite</code> <code>history</code> <code>feed</code> <code>subtitle</code> <code>summary</code> <code>video</code> <code>comments</code> <code>dynamic</code> <code>ranking</code> <code>following</code> <code>follow</code> <code>unfollow</code> <code>user-videos</code> <code>download</code> <code>creator-stats</code></td>
</tr>
<tr>
<td><strong>zhihu</strong></td>
<td><code>hot</code> <code>search</code> <code>question</code> <code>download</code> <code>follow</code> <code>like</code> <code>favorite</code> <code>comment</code> <code>answer</code></td>
</tr>
<tr>
<td><strong>hackernews</strong></td>
<td><code>top</code> <code>new</code> <code>best</code> <code>ask</code> <code>show</code> <code>jobs</code> <code>search</code> <code>user</code></td>
</tr>
<tr>
<td><strong>hltv</strong></td>
<td><code>search</code> <code>player-summary</code> <code>player-matches</code> <code>player-form</code> <code>player-map-pool</code> <code>player-vs-team</code> <code>player-teammate-impact</code> <code>player-duel</code> <code>match-map</code> <code>match-series</code> <code>team-matches</code> <code>team-map-pool</code> <code>event-matches</code></td>
</tr>
<tr>
<td><strong>geogebra</strong></td>
<td><code>eval</code> <code>add-point</code> <code>add-line</code> <code>add-circle</code> <code>add-polygon</code> <code>triangle</code> <code>hexagon</code> <code>list</code> <code>info</code></td>
</tr>
<tr>
<td><strong>linkedin</strong></td>
<td><code>connect</code> <code>inbox</code> <code>job-detail</code> <code>jobs-preferences</code> <code>post-analytics</code> <code>posts</code> <code>profile-experience</code> <code>profile-projects</code> <code>profile-read</code> <code>profile-analytics</code> <code>safe-send</code> <code>search</code> <code>people-search</code> <code>services-read</code> <code>sent-invitations</code> <code>thread-snapshot</code> <code>timeline</code> <code>salesnav-search</code> <code>salesnav-inbox</code> <code>salesnav-message</code> <code>salesnav-thread</code></td>
</tr>
<tr>
<td><strong>reddit</strong></td>
<td><code>hot</code> <code>frontpage</code> <code>popular</code> <code>search</code> <code>subreddit</code> <code>read</code> <code>user</code> <code>user-posts</code> <code>user-comments</code> <code>upvote</code> <code>save</code> <code>comment</code> <code>subscribe</code> <code>saved</code> <code>upvoted</code></td>
</tr>
<tr>
<td><strong>twitter</strong></td>
<td><code>trending</code> <code>search</code> <code>timeline</code> <code>tweets</code> <code>lists</code> <code>list-tweets</code> <code>list-create</code> <code>list-delete</code> <code>list-add</code> <code>list-add-batch</code> <code>list-remove</code> <code>list-remove-batch</code> <code>bookmarks</code> <code>profile</code> <code>thread</code> <code>following</code> <code>followers</code> <code>notifications</code> <code>post</code> <code>reply</code> <code>delete</code> <code>like</code> <code>likes</code> <code>article</code> <code>follow</code> <code>unfollow</code> <code>bookmark</code> <code>unbookmark</code> <code>download</code> <code>accept</code> <code>reply-dm</code> <code>block</code> <code>unblock</code> <code>hide-reply</code></td>
</tr>
<tr>
<td><strong>claude</strong></td>
<td><code>ask</code> <code>send</code> <code>new</code> <code>status</code> <code>read</code> <code>history</code> <code>detail</code></td>
</tr>
<tr>
<td><strong>gemini</strong></td>
<td><code>new</code> <code>ask</code> <code>image</code> <code>deep-research</code> <code>deep-research-result</code></td>
</tr>
<tr>
<td><strong>notebooklm</strong></td>
<td><code>status</code> <code>list</code> <code>open</code> <code>current</code> <code>get</code> <code>history</code> <code>summary</code> <code>note-list</code> <code>notes-get</code> <code>source-list</code> <code>source-get</code> <code>source-fulltext</code> <code>source-guide</code></td>
</tr>
<tr>
<td><strong>amazon</strong></td>
<td><code>bestsellers</code> <code>search</code> <code>product</code> <code>offer</code> <code>discussion</code> <code>movers-shakers</code> <code>new-releases</code> <code>rankings</code></td>
</tr>
<tr>
<td><strong>upwork</strong></td>
<td><code>search</code> <code>feed</code> <code>detail</code></td>
</tr>
<tr>
<td><strong>slock</strong></td>
<td><code>message-send</code> <code>message-read</code> <code>message-search</code> <code>channel-list</code> <code>channel-info</code> <code>channel-create</code> <code>channel-members</code> <code>channel-join</code> <code>task-list</code> <code>task-create</code> <code>task-claim</code> <code>task-status</code> <code>task-convert</code> <code>task-delete</code> <code>thread-list</code> <code>thread-follow</code> <code>attachment-upload</code> <code>attachment-download</code> <code>bookmark-add</code> <code>inbox</code> <code>dm-list</code> <code>server-list</code> <code>server-use</code> <code>whoami</code></td>
</tr>
<tr>
<td><strong>huodongxing</strong></td>
<td><code>events</code></td>
</tr>
<tr>
<td><strong>midjourney</strong></td>
<td><code>login</code> <code>whoami</code> <code>settings</code> <code>quota</code> <code>generate</code> <code>describe</code> <code>history</code> <code>status</code> <code>action</code> <code>download</code></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">精选清单 — <strong><a href="/jackwener/OpenCLI/blob/main/docs/adapters/index.md">→ 查看全部 100+ 站点和命令</a></strong>（小红书 / B站 / 知乎 / Twitter / Reddit / 抖音 / 微博 / 微信读书 / 小宇宙 / 1688 / 夸克 / Spotify / 牛客 / arxiv / Chess.com / Bilibili / 等）。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">下载支持</h2><a id="user-content-下载支持" class="anchor" aria-label="Permalink: 下载支持" href="#下载支持"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">OpenCLI 支持从各平台下载图片、视频和文章。</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">支持的平台</h3><a id="user-content-支持的平台" class="anchor" aria-label="Permalink: 支持的平台" href="#支持的平台"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>平台</th>
<th>内容类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>小红书</strong></td>
<td>图片、视频</td>
<td>下载笔记中的所有媒体文件</td>
</tr>
<tr>
<td><strong>B站</strong></td>
<td>视频</td>
<td>需要安装 <code>yt-dlp</code></td>
</tr>
<tr>
<td><strong>Twitter/X</strong></td>
<td>图片、视频</td>
<td>从用户媒体页或单条推文下载</td>
</tr>
<tr>
<td><strong>Pixiv</strong></td>
<td>图片</td>
<td>下载原始画质插画，支持多页作品</td>
</tr>
<tr>
<td><strong>1688</strong></td>
<td>图片、视频</td>
<td>下载商品页中可见的商品素材</td>
</tr>
<tr>
<td><strong>小宇宙</strong></td>
<td>音频、转录</td>
<td>使用本地凭证下载单集音频和转录 JSON / 文本</td>
</tr>
<tr>
<td><strong>知乎</strong></td>
<td>文章（Markdown）</td>
<td>导出文章，可选下载图片到本地</td>
</tr>
<tr>
<td><strong>微信公众号</strong></td>
<td>文章（Markdown）</td>
<td>导出微信公众号文章为 Markdown</td>
</tr>
<tr>
<td><strong>豆瓣</strong></td>
<td>图片</td>
<td>下载电影条目的海报 / 剧照图片</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">前置依赖</h3><a id="user-content-前置依赖" class="anchor" aria-label="Permalink: 前置依赖" href="#前置依赖"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">下载流媒体平台的视频需要安装 <code>yt-dlp</code>：</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# 安装 yt-dlp
pip install yt-dlp
# 或者
brew install yt-dlp"><pre><span class="pl-c"><span class="pl-c">#</span> 安装 yt-dlp</span>
pip install yt-dlp
<span class="pl-c"><span class="pl-c">#</span> 或者</span>
brew install yt-dlp</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">使用示例</h3><a id="user-content-使用示例" class="anchor" aria-label="Permalink: 使用示例" href="#使用示例"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# 下载小红书笔记中的图片/视频
opencli xiaohongshu download &quot;https://www.xiaohongshu.com/search_result/&lt;id&gt;?xsec_token=...&quot; --output ./xhs
opencli xiaohongshu download &quot;https://xhslink.com/...&quot; --output ./xhs
opencli rednote download &quot;https://www.rednote.com/search_result/&lt;id&gt;?xsec_token=...&quot; --output ./rednote

# 下载B站视频（需要 yt-dlp）
opencli bilibili download BV1xxx --output ./bilibili
opencli bilibili download BV1xxx --quality 1080p  # 指定画质

# 下载 Twitter 用户的媒体
opencli twitter download elonmusk --limit 20 --output ./twitter

# 下载单条推文的媒体
opencli twitter download --tweet-url &quot;https://x.com/user/status/123&quot; --output ./twitter

# 下载豆瓣电影海报 / 剧照
opencli douban download 30382501 --output ./douban

# 下载 1688 商品页中的图片 / 视频素材
opencli 1688 download 841141931191 --output ./1688-downloads

# 下载小宇宙单集音频
opencli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou

# 下载小宇宙单集转录
opencli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts

# 导出知乎文章为 Markdown
opencli zhihu download &quot;https://zhuanlan.zhihu.com/p/xxx&quot; --output ./zhihu

# 导出并下载图片
opencli zhihu download &quot;https://zhuanlan.zhihu.com/p/xxx&quot; --download-images

# 导出微信公众号文章为 Markdown
opencli weixin download --url &quot;https://mp.weixin.qq.com/s/xxx&quot; --output ./weixin"><pre><span class="pl-c"><span class="pl-c">#</span> 下载小红书笔记中的图片/视频</span>
opencli xiaohongshu download <span class="pl-s"><span class="pl-pds">"</span>https://www.xiaohongshu.com/search_result/&lt;id&gt;?xsec_token=...<span class="pl-pds">"</span></span> --output ./xhs
opencli xiaohongshu download <span class="pl-s"><span class="pl-pds">"</span>https://xhslink.com/...<span class="pl-pds">"</span></span> --output ./xhs
opencli rednote download <span class="pl-s"><span class="pl-pds">"</span>https://www.rednote.com/search_result/&lt;id&gt;?xsec_token=...<span class="pl-pds">"</span></span> --output ./rednote

<span class="pl-c"><span class="pl-c">#</span> 下载B站视频（需要 yt-dlp）</span>
opencli bilibili download BV1xxx --output ./bilibili
opencli bilibili download BV1xxx --quality 1080p  <span class="pl-c"><span class="pl-c">#</span> 指定画质</span>

<span class="pl-c"><span class="pl-c">#</span> 下载 Twitter 用户的媒体</span>
opencli twitter download elonmusk --limit 20 --output ./twitter

<span class="pl-c"><span class="pl-c">#</span> 下载单条推文的媒体</span>
opencli twitter download --tweet-url <span class="pl-s"><span class="pl-pds">"</span>https://x.com/user/status/123<span class="pl-pds">"</span></span> --output ./twitter

<span class="pl-c"><span class="pl-c">#</span> 下载豆瓣电影海报 / 剧照</span>
opencli douban download 30382501 --output ./douban

<span class="pl-c"><span class="pl-c">#</span> 下载 1688 商品页中的图片 / 视频素材</span>
opencli 1688 download 841141931191 --output ./1688-downloads

<span class="pl-c"><span class="pl-c">#</span> 下载小宇宙单集音频</span>
opencli xiaoyuzhou download 69b3b675772ac2295bfc01d0 --output ./xiaoyuzhou

<span class="pl-c"><span class="pl-c">#</span> 下载小宇宙单集转录</span>
opencli xiaoyuzhou transcript 69dd0c98e2c8be31551f6a33 --output ./xiaoyuzhou-transcripts

<span class="pl-c"><span class="pl-c">#</span> 导出知乎文章为 Markdown</span>
opencli zhihu download <span class="pl-s"><span class="pl-pds">"</span>https://zhuanlan.zhihu.com/p/xxx<span class="pl-pds">"</span></span> --output ./zhihu

<span class="pl-c"><span class="pl-c">#</span> 导出并下载图片</span>
opencli zhihu download <span class="pl-s"><span class="pl-pds">"</span>https://zhuanlan.zhihu.com/p/xxx<span class="pl-pds">"</span></span> --download-images

<span class="pl-c"><span class="pl-c">#</span> 导出微信公众号文章为 Markdown</span>
opencli weixin download --url <span class="pl-s"><span class="pl-pds">"</span>https://mp.weixin.qq.com/s/xxx<span class="pl-pds">"</span></span> --output ./weixin</pre></div>
<p dir="auto"><code>opencli xiaoyuzhou download</code> 和 <code>transcript</code> 需要本地小宇宙凭证：<code>~/.opencli/xiaoyuzhou.json</code>。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">输出格式</h2><a id="user-content-输出格式" class="anchor" aria-label="Permalink: 输出格式" href="#输出格式"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">所有内置命令都支持 <code>--format</code> / <code>-f</code>，可选值为 <code>table</code>、<code>json</code>、<code>yaml</code>、<code>md</code>、<code>csv</code>。
<code>list</code> 命令也支持同样的格式参数，同时继续兼容 <code>--json</code>。</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="opencli list -f yaml            # 用 YAML 列出命令注册表
opencli bilibili hot -f table   # 默认：富文本表格
opencli bilibili hot -f json    # JSON（适合传给 jq 或者各类 AI Agent）
opencli bilibili hot -f yaml    # YAML（更适合人类直接阅读）
opencli bilibili hot -f md      # Markdown
opencli bilibili hot -f csv     # CSV
opencli bilibili hot -v         # 详细模式：展示管线执行步骤调试信息"><pre>opencli list -f yaml            <span class="pl-c"><span class="pl-c">#</span> 用 YAML 列出命令注册表</span>
opencli bilibili hot -f table   <span class="pl-c"><span class="pl-c">#</span> 默认：富文本表格</span>
opencli bilibili hot -f json    <span class="pl-c"><span class="pl-c">#</span> JSON（适合传给 jq 或者各类 AI Agent）</span>
opencli bilibili hot -f yaml    <span class="pl-c"><span class="pl-c">#</span> YAML（更适合人类直接阅读）</span>
opencli bilibili hot -f md      <span class="pl-c"><span class="pl-c">#</span> Markdown</span>
opencli bilibili hot -f csv     <span class="pl-c"><span class="pl-c">#</span> CSV</span>
opencli bilibili hot -v         <span class="pl-c"><span class="pl-c">#</span> 详细模式：展示管线执行步骤调试信息</span></pre></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">退出码</h2><a id="user-content-退出码" class="anchor" aria-label="Permalink: 退出码" href="#退出码"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">opencli 遵循 Unix <code>sysexits.h</code>，CI / 脚本可按失败模式分支：<code>0</code> 成功、<code>66</code> 无数据、<code>69</code> Browser Bridge 未连接、<code>75</code> 超时、<code>77</code> 需要认证、<code>78</code> 配置错误、<code>130</code> Ctrl-C。完整参考：<a href="/jackwener/OpenCLI/blob/main/docs/zh/guide/exit-codes.md">docs/zh/guide/exit-codes.md</a>。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">插件</h2><a id="user-content-插件" class="anchor" aria-label="Permalink: 插件" href="#插件"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">通过社区贡献的插件扩展 OpenCLI。插件使用与内置命令相同的 JS 格式，启动时自动发现。</p>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="opencli plugin install github:user/opencli-plugin-my-tool  # 安装
opencli plugin list                                         # 查看已安装
opencli plugin update my-tool                               # 更新到最新
opencli plugin update --all                                 # 更新全部已安装插件
opencli plugin uninstall my-tool                            # 卸载"><pre>opencli plugin install github:user/opencli-plugin-my-tool  <span class="pl-c"><span class="pl-c">#</span> 安装</span>
opencli plugin list                                         <span class="pl-c"><span class="pl-c">#</span> 查看已安装</span>
opencli plugin update my-tool                               <span class="pl-c"><span class="pl-c">#</span> 更新到最新</span>
opencli plugin update --all                                 <span class="pl-c"><span class="pl-c">#</span> 更新全部已安装插件</span>
opencli plugin uninstall my-tool                            <span class="pl-c"><span class="pl-c">#</span> 卸载</span></pre></div>
<p dir="auto">当 plugin 的版本被记录到 <code>~/.opencli/plugins.lock.json</code> 后，<code>opencli plugin list</code> 也会显示对应的短 commit hash。</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>插件</th>
<th>类型</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/ByteYue/opencli-plugin-github-trending">opencli-plugin-github-trending</a></td>
<td>JS</td>
<td>GitHub Trending 仓库</td>
</tr>
<tr>
<td><a href="https://github.com/ByteYue/opencli-plugin-hot-digest">opencli-plugin-hot-digest</a></td>
<td>JS</td>
<td>多平台热榜聚合</td>
</tr>
<tr>
<td><a href="https://github.com/Astro-Han/opencli-plugin-juejin">opencli-plugin-juejin</a></td>
<td>JS</td>
<td>稀土掘金热门文章</td>
</tr>
<tr>
<td><a href="https://github.com/flobo3/opencli-plugin-vk">opencli-plugin-vk</a></td>
<td>JS</td>
<td>VK (VKontakte) 动态、信息流和搜索</td>
</tr>
<tr>
<td><a href="https://github.com/genoooool/opencli-plugin-x-article-publisher">opencli-plugin-x-article-publisher</a></td>
<td>JS</td>
<td>通过 OpenCLI 与 xPoster 将带本地图片的 Markdown 发布为 X 长文</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">详见 <a href="/jackwener/OpenCLI/blob/main/docs/zh/guide/plugins.md">插件指南</a> 了解如何创建自己的插件。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">常见问题排查</h2><a id="user-content-常见问题排查" class="anchor" aria-label="Permalink: 常见问题排查" href="#常见问题排查"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><strong>"Extension not connected" 报错</strong>
<ul dir="auto">
<li>确保你已从 <a href="https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk" rel="nofollow">Chrome Web Store</a> 安装 OpenCLI 扩展，且在 <code>chrome://extensions</code> 中<strong>已启用</strong>。</li>
</ul>
</li>
<li><strong>"attach failed: Cannot access a chrome-extension:// URL" 报错</strong>
<ul dir="auto">
<li>其他 Chrome/Chromium 扩展（如 youmind、New Tab Override 或 AI 助手类扩展）可能产生冲突。请尝试<strong>暂时禁用其他扩展</strong>后重试。</li>
</ul>
</li>
<li><strong>返回空数据，或者报错 "Unauthorized"</strong>
<ul dir="auto">
<li>Chrome/Chromium 里的登录态可能已经过期。请打开当前页面，在新标签页重新手工登录或刷新该页面。</li>
</ul>
</li>
<li><strong>Node API 错误 / 缺少 <code>fetch</code> / 旧 Node 启动即崩</strong>
<ul dir="auto">
<li>OpenCLI 要求 <strong>Node.js &gt;= 20.18.1</strong>。先执行 <code>node --version</code>，如果版本过低先升级，再重试命令。</li>
</ul>
</li>
<li><strong>Daemon 问题</strong>
<ul dir="auto">
<li>检查 daemon 状态：<code>curl localhost:19825/status</code></li>
<li>查看扩展日志：<code>curl localhost:19825/logs</code></li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Star History</h2><a id="user-content-star-history" class="anchor" aria-label="Permalink: Star History" href="#star-history"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a href="https://star-history.dera.page/#jackwener/opencli&amp;Date" rel="nofollow"><img src="https://camo.githubusercontent.com/b01e0a5917f5b4fbf01fb666bcadd63f1fdd4c47955cd1ba348c50fa8e9819b6/68747470733a2f2f737461722d686973746f72792e646572612e706167652f7376673f7265706f733d6a61636b77656e65722f6f70656e636c6926747970653d44617465" alt="Star History Chart" data-canonical-src="https://star-history.dera.page/svg?repos=jackwener/opencli&amp;type=Date" style="max-width: 100%;"></a></p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">License</h2><a id="user-content-license" class="anchor" aria-label="Permalink: License" href="#license"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a href="/jackwener/OpenCLI/blob/main/LICENSE">Apache-2.0</a></p>
</article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

