<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Agent Project Context</title>
    <description>The latest articles on DEV Community by Agent Project Context (agentprojectcontext).</description>
    <link>https://dev.to/agentprojectcontext</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F13570%2F023c1758-dc35-459b-a5fc-8407f902df4a.png</url>
      <title>DEV Community: Agent Project Context</title>
      <link>https://dev.to/agentprojectcontext</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agentprojectcontext"/>
    <language>en</language>
    <item>
      <title>Give APC Rules a Useful Counterexample</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Tue, 15 Sep 2026 13:07:54 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/give-apc-rules-a-useful-counterexample-3alk</link>
      <guid>https://dev.to/agentprojectcontext/give-apc-rules-a-useful-counterexample-3alk</guid>
      <description>&lt;p&gt;A project rule can be clear about its preferred behavior and still leave its boundary unclear. One small counterexample can show where the rule stops applying.&lt;/p&gt;

&lt;p&gt;My thesis: when an APC instruction is easy to overgeneralize, add a nearby case that looks similar but requires a different decision. This gives reviewers a concrete way to check the instruction's meaning.&lt;/p&gt;

&lt;p&gt;APC is the portable context layer: repository-owned guidance in &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;.apc/&lt;/code&gt;. APX is the daily-use runtime and tooling layer that works with that context. Neither distinction removes the need to write instructions that a new contributor can interpret correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show the boundary, not just the happy path
&lt;/h2&gt;

&lt;p&gt;Consider a hypothetical repository with this instruction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Every user-visible label starts with a capital letter.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An agent could reasonably apply that sentence to every string rendered on screen. That would include command names, file paths, and fragments inserted into a longer sentence. The instruction needs a sharper definition of “label.”&lt;/p&gt;

&lt;p&gt;A more useful version might say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Start interface labels with a capital letter: buttons, headings, and tabs.
Example: "Project memory".

Preserve literal commands and paths exactly.
Counterexample: displaying &lt;span class="sb"&gt;`apx restart`&lt;/span&gt; does not make it "Apx restart".

Sentence fragments follow the sentence they join.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The counterexample does useful work because it is close to the rule. Both cases involve text on screen. The difference is whether the text names an interface element or represents a literal value.&lt;/p&gt;

&lt;p&gt;This example is grounded in the APX repository's &lt;a href="https://github.com/agentprojectcontext/apx/blob/main/AGENTS.md" rel="noopener noreferrer"&gt;engineering guide&lt;/a&gt;, which distinguishes labels, sentence fragments, and data such as commands and slugs. The shortened wording above is an illustration, not a replacement for that repository's full contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a plausible mistake
&lt;/h2&gt;

&lt;p&gt;“Do not capitalize binary files” would be a weak counterexample here. It is too far from the decision an agent is likely to face.&lt;/p&gt;

&lt;p&gt;A useful counterexample has three properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It shares the feature that could trigger the rule: here, visible text.&lt;/li&gt;
&lt;li&gt;It identifies the distinguishing property: here, an exact command spelling.&lt;/li&gt;
&lt;li&gt;It states the correct action: preserve the literal value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same pattern works in other domains. A hypothetical instruction to retry read failures could distinguish a failed read from a write whose outcome is unknown. A rule to normalize display names could explicitly preserve stable identifiers. Those are writing examples; each repository must define its actual behavior and constraints.&lt;/p&gt;

&lt;p&gt;Avoid building a catalog of every possible exception. Choose the nearest misunderstanding that changes the outcome. If many exceptions are necessary, rewrite the main rule or split it into narrower rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep examples beside the instruction
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://agentprojectcontext.com/en/docs/specification/rules/" rel="noopener noreferrer"&gt;APC rules specification&lt;/a&gt; separates the root contract in &lt;code&gt;AGENTS.md&lt;/code&gt; from reusable or path-scoped guidance in &lt;code&gt;.apc/rules/&lt;/code&gt;. It also asks that rules remain concise, concrete, and reviewable.&lt;/p&gt;

&lt;p&gt;Put the boundary example next to the relevant rule, wherever that rule belongs. A counterexample buried in a separate chat will not help a reader who receives only the instruction. Duplicating it across several files creates another maintenance problem.&lt;/p&gt;

&lt;p&gt;During review, ask someone to classify two cases: one that should follow the rule and one that should not. If reasonable readers disagree, the text still needs work. This is a proposed review technique, not an APC validator or an APX feature that automatically checks prose.&lt;/p&gt;

&lt;p&gt;Executable checks remain valuable where the distinction can be tested. The written rule explains the intended boundary; a test can catch a specific violation. An example alone does not enforce anything.&lt;/p&gt;

&lt;p&gt;Portable context should carry enough meaning to survive a change of reader. Sometimes the most useful addition is one sentence showing exactly where an otherwise sensible rule stops.&lt;/p&gt;

&lt;p&gt;Explore &lt;a href="https://github.com/agentprojectcontext/agentprojectcontext" rel="noopener noreferrer"&gt;Agent Project Context on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>APX Community is now on Discord: build and orchestrate agents together</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Mon, 14 Sep 2026 17:39:10 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/apx-community-is-now-on-discord-build-and-orchestrate-agents-together-14p7</link>
      <guid>https://dev.to/agentprojectcontext/apx-community-is-now-on-discord-build-and-orchestrate-agents-together-14p7</guid>
      <description>&lt;p&gt;APX Community now has a home on Discord.&lt;/p&gt;

&lt;p&gt;APX (Agent Project eXecutable) is a local runtime, CLI, and web admin for AI agents, built on the APC protocol. It brings portable project context to life while keeping runtime sessions and private state local.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you’ll find in the community
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Help with APX setup, runtimes, engines, and the local daemon&lt;/li&gt;
&lt;li&gt;Practical MCP workflows and integrations&lt;/li&gt;
&lt;li&gt;Multi-agent patterns, experiments, and lessons learned&lt;/li&gt;
&lt;li&gt;APC discussions: portable context, agent roles, skills, and project memory&lt;/li&gt;
&lt;li&gt;Roadmap updates, release news, and community showcases&lt;/li&gt;
&lt;li&gt;Spanish and English spaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you use Codex, Claude Code, OpenCode, Aider, Gemini CLI, or local models, you’re welcome. Bring questions, show what you’re building, and help shape an open, local-first agent ecosystem.&lt;/p&gt;

&lt;p&gt;👉 Join APX Community: &lt;a href="https://discord.gg/vxdZuT5WuE" rel="noopener noreferrer"&gt;https://discord.gg/vxdZuT5WuE&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @agentprojectcontext/apx
apx setup
apx init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Learn more: &lt;a href="https://agentprojectcontext.github.io/apx/" rel="noopener noreferrer"&gt;https://agentprojectcontext.github.io/apx/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/agentprojectcontext/apx" rel="noopener noreferrer"&gt;https://github.com/agentprojectcontext/apx&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Give Temporary APC Instructions an Exit Condition</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Mon, 14 Sep 2026 12:03:42 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/give-temporary-apc-instructions-an-exit-condition-35k0</link>
      <guid>https://dev.to/agentprojectcontext/give-temporary-apc-instructions-an-exit-condition-35k0</guid>
      <description>&lt;p&gt;Temporary project instructions need an exit condition. Otherwise, an exception written for a migration can keep steering agents long after the migration ends.&lt;/p&gt;

&lt;p&gt;Imagine a repository moving from a legacy invoice parser to a replacement. During the transition, agents should keep both implementations and test their outputs against the same fixtures. Six months later, the old parser is gone, but a project instruction still says to preserve it. The instruction is readable, versioned, and wrong.&lt;/p&gt;

&lt;p&gt;APC is the portable context layer: project guidance lives in &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;.apc/&lt;/code&gt;. APX is the daily-use runtime and tooling layer that works with that context. Portability makes an instruction available across tools; it does not make yesterday's exception correct today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the condition visible
&lt;/h2&gt;

&lt;p&gt;Consider this hypothetical addition to a repository's &lt;code&gt;AGENTS.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Keep the legacy invoice parser. Run both parsers when changing invoice handling.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That leaves the next contributor guessing. Is the old parser a permanent compatibility requirement? A rollback mechanism? An unfinished experiment?&lt;/p&gt;

&lt;p&gt;A more useful instruction records the temporary boundary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;While the invoice parser migration remains open:
&lt;span class="p"&gt;-&lt;/span&gt; Keep the legacy parser available for rollback.
&lt;span class="p"&gt;-&lt;/span&gt; Compare both parsers using the committed compatibility fixtures.

Retire this instruction when the migration owner accepts the replacement
and removes the legacy rollback path. Update this section in that same PR.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second version does not automate the decision. It tells a reviewer what decision must happen before the instruction can disappear. The fixture names, owner, and acceptance record would need real project-specific references in an actual repository.&lt;/p&gt;

&lt;p&gt;A calendar deadline alone is weaker. Reaching Friday does not prove the replacement works. A date can prompt a review; an observable project condition explains whether the exception still applies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the permanent rule separate
&lt;/h2&gt;

&lt;p&gt;The lasting requirement might be “preserve invoice compatibility.” Running two parsers is only one temporary way to establish that compatibility.&lt;/p&gt;

&lt;p&gt;Write those ideas separately. When the migration ends, remove the dual-parser procedure while keeping the compatibility requirement and its relevant tests. Otherwise, deleting the temporary instruction can accidentally delete the reason the team needed it.&lt;/p&gt;

&lt;p&gt;This fits APC's definition of &lt;a href="https://agentprojectcontext.com/en/docs/concepts/project-context/" rel="noopener noreferrer"&gt;project context&lt;/a&gt;: information that remains meaningful across editors, machines, and runtimes. A temporary instruction can still be shared project guidance, provided its scope and retirement condition are explicit. Durability should mean maintained knowledge, rather than text that nobody touches again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review retirement alongside implementation
&lt;/h2&gt;

&lt;p&gt;For a migration PR, I would add a short review question: which existing instructions become false if this change lands?&lt;/p&gt;

&lt;p&gt;Check the root contract, relevant agent definitions, and reusable instructions that mention the old behavior. Follow references instead of searching only the file edited during implementation. If the migration is partial, narrow the instruction to the remaining legacy path and retain its exit condition.&lt;/p&gt;

&lt;p&gt;The APX repository's &lt;a href="https://github.com/agentprojectcontext/apx/blob/main/AGENTS.md" rel="noopener noreferrer"&gt;engineering guide&lt;/a&gt; includes a related practice: comments describing migrations should change when those migrations finish or are abandoned. Applying that same maintenance habit to project guidance is a proposed review workflow, not a claim that APC or APX automatically detects stale instructions.&lt;/p&gt;

&lt;p&gt;A useful completion note can stay small:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Legacy parser removed after acceptance.
Temporary dual-parser instruction retired.
Compatibility requirement and replacement tests retained.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That note explains why guidance changed without copying the migration's entire conversation into the repository.&lt;/p&gt;

&lt;p&gt;Version control preserves old decisions when you need to investigate them. Active context should explain what applies now. Giving temporary instructions an exit condition helps the next agent tell the difference.&lt;/p&gt;

&lt;p&gt;Explore the portable context format in &lt;a href="https://github.com/agentprojectcontext/agentprojectcontext" rel="noopener noreferrer"&gt;Agent Project Context on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Moving a Folder? Review Your APC Rule Globs</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Sat, 12 Sep 2026 12:04:01 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/moving-a-folder-review-your-apc-rule-globs-2ipa</link>
      <guid>https://dev.to/agentprojectcontext/moving-a-folder-review-your-apc-rule-globs-2ipa</guid>
      <description>&lt;p&gt;A folder rename can leave your application healthy while quietly disconnecting its agent instructions. Imports resolve, tests pass, and the rule file still reads well. Its path selector now points at yesterday's repository.&lt;/p&gt;

&lt;p&gt;Treat a directory move as a change to the context map: review the relevant APC rule globs in the same pull request.&lt;/p&gt;

&lt;p&gt;APC is the portable context layer, keeping project instructions in &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;.apc/&lt;/code&gt;. APX is the daily-use runtime and tooling layer around that context. This example concerns the project-owned rule, so the durable fix belongs in APC.&lt;/p&gt;

&lt;h2&gt;
  
  
  The instruction survived; its target moved
&lt;/h2&gt;

&lt;p&gt;Imagine a project with payment handlers under &lt;code&gt;src/payments/&lt;/code&gt;. Its &lt;code&gt;.apc/rules/payments.mdc&lt;/code&gt; contains this illustrative rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
description: "Payment handler conventions"
globs:
  - "src/payments/**/*.ts"
alwaysApply: false
---

- Preserve the existing retry behavior when changing a handler.
- Include a duplicate-request case when testing a write operation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;a href="https://agentprojectcontext.com/en/docs/specification/rules/" rel="noopener noreferrer"&gt;APC rules specification&lt;/a&gt; describes path-scoped MDC files and distinguishes them from the repository-wide contract in &lt;code&gt;AGENTS.md&lt;/code&gt;. Actual selection and projection depend on the compatible consumer; the format alone does not prove a particular tool loaded the rule.&lt;/p&gt;

&lt;p&gt;Now move those handlers to &lt;code&gt;packages/billing/src/&lt;/code&gt;. The old selector no longer names their location. Nothing about that mistake requires invalid Markdown or malformed YAML. A syntax check can pass while the intended coverage disappears.&lt;/p&gt;

&lt;p&gt;For this hypothetical move, the relevant edit is small:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt; globs:
&lt;span class="gd"&gt;-  - "src/payments/**/*.ts"
&lt;/span&gt;&lt;span class="gi"&gt;+  - "packages/billing/src/**/*.ts"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not stop at replacing the prefix. If the new package also contains unrelated code, that replacement may widen the rule beyond its original purpose. Inspect the destination tree and choose the boundary deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review coverage with concrete files
&lt;/h2&gt;

&lt;p&gt;For a move like this, I would put three paths in the review notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A moved handler that should receive the rule.&lt;/li&gt;
&lt;li&gt;A file outside billing that should not receive it.&lt;/li&gt;
&lt;li&gt;A remaining file under the old location, if the migration is partial.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those examples make the intended selection reviewable. During a staged migration, both locations may need coverage. After the last handler moves, remove the obsolete selector instead of accumulating paths indefinitely.&lt;/p&gt;

&lt;p&gt;Validate those examples using the matching behavior of the consumer you actually use. Do not substitute a different glob library and assume its result proves editor behavior. Where the tool exposes loaded rules or generated configuration, inspect that evidence too. Where it does not, record that limitation rather than treating the agent's verbal assurance as a loading trace.&lt;/p&gt;

&lt;p&gt;This is a proposed review practice, not a claim that APC ships an automatic coverage checker or that APX guarantees every editor's rule projection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep narrow instructions narrow
&lt;/h2&gt;

&lt;p&gt;Setting &lt;code&gt;alwaysApply: true&lt;/code&gt; merely to make the missing guidance reappear changes the scope of the instruction. Before doing that, decide whether the guidance truly belongs on every task. A billing-specific convention usually deserves a repaired selector; a repository-wide requirement belongs in the root contract.&lt;/p&gt;

&lt;p&gt;The practical habit is small: whenever a pull request moves a subsystem, review its rule selectors alongside imports and configuration paths. Keep the code move and its context adjustment together so a reviewer can see why both changed.&lt;/p&gt;

&lt;p&gt;A useful rule needs accurate instructions and an accurate address. Maintaining only the prose leaves half the contract unattended.&lt;/p&gt;

&lt;p&gt;Source project: &lt;a href="https://github.com/agentprojectcontext/agentprojectcontext" rel="noopener noreferrer"&gt;Agent Project Context on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Refresh APX Skills Without Replacing Your Dev Install</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Fri, 11 Sep 2026 12:02:43 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/refresh-apx-skills-without-replacing-your-dev-install-i13</link>
      <guid>https://dev.to/agentprojectcontext/refresh-apx-skills-without-replacing-your-dev-install-i13</guid>
      <description>&lt;p&gt;You edit an APX skill, open your coding assistant, and get the old instructions again. The Markdown change is correct. The assistant may simply be reading a different file.&lt;/p&gt;

&lt;p&gt;For contributors working from a linked APX checkout, refreshing installed skills is a separate operation from upgrading APX. Use &lt;code&gt;apx skills sync&lt;/code&gt; when the change needs to reach the external tools' global skill directories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow the file the consumer reads
&lt;/h2&gt;

&lt;p&gt;Agent Project Context (APC) is the portable context layer: repository-owned instructions and definitions shared by compatible tools. APX is the daily-use runtime and tooling layer, with a local daemon, CLI, and execution surfaces.&lt;/p&gt;

&lt;p&gt;That division also helps explain skill delivery. A project contract and a machine's installed helper files have different lifecycles. Committing an instruction does not automatically refresh every copy already installed on a developer's machine.&lt;/p&gt;

&lt;p&gt;APX has two relevant locations inside its package:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/core/runtime-skills/&lt;/code&gt; contains instructions consumed by APX's own runtime.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;skills/&lt;/code&gt; supplies the separate bundled catalog distributed to external tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://agentprojectcontext.github.io/apx/docs/capabilities/skills/" rel="noopener noreferrer"&gt;skills documentation&lt;/a&gt; distinguishes these catalogs. Editing one does not imply that a consumer of the other will see the change.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small stale-copy example
&lt;/h2&gt;

&lt;p&gt;Suppose a bundled helper still describes an outdated command. You correct its source in the development checkout, then ask an external coding tool to repeat the workflow. It suggests the outdated command again.&lt;/p&gt;

&lt;p&gt;Before rewriting the instruction, inspect the delivery path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Confirm that your &lt;code&gt;apx&lt;/code&gt; executable resolves to the development installation you intend to test.&lt;/li&gt;
&lt;li&gt;Run the bundled skill refresh.&lt;/li&gt;
&lt;li&gt;Inspect the installed helper in the target tool's global skill directory.&lt;/li&gt;
&lt;li&gt;Verify the corrected passage is present, then exercise the workflow in the consuming tool.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The refresh command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apx skills &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;--verbose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;APX's &lt;a href="https://github.com/agentprojectcontext/apx/blob/main/src/interfaces/cli/commands/skills.js" rel="noopener noreferrer"&gt;sync handler&lt;/a&gt; calls the shared installer and reports results by skill and destination. Its output distinguishes created, updated, unchanged, and pruned entries. Check the destination you actually use; a successful write elsewhere does not prove your assistant read the new text.&lt;/p&gt;

&lt;p&gt;This workflow verifies distribution first. Whether an already-open external assistant reloads its instructions is a separate question, governed by that tool. Do not treat a copied file as proof that an existing conversation has refreshed its context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an upgrade is the wrong repair here
&lt;/h2&gt;

&lt;p&gt;The APX contributor guide warns against using &lt;code&gt;apx update&lt;/code&gt; to refresh a linked development checkout. An upgrade can replace the global link with a published package, leaving subsequent commands pointed at released code instead of your working tree. See the &lt;a href="https://github.com/agentprojectcontext/apx/blob/main/AGENTS.md#the-dev-loop--skip-a-step-and-your-test-is-a-lie" rel="noopener noreferrer"&gt;development loop&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/agentprojectcontext/apx/blob/main/src/interfaces/cli/commands/update.js" rel="noopener noreferrer"&gt;update implementation&lt;/a&gt; installs a published version through a global package manager. That is appropriate when upgrading an installed release. It is unnecessary when the intended change is a local instruction file.&lt;/p&gt;

&lt;p&gt;The package's &lt;a href="https://github.com/agentprojectcontext/apx/blob/main/src/interfaces/cli/postinstall.js" rel="noopener noreferrer"&gt;postinstall hook&lt;/a&gt; also calls the skill installer. Merely editing a development checkout does not run that hook, which explains why an explicit sync is useful.&lt;/p&gt;

&lt;p&gt;For APX's own runtime skills, the contributor guide documents loading from the package path on demand. Diagnose that path separately; refreshing external copies cannot fix a change made in the wrong catalog.&lt;/p&gt;

&lt;p&gt;The useful debugging question is precise: which file does this consumer read, and what operation puts the new content there? Answer it before changing the prompt again.&lt;/p&gt;

&lt;p&gt;Project: &lt;a href="https://github.com/agentprojectcontext/apx" rel="noopener noreferrer"&gt;APX on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Grow APC Context From Real Decisions</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Thu, 10 Sep 2026 12:08:11 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/grow-apc-context-from-real-decisions-4mn1</link>
      <guid>https://dev.to/agentprojectcontext/grow-apc-context-from-real-decisions-4mn1</guid>
      <description>&lt;p&gt;A directory tree in documentation is easy to mistake for a setup checklist. You see agents, skills, rules, memory, and tool configuration, then create a placeholder for everything before an agent has done any useful work.&lt;/p&gt;

&lt;p&gt;My recommendation for APC adoption is narrower: add a context file when you can explain which recurring decision it improves. A full-looking tree is not evidence of useful context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate the contract from the example
&lt;/h2&gt;

&lt;p&gt;Agent Project Context (APC) is the portable context layer: repository-owned instructions and definitions that compatible tools can share. APX is the daily-use runtime and tooling layer, providing local execution through its CLI, daemon, and other surfaces.&lt;/p&gt;

&lt;p&gt;That distinction matters during onboarding. Designing project context and configuring an execution environment are separate jobs. Installing more runtime features does not make a vague project instruction more precise.&lt;/p&gt;

&lt;p&gt;The APC draft identifies &lt;code&gt;.apc/project.json&lt;/code&gt; as its metadata file. Its fields describe the project name, project version, APC target version, and creation time. That metadata has a specific purpose; it is not a place to collect every setting a developer might eventually need. See the &lt;a href="https://agentprojectcontext.com/en/docs/specification/workspace-json/" rel="noopener noreferrer"&gt;workspace metadata specification&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Likewise, the &lt;a href="https://agentprojectcontext.com/en/docs/specification/folder-structure/" rel="noopener noreferrer"&gt;folder structure specification&lt;/a&gt; explicitly describes path-scoped rules as optional. A canonical location tells you where content belongs when you need it. It does not make an empty file useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with an actual mistake
&lt;/h2&gt;

&lt;p&gt;Consider a hypothetical API repository where agents repeatedly edit generated client files. Before designing several specialist roles, put the relevant instruction in the root contract:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Project Context&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Generated clients live in &lt;span class="sb"&gt;`src/generated/`&lt;/span&gt;; change the schema instead.
&lt;span class="p"&gt;-&lt;/span&gt; Regenerate clients after schema changes.
&lt;span class="p"&gt;-&lt;/span&gt; Run the repository's documented API compatibility checks before merge.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These instructions identify a boundary, an alternative action, and a verification requirement. They are useful even before the team has a sophisticated agent setup. In a real repository, replace the generic check reference with the command your project actually documents.&lt;/p&gt;

&lt;p&gt;Now suppose the same schema update requires a repeatable sequence: edit the schema, regenerate clients, inspect compatibility, and update examples. That is a reason to write a reusable project skill. Its value comes from preserving the sequence that people otherwise forget.&lt;/p&gt;

&lt;p&gt;Later, if backend-only constraints start overwhelming the root contract, a path-scoped rule has a concrete job. You are moving an existing instruction to a more precise loading boundary, with the consuming tool's support checked explicitly.&lt;/p&gt;

&lt;p&gt;This is a proposed adoption workflow, not a claim that every tool implements every APC directory or that this article defines a formal minimum layout.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avoid speculative context
&lt;/h2&gt;

&lt;p&gt;A placeholder such as “follow best practices” gives a reviewer almost nothing to verify. A fictional release process can be worse: an agent may follow it because the repository presents it as authoritative.&lt;/p&gt;

&lt;p&gt;For each proposed file, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which repeated question does this answer?&lt;/li&gt;
&lt;li&gt;Who can verify that the answer is current?&lt;/li&gt;
&lt;li&gt;What future change should trigger an update?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If those answers are missing, investigate the workflow before writing instructions for it. Empty structure can wait; incorrect guidance creates work immediately.&lt;/p&gt;

&lt;p&gt;APX remains useful on the execution side as the project grows. Its local sessions and message history should stay in runtime-owned storage, rather than becoming filler for &lt;code&gt;.apc/&lt;/code&gt;. The &lt;a href="https://github.com/agentprojectcontext/apx" rel="noopener noreferrer"&gt;APX repository&lt;/a&gt; documents that storage boundary and its CLI workflow.&lt;/p&gt;

&lt;p&gt;The practical measure is whether the next contributor or compatible agent makes fewer avoidable mistakes. Grow the context around observed needs, and review each new instruction as carefully as the code it will influence.&lt;/p&gt;

&lt;p&gt;Project: &lt;a href="https://github.com/agentprojectcontext/agentprojectcontext" rel="noopener noreferrer"&gt;Agent Project Context on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A Health Check Should Identify the Runtime It Found</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Wed, 09 Sep 2026 12:05:01 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/a-health-check-should-identify-the-runtime-it-found-4obe</link>
      <guid>https://dev.to/agentprojectcontext/a-health-check-should-identify-the-runtime-it-found-4obe</guid>
      <description>&lt;h1&gt;
  
  
  A Health Check Should Identify the Runtime It Found
&lt;/h1&gt;

&lt;p&gt;A green health endpoint can answer the wrong question. It may prove that &lt;em&gt;a&lt;/em&gt; process responds on a port without proving that it is the process, configuration, or local state your client expects.&lt;/p&gt;

&lt;p&gt;APX hit this distinction in a concrete way. One daemon could serve the normal &lt;code&gt;~/.apx&lt;/code&gt; home while another started with a temporary &lt;code&gt;APX_HOME&lt;/code&gt;. Under a wildcard-versus-loopback bind, both could hold the same port, and local traffic could quietly reach the more specific listener. No obvious bind error appeared. Both daemons could still report &lt;code&gt;status: ok&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The thesis: local runtime health needs a minimal identity signal, not liveness alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why &lt;code&gt;ok&lt;/code&gt; was misleading
&lt;/h2&gt;

&lt;p&gt;An APX daemon owns machine-local state: configuration, authentication tokens, registered projects, message history, and channel connections. The port is only an address. It does not define which state directory the process serves.&lt;/p&gt;

&lt;p&gt;Imagine this sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;normal daemon  -&amp;gt; port 7430 -&amp;gt; ~/.apx
test daemon    -&amp;gt; port 7430 -&amp;gt; /tmp/test-home/.apx
CLI request    -&amp;gt; port 7430 -&amp;gt; test daemon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The test daemon is technically healthy. Its database opens. Its HTTP server replies. Yet it has the wrong token store, an empty project list, and no live channels. From the client view, authentication suddenly fails and conversations disappear. A boolean health check cannot explain why.&lt;/p&gt;

&lt;p&gt;A PID file does not solve this across homes either. If each &lt;code&gt;APX_HOME&lt;/code&gt; owns its own PID file, the two daemons cannot see each other's lock. The collision exists at the port boundary, outside either state directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add identity without exposing paths
&lt;/h2&gt;

&lt;p&gt;APX now includes &lt;code&gt;home_id&lt;/code&gt; in its unauthenticated health response. The value is a truncated SHA-256 digest of the effective &lt;code&gt;APX_HOME&lt;/code&gt;, not the filesystem path itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.92.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"uptime_s"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"home_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;path fingerprint&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before binding, a starting daemon asks the loopback health endpoint who is already serving the port. If the returned fingerprint belongs to a different home, startup stops with a useful error. The operator can stop the other daemon or assign a separate &lt;code&gt;APX_PORT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is deliberately narrow. The check does not publish a private absolute path. It also does not reject every listener it cannot identify. An older APX version may not return &lt;code&gt;home_id&lt;/code&gt;, and a normal restart can briefly overlap with the outgoing process. APX fails open for those ambiguous cases, preserving restart behavior while catching the collision it can prove.&lt;/p&gt;

&lt;h2&gt;
  
  
  APC defines context; APX identifies execution
&lt;/h2&gt;

&lt;p&gt;Agent Project Context (APC) is the portable context layer. &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;.apc/&lt;/code&gt; carry durable project instructions, agent definitions, skills, and safe shared facts across tools and machines. They should not encode one computer's daemon port or state directory.&lt;/p&gt;

&lt;p&gt;APX is the daily-use runtime and tooling layer. It turns that portable contract into local execution through its daemon, CLI, web admin, channels, sessions, and stores. Runtime identity therefore belongs in APX health and startup checks, not in APC project files.&lt;/p&gt;

&lt;p&gt;That separation keeps the repository portable while making local operations diagnosable. The same APC project can move between machines; each APX runtime can still prove which local home it serves.&lt;/p&gt;

&lt;h2&gt;
  
  
  General rule
&lt;/h2&gt;

&lt;p&gt;For any local agent daemon, ask three different questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Liveness:&lt;/strong&gt; did something answer?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readiness:&lt;/strong&gt; can it serve requests?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity:&lt;/strong&gt; is it serving the state this client expects?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Collapsing all three into &lt;code&gt;ok&lt;/code&gt; creates failures that look impossible: healthy service, broken application. A small, non-secret identity fingerprint turns that mystery into an explicit startup decision.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A2A History Should Replay Speech, Not Tool Output</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Tue, 08 Sep 2026 12:03:55 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/a2a-history-should-replay-speech-not-tool-output-50c6</link>
      <guid>https://dev.to/agentprojectcontext/a2a-history-should-replay-speech-not-tool-output-50c6</guid>
      <description>&lt;h1&gt;
  
  
  A2A History Should Replay Speech, Not Tool Output
&lt;/h1&gt;

&lt;p&gt;An agent-to-agent thread has two audiences: the next agent turn needs a clean conversation, while the human operator needs evidence of what each agent actually did. Treating both audiences as one transcript creates a subtle failure mode: raw tool output starts masquerading as dialogue.&lt;/p&gt;

&lt;p&gt;APX separates those concerns. A peer receives the messages that participants said. Tool execution remains attached to the reply as trace metadata, available for inspection without being replayed as conversation.&lt;/p&gt;

&lt;p&gt;The thesis is simple: preserve tool traces for accountability, but do not spend conversational context on them.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a useful thread becomes noise
&lt;/h2&gt;

&lt;p&gt;Consider an APX A2A exchange:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reviewer -&amp;gt; opencode: Check the rendering issue.
opencode -&amp;gt; tool: npm run lint
opencode -&amp;gt; tool: a complete HTML document
opencode -&amp;gt; reviewer: Fixed and verified.
reviewer -&amp;gt; opencode: Continue with the mobile view.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If APX rebuilds history by selecting every row shared by those two participants, the next prompt may include the lint output and full HTML document as if they were earlier messages. The peer must then recover six words of intent from thousands of characters of exhaust.&lt;/p&gt;

&lt;p&gt;This is worse than cosmetic clutter. Tool output can dominate the context window, obscure decisions, and make an agent infer that machine-generated data was something a participant intentionally said. A long-running collaboration gradually becomes less coherent even though every individual tool call succeeded.&lt;/p&gt;

&lt;p&gt;APX therefore filters A2A history to conversational rows. Earlier requests and final replies survive. Raw tool-result rows do not enter the reconstructed dialogue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep evidence, change its lane
&lt;/h2&gt;

&lt;p&gt;Filtering tool output from history must not make agent work invisible. A final reply such as "fixed and verified" is only a claim unless the operator can inspect the actions behind it.&lt;/p&gt;

&lt;p&gt;APX keeps the tool trace on the agent reply's metadata. The thread viewer can expose that trace as an action group: which tools ran, their arguments, and their results. A reply with no tool calls carries no action group. That difference helps a human distinguish completed work from an unsupported assertion.&lt;/p&gt;

&lt;p&gt;One event now serves two views without corrupting either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;conversational text becomes future agent context;&lt;/li&gt;
&lt;li&gt;trace metadata becomes operator evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trace remains connected to the reply that produced it, but it is not promoted into the next turn's prose.&lt;/p&gt;

&lt;h2&gt;
  
  
  APC and APX own different parts
&lt;/h2&gt;

&lt;p&gt;Agent Project Context (APC) is the portable context layer. It stores durable project instructions, agent definitions, skills, and safe shared facts in &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;.apc/&lt;/code&gt;. Those artifacts explain how agents should work across tools and machines.&lt;/p&gt;

&lt;p&gt;APX is the daily-use runtime and tooling layer. It executes A2A turns, stores local message history, runs tools, and shapes the thread shown to an operator. Tool traces and runtime transcripts belong there because they describe machine-local execution, not portable project truth.&lt;/p&gt;

&lt;p&gt;This boundary matters. Copying raw A2A traces into APC would turn a stable project contract into an ever-growing activity log. Dropping traces entirely would make runtime claims hard to verify. APX can retain them locally while APC stays clone-safe.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical rule for agent systems
&lt;/h2&gt;

&lt;p&gt;When designing multi-agent history, ask what each record is for.&lt;/p&gt;

&lt;p&gt;A user request, delegation, decision, or final answer belongs in replayable dialogue. A shell dump, file body, HTTP response, or intermediate tool envelope belongs in an execution trace. Both may need persistence, search, and a UI, but they should not automatically share a prompt budget.&lt;/p&gt;

&lt;p&gt;This separation gives future turns better signal and gives humans better evidence. Clean context and auditability are not competing goals. They only conflict when one storage shape is forced to do both jobs.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A Running Ollama Server Does Not Mean Your APX Model Is Healthy</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Mon, 07 Sep 2026 12:04:39 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/a-running-ollama-server-does-not-mean-your-apx-model-is-healthy-1g24</link>
      <guid>https://dev.to/agentprojectcontext/a-running-ollama-server-does-not-mean-your-apx-model-is-healthy-1g24</guid>
      <description>&lt;h1&gt;
  
  
  A Running Ollama Server Does Not Mean Your APX Model Is Healthy
&lt;/h1&gt;

&lt;p&gt;A process can be alive while the capability you need is missing. For a local AI runtime, that distinction matters: an Ollama server answering HTTP requests does not prove that the configured model is installed.&lt;/p&gt;

&lt;p&gt;APX treats those as separate facts. When routing a turn to an Ollama model, it checks both the server and the candidate model before accepting the route.&lt;/p&gt;

&lt;p&gt;This is a small reliability rule with a broad lesson: health checks should test the dependency your operation actually requires, not merely the service around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The false-positive health check
&lt;/h2&gt;

&lt;p&gt;Imagine this APX configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"super_agent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ollama:qwen3:8b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"model_fallback"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"openrouter:openrouter/free"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ollama may answer &lt;code&gt;GET /api/tags&lt;/code&gt; successfully while &lt;code&gt;qwen3:8b&lt;/code&gt; is absent. A simple status-code check would mark Ollama healthy, select it, and delay failure until the actual model call. The router would have made a confident decision using incomplete evidence.&lt;/p&gt;

&lt;p&gt;APX instead passes the candidate model into the provider health check. Its Ollama adapter reads the models returned by &lt;code&gt;/api/tags&lt;/code&gt; and verifies that the requested model is available. If the server responds but the model is missing, the result is unhealthy for that route and includes the available model names for diagnosis.&lt;/p&gt;

&lt;p&gt;The configured fallback chain can then continue naturally. No manual edit is needed just because a daemon was reachable but incomplete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this belongs in APX, not APC
&lt;/h2&gt;

&lt;p&gt;Agent Project Context (APC) is the portable context layer. It keeps durable project instructions, agent definitions, skills, and safe configuration hints in the repository. A project may state which model an agent should use, but it cannot guarantee that a particular machine has pulled that local model.&lt;/p&gt;

&lt;p&gt;APX is the daily-use runtime and tooling layer. It knows the current machine, configured engines, credentials, endpoints, and locally available Ollama models. That makes APX the right place to turn a portable preference into a runtime decision.&lt;/p&gt;

&lt;p&gt;Keeping this boundary clear prevents two bad outcomes. First, APC does not accumulate machine-specific availability state. Second, APX does not treat repository configuration as proof that an external capability exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Health must match the routing question
&lt;/h2&gt;

&lt;p&gt;Different callers can ask different health questions. A general status screen may only need to know whether Ollama responds. A router evaluating &lt;code&gt;ollama:qwen3:8b&lt;/code&gt; needs a stricter answer: can this provider serve this model now?&lt;/p&gt;

&lt;p&gt;APX supports that distinction. Without a candidate model, the Ollama health probe can remain loose and report server reachability. With a candidate, it validates model presence. The router uses the strict form while walking its ordered model chain.&lt;/p&gt;

&lt;p&gt;This avoids making every health probe unnecessarily expensive or specific, while still protecting the execution path that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical design rule
&lt;/h2&gt;

&lt;p&gt;When adding health checks to any agent runtime, write down the decision they guard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the decision is "show provider online," reachability may be enough.&lt;/li&gt;
&lt;li&gt;If the decision is "send this turn to this model," verify that model.&lt;/li&gt;
&lt;li&gt;If the decision is "run this tool," verify the tool's required dependency, not only its host process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also preserve diagnostic detail. "Unhealthy" is less useful than "server running; configured model not loaded." APX keeps the attempted models and reasons, so fallback behavior remains observable rather than mysterious.&lt;/p&gt;

&lt;p&gt;Portable context gives every machine the same intent. Runtime-aware health checks let each machine execute that intent honestly.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Declare `tools` Only When Narrowing an APX Agent</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Sun, 06 Sep 2026 12:02:35 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/declare-tools-only-when-narrowing-an-apx-agent-5fik</link>
      <guid>https://dev.to/agentprojectcontext/declare-tools-only-when-narrowing-an-apx-agent-5fik</guid>
      <description>&lt;h1&gt;
  
  
  Declare &lt;code&gt;tools&lt;/code&gt; Only When Narrowing an APX Agent
&lt;/h1&gt;

&lt;p&gt;An agent definition should describe a durable role without freezing a temporary snapshot of the runtime around it. That is why APX treats an omitted &lt;code&gt;tools&lt;/code&gt; field differently from a declared list.&lt;/p&gt;

&lt;p&gt;The rule is small: omit &lt;code&gt;tools&lt;/code&gt; when the agent should inherit APX's broad project-agent default. Declare a non-empty list only when you intentionally want a narrower allowlist.&lt;/p&gt;

&lt;p&gt;This distinction connects the two layers. Agent Project Context (APC) is the portable context layer: the repository can carry an agent definition in &lt;code&gt;.apc/agents/&amp;lt;slug&amp;gt;.md&lt;/code&gt;. APX is the daily-use runtime and tooling layer: it resolves that portable definition against the callable tools available on the current machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Omission preserves capability
&lt;/h2&gt;

&lt;p&gt;Consider a project agent created without &lt;code&gt;--tools&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apx agent add release-notes &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--role&lt;/span&gt; Writer &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--prompt-file&lt;/span&gt; ./prompts/release-notes.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;APX leaves the &lt;code&gt;Tools&lt;/code&gt; frontmatter field undeclared. At runtime, that agent receives the broad default tool allowlist: the callable registry minus operations that belong only to the host, such as changing APX's identity, widening the permission mode, adding projects, or importing agents.&lt;/p&gt;

&lt;p&gt;This default matters because real work crosses boundaries. A writing agent may need to read files today, call an MCP publishing tool tomorrow, and create a follow-up task next week. If creation writes today's catalog into the portable agent file, new runtime capabilities remain unavailable until someone edits the definition. The APC file becomes an accidental lockfile for APX internals.&lt;/p&gt;

&lt;p&gt;Omission avoids that coupling. The agent keeps its stable role and instructions while APX supplies an appropriate default from the runtime it actually has.&lt;/p&gt;

&lt;h2&gt;
  
  
  Declaration means deliberate narrowing
&lt;/h2&gt;

&lt;p&gt;Now consider a reviewer that should only inspect repository content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apx agent add reviewer &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--role&lt;/span&gt; Reviewer &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--prompt-file&lt;/span&gt; ./prompts/reviewer.md &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tools&lt;/span&gt; read_file,glob
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;APX writes the selected tools into the agent definition. From then on, the list acts as an allowlist, not documentation or a suggestion. The reviewer does not gain &lt;code&gt;run_shell&lt;/code&gt;, &lt;code&gt;write_file&lt;/code&gt;, or &lt;code&gt;call_mcp&lt;/code&gt; merely because those tools exist in the runtime.&lt;/p&gt;

&lt;p&gt;That makes a declared list useful for agents with a genuinely constrained job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a read-only reviewer&lt;/li&gt;
&lt;li&gt;a documentation inspector that should not execute commands&lt;/li&gt;
&lt;li&gt;a specialist that may call one approved MCP path but not general shell tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tradeoff is maintenance. A narrow list stays narrow when APX adds capabilities. That is the intended result, but only when restriction was the intent. Copying every currently available tool into the file creates maintenance cost without adding a meaningful boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capability is not prompt size
&lt;/h2&gt;

&lt;p&gt;A broad allowlist sounds expensive if you imagine every tool schema entering every prompt. APX separates those concerns. The allowlist answers which tools the runtime may permit. Lightweight channels can still start with a small base set and discover additional tools when needed.&lt;/p&gt;

&lt;p&gt;So narrowing an allowlist is a capability decision, not a prompt-budget optimization. Use it to remove powers, not to make an agent look tidy.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical review rule
&lt;/h2&gt;

&lt;p&gt;When reviewing &lt;code&gt;.apc/agents/*.md&lt;/code&gt;, ask why each &lt;code&gt;tools&lt;/code&gt; list exists.&lt;/p&gt;

&lt;p&gt;If the answer names a boundary — "this reviewer must remain read-only" — keep it. If the answer is "these were the tools available when we created the agent", remove the field and let APX resolve the default.&lt;/p&gt;

&lt;p&gt;Also remember that runtime-specific overrides can be stricter for one execution. APX routines can replace an agent's normal allowance for a particular run, including running with no tools. That operational decision belongs in APX runtime configuration, while the APC agent file keeps the durable project-level intent.&lt;/p&gt;

&lt;p&gt;Portable definitions work best when they state constraints that should survive across machines. Omitted &lt;code&gt;tools&lt;/code&gt; says capability may evolve with the runtime. A declared list says this boundary must not.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>APC's .gitignore Is a Safety Net, Not a Storage Policy</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Sat, 05 Sep 2026 12:03:17 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/apcs-gitignore-is-a-safety-net-not-a-storage-policy-29no</link>
      <guid>https://dev.to/agentprojectcontext/apcs-gitignore-is-a-safety-net-not-a-storage-policy-29no</guid>
      <description>&lt;h1&gt;
  
  
  APC's &lt;code&gt;.gitignore&lt;/code&gt; Is a Safety Net, Not a Storage Policy
&lt;/h1&gt;

&lt;p&gt;A &lt;code&gt;.gitignore&lt;/code&gt; entry can prevent an accidental commit. It cannot turn the wrong storage location into the right one.&lt;/p&gt;

&lt;p&gt;That distinction matters in Agent Project Context (APC). APC is the portable context layer: repository-owned rules, agent definitions, reusable skills, project metadata, and carefully curated memory. APX is the daily-use runtime and tooling layer: it runs agents and keeps sessions, conversations, messages, caches, and local state on the machine.&lt;/p&gt;

&lt;p&gt;The thesis is simple: &lt;code&gt;.apc/.gitignore&lt;/code&gt; is a defensive boundary for mistakes and legacy files, not permission to store runtime data under &lt;code&gt;.apc/&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the file protects
&lt;/h2&gt;

&lt;p&gt;The APC folder specification recommends ignoring paths such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;agents/*/sessions/
agents/*/conversations/
sessions/
conversations/
messages/
chats/
cache/
tmp/
private/
secrets/
*.local.json
*.secret.json
*.env
*.env.*
mcps.local.json
migrate.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These patterns reduce damage when an older tool, manual script, or mistaken integration writes runtime artifacts inside &lt;code&gt;.apc/&lt;/code&gt;. A session transcript containing a private prompt should not enter Git history merely because it appeared beside a valid agent definition.&lt;/p&gt;

&lt;p&gt;But ignored does not mean correctly placed.&lt;/p&gt;

&lt;p&gt;A growing &lt;code&gt;.apc/sessions/&lt;/code&gt; directory is still a design error. It remains tied to one runtime, machine, or provider. It does not become portable project context just because Git cannot see it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The correct two-layer model
&lt;/h2&gt;

&lt;p&gt;APC should answer: what must another contributor or compatible tool learn from this repository?&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; for the broad project contract&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.apc/project.json&lt;/code&gt; for stable project metadata&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.apc/agents/&amp;lt;slug&amp;gt;.md&lt;/code&gt; for agent definitions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.apc/skills/&lt;/code&gt; for reusable project instructions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.apc/memory.md&lt;/code&gt; or agent memory files for reviewed, team-safe facts&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.apc/mcps.json&lt;/code&gt; for non-secret MCP hints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;APX should answer a different question: what local state does the runtime need to continue operating?&lt;/p&gt;

&lt;p&gt;APX stores runtime data under &lt;code&gt;~/.apx/projects/&amp;lt;project-id&amp;gt;/&lt;/code&gt;. That includes sessions, conversations, messages, and local runtime memory. Other IDEs and runtimes can use their own local stores. None of those stores need to be standardized by APC.&lt;/p&gt;

&lt;p&gt;This separation keeps a clone useful without making it invasive. A new machine receives durable project context from Git, then its chosen runtime creates fresh local state outside the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical review test
&lt;/h2&gt;

&lt;p&gt;When a new file appears under &lt;code&gt;.apc/&lt;/code&gt;, ask three questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Would every contributor benefit from reading it?&lt;/li&gt;
&lt;li&gt;Is it safe to commit and review?&lt;/li&gt;
&lt;li&gt;Does it remain useful after the current session, machine, and provider disappear?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If any answer is no, the file probably belongs in runtime-local storage. Adding another ignore rule may prevent leakage, but it does not fix ownership.&lt;/p&gt;

&lt;p&gt;Suppose an agent finishes a long debugging session. The raw transcript belongs in APX or the originating runtime. A short, reviewed fact such as "the parser rejects duplicate keys" may deserve promotion into APC memory or project documentation. Promotion means extracting durable knowledge, not moving the transcript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters beyond neat folders
&lt;/h2&gt;

&lt;p&gt;Putting local data under &lt;code&gt;.apc/&lt;/code&gt; creates hidden coupling. Backup tools may copy it. Editors may index it. Scripts may mistake it for project input. Contributors may assume an ignored directory is part of the standard. Private material also sits unnecessarily close to files intended for publication.&lt;/p&gt;

&lt;p&gt;Keeping runtime state outside &lt;code&gt;.apc/&lt;/code&gt; removes that ambiguity.&lt;/p&gt;

&lt;p&gt;APC stays small, portable, inspectable, and safe to share. APX remains free to manage richer operational history locally. The ignore file catches boundary violations before they become permanent, while the storage model prevents those violations in the first place.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;.apc/.gitignore&lt;/code&gt; as a seat belt. Do not use it as a parking permit.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Planning Is Not a Guardrail in APC and APX</title>
      <dc:creator>Manuel Bruña</dc:creator>
      <pubDate>Fri, 04 Sep 2026 12:03:27 +0000</pubDate>
      <link>https://dev.to/agentprojectcontext/planning-is-not-a-guardrail-in-apc-and-apx-1al6</link>
      <guid>https://dev.to/agentprojectcontext/planning-is-not-a-guardrail-in-apc-and-apx-1al6</guid>
      <description>&lt;h1&gt;
  
  
  Planning Is Not a Guardrail in APC and APX
&lt;/h1&gt;

&lt;p&gt;A planning note can explain why a project may change next week.&lt;/p&gt;

&lt;p&gt;A guardrail has to explain how the project works today.&lt;/p&gt;

&lt;p&gt;That difference matters more once you split portable context from runtime behavior.&lt;/p&gt;

&lt;p&gt;APC is the portable context layer. It keeps project-owned facts in repository files such as &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;.apc/&lt;/code&gt;, so another tool, another machine, or another contributor can recover the same contract from the clone itself.&lt;/p&gt;

&lt;p&gt;APX is the daily-use runtime and tooling layer. It reads that contract, adds local runtime state, and turns it into actual work through the CLI, daemon, web admin, channels, sessions, and local stores.&lt;/p&gt;

&lt;p&gt;That split only stays clean if durable rules live in tracked files, while planning stays local.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this boundary matters
&lt;/h2&gt;

&lt;p&gt;The APX repo says it directly in &lt;code&gt;spec/README.md&lt;/code&gt;: planning is not a guardrail.&lt;/p&gt;

&lt;p&gt;That file keeps &lt;code&gt;spec/&lt;/code&gt; gitignored on purpose. Roadmaps, backlog notes, PRDs, and active design scratch work stay there because they are temporary, local, and often unsafe to publish as stable project truth.&lt;/p&gt;

&lt;p&gt;The durable material lives elsewhere.&lt;/p&gt;

&lt;p&gt;In the same repo, &lt;code&gt;rules/&lt;/code&gt; is the tracked engineering contract. It holds the workflow, architecture constraints, testing expectations, documentation rules, and decision records that contributors actually need in order to work correctly.&lt;/p&gt;

&lt;p&gt;That is the right split.&lt;/p&gt;

&lt;p&gt;If a new contributor clones the repo, a guardrail must already exist in the clone. A local planning note is not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  APC makes the distinction sharper
&lt;/h2&gt;

&lt;p&gt;Without APC, many teams let this blur. A roadmap note, a scratch design doc, and an actual project rule all end up in some folder called &lt;code&gt;docs&lt;/code&gt; or &lt;code&gt;notes&lt;/code&gt;, and the runtime figures it out later.&lt;/p&gt;

&lt;p&gt;APC makes that sloppiness more expensive.&lt;/p&gt;

&lt;p&gt;Portable context is supposed to travel.&lt;/p&gt;

&lt;p&gt;If you commit planning noise as if it were project contract, other tools will read unstable material as if it were durable truth. If you keep real rules only in local notes, fresh clones lose the instructions they actually need.&lt;/p&gt;

&lt;p&gt;So APC should carry committed, reviewable project context.&lt;/p&gt;

&lt;p&gt;APX should consume that context and keep its own local runtime state outside the repo.&lt;/p&gt;

&lt;p&gt;Planning belongs to neither category. It is not stable enough for APC, and it is not runtime state either. It is just local working material.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical example
&lt;/h2&gt;

&lt;p&gt;The APX repo uses three lanes that make the difference easy to see.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; is the always-read root contract for agents and repo rules.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rules/&lt;/code&gt; holds tracked deep dives, workflows, and architectural decisions that other contributors must be able to read.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;spec/&lt;/code&gt; holds local planning documents that do not ship.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That means a contributor can clone the repo and get the durable contract immediately.&lt;/p&gt;

&lt;p&gt;They do not depend on one maintainer's unfinished roadmap file.&lt;/p&gt;

&lt;p&gt;It also prevents another common failure: tracked files linking to local-only planning docs. The APX &lt;code&gt;spec/README.md&lt;/code&gt; calls this out explicitly because those links were dead in fresh clones and on GitHub. That is exactly what happens when a team mistakes internal planning for public contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why APX benefits from this too
&lt;/h2&gt;

&lt;p&gt;APX is a runtime, so it already has to separate what belongs in the repository from what belongs on one machine.&lt;/p&gt;

&lt;p&gt;Sessions, conversations, messages, caches, and secrets stay under &lt;code&gt;~/.apx/&lt;/code&gt; because they are runtime-local.&lt;/p&gt;

&lt;p&gt;But that does not mean every important note should become runtime state.&lt;/p&gt;

&lt;p&gt;The workflow rules, architecture boundaries, and contributor-facing decisions still belong in tracked repo files, because they define how humans and tools should operate on the project itself.&lt;/p&gt;

&lt;p&gt;So the real split is three-way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APC holds portable project context.&lt;/li&gt;
&lt;li&gt;APX holds local runtime state and tooling behavior.&lt;/li&gt;
&lt;li&gt;planning stays local until it becomes either durable project contract or disposable scratch work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That middle step is easy to skip, but skipping it creates confusion fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Small rule, big payoff
&lt;/h2&gt;

&lt;p&gt;The practical rule is simple:&lt;/p&gt;

&lt;p&gt;If another contributor must rely on it today, track it.&lt;/p&gt;

&lt;p&gt;If it only describes work in flight, keep it local.&lt;/p&gt;

&lt;p&gt;That rule makes APC cleaner because portable context stays durable.&lt;/p&gt;

&lt;p&gt;It makes APX cleaner because runtime storage does not become a dumping ground for project guidance.&lt;/p&gt;

&lt;p&gt;And it makes the repo easier to trust, because readers can tell which files describe the project as it exists now versus one person's temporary plan.&lt;/p&gt;

&lt;p&gt;Planning is useful.&lt;/p&gt;

&lt;p&gt;It just is not the contract.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
