<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Workflow on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/workflow/</link>
        <description>Recent content in Workflow on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 31 May 2026 14:17:42 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/workflow/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>How Much Extra Token Usage Do subagents Cost? Multi-Agent Costs and Usage Strategy</title>
        <link>https://knightli.com/en/2026/05/31/subagent-multi-agent-token-cost/</link>
        <pubDate>Sun, 31 May 2026 14:17:42 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/31/subagent-multi-agent-token-cost/</guid>
        <description>&lt;p&gt;Using subagents or a multi-agent workflow usually increases token usage. The question is not whether it costs more, but how much more it costs, and whether the parallel speed or extra stability is worth it.&lt;/p&gt;
&lt;p&gt;For small tasks, it is usually cheaper to let the main agent handle the work directly. Subagents become more useful when the task can be clearly split, or when an independent review is valuable.&lt;/p&gt;
&lt;h2 id=&#34;a-subagent-is-not-a-cheaper-parallel-thread&#34;&gt;A subagent is not a cheaper parallel thread
&lt;/h2&gt;&lt;p&gt;When people first see subagents, it is easy to think of them as parallel threads: the main agent handles one part, the subagent handles another part, and the task finishes faster, so it must be more efficient.&lt;/p&gt;
&lt;p&gt;That is not how it works. A subagent is still a separate model call. It needs to read the task, understand the context, inspect files, reason through the problem, and produce an output. It is not a free copy of the main agent; it is an additional reasoning path.&lt;/p&gt;
&lt;p&gt;So the key question is not &amp;ldquo;can this run in parallel?&amp;rdquo; The real question is: &amp;ldquo;Is the time saved or quality gained worth the extra token cost?&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;why-token-usage-increases&#34;&gt;Why token usage increases
&lt;/h2&gt;&lt;p&gt;A subagent call usually adds token usage from several places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the task description written by the main agent;&lt;/li&gt;
&lt;li&gt;the context passed to the subagent;&lt;/li&gt;
&lt;li&gt;the files and details the subagent reads;&lt;/li&gt;
&lt;li&gt;the subagent&amp;rsquo;s own reasoning and output;&lt;/li&gt;
&lt;li&gt;the main agent&amp;rsquo;s follow-up review, integration, and verification.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If multiple agents read the same large files, the waste becomes more obvious. This is especially true for codebase analysis, long-document translation, and batch content cleanup. If the task is split poorly, many tokens are spent on repeatedly understanding the same context.&lt;/p&gt;
&lt;h2 id=&#34;re-reading-context-is-the-biggest-token-waste&#34;&gt;Re-reading context is the biggest token waste
&lt;/h2&gt;&lt;p&gt;The biggest waste is often not &amp;ldquo;opening one more agent.&amp;rdquo; It is having multiple agents read the same material again and again.&lt;/p&gt;
&lt;p&gt;For example, suppose a task needs to process 6 posts. If 4 agents all begin by reading the full site structure, the full skill instructions, and the full article list before handling a small slice, the parallelism becomes expensive. A better approach is for the main agent to define the boundaries first, then let each subagent read only the article directory it owns.&lt;/p&gt;
&lt;p&gt;The cheaper split usually looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;each agent owns one clear directory;&lt;/li&gt;
&lt;li&gt;the context passed to each subagent is as short as possible;&lt;/li&gt;
&lt;li&gt;multiple agents do not repeat the same exploration;&lt;/li&gt;
&lt;li&gt;the main agent performs one final review instead of asking every agent to run a full review;&lt;/li&gt;
&lt;li&gt;checks that can be scripted are handled once by scripts, not repeated by several agents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In other words, controlling subagent cost is mostly about boundaries, not just the number of agents.&lt;/p&gt;
&lt;h2 id=&#34;rough-cost-multipliers&#34;&gt;Rough cost multipliers
&lt;/h2&gt;&lt;p&gt;The following is a rough estimate. Actual usage depends on context length, file size, task complexity, and the number of agents.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Scenario&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Token increase&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;One subagent handles a small task&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;Around &lt;code&gt;1.2x - 2x&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2-4 agents handle a clearly split task in parallel&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;Around &lt;code&gt;2x - 5x&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Multiple agents each read many files and do long analysis&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;Possibly &lt;code&gt;5x+&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Main agent and subagents read the same large files repeatedly&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;The most obvious waste&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This is not an exact billing formula. It is only a practical range. Real usage also depends on whether each agent needs to read full files, perform long reasoning, or repeatedly wait for more context.&lt;/p&gt;
&lt;h2 id=&#34;how-to-write-a-more-token-efficient-subagent-task&#34;&gt;How to write a more token-efficient subagent task
&lt;/h2&gt;&lt;p&gt;The broader the instruction, the more likely the subagent is to explore on its own, which increases token usage. A better prompt defines the boundaries clearly.&lt;/p&gt;
&lt;p&gt;A good subagent task should include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which files or directories it may handle;&lt;/li&gt;
&lt;li&gt;which files are read-only and which files may be written;&lt;/li&gt;
&lt;li&gt;whether existing files may be overwritten;&lt;/li&gt;
&lt;li&gt;which fields must be preserved, such as &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;slug&lt;/code&gt;, and &lt;code&gt;aliases&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;what the final report should include;&lt;/li&gt;
&lt;li&gt;what should not be done, such as running a full build or editing unrelated files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For translation, do not just say &amp;ldquo;translate this post into multiple languages.&amp;rdquo; A more efficient instruction is: &amp;ldquo;Only process &lt;code&gt;content/post/2026/05/240&lt;/code&gt;; read &lt;code&gt;index.zh-cn.md&lt;/code&gt;; only create missing &lt;code&gt;index.en.md&lt;/code&gt;, &lt;code&gt;index.zh-tw.md&lt;/code&gt;, &lt;code&gt;index.ja.md&lt;/code&gt;, and &lt;code&gt;index.es.md&lt;/code&gt;; skip files that already exist; preserve &lt;code&gt;date&lt;/code&gt; and &lt;code&gt;slug&lt;/code&gt;.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That instruction is a little longer, but it reduces guessing and repeated exploration. It is often cheaper overall.&lt;/p&gt;
&lt;h2 id=&#34;splitting-by-file-or-directory-is-cheaper-than-splitting-by-language-or-step&#34;&gt;Splitting by file or directory is cheaper than splitting by language or step
&lt;/h2&gt;&lt;p&gt;For batch post translation, splitting by article directory is usually better than splitting by language.&lt;/p&gt;
&lt;p&gt;Suppose 6 posts each need English, Traditional Chinese, Japanese, and Spanish versions. It is usually better to let one agent handle all languages inside one article directory, rather than assigning one agent to all English files and another agent to all Japanese files.&lt;/p&gt;
&lt;p&gt;The reason is simple: front matter, code blocks, links, tables, and semantic context only need to be read once for a single post. If you split by language, several agents read the same source post repeatedly, increasing token usage.&lt;/p&gt;
&lt;p&gt;The same logic applies to code tasks. Prefer splitting by module, directory, or component rather than by steps such as &amp;ldquo;analyze first, implement second, test third.&amp;rdquo; Step-based splitting often forces every agent to reread the same context.&lt;/p&gt;
&lt;h2 id=&#34;when-it-is-worth-using-subagents&#34;&gt;When it is worth using subagents
&lt;/h2&gt;&lt;p&gt;The value of subagents mainly comes from two things: parallelism and an independent perspective.&lt;/p&gt;
&lt;p&gt;Good use cases include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;translating multiple posts in batches;&lt;/li&gt;
&lt;li&gt;editing several independent directories;&lt;/li&gt;
&lt;li&gt;splitting frontend, backend, and test work cleanly;&lt;/li&gt;
&lt;li&gt;one agent implements while another reviews risk;&lt;/li&gt;
&lt;li&gt;high-risk changes that need a second perspective.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In these cases, token usage increases, but total elapsed time may drop noticeably. Each agent can also focus on one slice of the work.&lt;/p&gt;
&lt;h2 id=&#34;when-one-review-agent-is-worth-it&#34;&gt;When one review agent is worth it
&lt;/h2&gt;&lt;p&gt;A review agent is not always worth the cost. It is most useful when the task is risky, broad in impact, or easy for the main agent to miss edge cases.&lt;/p&gt;
&lt;p&gt;Cases where a review agent is worth considering include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;changes involving login, payment, permissions, or data deletion;&lt;/li&gt;
&lt;li&gt;multilingual content that affects categories, URLs, or internal links;&lt;/li&gt;
&lt;li&gt;broad refactors that need independent regression review;&lt;/li&gt;
&lt;li&gt;user requests for code review or risk review;&lt;/li&gt;
&lt;li&gt;the main agent has implemented a change and needs a second view on edge cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cases where a review agent is not worth it are also clear: single-file edits, title tweaks, simple front matter fixes, or running one command. The main agent can usually self-check those.&lt;/p&gt;
&lt;h2 id=&#34;when-it-is-not-worth-using-subagents&#34;&gt;When it is not worth using subagents
&lt;/h2&gt;&lt;p&gt;Subagents are often not worth it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;small single-file edits;&lt;/li&gt;
&lt;li&gt;simple Q&amp;amp;A;&lt;/li&gt;
&lt;li&gt;running one command;&lt;/li&gt;
&lt;li&gt;very small changes;&lt;/li&gt;
&lt;li&gt;tasks that cannot be split clearly;&lt;/li&gt;
&lt;li&gt;tasks where the subagent must repeatedly wait for the main agent to provide context.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In these cases, using a subagent mostly adds overhead. The main agent is faster and cheaper.&lt;/p&gt;
&lt;h2 id=&#34;my-default-strategy-prioritize-token-savings-and-add-review-only-for-risk&#34;&gt;My default strategy: prioritize token savings and add review only for risk
&lt;/h2&gt;&lt;p&gt;If the goal is to save tokens, a conservative default strategy works well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Small tasks: do not use subagents.&lt;/li&gt;
&lt;li&gt;Medium tasks: do not use subagents.&lt;/li&gt;
&lt;li&gt;Large batch tasks: still avoid subagents by default unless the user explicitly wants parallel speed.&lt;/li&gt;
&lt;li&gt;High-risk tasks: consider one extra agent for review, trading tokens for stability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This strategy gives up some parallel speed, but it reduces repeated context reading and repeated reasoning.&lt;/p&gt;
&lt;p&gt;If a task is large but not high risk, I would first look for scripts, batch checks, and structured local processing. Multiple agents make more sense when the split is very clear, or when the user explicitly wants parallel speed.&lt;/p&gt;
&lt;h2 id=&#34;a-more-balanced-strategy&#34;&gt;A more balanced strategy
&lt;/h2&gt;&lt;p&gt;If you want to control cost without completely giving up parallelism, a balanced strategy is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;default to the main agent doing the work directly;&lt;/li&gt;
&lt;li&gt;consider subagents only when the task can be clearly split by file or directory;&lt;/li&gt;
&lt;li&gt;each subagent reads only the files it owns;&lt;/li&gt;
&lt;li&gt;do not let multiple agents read the same large files;&lt;/li&gt;
&lt;li&gt;the main agent performs the final review of key fields, test results, and Git diff;&lt;/li&gt;
&lt;li&gt;add one independent review agent only for high-risk tasks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This avoids parallelism for its own sake. Subagents should serve a clear speed or quality goal, not become the default action.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;Subagents and multi-agent workflows always increase token usage. One subagent may add only a little, but several agents running in parallel can multiply the cost.&lt;/p&gt;
&lt;p&gt;Whether it is worth it depends on the task. If the work can be clearly split, or if the risk is high enough to need independent review, the extra tokens may be justified. For small single-file edits, simple Q&amp;amp;A, or routine checks, it is cheaper to let the main agent handle the task directly.&lt;/p&gt;
&lt;p&gt;In one sentence: &lt;strong&gt;save tokens on small tasks, split only when the work has clear boundaries, and use extra agents for stability only when risk justifies it.&lt;/strong&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>How browser-harness domain skills keep AI agents from repeating browser automation mistakes</title>
        <link>https://knightli.com/en/2026/05/24/browser-harness-domain-skills-summary/</link>
        <pubDate>Sun, 24 May 2026 23:43:35 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/24/browser-harness-domain-skills-summary/</guid>
        <description>&lt;p&gt;The most interesting part of &lt;code&gt;browser-use/browser-harness&lt;/code&gt; is not only that it lets AI agents control real Chrome. It also turns web-operation experience into reusable &lt;code&gt;domain skills&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That matters because browser automation is rarely difficult only because of clicking buttons. Each website has its own details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which pages require login.&lt;/li&gt;
&lt;li&gt;Which data can be fetched directly through an API.&lt;/li&gt;
&lt;li&gt;Which buttons do not respond to normal DOM clicks.&lt;/li&gt;
&lt;li&gt;Which iframes, shadow DOM components, or popups block the flow.&lt;/li&gt;
&lt;li&gt;Which selectors are stable and which are temporary classes.&lt;/li&gt;
&lt;li&gt;Which actions involve accounts, payments, or irreversible changes and require human confirmation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If this experience only stays in one task log, the agent will hit the same problems again next time. &lt;code&gt;domain skills&lt;/code&gt; are meant to preserve that experience so the agent does not start from zero every time it opens a site.&lt;/p&gt;
&lt;h2 id=&#34;what-domain-skills-are&#34;&gt;What domain skills are
&lt;/h2&gt;&lt;p&gt;You can think of &lt;code&gt;domain skills&lt;/code&gt; as site-operation manuals for agents.&lt;/p&gt;
&lt;p&gt;They are not ordinary user documentation, and they are not one-off scripts. They are closer to field-tested site knowledge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Whether the site is suitable for browser automation.&lt;/li&gt;
&lt;li&gt;Which API should be used first if an API exists.&lt;/li&gt;
&lt;li&gt;Which URL should be used when the browser is necessary.&lt;/li&gt;
&lt;li&gt;Which DOM structures, aria-labels, and button behaviors have been verified.&lt;/li&gt;
&lt;li&gt;Which common approaches fail.&lt;/li&gt;
&lt;li&gt;Which scenarios should stop and ask for human intervention.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This content can be reviewed by humans and read by agents during tasks. It turns on-the-spot exploration into maintainable experience.&lt;/p&gt;
&lt;h2 id=&#34;they-are-not-about-blind-clicking&#34;&gt;They are not about blind clicking
&lt;/h2&gt;&lt;p&gt;A good browser agent should not turn every problem into opening a webpage, looking at screenshots, and clicking buttons.&lt;/p&gt;
&lt;p&gt;One important kind of experience in &lt;code&gt;domain skills&lt;/code&gt; tells the agent when not to use the browser.&lt;/p&gt;
&lt;p&gt;For sites such as ArXiv, paper search, metadata, and abstracts can be fetched directly through the Atom API or HTML meta tags. HTTP requests are usually faster, more stable, and easier to parse than opening a browser.&lt;/p&gt;
&lt;p&gt;GitHub follows a similar pattern. Repository, user, and release data should use the REST API first. File contents should use &lt;code&gt;raw.githubusercontent.com&lt;/code&gt; first. Only pages such as GitHub Trending, which do not have an equivalent API, need browser interaction.&lt;/p&gt;
&lt;p&gt;This shows that browser-harness is not based on “the browser solves everything.” It puts the browser in the right place: when APIs, HTTP, and static pages cannot solve the problem, let the agent operate a real page.&lt;/p&gt;
&lt;h2 id=&#34;they-store-site-level-knowledge&#34;&gt;They store site-level knowledge
&lt;/h2&gt;&lt;p&gt;Traditional automation scripts are usually written around one task, for example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Open page -&amp;gt; enter keyword -&amp;gt; click button -&amp;gt; download file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;That script may complete the task, but the experience is scattered inside code. When the site changes, the script may fail. When the task changes, much of the experience may not be reusable.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;domain skills&lt;/code&gt; are closer to a site-level knowledge base. They care about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which container selector is stable in Amazon search results.&lt;/li&gt;
&lt;li&gt;Which GitHub data should go through the REST API.&lt;/li&gt;
&lt;li&gt;How LinkedIn invitation buttons differ in &lt;code&gt;aria-label&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Which Shopify Admin pages are embedded apps.&lt;/li&gt;
&lt;li&gt;Why Shopify Polaris inputs cannot always be filled with normal JS &lt;code&gt;value&lt;/code&gt; assignment.&lt;/li&gt;
&lt;li&gt;How Browser Use Cloud browser instances are created, listed, and cleaned up.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not steps for one task. They are decision-making knowledge that many future tasks can reuse.&lt;/p&gt;
&lt;h2 id=&#34;example-amazon-product-search&#34;&gt;Example: Amazon product search
&lt;/h2&gt;&lt;p&gt;For Amazon product search, the important part is not only how to search, but which path is more stable.&lt;/p&gt;
&lt;p&gt;A more reliable approach is to use a direct search URL instead of opening the homepage and simulating typing every time. Search results can be extracted from a container such as &lt;code&gt;[data-component-type=&amp;quot;s-search-result&amp;quot;]&lt;/code&gt;. Field extraction also has details: title, price, rating, review count, and sponsored status each have more stable DOM sources.&lt;/p&gt;
&lt;p&gt;This kind of experience is valuable for an agent. Without it, the agent may guess buttons from screenshots and repeatedly try selectors. With it, the agent can go directly to a more stable extraction path.&lt;/p&gt;
&lt;p&gt;More importantly, a skill can record traps. For example, some selectors that look usable may misread sponsored results or cross-sell areas. You only learn that from field testing.&lt;/p&gt;
&lt;h2 id=&#34;example-linkedin-invitation-management&#34;&gt;Example: LinkedIn invitation management
&lt;/h2&gt;&lt;p&gt;LinkedIn is closer to a real account workflow, and the risk is higher.&lt;/p&gt;
&lt;p&gt;On the invitation manager page, the Accept and Ignore buttons use different &lt;code&gt;aria-label&lt;/code&gt; formats. You cannot simply derive one from the other. Some invitation cards even render Accept as an &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; element rather than a &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;, and ordinary CDP clicks may not trigger the accept action.&lt;/p&gt;
&lt;p&gt;This shows that real web automation does not end when an element is located. Button labels, event binding, soft navigation, and component implementation all affect whether an action really works.&lt;/p&gt;
&lt;p&gt;For an agent, this experience also has a safety meaning. Operations involving social accounts, invitations, messages, and posting should not be fully delegated. A skill can record the path and traps, but accepting invitations in bulk, sending content externally, or changing account details should keep human confirmation.&lt;/p&gt;
&lt;h2 id=&#34;example-shopify-admin&#34;&gt;Example: Shopify Admin
&lt;/h2&gt;&lt;p&gt;Shopify Admin shows another issue: backend systems are often not one page, but a combination of embedded apps and complex components.&lt;/p&gt;
&lt;p&gt;Many Shopify apps run inside iframes. Polaris React inputs, Web Components, and embedded apps all behave differently. Some inputs cannot be filled with &lt;code&gt;element.value = ...&lt;/code&gt;; they need CDP keystrokes that are closer to real keyboard input.&lt;/p&gt;
&lt;p&gt;The value of this kind of skill is that it lets the agent first identify what kind of UI it is looking at, then choose the right operation method.&lt;/p&gt;
&lt;p&gt;Shopify experience also emphasizes “do not use the browser if you do not have to”:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For read-only product and inventory data, use the Storefront API first.&lt;/li&gt;
&lt;li&gt;If an Admin API token exists, use the Admin API first.&lt;/li&gt;
&lt;li&gt;For theme code editing, use Shopify CLI first.&lt;/li&gt;
&lt;li&gt;Use the browser only when there is no API, the change is rare, or you are exploring the admin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a mature tool-selection logic for agents.&lt;/p&gt;
&lt;h2 id=&#34;example-browser-use-cloud&#34;&gt;Example: Browser Use Cloud
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;domain skills&lt;/code&gt; do not only serve webpage clicking. They can also record API experience around browser runtimes.&lt;/p&gt;
&lt;p&gt;Browser Use Cloud experience can record how to create cloud browsers through REST APIs, list running browsers, clean up zombie browsers, and obtain &lt;code&gt;liveUrl&lt;/code&gt; and &lt;code&gt;cdpUrl&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This means a skill is not limited to “how to click a button.” Any recurring task with a stable method can become a skill:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API call patterns.&lt;/li&gt;
&lt;li&gt;Authentication header format.&lt;/li&gt;
&lt;li&gt;Request and response structure.&lt;/li&gt;
&lt;li&gt;Verified status codes.&lt;/li&gt;
&lt;li&gt;Common failure modes.&lt;/li&gt;
&lt;li&gt;Resource cleanup and recycling methods.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For agents, all of these are reusable capabilities.&lt;/p&gt;
&lt;h2 id=&#34;why-this-is-more-reliable-than-ad-hoc-reasoning&#34;&gt;Why this is more reliable than ad-hoc reasoning
&lt;/h2&gt;&lt;p&gt;Many people expect a large model to understand the webpage by itself every time. In real tasks, relying only on ad-hoc reasoning is unstable.&lt;/p&gt;
&lt;p&gt;The reasons are simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web UI changes often.&lt;/li&gt;
&lt;li&gt;The same button may have multiple implementations.&lt;/li&gt;
&lt;li&gt;Visible does not mean clickable.&lt;/li&gt;
&lt;li&gt;Clickable does not mean the action really worked.&lt;/li&gt;
&lt;li&gt;Some tasks should use APIs instead of browsers.&lt;/li&gt;
&lt;li&gt;Some operations require human confirmation and should not be decided by the model alone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Writing these experiences into files brings several benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Humans can review them.&lt;/li&gt;
&lt;li&gt;Wrong experience can be corrected.&lt;/li&gt;
&lt;li&gt;Site knowledge can accumulate over time.&lt;/li&gt;
&lt;li&gt;New agents can inherit old experience.&lt;/li&gt;
&lt;li&gt;Temporary task discoveries can become long-term knowledge.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is more stable than putting everything into a prompt or chat context.&lt;/p&gt;
&lt;h2 id=&#34;how-teams-can-use-it&#34;&gt;How teams can use it
&lt;/h2&gt;&lt;p&gt;In a team, &lt;code&gt;domain skills&lt;/code&gt; can become a lightweight automation knowledge base.&lt;/p&gt;
&lt;p&gt;Useful content to record includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Post-login paths in internal systems.&lt;/li&gt;
&lt;li&gt;Report export flows.&lt;/li&gt;
&lt;li&gt;Common popup handling.&lt;/li&gt;
&lt;li&gt;Which buttons require human confirmation.&lt;/li&gt;
&lt;li&gt;Which pages have API alternatives.&lt;/li&gt;
&lt;li&gt;Which selectors were tested and found reliable.&lt;/li&gt;
&lt;li&gt;Which tasks agents are not allowed to run automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This knowledge does not need to be complete at the beginning. A practical path is to start with low-risk, frequent, reversible workflows: read-only tasks, downloads, organization, and checks. Once the flow is stable, turn the experience into a skill.&lt;/p&gt;
&lt;p&gt;For team managers, skill files also make automation boundaries visible. You can inspect what the agent knows, what it can do, and where it should stop.&lt;/p&gt;
&lt;h2 id=&#34;boundaries-to-keep&#34;&gt;Boundaries to keep
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;domain skills&lt;/code&gt; can improve an agent’s success rate, but they should not fully automate high-risk operations.&lt;/p&gt;
&lt;p&gt;Several boundaries matter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do not record passwords, Cookie, token, customer data, or sensitive internal URLs.&lt;/li&gt;
&lt;li&gt;Keep human confirmation for payments, deletion, bulk submission, account changes, and external publishing.&lt;/li&gt;
&lt;li&gt;Record verification date and scope.&lt;/li&gt;
&lt;li&gt;Allow skills to expire after site changes and require revalidation.&lt;/li&gt;
&lt;li&gt;Do not make bypassing risk controls or platform limits a goal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In other words, domain skills make agents steadier. They do not give agents unlimited permission.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;The &lt;code&gt;domain skills&lt;/code&gt; mechanism in browser-harness shows one thing: AI browser automation cannot rely only on the model improvising at runtime.&lt;/p&gt;
&lt;p&gt;A usable browser agent needs at least three layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Low-level control: screenshots, clicks, input, downloads, CDP, HTTP.&lt;/li&gt;
&lt;li&gt;Site-level knowledge: API priority, stable selectors, component traps, login boundaries.&lt;/li&gt;
&lt;li&gt;Human safety rules: do not give credentials to the model, confirm high-risk actions, and do not write sensitive information into skills.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;domain skills&lt;/code&gt; fill the second layer. They let an agent enter a web task with verified experience instead of rediscovering everything every time.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;browser-harness domain skills: &lt;a class=&#34;link&#34; href=&#34;https://github.com/browser-use/browser-harness/tree/main/agent-workspace/domain-skills&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/browser-use/browser-harness/tree/main/agent-workspace/domain-skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Amazon product-search skill: &lt;a class=&#34;link&#34; href=&#34;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/amazon/product-search.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/amazon/product-search.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ArXiv scraping skill: &lt;a class=&#34;link&#34; href=&#34;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/arxiv/scraping.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/arxiv/scraping.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub scraping skill: &lt;a class=&#34;link&#34; href=&#34;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/github/scraping.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/github/scraping.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LinkedIn invitation-manager skill: &lt;a class=&#34;link&#34; href=&#34;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/linkedin/invitation-manager.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/linkedin/invitation-manager.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shopify admin skill: &lt;a class=&#34;link&#34; href=&#34;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/shopify-admin/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/shopify-admin/README.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Browser Use Cloud skill: &lt;a class=&#34;link&#34; href=&#34;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/browser-use-cloud/cloud.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/browser-use/browser-harness/blob/main/agent-workspace/domain-skills/browser-use-cloud/cloud.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Claude-Mem: Adding Cross-Session Long-Term Memory to Claude Code</title>
        <link>https://knightli.com/en/2026/05/01/claude-mem-persistent-memory-for-claude-code/</link>
        <pubDate>Fri, 01 May 2026 03:01:02 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/01/claude-mem-persistent-memory-for-claude-code/</guid>
        <description>&lt;p&gt;&lt;code&gt;Claude-Mem&lt;/code&gt; is a persistent memory system for &lt;code&gt;Claude Code&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It tries to solve a very specific problem: every time an AI coding assistant starts a new session, it often forgets earlier architecture decisions, past pitfalls, project preferences, and implementation context.&lt;br&gt;
If a project lasts for a long time, repeatedly explaining the same background becomes a waste of time.&lt;/p&gt;
&lt;p&gt;The idea behind &lt;code&gt;Claude-Mem&lt;/code&gt; is to compress Claude Code conversations into memories, store them in a local database and vector store, and then retrieve them later through a search tool.&lt;/p&gt;
&lt;h2 id=&#34;what-problem-does-it-solve&#34;&gt;What Problem Does It Solve?
&lt;/h2&gt;&lt;p&gt;Claude Code is good at code tasks, but session context is still limited.&lt;/p&gt;
&lt;p&gt;Common pain points include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new session does not know what previous sessions did&lt;/li&gt;
&lt;li&gt;Project design decisions need to be explained repeatedly&lt;/li&gt;
&lt;li&gt;Problems that were already debugged are easy to repeat&lt;/li&gt;
&lt;li&gt;Long-running tasks lack continuity&lt;/li&gt;
&lt;li&gt;Project knowledge is hard to accumulate across conversations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Claude-Mem&lt;/code&gt; is designed around these problems.&lt;/p&gt;
&lt;p&gt;It is not simply saving chat logs. Instead, it compresses conversations into memory fragments that are easier to retrieve. When needed later, semantic search can bring the relevant context back.&lt;/p&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works
&lt;/h2&gt;&lt;p&gt;From the README design, &lt;code&gt;Claude-Mem&lt;/code&gt; mainly consists of several parts.&lt;/p&gt;
&lt;p&gt;The first part is hooks.&lt;/p&gt;
&lt;p&gt;It integrates with the Claude Code session flow and captures conversation data at the right time.&lt;/p&gt;
&lt;p&gt;The second part is a background worker.&lt;/p&gt;
&lt;p&gt;The worker processes raw conversation content into shorter, more searchable memories.&lt;/p&gt;
&lt;p&gt;The third part is local storage.&lt;/p&gt;
&lt;p&gt;The project uses &lt;code&gt;SQLite&lt;/code&gt; for structured metadata and &lt;code&gt;Chroma&lt;/code&gt; for vector indexing. This preserves basic session information while supporting semantic retrieval.&lt;/p&gt;
&lt;p&gt;The fourth part is &lt;code&gt;mem-search&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is the query entry point for Claude Code. When old context is needed, it can search relevant memories through this tool.&lt;/p&gt;
&lt;p&gt;The overall flow can be understood like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Claude Code sessions generate content&lt;/li&gt;
&lt;li&gt;Hooks capture session data&lt;/li&gt;
&lt;li&gt;The worker asynchronously compresses and organizes it&lt;/li&gt;
&lt;li&gt;Memories are written to SQLite and Chroma&lt;/li&gt;
&lt;li&gt;Later sessions retrieve them through &lt;code&gt;mem-search&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;when-is-it-useful&#34;&gt;When Is It Useful?
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Claude-Mem&lt;/code&gt; is suitable for long-running projects, not one-off small tasks.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A repository is developed over many days&lt;/li&gt;
&lt;li&gt;The code structure is complex and has a lot of background&lt;/li&gt;
&lt;li&gt;Project conventions, naming habits, and architecture choices need to be remembered&lt;/li&gt;
&lt;li&gt;Claude Code is often used for bug fixes, features, and documentation&lt;/li&gt;
&lt;li&gt;You want the AI to remember why something was changed earlier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only ask Claude Code to make a one-line change, long-term memory is not very meaningful.&lt;br&gt;
But if you treat Claude Code as a long-term collaborator, it becomes useful.&lt;/p&gt;
&lt;h2 id=&#34;installation-and-startup&#34;&gt;Installation and Startup
&lt;/h2&gt;&lt;p&gt;The README gives a direct installation flow:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g claude-mem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-mem install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Start it with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-mem start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Check status:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-mem status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Stop it when needed:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-mem stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The goal behind these commands is to connect the memory system as a long-running local service to the Claude Code workflow.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use-mem-search&#34;&gt;How to Use &lt;code&gt;mem-search&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;mem-search&lt;/code&gt; is the key entry point for retrieving memory.&lt;/p&gt;
&lt;p&gt;It is not meant to replace ordinary search. It lets Claude Code query past conversations by meaning.&lt;/p&gt;
&lt;p&gt;For example, Claude Code can search for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why a module was designed in a certain way&lt;/li&gt;
&lt;li&gt;How a bug was debugged earlier&lt;/li&gt;
&lt;li&gt;Naming rules agreed on in the project&lt;/li&gt;
&lt;li&gt;Technical trade-offs discussed before&lt;/li&gt;
&lt;li&gt;The background behind a refactor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is different from simple keyword search.&lt;br&gt;
If memory compression and vector indexing work well, you can retrieve semantically related content even if you do not remember the exact wording.&lt;/p&gt;
&lt;h2 id=&#34;how-is-it-different-from-project-documentation&#34;&gt;How Is It Different from Project Documentation?
&lt;/h2&gt;&lt;p&gt;Project documentation is good for stable conclusions.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Architecture notes&lt;/li&gt;
&lt;li&gt;Deployment procedures&lt;/li&gt;
&lt;li&gt;API conventions&lt;/li&gt;
&lt;li&gt;Database structure&lt;/li&gt;
&lt;li&gt;Development rules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Claude-Mem&lt;/code&gt; is better for context created during conversations.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why a plan was rejected&lt;/li&gt;
&lt;li&gt;How a temporary issue was worked around&lt;/li&gt;
&lt;li&gt;The discussion behind an implementation&lt;/li&gt;
&lt;li&gt;Project preferences not yet written into docs&lt;/li&gt;
&lt;li&gt;Task background accumulated across multiple conversations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The two are not replacements for each other.&lt;br&gt;
A good workflow is to write stable knowledge into project docs and use the memory system to help retrieve conversational context.&lt;/p&gt;
&lt;h2 id=&#34;things-to-watch-out-for&#34;&gt;Things to Watch Out For
&lt;/h2&gt;&lt;p&gt;First, more long-term memory is not always better.&lt;/p&gt;
&lt;p&gt;If every conversation is saved without distinction, later retrieval can become noisy. The most valuable memories are project decisions, implementation background, debugging history, and long-term preferences.&lt;/p&gt;
&lt;p&gt;Second, memory cannot replace code and documentation.&lt;/p&gt;
&lt;p&gt;Old context found by AI is only a reference. Final judgment still depends on the current code, test results, and latest requirements.&lt;/p&gt;
&lt;p&gt;Third, pay attention to privacy and local data.&lt;/p&gt;
&lt;p&gt;Since it stores conversation content, you should know which projects are suitable for it and which sensitive information should not enter the conversation.&lt;/p&gt;
&lt;p&gt;Fourth, memory systems need maintenance.&lt;/p&gt;
&lt;p&gt;As a project moves forward, old memories may become outdated. If outdated context is reused incorrectly, it can mislead later tasks.&lt;/p&gt;
&lt;h2 id=&#34;why-this-kind-of-tool-matters&#34;&gt;Why This Kind of Tool Matters
&lt;/h2&gt;&lt;p&gt;AI coding tools are moving from one-off Q&amp;amp;A toward long-term collaboration.&lt;/p&gt;
&lt;p&gt;In one-off Q&amp;amp;A, the model only needs to answer the current question.&lt;br&gt;
In long-term collaboration, it needs to know project history, earlier decisions, team preferences, and pitfalls that have already been found.&lt;/p&gt;
&lt;p&gt;This is where tools like &lt;code&gt;Claude-Mem&lt;/code&gt; matter: they turn &amp;ldquo;remembering context&amp;rdquo; from a temporary chat capability into a local system that can be installed, run, and searched.&lt;/p&gt;
&lt;p&gt;For real engineering projects, this is more practical than simply making the model context window longer.&lt;br&gt;
Much information does not need to be stuffed into context all at once; it needs to be retrieved at the right time.&lt;/p&gt;
&lt;h2 id=&#34;who-should-try-it&#34;&gt;Who Should Try It?
&lt;/h2&gt;&lt;p&gt;You may want to try it if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You use Claude Code frequently&lt;/li&gt;
&lt;li&gt;You often work on the same project across multiple days&lt;/li&gt;
&lt;li&gt;The project context is complex&lt;/li&gt;
&lt;li&gt;You repeatedly explain the same background to AI&lt;/li&gt;
&lt;li&gt;You want to preserve experience from conversations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only use Claude Code occasionally, or the project is small, you may not need this kind of system yet.&lt;/p&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/thedotmack/claude-mem&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;thedotmack/claude-mem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;final-thought&#34;&gt;Final Thought
&lt;/h2&gt;&lt;p&gt;The point of &lt;code&gt;Claude-Mem&lt;/code&gt; is not &amp;ldquo;saving chat logs.&amp;rdquo; It is helping Claude Code retrieve useful context in later tasks.&lt;/p&gt;
&lt;p&gt;As AI coding moves from one-off tasks to long-running project collaboration, memory systems will become increasingly important.&lt;br&gt;
They cannot replace documentation and tests, but they can reduce repeated explanations and make the AI feel more like an assistant that understands project history.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Codex Is Starting to Control the Computer. What Does That Mean for the Future?</title>
        <link>https://knightli.com/en/2026/04/29/codex-computer-use-update/</link>
        <pubDate>Wed, 29 Apr 2026 11:28:25 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/04/29/codex-computer-use-update/</guid>
        <description>&lt;p&gt;The most important part of this Codex update is not that it added another ordinary button. It is that Codex is starting to move toward &amp;ldquo;controlling the computer.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;In the past, using AI usually meant asking questions in a chat box, copying, pasting, and then manually operating software.&lt;br&gt;
Now that boundary is expanding: AI does not just answer you. It can operate desktop applications according to your goal.&lt;/p&gt;
&lt;p&gt;In the short term, this is a new feature. In the long term, it may change how many people use computers.&lt;/p&gt;
&lt;h2 id=&#34;what-this-feature-is&#34;&gt;What This Feature Is
&lt;/h2&gt;&lt;p&gt;Simply put, Codex&amp;rsquo;s computer use capability lets it access and operate the desktop environment.&lt;/p&gt;
&lt;p&gt;It can do things such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;select and control an application&lt;/li&gt;
&lt;li&gt;receive tasks in natural language&lt;/li&gt;
&lt;li&gt;open browsers, AI tools, local files, or other software&lt;/li&gt;
&lt;li&gt;enter text, click buttons, and wait for results&lt;/li&gt;
&lt;li&gt;connect multiple steps into one task&lt;/li&gt;
&lt;li&gt;keep running in the background without requiring the user to follow every step manually&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Its role is not just to write a piece of text for you, but to complete an operation flow for you.&lt;/p&gt;
&lt;p&gt;That is the key difference between an Agent and an ordinary chatbot:&lt;br&gt;
a chatbot mainly gives answers; an Agent is closer to &amp;ldquo;receiving a goal and then executing it.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;why-this-matters&#34;&gt;Why This Matters
&lt;/h2&gt;&lt;p&gt;In the past, much automation required you to know how to write scripts.&lt;/p&gt;
&lt;p&gt;For example, suppose you want to complete a cross-software workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;open a web page&lt;/li&gt;
&lt;li&gt;find information&lt;/li&gt;
&lt;li&gt;copy content&lt;/li&gt;
&lt;li&gt;pass it to another AI tool&lt;/li&gt;
&lt;li&gt;save a file&lt;/li&gt;
&lt;li&gt;open the local directory and check the result&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To automate this traditionally, you might need browser scripts, APIs, local programs, and even window automation.&lt;/p&gt;
&lt;p&gt;But many ordinary users do not know how to write these things.&lt;br&gt;
Even if they do, it may not be worth writing a script for a temporary task.&lt;/p&gt;
&lt;p&gt;This is where computer use matters: it pushes &amp;ldquo;script-like capability&amp;rdquo; toward natural language.&lt;/p&gt;
&lt;p&gt;You do not necessarily need to tell it exactly where to click.&lt;br&gt;
You can tell it what result you want and let it try to complete the task.&lt;/p&gt;
&lt;h2 id=&#34;workflows-it-may-change&#34;&gt;Workflows It May Change
&lt;/h2&gt;&lt;p&gt;I think the first workflows to change will not be extremely serious or high-risk work, but the tasks that are annoying, fragmented, repetitive, and not worth writing a dedicated program for.&lt;/p&gt;
&lt;h3 id=&#34;1-moving-information-across-software&#34;&gt;1. Moving Information Across Software
&lt;/h3&gt;&lt;p&gt;The most typical case is moving information between applications.&lt;/p&gt;
&lt;p&gt;Previously, you might switch back and forth between a browser, a document, a chat window, and a local folder.&lt;br&gt;
In the future, you can hand this kind of task to an Agent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;find a certain kind of information&lt;/li&gt;
&lt;li&gt;summarize it into a document&lt;/li&gt;
&lt;li&gt;save it to a specified directory&lt;/li&gt;
&lt;li&gt;open the result for you to review&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This work is not hard, but it consumes attention.&lt;br&gt;
The value of an Agent is that it absorbs these small operations.&lt;/p&gt;
&lt;h3 id=&#34;2-coordination-between-multiple-ai-tools&#34;&gt;2. Coordination Between Multiple AI Tools
&lt;/h3&gt;&lt;p&gt;Many people&amp;rsquo;s real workflow is no longer based on a single AI tool.&lt;/p&gt;
&lt;p&gt;It may look like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one tool writes code&lt;/li&gt;
&lt;li&gt;one tool researches information&lt;/li&gt;
&lt;li&gt;one tool generates images&lt;/li&gt;
&lt;li&gt;one tool organizes documents&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Previously, these tools were connected by manual copy and paste.&lt;br&gt;
In the future, an Agent can become the middle layer: it opens tools, passes context, waits for output, and organizes results.&lt;/p&gt;
&lt;p&gt;This can turn &amp;ldquo;multiple AI tools working together&amp;rdquo; from a manual process into a semi-automated process.&lt;/p&gt;
&lt;h3 id=&#34;3-office-software-automation&#34;&gt;3. Office Software Automation
&lt;/h3&gt;&lt;p&gt;Spreadsheets, presentations, documents, and email share one trait: they are powerful, but many operations are fragmented.&lt;/p&gt;
&lt;p&gt;If Agents can reliably control this software, the barrier to office automation will drop noticeably.&lt;/p&gt;
&lt;p&gt;You do not need to remember where a menu is or learn complicated shortcuts.&lt;br&gt;
You only need to describe the goal, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;turn this spreadsheet into a monthly report&lt;/li&gt;
&lt;li&gt;make a one-page summary from this document&lt;/li&gt;
&lt;li&gt;combine these materials into a clearly structured explanation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The tedious button operations will gradually be hidden behind natural language.&lt;/p&gt;
&lt;h2 id=&#34;what-it-means-for-ordinary-users&#34;&gt;What It Means for Ordinary Users
&lt;/h2&gt;&lt;p&gt;For ordinary users, this kind of feature may have a more direct impact than &amp;ldquo;the model got a bit smarter.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Because it lowers the operation barrier, not just the knowledge barrier.&lt;/p&gt;
&lt;p&gt;Many people can describe what they want, but they do not know where to click or how to combine features inside software.&lt;br&gt;
If Agents can take over this part, using a computer may become:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I describe the goal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Agent operates the software
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I check the result
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;That is closer to real productivity than simple chat.&lt;/p&gt;
&lt;h2 id=&#34;its-impact-on-software&#34;&gt;Its Impact on Software
&lt;/h2&gt;&lt;p&gt;If this kind of Agent capability continues to mature, software itself will also be affected.&lt;/p&gt;
&lt;p&gt;In the past, software design mainly served human clicking.&lt;br&gt;
In the future, software may also need to serve Agent operation.&lt;/p&gt;
&lt;p&gt;This means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;interface elements need to be clearer&lt;/li&gt;
&lt;li&gt;operation feedback needs to be more stable&lt;/li&gt;
&lt;li&gt;local permissions need to be more granular&lt;/li&gt;
&lt;li&gt;software may provide interfaces better suited for Agent calls&lt;/li&gt;
&lt;li&gt;users may care more about whether software can be operated smoothly by AI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the long run, the boundaries between applications may become thinner.&lt;br&gt;
Users may care less about &amp;ldquo;which app should I open&amp;rdquo; and more about &amp;ldquo;what task do I want to complete.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;do-not-overhype-it-yet&#34;&gt;Do Not Overhype It Yet
&lt;/h2&gt;&lt;p&gt;Of course, it is not time to fully let go yet.&lt;/p&gt;
&lt;p&gt;This kind of capability still has several clear limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;stability still needs observation&lt;/li&gt;
&lt;li&gt;complex tasks may fail in the middle&lt;/li&gt;
&lt;li&gt;permission boundaries must be handled carefully&lt;/li&gt;
&lt;li&gt;account, payment, and file deletion operations should not be delegated casually&lt;/li&gt;
&lt;li&gt;quota consumption is not something you can completely ignore&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So at this stage, the best use case is not letting it take over the whole computer, but letting it handle low-risk, reviewable, step-heavy tasks.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;organizing materials&lt;/li&gt;
&lt;li&gt;generating drafts&lt;/li&gt;
&lt;li&gt;moving content across tools&lt;/li&gt;
&lt;li&gt;opening and checking files&lt;/li&gt;
&lt;li&gt;running semi-automated workflows that can be reviewed by a human&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;one-last-line&#34;&gt;One Last Line
&lt;/h2&gt;&lt;p&gt;The real importance of this Codex update is that it pushes AI from &amp;ldquo;answering questions&amp;rdquo; toward &amp;ldquo;operating the environment.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;In the short term, it is a computer use feature.&lt;br&gt;
In the long term, it may mark a shift in how personal computers are used.&lt;/p&gt;
&lt;p&gt;In the future, we may spend less time remembering buttons, finding menus, and switching windows.&lt;br&gt;
More often, we will describe the goal, let an Agent execute it, and then let humans make the final judgment.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>What Is the Difference Between ~/.codex/skills and Project .codex/skills in Codex</title>
        <link>https://knightli.com/en/2026/04/29/difference-between-global-and-project-codex-skills/</link>
        <pubDate>Wed, 29 Apr 2026 11:08:00 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/04/29/difference-between-global-and-project-codex-skills/</guid>
        <description>&lt;p&gt;When organizing Codex skills, people most often get stuck on two questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What is the difference between &lt;code&gt;~/.codex/skills&lt;/code&gt; and &lt;code&gt;project/.codex/skills&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Why does a skill exist in the directory but not appear in the current session?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is the short version.&lt;/p&gt;
&lt;h2 id=&#34;the-difference&#34;&gt;The Difference
&lt;/h2&gt;&lt;p&gt;The simplest way to remember it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.codex/skills&lt;/code&gt; is your global skill library&lt;/li&gt;
&lt;li&gt;&lt;code&gt;project/.codex/skills&lt;/code&gt; is the local skill library for that repository&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;codexskills&#34;&gt;&lt;code&gt;~/.codex/skills&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Use it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;skills you personally reuse across projects&lt;/li&gt;
&lt;li&gt;general workflows that are not tied to a specific repository&lt;/li&gt;
&lt;li&gt;workflows that clearly belong to your own habits&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;post-rewrite&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;post-translate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git-commit-push&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo-rsync-deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bilibili-speech-transcriber&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The key trait of this kind of skill is: &lt;strong&gt;it still makes sense outside the current project.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;projectcodexskills&#34;&gt;&lt;code&gt;project/.codex/skills&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Use it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;workflows that only apply to this repository&lt;/li&gt;
&lt;li&gt;rules tightly coupled to the current project structure, scripts, or templates&lt;/li&gt;
&lt;li&gt;skills that should be shared by the team&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a publishing workflow specific to this repository&lt;/li&gt;
&lt;li&gt;a generation template that only works in this project&lt;/li&gt;
&lt;li&gt;automation steps tightly bound to private project scripts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The key trait of this kind of skill is: &lt;strong&gt;it stops being meaningful once it leaves this repository.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;when-to-use-global-and-when-to-use-project-skills&#34;&gt;When to Use Global and When to Use Project Skills
&lt;/h2&gt;&lt;p&gt;This rule of thumb is enough:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If it is about your personal habits, put it in &lt;code&gt;~/.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If it is about repository rules, put it in &lt;code&gt;project/.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If it can be reused across projects, prefer global&lt;/li&gt;
&lt;li&gt;If it should be shared by multiple people and evolve with the repository, prefer project-level&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;the-current-repository&#34;&gt;The Current Repository
&lt;/h2&gt;&lt;p&gt;Based on the current state:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;your machine has &lt;code&gt;~/.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;this repository does not have &lt;code&gt;.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So right now, you mainly rely on global skills.&lt;/p&gt;
&lt;p&gt;That means workflows such as &lt;code&gt;post-rewrite&lt;/code&gt;, &lt;code&gt;post-translate&lt;/code&gt;, and &lt;code&gt;git-commit-push&lt;/code&gt; are currently more like part of your personal workflow, not something explicitly bundled with this repository.&lt;/p&gt;
&lt;h2 id=&#34;why-a-skill-exists-on-disk-but-may-not-appear-in-the-current-session&#34;&gt;Why a Skill Exists on Disk but May Not Appear in the Current Session
&lt;/h2&gt;&lt;p&gt;There are two different things here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Existing on disk&lt;/strong&gt;: the skill file exists in a local directory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exposed to the session&lt;/strong&gt;: the current session registered it into the available skill list&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not the same thing.&lt;/p&gt;
&lt;p&gt;So this can happen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a skill already exists under &lt;code&gt;~/.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;but it does not appear in the list after &lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This usually does not mean the skill is broken. More often, it means: &lt;strong&gt;the current session has not re-indexed it.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;how-to-make-a-skill-available-in-the-current-session&#34;&gt;How to Make a Skill Available in the Current Session
&lt;/h2&gt;&lt;p&gt;The practical checklist is short.&lt;/p&gt;
&lt;h3 id=&#34;1-put-it-in-the-right-directory&#34;&gt;1. Put It in the Right Directory
&lt;/h3&gt;&lt;p&gt;Global:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/skills/&amp;lt;skill-name&amp;gt;/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Project-level:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;project/.codex/skills/&amp;lt;skill-name&amp;gt;/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2-make-the-skillmd-header-recognizable&#34;&gt;2. Make the &lt;code&gt;SKILL.md&lt;/code&gt; Header Recognizable
&lt;/h3&gt;&lt;p&gt;At minimum, it needs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-md&#34; data-lang=&#34;md&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name: your-skill-name
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;description: What this skill does
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;3-open-a-new-session-after-creating-or-editing-it&#34;&gt;3. Open a New Session After Creating or Editing It
&lt;/h3&gt;&lt;p&gt;In many cases, a skill does not appear because the current session already fixed its available skill list when it started.&lt;/p&gt;
&lt;p&gt;So if you create a skill in the middle of a session, it may already exist on disk, but this session may not recognize it.&lt;/p&gt;
&lt;p&gt;The most reliable workflow is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Put the skill in place&lt;/li&gt;
&lt;li&gt;End the current session&lt;/li&gt;
&lt;li&gt;Re-enter the project&lt;/li&gt;
&lt;li&gt;Open a new session&lt;/li&gt;
&lt;li&gt;Check whether it appears under &lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;4-put-project-skills-in-place-before-starting&#34;&gt;4. Put Project Skills in Place Before Starting
&lt;/h3&gt;&lt;p&gt;If you want &lt;code&gt;project/.codex/skills&lt;/code&gt; to be recognized more reliably, put those skills into the project before entering the repository and starting the session.&lt;/p&gt;
&lt;h2 id=&#34;one-last-line&#34;&gt;One Last Line
&lt;/h2&gt;&lt;p&gt;The shortest conclusion is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.codex/skills&lt;/code&gt; is your personal skill library&lt;/li&gt;
&lt;li&gt;&lt;code&gt;project/.codex/skills&lt;/code&gt; is the repository&amp;rsquo;s local rule library&lt;/li&gt;
&lt;li&gt;a skill existing in the directory does not mean the current session will always show it&lt;/li&gt;
&lt;li&gt;the most common fix is to put it in the right directory, write a valid &lt;code&gt;SKILL.md&lt;/code&gt;, and then start a new session&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Using Agent Skills to Replace Copilot&#39;s &#39;Generate Commit Message&#39; in VS Code</title>
        <link>https://knightli.com/en/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/</link>
        <pubDate>Mon, 06 Apr 2026 13:09:49 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/</guid>
        <description>&lt;p&gt;GitHub Copilot&amp;rsquo;s &amp;ldquo;Generate Commit Message&amp;rdquo; in VS Code is very useful. Once the quota is exhausted, the reset cycle can feel long.
This post is a practical attempt to replace that feature with local Agent Skills.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/1.png&#34;
	width=&#34;645&#34;
	height=&#34;194&#34;
	srcset=&#34;https://knightli.com/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/1_hu_6b81e604b29d8606.png 480w, https://knightli.com/2026/04/06/replace-vscode-generate-commit-message-after-copilot-quota/1_hu_5f11e2ea13cbceb8.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Generate commit message&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;332&#34;
		data-flex-basis=&#34;797px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;problem-and-goal&#34;&gt;Problem and Goal
&lt;/h2&gt;&lt;p&gt;The goal of this post is to provide a practical alternative: use &lt;code&gt;git-commit-push-zh&lt;/code&gt; skill agents to complete standardized commits and pushes.&lt;/p&gt;
&lt;h2 id=&#34;alternative-git-commit-push-zh&#34;&gt;Alternative: &lt;code&gt;git-commit-push-zh&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;This skill turns your current changes into a fixed workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Check change status.&lt;/li&gt;
&lt;li&gt;Confirm the current branch.&lt;/li&gt;
&lt;li&gt;Stage changes.&lt;/li&gt;
&lt;li&gt;Generate a Chinese commit message.&lt;/li&gt;
&lt;li&gt;Run commit.&lt;/li&gt;
&lt;li&gt;Push to the remote branch.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The corresponding commands are:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git status --short
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch --show-current
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add -A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;中文提交信息&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin &amp;lt;当前分支&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;suggested-commit-message-convention&#34;&gt;Suggested Commit Message Convention
&lt;/h2&gt;&lt;p&gt;Use this format consistently:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;类型&amp;gt;(&amp;lt;范围&amp;gt;): &amp;lt;中文摘要&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Type examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat&lt;/code&gt;: New feature&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix&lt;/code&gt;: Bug fix&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs&lt;/code&gt;: Documentation update&lt;/li&gt;
&lt;li&gt;&lt;code&gt;refactor&lt;/code&gt;: Refactoring&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chore&lt;/code&gt;: Maintenance changes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat(site): 新增全站 head 广告脚本注入&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix(i18n): 修正 relref 相关文章链接路径&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chore(content): 合并 AI 工作流分类到 AI工具&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;common-failure-scenarios&#34;&gt;Common Failure Scenarios
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nothing to commit&lt;/code&gt;: no new changes to commit; stop before pushing.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;push&lt;/code&gt; failed: check permissions, remote branch state, and conflicts first.&lt;/li&gt;
&lt;li&gt;SSH/permission issues: verify credentials and access, then retry.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;appendix-original-skillmd&#34;&gt;Appendix: Original &lt;code&gt;SKILL.md&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;The content below is the original &lt;code&gt;git-commit-push-zh&lt;/code&gt; document, preserved as-is for reuse and maintenance.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-md&#34; data-lang=&#34;md&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name: git-commit-push-zh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;description: 在当前 Git 仓库中将“当前更改”完成一次标准提交流程：检查状态、暂存变更、生成中文提交信息、执行 commit 并 push 到当前分支对应远端。用户提出“提交代码”“提交当前更改”“生成中文提交信息并推送”“git commit push 中文说明”等请求时使用。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# 中文提交并推送
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;使用此技能将当前仓库改动一次性提交并推送到远端。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 工作流程
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 查看变更状态：&lt;span class=&#34;sb&#34;&gt;`git status --short`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 确认当前分支：&lt;span class=&#34;sb&#34;&gt;`git branch --show-current`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 暂存当前变更：&lt;span class=&#34;sb&#34;&gt;`git add -A`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;4.&lt;/span&gt; 生成中文提交信息（简洁、可检索）。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;5.&lt;/span&gt; 执行提交：&lt;span class=&#34;sb&#34;&gt;`git commit -m &amp;#34;&amp;lt;中文提交信息&amp;gt;&amp;#34;`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;6.&lt;/span&gt; 执行推送：&lt;span class=&#34;sb&#34;&gt;`git push origin &amp;lt;当前分支&amp;gt;`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 提交信息规范（中文）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 建议格式：&lt;span class=&#34;sb&#34;&gt;`&amp;lt;类型&amp;gt;(&amp;lt;范围&amp;gt;): &amp;lt;中文摘要&amp;gt;`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 类型示例：&lt;span class=&#34;sb&#34;&gt;`feat`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`fix`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`chore`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`docs`&lt;/span&gt;、&lt;span class=&#34;sb&#34;&gt;`refactor`&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 摘要要求：准确描述本次改动，不写空话。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;4.&lt;/span&gt; 若仅少量变更，也保持可读性与可检索性。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;示例：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`feat(site): 新增全站 head 广告脚本注入`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`fix(i18n): 修正 relref 相关文章链接路径`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`chore(content): 合并 AI 工作流分类到 AI工具`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 错误处理
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 若无可提交变更（nothing to commit），明确告知并停止 push。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 若 push 失败，先回报关键错误（权限、远端不存在、冲突等）。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 常见 SSH/权限问题可在用户确认后重试高权限环境。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 输出约定
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; 汇报提交哈希、分支名、提交信息。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; 汇报 push 结果（成功或失败原因）。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;3.&lt;/span&gt; 仅在确有失败时提供下一步最小操作建议。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        
    </channel>
</rss>
