<?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: Daniel Montes</title>
    <description>The latest articles on DEV Community by Daniel Montes (@danielmontes9).</description>
    <link>https://dev.to/danielmontes9</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1022150%2Fe446c3b0-d601-4b57-89d6-910effb2fb3c.png</url>
      <title>DEV Community: Daniel Montes</title>
      <link>https://dev.to/danielmontes9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danielmontes9"/>
    <language>en</language>
    <item>
      <title>GitHub Copilot's Hidden Agentic OS: The 4 Layers You Are Missing</title>
      <dc:creator>Daniel Montes</dc:creator>
      <pubDate>Sat, 11 Apr 2026 05:39:59 +0000</pubDate>
      <link>https://dev.to/danielmontes9/github-copilots-hidden-agentic-os-the-4-layers-you-are-missing-kfb</link>
      <guid>https://dev.to/danielmontes9/github-copilots-hidden-agentic-os-the-4-layers-you-are-missing-kfb</guid>
      <description>&lt;p&gt;If your team is treating artificial intelligence coding assistants merely as an "autocomplete on steroids," you are likely leaving 70% of their capabilities untouched. &lt;/p&gt;

&lt;p&gt;Recent evolutions in how developers interact with AI have transformed the humble &lt;code&gt;.github&lt;/code&gt; folder into a full-fledged &lt;strong&gt;Agentic Operating System (OS)&lt;/strong&gt;. It's no longer just a place for a single instruction file; it's a composable, multi-layered ecosystem designed to manage context, enforce security, and execute autonomous workflows.&lt;/p&gt;

&lt;p&gt;This introductory article explores the mental model of this Agentic OS and introduces its 4 distinct layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: "Stateless" AI Assistants
&lt;/h2&gt;

&lt;p&gt;The biggest challenge engineering teams face when adopting AI coding assistants is context loss. &lt;/p&gt;

&lt;p&gt;When an AI agent is stateless, every prompt requires developers to manually feed it coding standards, framework rules, and project conventions. This leads to inconsistent code, security vulnerabilities, and developer fatigue. Platform engineering teams need a way to ensure their AI agents operate within a governed, deterministic framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: The Agentic OS Architecture
&lt;/h2&gt;

&lt;p&gt;An "Agentic OS" solves this by acting as the business brain for your repository. It manages resources, context, memory, and automated tasks so the AI has continuity and reliability. &lt;/p&gt;

&lt;p&gt;Mapping out the &lt;code&gt;.github&lt;/code&gt; ecosystem reveals 7 composable primitives structured across 4 functional layers:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Layer 1 — Always-On Context
&lt;/h3&gt;

&lt;p&gt;This is the &lt;strong&gt;Passive Memory&lt;/strong&gt; of your assistant. Files like &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; apply to every single prompt automatically.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Use cases:&lt;/strong&gt; Enforcing universal coding standards, repository naming conventions, and foundational framework rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Layer 2 — On-Demand Capabilities
&lt;/h3&gt;

&lt;p&gt;This layer introduces specialized tools and memory loaded only when necessary (Progressive Loading). It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Prompt Files:&lt;/strong&gt; Pre-configured prompts invoked manually via slash commands (e.g., &lt;code&gt;/security-review&lt;/code&gt;, &lt;code&gt;/changelog&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Custom Agents:&lt;/strong&gt; Specialist personas (e.g., a Planning Agent chaining work to an Implementation Agent).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Skills:&lt;/strong&gt; Repeatable runbooks and incident triage scripts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Layer 3 — Enforcement &amp;amp; Automation
&lt;/h3&gt;

&lt;p&gt;This is where probabilistic LLMs meet deterministic guarantees. This layer introduces structural controls.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Hooks:&lt;/strong&gt; Deterministic shell commands that trigger at lifecycle events (e.g., &lt;code&gt;preToolUse&lt;/code&gt; to approve or deny an action before it executes).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Agentic Workflows:&lt;/strong&gt; Natural language automations compiled into GitHub Actions for CI failure analysis or issue triage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Layer 4 — Distribution
&lt;/h3&gt;

&lt;p&gt;Once you have built your perfect Agentic OS for a project, you need to scale it. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Plugins:&lt;/strong&gt; Decentralized packaging allows you to bundle agents, prompts, and skills to share team-specific configurations across the entire enterprise.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Understanding this 4-layer architecture shifts GitHub Copilot from a passive autocomplete tool into an active, governed participant in your software development lifecycle. &lt;/p&gt;

&lt;p&gt;In the upcoming articles of this series, we will dive deep into each layer, starting with how to properly configure your &lt;strong&gt;Always-On Context&lt;/strong&gt; to enforce coding standards without overloading the context window. Stay tuned!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>githubcopilot</category>
      <category>agentic</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Stop pasting broken Markdown into Jira: building md2jira</title>
      <dc:creator>Daniel Montes</dc:creator>
      <pubDate>Sun, 05 Apr 2026 05:31:26 +0000</pubDate>
      <link>https://dev.to/danielmontes9/stop-pasting-broken-markdown-into-jira-building-md2jira-4h12</link>
      <guid>https://dev.to/danielmontes9/stop-pasting-broken-markdown-into-jira-building-md2jira-4h12</guid>
      <description>&lt;p&gt;If you write Jira tickets in Markdown, you've probably hit the same problem I did: the moment you paste that text into Jira, the result is inconsistent.&lt;/p&gt;

&lt;p&gt;Sometimes you get raw &lt;code&gt;**bold**&lt;/code&gt;, &lt;code&gt;# headers&lt;/code&gt;, and pipe tables. Sometimes Jira partially formats things. Tables and code blocks usually need manual cleanup.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;md2jira&lt;/strong&gt; to make that workflow predictable.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is md2jira?
&lt;/h2&gt;

&lt;p&gt;md2jira is a monorepo with three independent pieces that share the same conversion engine:&lt;/p&gt;

&lt;h3&gt;
  
  
  Web previewer (&lt;code&gt;apps/web&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;A live two-panel editor in the browser. Paste Markdown on the left, get Jira-ready output on the right — instantly, with no backend, no login, and no data sent anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use this if:&lt;/strong&gt; you want to convert Markdown to Jira format right now without installing anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core package (&lt;code&gt;md2jira-core&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;A pure TypeScript library — zero browser or framework dependencies. It exports two functions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;convert(md)&lt;/code&gt; → Jira Wiki Markup string (for Jira Server / Data Center)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;convertToAdf(md)&lt;/code&gt; → ADF JSON object (for Jira Cloud)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use this if:&lt;/strong&gt; you want to integrate Markdown-to-Jira conversion into your own Node.js app, script, or VS Code extension.&lt;/p&gt;

&lt;h3&gt;
  
  
  CLI (&lt;code&gt;md2jira-cli&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;A command-line tool that wraps &lt;code&gt;md2jira-core&lt;/code&gt;. Reads a Markdown file (or stdin) and writes Jira Wiki Markup to stdout or a file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use this if:&lt;/strong&gt; you want to convert files from the terminal or integrate the conversion into a shell script or CI pipeline.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;md2jira input.md                  &lt;span class="c"&gt;# stdout&lt;/span&gt;
md2jira input.md &lt;span class="nt"&gt;-o&lt;/span&gt; output.txt    &lt;span class="c"&gt;# write to file&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;input.md | md2jira            &lt;span class="c"&gt;# pipe from stdin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://danielmontes9.github.io/md2jira" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/danielmontes9/md2jira" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/md2jira-core" rel="noopener noreferrer"&gt;npm core&lt;/a&gt; / &lt;a href="https://www.npmjs.com/package/md2jira-cli" rel="noopener noreferrer"&gt;npm cli&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The problem in practice
&lt;/h2&gt;

&lt;p&gt;Here's the difference between pasting raw Markdown directly into Jira and running it through md2jira first:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg22hqruasqtcbpxgjfab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg22hqruasqtcbpxgjfab.png" alt="Before: raw markdown pasted into Jira — no formatting applied"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the left, Jira gets raw Markdown and leaves it as plain text. On the right, the same content is converted into properly formatted Jira content with headings, emphasis, tables, nested lists, blockquotes, and code blocks.&lt;/p&gt;




&lt;h2&gt;
  
  
  The web previewer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8wihnyo6utv64lvh90y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8wihnyo6utv64lvh90y.png" alt="md2jira-previewer — live two-panel converter in the browser"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The web app is designed for people who don't want to install anything. Go to the URL, paste your Markdown, copy the output.&lt;/p&gt;

&lt;p&gt;The interface is a split panel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Left panel:&lt;/strong&gt; a Markdown editor with line numbers, keyboard shortcuts (Ctrl+B, Ctrl+I, Ctrl+Shift+K, Alt+↑↓…), import/export, and a "Copy MD" button&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right panel:&lt;/strong&gt; live output with two independent toggles — format (&lt;strong&gt;Jira Cloud&lt;/strong&gt; / &lt;strong&gt;Wiki Markup&lt;/strong&gt;) and view (&lt;strong&gt;Preview&lt;/strong&gt; / &lt;strong&gt;Code&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;"Copy for Jira"&lt;/strong&gt; button is worth highlighting: it writes rich HTML plus plain text to the clipboard at the same time. When you paste directly into Jira Cloud, it renders as formatted content immediately — no manual cleanup needed. This is the main quality-of-life improvement over copying raw text.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it converts
&lt;/h2&gt;

&lt;p&gt;The core package currently handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;# Heading&lt;/code&gt; → &lt;code&gt;h1. Heading&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;**bold**&lt;/code&gt; → &lt;code&gt;*bold*&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;_italic_&lt;/code&gt; → &lt;code&gt;_italic_&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~~strike~~&lt;/code&gt; → &lt;code&gt;-strike-&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;`inline code`&lt;/code&gt; → &lt;code&gt;{{inline code}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;fenced code blocks → &lt;code&gt;{code}&lt;/code&gt; / &lt;code&gt;{code:language=...}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;unordered and ordered lists&lt;/li&gt;
&lt;li&gt;links, blockquotes, horizontal rules, and tables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tables were the hardest part. They needed special handling for multiline cells, unequal column counts, escaping pipes inside cells, and inline formatting inside the table content itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  What turned out to be harder than expected
&lt;/h2&gt;

&lt;p&gt;At first glance, Markdown-to-Jira sounds like a simple string replacement problem. It isn't.&lt;/p&gt;

&lt;p&gt;The hardest parts were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tables:&lt;/strong&gt; Jira table syntax is strict, and real Markdown tables are often messy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clipboard behavior:&lt;/strong&gt; Jira Cloud reacts differently depending on whether the clipboard contains plain text or rich HTML&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ADF vs Wiki Markup:&lt;/strong&gt; Jira Cloud prefers richer structured content, while Jira Server/Data Center workflows often still rely on Wiki Markup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keeping the core reusable:&lt;/strong&gt; &lt;code&gt;packages/core&lt;/code&gt; had to stay free of React and browser APIs so it can be reused in a future CLI and VS Code extension&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The npm packages
&lt;/h2&gt;

&lt;p&gt;Both packages are published to npm independently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Core library — use in your own Node.js/TS projects&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;md2jira-core

&lt;span class="c"&gt;# CLI — convert files from the terminal&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; md2jira-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;md2jira-core&lt;/code&gt; is a pure TypeScript library with &lt;strong&gt;zero browser or framework dependencies&lt;/strong&gt; — it works in Node.js, Deno, Bun, and VS Code extensions. &lt;code&gt;md2jira-cli&lt;/code&gt; is a thin wrapper around it that adds file I/O and stdin/stdout support.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;convert&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;md2jira-core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jira&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
# My Issue

Some **bold** text, _italic_, and ~~strikethrough~~.

| Field  | Value       |
|--------|-------------|
| Status | In Progress |
| Priority | **High**  |

- Item 1
- Item 2
  - Nested item

&lt;/span&gt;&lt;span class="se"&gt;\`\`\`&lt;/span&gt;&lt;span class="s2"&gt;js
console.log("hello")
&lt;/span&gt;&lt;span class="se"&gt;\`\`\`&lt;/span&gt;&lt;span class="s2"&gt;

&amp;gt; A blockquote

[Jira Docs](https://confluence.atlassian.com/jira)
`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jira&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h1. My Issue

Some *bold* text, _italic_, and -strikethrough-.

|| Field || Value ||
| Status | In Progress |
| Priority | *High* |

* Item 1
* Item 2
** Nested item

{code:language=js}
console.log("hello")
{code}

bq. A blockquote

[Jira Docs|https://confluence.atlassian.com/jira]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ADF (Atlassian Document Format)
&lt;/h3&gt;

&lt;p&gt;For Jira Cloud, you can also output &lt;strong&gt;ADF&lt;/strong&gt; — the native JSON format that Jira Cloud uses internally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;convertToAdf&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;md2jira-core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;adf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;convertToAdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`# Hello **World**`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;adf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The web app uses this output to generate the preview and the rich clipboard content used by the "Copy for Jira" action, which is what makes paste into Jira Cloud behave much better than plain text.&lt;/p&gt;




&lt;h2&gt;
  
  
  How it's built
&lt;/h2&gt;

&lt;p&gt;The conversion pipeline is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Markdown string
  → remark-parse (AST)
  → transforms/ (visit each node type)
  → Jira Wiki Markup string
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each node type (&lt;code&gt;heading&lt;/code&gt;, &lt;code&gt;paragraph&lt;/code&gt;, &lt;code&gt;table&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, etc.) has its own transform function in &lt;code&gt;packages/core/src/transforms/&lt;/code&gt;. The table transform handles the most edge cases — multiline cells joined with &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;, missing cells padded with empty values, and inline formatting (bold, italic, links, code) inside cells.&lt;/p&gt;

&lt;p&gt;The monorepo is structured so that &lt;code&gt;packages/core&lt;/code&gt; is 100% framework-agnostic — powering the web app, the CLI (&lt;code&gt;md2jira-cli&lt;/code&gt;), and a future VS Code extension.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MD Parser&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;remark-parse&lt;/code&gt; + &lt;code&gt;unified&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AST types&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@types/mdast&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI&lt;/td&gt;
&lt;td&gt;React 18 + Vite + Tailwind CSS v4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;Vitest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Package manager&lt;/td&gt;
&lt;td&gt;pnpm workspaces&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;If you work with Jira regularly, give it a try — feedback and PRs are very welcome!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://danielmontes9.github.io/md2jira" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/danielmontes9/md2jira" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/md2jira-core" rel="noopener noreferrer"&gt;npm core&lt;/a&gt; / &lt;a href="https://www.npmjs.com/package/md2jira-cli" rel="noopener noreferrer"&gt;npm cli&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>markdown</category>
      <category>jira</category>
      <category>typescript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
