欢迎回来

登录 EAKE AI,继续您的智能之旅

忘记密码?
还没有账号?立即注册

技能创建器

2026-05-21 · Skills中心

Authoring Hermes-Agent Skills (in-repo)

Overview

There are two places a SKILL.md can live:

  1. User-local: ~/.hermes/skills///SKILL.md — personal, not shared. Created via skill_manage(action='create').
  2. In-repo (this skill is about this case): /home/bb/hermes-agent/skills///SKILL.md — committed, shipped with the package. Use write_file + git add. skill_manage(action='create') does NOT target this tree.
  3. When to Use

    • User asks you to add a skill "in this branch / repo / commit"
    • You're committing a reusable workflow that should ship with hermes-agent
    • You're editing an existing skill under /home/bb/hermes-agent/skills/ (use patch for small edits, write_file for rewrites; skill_manage still works for patch on in-repo skills, but not for create)

    Required Frontmatter

    Source of truth: tools/skill_manager_tool.py::_validate_frontmatter. Hard requirements:

    • Starts with --- as the first bytes (no leading blank line).
    • Closes with n---n before the body.
    • Parses as a YAML mapping.
    • name field present.
    • description field present, ≤ 1024 chars (MAX_DESCRIPTION_LENGTH).
    • Non-empty body after the closing ---.

    Peer-matched shape used by every skill under skills/software-development/:

    
    ---
    name: my-skill-name               # lowercase, hyphens, ≤64 chars (MAX_NAME_LENGTH)
    description: Use when . .
    version: 1.0.0
    author: Hermes Agent
    license: MIT
    metadata:
      hermes:
        tags: [short, descriptive, tags]
        related_skills: [other-skill, another-skill]
    ---
    

    version / author / license / metadata are NOT enforced by the validator, but every peer has them — omit and your skill sticks out.

    Size Limits

    • Description: ≤ 1024 chars (enforced).
    • Full SKILL.md: ≤ 100,000 chars (enforced as MAX_SKILL_CONTENT_CHARS, ~36k tokens).
    • Peer skills in software-development/ sit at 8-14k chars. Aim for that range. If you're pushing past 20k, split into references/*.md and reference them from SKILL.md.

    Peer-Matched Structure

    Every in-repo skill follows roughly:

    
    # 
    
    ## Overview
    One or two paragraphs: what and why.
    
    ## When to Use
    - Bulleted triggers
    - "Don't use for:" counter-triggers
    
    ## 
    - Quick-reference tables are common
    - Code blocks with exact commands
    - Hermes-specific recipes (tests via scripts/run_tests.sh, ui-tui paths, etc.)
    
    ## Common Pitfalls
    Numbered list of mistakes and their fixes.
    
    ## Verification Checklist
    - [ ] Checkbox list of post-action verifications
    
    ## One-Shot Recipes (optional)
    Named scenarios → concrete command sequences.
    </code></pre>
    <p>Not every section is mandatory, but <code>Overview</code> + <code>When to Use</code> + actionable body + pitfalls are the minimum for the skill to feel like a peer.</p>
    <h2>Directory Placement</h2>
    <pre><code>
    skills///SKILL.md
    </code></pre>
    <p>Categories currently in repo (confirm with <code>ls skills/</code>): <code>autonomous-ai-agents</code>, <code>creative</code>, <code>data-science</code>, <code>devops</code>, <code>dogfood</code>, <code>email</code>, <code>gaming</code>, <code>github</code>, <code>leisure</code>, <code>mcp</code>, <code>media</code>, <code>mlops/*</code>, <code>note-taking</code>, <code>productivity</code>, <code>red-teaming</code>, <code>research</code>, <code>smart-home</code>, <code>social-media</code>, <code>software-development</code>.</p>
    <p>Pick the closest existing category. Don't invent new top-level categories casually.</p>
    <h2>Workflow</h2>
    <ol>
    <li><strong>Survey peers</strong> in the target category:</li>
    <pre><code>
       ls skills//
    </code></pre>
    </ul>
    <p>   Read 2-3 peer SKILL.md files to match tone and structure.</p>
    <ol>
    <li><strong>Check validator constraints</strong> in <code>tools/skill_manager_tool.py</code> if unsure.</li>
    <li><strong>Draft</strong> with <code>write_file</code> to <code>skills///SKILL.md</code>.</li>
    <li><strong>Validate locally</strong>:</li>
    <pre><code class="language-python">
       import yaml, re, pathlib
       content = pathlib.Path("skills///SKILL.md").read_text()
       assert content.startswith("---")
       m = re.search(r'n---s*n', content[3:])
       fm = yaml.safe_load(content[3:m.start()+3])
       assert "name" in fm and "description" in fm
       assert len(fm["description"]) <= 1024
       assert len(content) <= 100_000
    </code></pre>
    <li><strong>Git add + commit</strong> on the active branch.</li>
    <li><strong>Note:</strong> the CURRENT session's skill loader is cached — <code>skill_view</code> / <code>skills_list</code> will not see the new skill until a new session. This is expected, not a bug.</li>
    </ul>
    <h2>Cross-Referencing Other Skills</h2>
    <p><code>metadata.hermes.related_skills</code> unions both trees (<code>skills/</code> in-repo and <code>~/.hermes/skills/</code>) at load time. You CAN reference a user-local skill from an in-repo skill, but it won't resolve for other users who clone the repo fresh. Prefer referencing only in-repo skills from in-repo skills. If a frequently-referenced skill lives only in <code>~/.hermes/skills/</code>, consider promoting it to the repo.</p>
    <h2>Editing Existing In-Repo Skills</h2>
    <ul>
    <li><strong>Small fix (typo, added pitfall, tightened trigger):</strong> <code>skill_manage(action='patch', name=..., old_string=..., new_string=...)</code> works fine on in-repo skills.</li>
    <li><strong>Major rewrite:</strong> <code>write_file</code> the whole SKILL.md. <code>skill_manage(action='edit')</code> also works but requires supplying the full new content.</li>
    <li><strong>Adding supporting files:</strong> <code>write_file</code> to <code>skills///references/.md</code>, <code>templates/</code>, or <code>scripts/</code>. <code>skill_manage(action='write_file')</code> also works and enforces the references/templates/scripts/assets subdir allowlist.</li>
    <li><strong>Always commit</strong> the edit — in-repo skills are source, not runtime state.</li>
    </ul>
    <h2>Common Pitfalls</h2>
    <ol>
    <li><strong>Using <code>skill_manage(action='create')</code> for an in-repo skill.</strong> It writes to <code>~/.hermes/skills/</code>, not the repo tree. Use <code>write_file</code> for in-repo creation.</li>
    </ul>
    <ol>
    <li><strong>Leading whitespace before <code>---</code>.</strong> The validator checks <code>content.startswith("---")</code>; any leading blank line or BOM fails validation.</li>
    </ul>
    <ol>
    <li><strong>Description too generic.</strong> Peer descriptions start with "Use when ..." and describe the *trigger class*, not the one task. "Use when debugging X" > "Debug X".</li>
    </ul>
    <ol>
    <li><strong>Forgetting the author/license/metadata block.</strong> Not validator-enforced, but every peer has it; omitting makes the skill look half-finished.</li>
    </ul>
    <ol>
    <li><strong>Writing a skill that duplicates a peer.</strong> Before creating, <code>ls skills//</code> and open 2-3 peers. Prefer extending an existing skill to creating a narrow sibling.</li>
    </ul>
    <ol>
    <li><strong>Expecting the current session to see the new skill.</strong> It won't. The skill loader is initialized at session start. Verify in a fresh session or via <code>skill_view</code> using the exact path.</li>
    </ul>
    <ol>
    <li><strong>Linking to skills that don't exist in-repo.</strong> <code>related_skills: [some-user-local-skill]</code> works for you but breaks for other clones. Prefer only in-repo links.</li>
    </ul>
    <h2>Verification Checklist</h2>
    <ul>
    <li>[ ] File is at <code>skills///SKILL.md</code> (not in <code>~/.hermes/skills/</code>)</li>
    <li>[ ] Frontmatter starts at byte 0 with <code>---</code>, closes with <code>n---n</code></li>
    <li>[ ] <code>name</code>, <code>description</code>, <code>version</code>, <code>author</code>, <code>license</code>, <code>metadata.hermes.{tags, related_skills}</code> all present</li>
    <li>[ ] Name ≤ 64 chars, lowercase + hyphens</li>
    <li>[ ] Description ≤ 1024 chars and starts with "Use when ..."</li>
    <li>[ ] Total file ≤ 100,000 chars (aim for 8-15k)</li>
    <li>[ ] Structure: <code># Title</code> → <code>## Overview</code> → <code>## When to Use</code> → body → <code>## Common Pitfalls</code> → <code>## Verification Checklist</code></li>
    <li>[ ] <code>related_skills</code> references resolve in-repo (or are explicitly OK to be user-local)</li>
    <li>[ ] <code>git add skills/// && git commit</code> completed on the intended branch</li>
    </ul>    </div>
    
        <!-- Tags -->
    
        <!-- Navigation -->
        <div class="detail-nav">
          <a href="https://agent.eake.cn/2026/05/21/post-599/" class="detail-nav-link">← 深度研究助手</a>
          <a href="https://agent.eake.cn/2026/05/21/danrenguanxijiaolian/" class="detail-nav-link">担任关系教练 →</a>
        </div>
    
      </div>
    </div>
    
    <style>
    .detail-page { text-align:center; }
    .detail-wrap { max-width:800px; margin:0 auto; text-align:left; }
    
    /* Badge */
    .detail-badge { text-align:center; margin-bottom:10px; }
    .detail-cat-badge {
      display:inline-block; padding:4px 14px; border-radius:20px; font-size:0.78rem;
      background:rgba(0,240,255,0.12); color:#00f0ff; border:1px solid rgba(0,240,255,0.2);
    }
    
    /* Title */
    .detail-title {
      text-align:center; font-size:clamp(1.5rem,4vw,2.2rem); color:#e8e8e8;
      font-weight:700; line-height:1.4; margin-bottom:10px;
    }
    
    /* Meta */
    .detail-meta {
      text-align:center; color:#64748b; font-size:0.85rem; margin-bottom:20px;
      display:flex; justify-content:center; gap:8px; flex-wrap:wrap;
    }
    .detail-meta-dot { color:#334155; }
    
    /* Featured Image */
    .detail-featured {
      text-align:center; margin-bottom:20px;
    }
    .detail-featured img {
      max-width:100%; height:auto; border-radius:12px;
      border:1px solid rgba(255,255,255,0.07);
    }
    
    /* ========== Article Content - 护眼配色 v4 ========== */
    .detail-content {
      color:#e8e8e8;
      line-height:2;
      font-size:1rem;
      max-width:720px;
      margin:0 auto 24px;
    }
    .detail-content h2 {
      color:#e8e8e8;
      font-size:1.3rem;
      font-weight:600;
      margin:32px 0 14px;
      padding-bottom:10px;
      border-bottom:1px solid rgba(168,85,247,0.25);
    }
    .detail-content h3 {
      color:#e8e8e8;
      font-size:1.1rem;
      margin:24px 0 10px;
    }
    .detail-content h4 {
      color:#d8d8d8;
      font-size:1rem;
      margin:20px 0 8px;
    }
    .detail-content p {
      margin-bottom:16px;
    }
    .detail-content ul,
    .detail-content ol {
      margin:0 0 18px 24px;
    }
    .detail-content li {
      margin-bottom:8px;
      line-height:1.8;
    }
    .detail-content code {
      background:rgba(103,232,249,0.06);
      padding:2px 8px;
      border-radius:4px;
      font-size:0.88em;
      color:#67e8f9;
      border:1px solid rgba(103,232,249,0.12);
    }
    .detail-content pre {
      background:rgba(0,0,0,0.5);
      border:1px solid rgba(255,255,255,0.06);
      border-radius:8px;
      padding:16px 20px;
      overflow-x:auto;
      margin-bottom:18px;
      font-size:0.85rem;
      line-height:1.6;
    }
    .detail-content pre code {
      background:none;
      padding:0;
      color:#e8e8e8;
    }
    .detail-content blockquote {
      border-left:3px solid #a855f7;
      margin:0 0 18px;
      padding:12px 20px;
      background:rgba(168,85,247,0.06);
      border-radius:0 6px 6px 0;
      color:#c8c8c8;
      font-style:italic;
    }
    .detail-content a {
      color:#67e8f9;
      text-decoration:none;
    }
    .detail-content a:hover {
      color:#a5f3fc;
      text-decoration:underline;
    }
    .detail-content img {
      max-width:100%;
      height:auto;
      border-radius:8px;
    }
    .detail-content table {
      width:100%;
      border-collapse:collapse;
      margin-bottom:18px;
      font-size:0.9rem;
      border:1px solid rgba(255,255,255,0.08);
    }
    .detail-content table th {
      background:rgba(168,85,247,0.1);
      color:#e8e8e8;
      padding:10px 14px;
      text-align:left;
      border:1px solid rgba(255,255,255,0.08);
      font-weight:600;
    }
    .detail-content table td {
      padding:9px 14px;
      border:1px solid rgba(255,255,255,0.06);
      color:#d8d8d8;
    }
    .detail-content table tr:nth-child(even) td {
      background:rgba(255,255,255,0.025);
    }
    .detail-content table tr.table-separator td {
      padding:2px;
      background:none;
      border:none;
    }
    /* ========== End Article Content ========== */
    
    /* Tags */
    .detail-tags {
      text-align:center; margin-bottom:20px;
      display:flex; justify-content:center; gap:8px; flex-wrap:wrap;
    }
    .detail-tag {
      display:inline-block; padding:4px 12px; border-radius:16px; font-size:0.78rem;
      background:rgba(168,85,247,0.1); color:#a855f7; border:1px solid rgba(168,85,247,0.2);
    }
    
    /* Navigation */
    .detail-nav {
      display:flex; justify-content:space-between; align-items:center;
      padding-top:24px; border-top:1px solid rgba(255,255,255,0.07);
      margin-top:8px;
    }
    .detail-nav-link {
      color:#00f0ff; text-decoration:none; font-size:0.88rem;
      max-width:45%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
      transition:color 0.2s;
    }
    .detail-nav-link:hover { color:#a855f7; }
    
    /* Empty */
    .detail-empty { text-align:center; padding:60px 0; color:#64748b; }
    .detail-empty p { margin-bottom:12px; font-size:1.1rem; }
    
    /* Mobile */
    @media (max-width:768px) {
      .detail-wrap { padding:0 16px; }
      .detail-content { font-size:0.92rem; }
      .detail-title { font-size:1.4rem; }
    }
    
    /* ========== Copy Button for Code Blocks ========== */
    .detail-content pre {
      position: relative;
      padding-top: 36px !important;
    }
    .copy-code-btn {
      position: absolute;
      top: 8px;
      right: 10px;
      background: rgba(168,85,247,0.18);
      border: 1px solid rgba(168,85,247,0.35);
      color: #c084fc;
      padding: 3px 11px;
      font-size: 12px;
      cursor: pointer;
      border-radius: 4px;
      z-index: 10;
      user-select: none;
      transition: all 0.2s;
      font-family: inherit;
    }
    .copy-code-btn:hover {
      background: rgba(168,85,247,0.32);
      color: #e9d5ff;
      border-color: rgba(168,85,247,0.6);
    }
    .copy-code-btn.copied {
      background: rgba(16,185,129,0.2);
      border-color: rgba(16,185,129,0.4);
      color: #6ee7b7;
    }
    
    </style>
    
    
    
        <!-- Comments -->
        <div class="detail-comments">
          <h2 class="detail-comments-title">
            <i class="fa-regular fa-comments"></i>评论区
          </h2>
          
    
    
    	<div id="respond" class="comment-respond">
    		<h3 id="reply-title" class="comment-reply-title">发表评论 <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2026/05/21/post-619/#respond" style="display:none;">取消回复</a></small></h3><form action="https://agent.eake.cn/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-form-comment"><label for="comment">评论内容 <span class="required">*</span></label><textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">昵称 <span class="required">*</span></label><input id="author" name="author" type="text" value="" size="30" maxlength="245" aria-required="true" required /></p>
    <p class="comment-form-email"><label for="email">邮箱 <span class="required">*</span></label><input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-required="true" required /></p>
    <p class="comment-form-url"><label for="url">网站</label><input id="url" name="url" type="url" value="" size="30" maxlength="200" /></p>
    <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。</label></p>
    <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='619' id='comment_post_ID' />
    <input type='hidden' name='comment_parent' id='comment_parent' value='0' />
    </p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="88"/><script>
    document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );
    </script>
    </p></form>	</div><!-- #respond -->
    	    </div>
    
    
    
    <script>
    document.addEventListener('DOMContentLoaded', function() {
      var pres = document.querySelectorAll('.detail-content pre');
      pres.forEach(function(pre) {
        var btn = document.createElement('button');
        btn.className = 'copy-code-btn';
        btn.textContent = '复制代码';
        btn.onclick = function() {
          var code = pre.querySelector('code');
          var text = code ? code.innerText : pre.innerText;
          navigator.clipboard.writeText(text).then(function() {
            btn.textContent = '已复制 ✓';
            btn.classList.add('copied');
            setTimeout(function() {
              btn.textContent = '复制代码';
              btn.classList.remove('copied');
            }, 2000);
          }).catch(function() {
            btn.textContent = '复制失败';
            setTimeout(function() {
              btn.textContent = '复制代码';
            }, 2000);
          });
        };
        pre.style.position = 'relative';
        pre.insertBefore(btn, pre.firstChild);
      });
    });
    </script>
    
    
    <!-- footer -->
    <footer class="site-footer">
        <div class="footer-inner">
            <nav class="footer-nav">
    <li id="menu-item-900" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-900"><a href="https://agent.eake.cn/about">关于我们</a></li>
    <li id="menu-item-901" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-901"><a href="https://agent.eake.cn/contact">联系方式</a></li>
    <li id="menu-item-902" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-902"><a href="https://agent.eake.cn/privacy">隐私政策</a></li>
            </nav>
            <p class="icp" style="text-align:center; font-size: 12px; color: #666; margin-top: 5px;">
                <a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow" style="color: #666;">滇ICP备20001752号</a> | 
                <a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=53018102000085" target="_blank" rel="nofollow" style="color: #666;">滇公网安备 53018102000085号</a>
            </p>
            <p class="copyright" style="text-align:center;">© 2026 亚蓝信息技术有限公司 | 邮箱:eakecn@qq.com</p>
        </div>
    </footer>
    <script type="speculationrules">
    {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/ylan-agent/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
    </script>
    <script>
    window.chatModalConfig = {
        ajaxurl: 'https://agent.eake.cn/wp-admin/admin-ajax.php',
        nonce: '89791c0e2d',
        isLoggedIn: false,
        models: [{"name":"AI Agent \u865a\u62df\u4fe1\u7528\u5361","label":"AI Agent \u865a\u62df\u4fe1\u7528\u5361"},{"name":"Claude 3.5 Haiku \u2014 \u6781\u901f\u63a8\u7406\u6a21\u578b","label":"Claude 3.5 Haiku \u2014 \u6781\u901f\u63a8\u7406\u6a21\u578b"},{"name":"Claude 4 Opus and Sonnet 4","label":"Claude 4 Opus and Sonnet 4"},{"name":"Claude Opus 4 \u2014 Anthropic\u6700\u5f3a\u63a8\u7406\u6a21\u578b","label":"Claude Opus 4 \u2014 Anthropic\u6700\u5f3a\u63a8\u7406\u6a21\u578b"},{"name":"Command A \u2014 Cohere \u4f01\u4e1a\u7ea7RAG\u6a21\u578b","label":"Command A \u2014 Cohere \u4f01\u4e1a\u7ea7RAG\u6a21\u578b"},{"name":"DeepSeek R1 \u2014 \u5f00\u6e90\u63a8\u7406\u6a21\u578b","label":"DeepSeek R1 \u2014 \u5f00\u6e90\u63a8\u7406\u6a21\u578b"},{"name":"DeepSeek V4","label":"DeepSeek V4"},{"name":"DeepSeek-R1-0528 \u2014 \u6df1\u5ea6\u63a8\u7406\u5f00\u6e90\u6a21\u578b\u66f4\u65b0","label":"DeepSeek-R1-0528 \u2014 \u6df1\u5ea6\u63a8\u7406\u5f00\u6e90\u6a21\u578b\u66f4\u65b0"},{"name":"Doubao Seed 2.0 Pro \u2014 \u5b57\u8282\u65d7\u8230\u63a8\u7406\u6a21\u578b","label":"Doubao Seed 2.0 Pro \u2014 \u5b57\u8282\u65d7\u8230\u63a8\u7406\u6a21\u578b"},{"name":"Doubao-Seed-1.6-Flash \u2014 \u706b\u5c71\u5f15\u64ce\u6781\u901f\u63a8\u7406\u6a21\u578b","label":"Doubao-Seed-1.6-Flash \u2014 \u706b\u5c71\u5f15\u64ce\u6781\u901f\u63a8\u7406\u6a21\u578b"},{"name":"Gemini 2.0 Flash","label":"Gemini 2.0 Flash"},{"name":"Gemini 2.5 Pro \u2014 Google\u6700\u5f3a\u601d\u8003\u6a21\u578b","label":"Gemini 2.5 Pro \u2014 Google\u6700\u5f3a\u601d\u8003\u6a21\u578b"},{"name":"Gemini 2.5 Pro\/Flash \u2014 Google\u6700\u5f3a\u63a8\u7406\u6a21\u578b","label":"Gemini 2.5 Pro\/Flash \u2014 Google\u6700\u5f3a\u63a8\u7406\u6a21\u578b"},{"name":"Gemini 3.5 Flash \u2014 Google\u6781\u901f\u591a\u6a21\u6001\u6a21\u578b","label":"Gemini 3.5 Flash \u2014 Google\u6781\u901f\u591a\u6a21\u6001\u6a21\u578b"},{"name":"GLM-5.1","label":"GLM-5.1"},{"name":"Google Jules \u4efb\u52a1\u59d4\u6d3e","label":"Google Jules \u4efb\u52a1\u59d4\u6d3e"},{"name":"GPT-4.1 \u2014 OpenAI\u6700\u65b0\u65d7\u8230\u6a21\u578b\u652f\u6301\u767e\u4e07Token","label":"GPT-4.1 \u2014 OpenAI\u6700\u65b0\u65d7\u8230\u6a21\u578b\u652f\u6301\u767e\u4e07Token"},{"name":"GPT-4.1 \u7cfb\u5217 \u2014 \u767e\u4e07\u7ea7\u4e0a\u4e0b\u6587\u7a97\u53e3","label":"GPT-4.1 \u7cfb\u5217 \u2014 \u767e\u4e07\u7ea7\u4e0a\u4e0b\u6587\u7a97\u53e3"},{"name":"GPT-4o \u2014 OpenAI \u65d7\u8230\u591a\u6a21\u6001\u6a21\u578b","label":"GPT-4o \u2014 OpenAI \u65d7\u8230\u591a\u6a21\u6001\u6a21\u578b"},{"name":"GPT-5.5 Instant","label":"GPT-5.5 Instant"},{"name":"Grok 3 \u2014 xAI \u524d\u4ee3\u65d7\u8230\u6a21\u578b","label":"Grok 3 \u2014 xAI \u524d\u4ee3\u65d7\u8230\u6a21\u578b"},{"name":"Grok 4","label":"Grok 4"},{"name":"Kimi K2.6","label":"Kimi K2.6"},{"name":"Ling-2.6-1T \u4e07\u4ebf\u53c2\u6570\u6a21\u578b","label":"Ling-2.6-1T \u4e07\u4ebf\u53c2\u6570\u6a21\u578b"},{"name":"Llama 4 Maverick \u2014 Meta \u5f00\u6e90\u591a\u6a21\u6001\u65d7\u8230","label":"Llama 4 Maverick \u2014 Meta \u5f00\u6e90\u591a\u6a21\u6001\u65d7\u8230"},{"name":"Llama 4 Maverick \u2014 Meta\u5f00\u6e90\u591a\u6a21\u6001\u5927\u6a21\u578b","label":"Llama 4 Maverick \u2014 Meta\u5f00\u6e90\u591a\u6a21\u6001\u5927\u6a21\u578b"},{"name":"Llama 4 Scout","label":"Llama 4 Scout"},{"name":"Manus AI \u4efb\u52a1\u59d4\u6d3e","label":"Manus AI \u4efb\u52a1\u59d4\u6d3e"},{"name":"MiniMax-abab","label":"MiniMax-abab"},{"name":"Mistral Large 2 \u5927\u6a21\u578b","label":"Mistral Large 2 \u5927\u6a21\u578b"},{"name":"Mistral Medium 3 \u2014 \u4f01\u4e1a\u7ea7AI\u6a21\u578b","label":"Mistral Medium 3 \u2014 \u4f01\u4e1a\u7ea7AI\u6a21\u578b"},{"name":"Mistral Medium 3 \u2014 \u6b27\u6d32AI\u65d7\u8230\u6a21\u578b","label":"Mistral Medium 3 \u2014 \u6b27\u6d32AI\u65d7\u8230\u6a21\u578b"},{"name":"o3 \u2014 OpenAI \u6df1\u5ea6\u63a8\u7406\u6a21\u578b","label":"o3 \u2014 OpenAI \u6df1\u5ea6\u63a8\u7406\u6a21\u578b"},{"name":"o4-mini \u2014 OpenAI \u8f7b\u91cf\u63a8\u7406\u6a21\u578b","label":"o4-mini \u2014 OpenAI \u8f7b\u91cf\u63a8\u7406\u6a21\u578b"},{"name":"Qwen 3.6","label":"Qwen 3.6"},{"name":"Qwen3 235B-A22B \u2014 MoE\u5f00\u6e90\u65d7\u8230","label":"Qwen3 235B-A22B \u2014 MoE\u5f00\u6e90\u65d7\u8230"},{"name":"Qwen3 235B-A22B \u2014 \u963f\u91ccMoE\u5f00\u6e90\u65d7\u8230","label":"Qwen3 235B-A22B \u2014 \u963f\u91ccMoE\u5f00\u6e90\u65d7\u8230"},{"name":"Qwen3 \u7cfb\u5217 \u2014 \u6df7\u5408\u601d\u7ef4\u5f00\u6e90\u65d7\u8230","label":"Qwen3 \u7cfb\u5217 \u2014 \u6df7\u5408\u601d\u7ef4\u5f00\u6e90\u65d7\u8230"},{"name":"\u591a\u667a\u80fd\u4f53\u793e\u4f1a\u6a21\u62df","label":"\u591a\u667a\u80fd\u4f53\u793e\u4f1a\u6a21\u62df"},{"name":"\u6587\u5fc3\u5927\u6a21\u578b 5.1","label":"\u6587\u5fc3\u5927\u6a21\u578b 5.1"},{"name":"\u8682\u8681 Ring-2.6-1T","label":"\u8682\u8681 Ring-2.6-1T"},{"name":"\u8baf\u98de\u661f\u706b X1 Turbo","label":"\u8baf\u98de\u661f\u706b X1 Turbo"}],
        rateLimit: { used: 0, max: 3 }
    };
    </script>
        <script id="visitor-tracker-js-after">
    jQuery(document).ready(function() {
            var startTime = Date.now();
            var currentPage = window.location.href;
            var referrer = document.referrer || '';
    
            // 首次访问记录(仅一次)
            jQuery.post('https://agent.eake.cn/wp-admin/admin-ajax.php', {
                'action': 'log_visitor_duration',
                'nonce': '27b87ac457',
                'page': currentPage,
                'referrer': referrer,
                'duration': 0,
                'is_pv': 0
            });
    
            // PV轨迹:页面可见时记录
            var pvLogged = false;
            var logPV = function() {
                if (!pvLogged) {
                    pvLogged = true;
                    jQuery.post('https://agent.eake.cn/wp-admin/admin-ajax.php', {
                        'action': 'log_visitor_duration',
                        'nonce': '27b87ac457',
                        'page': currentPage,
                        'referrer': referrer,
                        'duration': 0,
                        'is_pv': 1
                    });
                }
            };
            if (document.readyState === 'complete') logPV();
            else window.addEventListener('load', logPV);
    
            // 离开时更新停留时长
            jQuery(window).on('beforeunload', function() {
                var duration = Math.floor((Date.now() - startTime) / 1000);
                var data = {
                    'action': 'log_visitor_duration',
                    'nonce': '27b87ac457',
                    'page': currentPage,
                    'referrer': referrer,
                    'duration': duration,
                    'is_pv': 0
                };
                if (navigator.sendBeacon) {
                    var blob = new Blob([jQuery.param(data)], {'type': 'application/x-www-form-urlencoded'});
                    navigator.sendBeacon('https://agent.eake.cn/wp-admin/admin-ajax.php', blob);
                }
            });
        });
        
    //# sourceURL=visitor-tracker-js-after
    </script>
    <script id="ylan-agent-js-js" src="https://agent.eake.cn/wp-content/themes/ylan-agent/agent.js?ver=1.0.0"></script>
    <script id="marked-js-js" src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
    <script id="hljs-js-js" src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/highlight.min.js"></script>
    <script id="chat-modal-js-js" src="https://agent.eake.cn/wp-content/themes/ylan-agent/chat-modal.js?ver=20260502v1"></script>
    <script id="wp-emoji-settings" type="application/json">
    {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://agent.eake.cn/wp-includes/js/wp-emoji-release.min.js?ver=7.0"}}
    </script>
    <script type="module">
    /*! This file is auto-generated */
    const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});
    //# sourceURL=https://agent.eake.cn/wp-includes/js/wp-emoji-loader.min.js
    </script>
    </body>
    </html>