<?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: Vlad Kuzin</title>
    <description>The latest articles on DEV Community by Vlad Kuzin (@kuzin).</description>
    <link>https://dev.to/kuzin</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%2Fuser%2Fprofile_image%2F4061882%2Fb2b91efc-e86d-4f09-bbad-9bc4650ee19c.png</url>
      <title>DEV Community: Vlad Kuzin</title>
      <link>https://dev.to/kuzin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kuzin"/>
    <language>en</language>
    <item>
      <title>CLAUDE.md is technical writing - structure it like it</title>
      <dc:creator>Vlad Kuzin</dc:creator>
      <pubDate>Tue, 04 Aug 2026 11:55:19 +0000</pubDate>
      <link>https://dev.to/kuzin/claudemd-is-technical-writing-structure-it-like-it-38ib</link>
      <guid>https://dev.to/kuzin/claudemd-is-technical-writing-structure-it-like-it-38ib</guid>
      <description>&lt;p&gt;Your CLAUDE.md is a documentation set with exactly one reader and no editor. It fails in the four ways unstructured documentation has always failed. It grows without a ceiling. It duplicates itself across files that quietly drift apart. It serves every audience at once. And nobody owns it.&lt;/p&gt;

&lt;p&gt;Anthropic states the first failure outright in the Claude Code best-practices guide: "Bloated CLAUDE.md files cause Claude to ignore your actual instructions!" The same page names the pattern — "the over-specified CLAUDE.md", where "Claude ignores half of it because important rules get lost in the noise."&lt;/p&gt;

&lt;p&gt;Technical writers spent decades building a discipline around those four failures. Most of the advice circulating about context files is that discipline, rediscovered one blog post at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your instruction file has a word budget and you are over it
&lt;/h2&gt;

&lt;p&gt;Three teams publish three different ceilings.&lt;/p&gt;

&lt;p&gt;Anthropic targets under 200 lines per CLAUDE.md, because "longer files consume more context and reduce adherence." Cursor's rules documentation says "Keep rules under 500 lines" and tells you to "Split large rules into multiple, composable rules." HumanLayer keeps its root CLAUDE.md to "less than sixty lines."&lt;/p&gt;

&lt;p&gt;The numbers disagree because they are budgets, not limits. The test that survives the disagreement is the one Anthropic publishes per line: "Would removing this cause Claude to make mistakes?" If not, cut it.&lt;/p&gt;

&lt;p&gt;That test has a name. It is the acceptance criterion for a topic in topic-based authoring: one topic, one purpose, bounded scope, nothing that does not serve it. A file describing your directory layout, your dependency list, and your architecture is not one topic. It is a manual. Anthropic's &lt;code&gt;/doctor&lt;/code&gt; checkup applies exactly this cut, trimming "content Claude can derive from the codebase, such as directory layouts, dependency lists, and architecture overviews" while keeping "pitfalls, rationale, and conventions that differ from tool defaults."&lt;/p&gt;

&lt;p&gt;nico, in the Hacker News thread on "Writing a good Claude.md", put the consequence in practitioner terms: "The more information you have in the file that's not universally applicable to the tasks you have it working on, the more likely it is that Claude will ignore your instructions in the file."&lt;/p&gt;

&lt;h2&gt;
  
  
  Five files, one truth, zero sync
&lt;/h2&gt;

&lt;p&gt;Augment Code's engineering blog describes the repo you probably have open:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Open a typical project that's been through a few months of AI-assisted development. You'll find some combination of CLAUDE.md, .cursorrules, copilot-instructions.md, AGENTS.md, and maybe a gemini.md for good measure. Almost the same content in each one. Slowly drifting apart."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Their post reports one developer calling it "confetti in the root directory" and another resorting to symlinks to keep five config files in sync. It is a vendor blog that ends in a product pitch, but the symptom is accurate.&lt;/p&gt;

&lt;p&gt;Copying a rule into five files costs nothing on the day you do it. It costs on the day you change the rule in three of them.&lt;/p&gt;

&lt;p&gt;Anthropic's own fix is one line, documented as an interoperability tip rather than as what it actually is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;@AGENTS.md

&lt;span class="gu"&gt;## Claude Code&lt;/span&gt;
Use plan mode for changes under &lt;span class="sb"&gt;`src/billing/`&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"Claude Code reads CLAUDE.md, not AGENTS.md," the memory documentation says. "If your repository already uses AGENTS.md for other coding agents, create a CLAUDE.md that imports it so both tools read the same instructions without duplicating them." When you need nothing Claude-specific, &lt;code&gt;ln -s AGENTS.md CLAUDE.md&lt;/code&gt; does the same job.&lt;/p&gt;

&lt;p&gt;That is single-sourcing: one canonical file, every other file a reference to it. The rule is already circulating in this feed — &lt;a href="https://dev.to/hash01/how-to-structure-claudemd-skills-and-agents-2p7a"&gt;hash01's guide to structuring CLAUDE.md&lt;/a&gt; states it as "Every fact lives in exactly one file. Everything else links to it." What the technical-writing discipline adds is the name and the machinery. DITA standardized the mechanism as &lt;code&gt;@conref&lt;/code&gt;, attributes that "provide mechanisms for reusing content within DITA topics or maps". Technical writers shipped it long before the first coding agent existed. Cursor's documentation reaches the same rule from the other direction, listing "Duplicating what's already in your codebase" as a mistake and telling you to "Point to canonical examples instead of copying code."&lt;/p&gt;

&lt;p&gt;What this prevents is not clutter. It is drift. &lt;a href="https://www.topicary.com/blog/ai-needs-structured-content" rel="noopener noreferrer"&gt;Structured content matters to AI systems&lt;/a&gt; for exactly this reason: an agent updates the copy it was shown. The other copies keep looking authoritative. They are now wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Splitting into imports does not save you any context
&lt;/h2&gt;

&lt;p&gt;This is the part most posts on the topic get wrong, and the correction is one sentence of vendor documentation.&lt;/p&gt;

&lt;p&gt;Splitting a 600-line CLAUDE.md into six imported files does not reduce your context usage. Anthropic says so in one sentence: splitting into &lt;code&gt;@path&lt;/code&gt; imports "helps organization but doesn't reduce context, since imported files load at launch." Imports expand recursively to a maximum depth of four hops. Every hop lands in the context window before you type anything.&lt;/p&gt;

&lt;p&gt;Two mechanisms are getting conflated, and technical writing keeps them apart on purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transclusion&lt;/strong&gt; assembles content at build time. Every referenced block ends up in the output. Imports are transclusion: good for keeping one canonical copy, useless for shrinking what loads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conditional processing&lt;/strong&gt; filters at delivery time, on metadata. The reader gets the Windows steps or the macOS steps, never both. That is the mechanism that shrinks things, and Claude Code ships it as path-scoped rules:&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="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;src/api/**/*.ts"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; All API endpoints must include input validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rules with a &lt;code&gt;paths:&lt;/code&gt; field "only apply when Claude is working with files matching the specified patterns." Rules without one "are loaded unconditionally and apply to all files." Skills work the same way with a different trigger: Anthropic recommends them for "domain knowledge or workflows that are only relevant sometimes."&lt;/p&gt;

&lt;p&gt;Use imports to stop duplicating. Use &lt;code&gt;paths:&lt;/code&gt; to stop loading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nesting means two different things depending on the tool
&lt;/h2&gt;

&lt;p&gt;You are probably running both conventions in one repository, and they resolve the same directory tree differently.&lt;/p&gt;

&lt;p&gt;agents.md documents precedence: "Agents automatically read the nearest file in the directory tree, so the closest one takes precedence and every subproject can ship tailored instructions."&lt;/p&gt;

&lt;p&gt;Claude Code documents concatenation: "All discovered files are concatenated into context rather than overriding each other," ordered "from the filesystem root down to your working directory."&lt;/p&gt;

&lt;p&gt;Those are opposite mental models. Put &lt;code&gt;Use tabs&lt;/code&gt; in &lt;code&gt;packages/api/CLAUDE.md&lt;/code&gt;, expecting it to override &lt;code&gt;Use spaces&lt;/code&gt; at the root. On Claude Code you have overridden nothing. You have written a contradiction and committed it. The docs tell you what happens next: "if two rules contradict each other, Claude may pick one arbitrarily."&lt;/p&gt;

&lt;p&gt;Technical writers treat this as an assembly question rather than a rules question. Whether a nested topic replaces its parent or extends it is a property of the map. Both models work. Assuming one while running the other is the failure.&lt;/p&gt;

&lt;p&gt;The objection to per-directory files is real, and llbeansandrice raised it in that same thread: the approach "isn't portable to other potential AI tools." Correct. Splitting by directory buys scoping and costs portability. You keep both by splitting on directory &lt;em&gt;and&lt;/em&gt; keeping one canonical source per rule, rather than one canonical source per tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure, its real name, and the mechanism you already have
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you feel&lt;/th&gt;
&lt;th&gt;What technical writers call it&lt;/th&gt;
&lt;th&gt;What you already have&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The file grew until the agent skips half of it&lt;/td&gt;
&lt;td&gt;Unbounded topic scope&lt;/td&gt;
&lt;td&gt;The 200-line target and the per-line deletion test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Four files with nearly the same rules, quietly diverging&lt;/td&gt;
&lt;td&gt;Content drift from duplication&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@AGENTS.md&lt;/code&gt; import, or &lt;code&gt;ln -s AGENTS.md CLAUDE.md&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend rules loading during frontend work&lt;/td&gt;
&lt;td&gt;No audience separation&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;paths:&lt;/code&gt;-scoped rules in &lt;code&gt;.claude/rules/&lt;/code&gt;, and skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nobody knows which rules are still true&lt;/td&gt;
&lt;td&gt;No content ownership&lt;/td&gt;
&lt;td&gt;CLAUDE.md edits reviewed in the pull request&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Row four is Anthropic's own diagnosis of what happens to per-directory files at scale: "Conventions drift, files go stale, and no one owns the root."&lt;/p&gt;

&lt;h2&gt;
  
  
  What a technical writer would do to your CLAUDE.md on Monday
&lt;/h2&gt;

&lt;p&gt;Five passes. None of them need a tool.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Delete.&lt;/strong&gt; Run every line through "would removing this cause a mistake?" Anything the agent derives from the code goes. So does anything written around a model limitation that no longer exists — Anthropic makes this an explicit maintenance step, noting that "a rule that forces single-file refactors can be deleted once the limitation is gone."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deduplicate.&lt;/strong&gt; Pick the canonical file; every other context file references it. If you run both conventions, AGENTS.md is the source and CLAUDE.md is the one-line import.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope.&lt;/strong&gt; Any rule that applies to part of the tree becomes a &lt;code&gt;paths:&lt;/code&gt;-scoped rule. Any workflow that is only relevant sometimes becomes a skill. What stays in CLAUDE.md is what is true in every session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolve contradictions.&lt;/strong&gt; Read the files in load order, root first and working directory last, and find the rules that fight. This is the pass everyone skips, and it is the one with the arbitrary-outcome failure attached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review it in the PR.&lt;/strong&gt; Anthropic's guidance is to "treat CLAUDE.md edits like any other documentation change so conventions track the code." A rules file that changes without review is a rules file nobody owns.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pass 2 hides a harder question: before you rename or delete anything, what else points at it? Documentation tools answer this with where-used tracking. Topicary tracks every topic referencing a component and flags the components nothing references. No context-file tooling does. For CLAUDE.md today the answer is &lt;code&gt;grep -r "@path/to/file"&lt;/code&gt; before you touch it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part none of this tooling does yet
&lt;/h2&gt;

&lt;p&gt;Rename a file that three CLAUDE.md files import and nothing warns you. Imports resolve four hops deep with no reference check on that graph. There is no inventory of which rules are still load-bearing. There is no orphan detection for the file you split out and stopped importing. There is no way to ask which instructions ever changed a behavior.&lt;/p&gt;

&lt;p&gt;This gap is not hypothetical to me. The docs tool I work on runs a validation rules engine. It catches broken component references and undefined variables before publishing. None of that machinery points at CLAUDE.md. Nobody has built it for context files.&lt;/p&gt;

&lt;p&gt;What you can do today is a pre-commit check: grep every &lt;code&gt;@&lt;/code&gt; import target and fail the commit when the file does not exist. Fifteen lines of shell, and it catches a failure that silently degrades every session afterward.&lt;/p&gt;

&lt;p&gt;One deeper limit is worth naming. CLAUDE.md is advisory. It is "delivered as a user message after the system prompt", and Anthropic is explicit that Claude "treats them as context, not enforced configuration." An instruction that must hold every single time belongs in a hook, not in markdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How long should a CLAUDE.md actually be?&lt;/strong&gt;&lt;br&gt;
Anthropic targets under 200 lines and states that longer files "consume more context and reduce adherence." Cursor's ceiling for a rules file is 500 lines. HumanLayer keeps its root CLAUDE.md under sixty. The number matters less than the per-line test: a line whose removal would not cause a mistake is costing you context for nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I use AGENTS.md or CLAUDE.md?&lt;/strong&gt;&lt;br&gt;
Use AGENTS.md as the source and have CLAUDE.md import it, because Claude Code reads CLAUDE.md and does not read AGENTS.md. A CLAUDE.md containing &lt;code&gt;@AGENTS.md&lt;/code&gt; gives both tools the same instructions from one file. &lt;code&gt;ln -s AGENTS.md CLAUDE.md&lt;/code&gt; covers the case where you need nothing Claude-specific. The agents.md site reports the convention in use across more than 60,000 open-source projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is this not just prompt engineering?&lt;/strong&gt;&lt;br&gt;
No, and the difference is practical. Prompt engineering optimizes one message for one response. This is maintenance: four files, hundreds of sessions, months of edits, and no build step that catches a rule which stopped being true in March. Duplication, scope creep, and drift are documentation problems, and they have documentation solutions.&lt;/p&gt;




&lt;p&gt;Open your CLAUDE.md and run the deletion test on every line. Then read what is left in load order and find the two rules that contradict each other. That is a documentation review, and you are the technical writer now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;All accessed 2026-08-04.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic, &lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;Claude Code best practices&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Anthropic, &lt;a href="https://code.claude.com/docs/en/memory" rel="noopener noreferrer"&gt;How Claude remembers your project&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Anthropic, &lt;a href="https://code.claude.com/docs/en/large-codebases" rel="noopener noreferrer"&gt;Set up Claude Code in a monorepo or large codebase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://agents.md" rel="noopener noreferrer"&gt;AGENTS.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cursor, &lt;a href="https://cursor.com/docs/context/rules" rel="noopener noreferrer"&gt;Rules&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;HumanLayer, &lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;Writing a good Claude.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Augment Code, &lt;a href="https://www.augmentcode.com/blog/your-agents-context-is-a-junk-drawer" rel="noopener noreferrer"&gt;Your agent's context is a junk drawer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hacker News, &lt;a href="https://news.ycombinator.com/item?id=46098838" rel="noopener noreferrer"&gt;discussion of "Writing a good Claude.md"&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;hash01, &lt;a href="https://dev.to/hash01/how-to-structure-claudemd-skills-and-agents-2p7a"&gt;How to structure CLAUDE.md, Skills and Agents&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OASIS, &lt;a href="https://docs.oasis-open.org/dita/dita/v1.3/cs01/part1-base/archSpec/base/conref-overview.html" rel="noopener noreferrer"&gt;DITA 1.3 specification, 2.4.2.1 Conref overview&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>documentation</category>
      <category>technicalwriting</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Structured authoring without XML - how it works</title>
      <dc:creator>Vlad Kuzin</dc:creator>
      <pubDate>Tue, 04 Aug 2026 07:05:16 +0000</pubDate>
      <link>https://dev.to/kuzin/structured-authoring-without-xml-how-it-works-4i1e</link>
      <guid>https://dev.to/kuzin/structured-authoring-without-xml-how-it-works-4i1e</guid>
      <description>&lt;h2&gt;
  
  
  What is structured authoring?
&lt;/h2&gt;

&lt;p&gt;Structured authoring means writing content as reusable, semantic building blocks instead of free-form documents. The idea has been around for decades. DITA XML formalized it in the early 2000s. But the tooling has always assumed you are comfortable with XML. If you are new to the concept, start with the guide to &lt;a href="https://topicary.com/blog/what-is-ccms" rel="noopener noreferrer"&gt;what a CCMS is&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Topicary keeps the principles and drops the markup. For &lt;a href="https://topicary.com/blog/xml-structured-authoring-research" rel="noopener noreferrer"&gt;the research behind this approach&lt;/a&gt;, see what 59 technical writers actually say about XML and structured authoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Components: write once, reuse everywhere
&lt;/h2&gt;

&lt;p&gt;A component is a block of content (a warning, a setup step, a compatibility note) that you write once and reference from any topic. When you update the source component, every reference updates automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a component
&lt;/h3&gt;

&lt;p&gt;Select any block in the editor, open the slash command menu, and choose "Save as component." Give it a name, and it is available for insertion anywhere in the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where-used tracking
&lt;/h3&gt;

&lt;p&gt;Every component shows a where-used panel: which topics reference it, in which maps, published to which sites. Before you edit a shared component, you can see the blast radius.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conditions: one topic, multiple audiences
&lt;/h2&gt;

&lt;p&gt;Conditional content lets you maintain a single topic that serves multiple audiences. Tag blocks with conditions — by product, plan, platform, or custom taxonomy — and filter at publish time.&lt;/p&gt;

&lt;h3&gt;
  
  
  In-editor preview
&lt;/h3&gt;

&lt;p&gt;Toggle conditions in the editor to see exactly what each audience will see. No build step, no waiting. The filtered view updates instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Variables: change once, propagate everywhere
&lt;/h2&gt;

&lt;p&gt;Product names change. Version numbers increment. URLs move. Variables let you define these once and reference them throughout your content. Update the variable value and every reference updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  The import path
&lt;/h2&gt;

&lt;p&gt;If you are coming from another tool, Topicary imports your existing content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Markdown&lt;/strong&gt;: headings, lists, tables, code blocks, images&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DITA&lt;/strong&gt;: topics, maps, conrefs mapped to components, conditions preserved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MadCap Flare&lt;/strong&gt;: &lt;a href="https://topicary.com/blog/migrate-from-flare" rel="noopener noreferrer"&gt;full project import&lt;/a&gt; with TOC, snippets, variables, conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confluence&lt;/strong&gt;: page trees with macro cleanup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word&lt;/strong&gt;: .docx with heading hierarchy preserved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAPI&lt;/strong&gt;: 3.x specs converted to reference documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drag a file or zip onto the import dialog. Format auto-detected, preview before you commit. To understand &lt;a href="https://topicary.com/blog/why-we-built-topicary" rel="noopener noreferrer"&gt;why I built Topicary&lt;/a&gt; and the gap it fills between enterprise CCMS tools and modern wikis, read the full story.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>technicalwriting</category>
      <category>markdown</category>
    </item>
  </channel>
</rss>
