<p>That's six context switches for something that should be zero.</p><p>Today's release adds <code>@elyracode/youtrack</code> — a full YouTrack integration that lets the agent read, create, update, and manage issues without you ever leaving the terminal.</p><h2>Setup</h2><p>Two environment variables. That's it.</p><pre><code class="language-bash">export YOUTRACK_BASE_URL=https://your-instance.youtrack.cloud
export YOUTRACK_TOKEN=perm:xxx.xxx.xxx
</code></pre><p>Or drop them in your project's <code>.env</code>:</p><pre><code>YOUTRACK_BASE_URL=https://your-instance.youtrack.cloud
YOUTRACK_TOKEN=perm:xxx.xxx.xxx
</code></pre><p>Then install the extension:</p><pre><code class="language-bash">elyra install npm:@elyracode/youtrack
</code></pre><p>No Composer dependency. No npm package in your project. No config files. The token is a YouTrack permanent token — generate one from <strong>Profile → Account Security → Tokens</strong> in your YouTrack instance.</p><h2>What you can do</h2><p>Eighteen tools covering the full YouTrack API. Here's what that looks like in practice.</p><h3>"What's on my plate?"</h3><pre><code>&gt; Show me my open issues

  Calling youtrack_search_issues({ query: "for: me #Unresolved" })

  12 issue(s):

  ECOM-342  Fix checkout timeout on mobile  [In Progress]  P:Critical  @kh
  FEED-89   RSS feed missing image tags     [Open]         P:Normal    @kh
  POS-201   Receipt printer encoding bug    [Open]         P:Major     @kh
  ...
</code></pre><p>The agent uses YouTrack's query language directly. <code>for: me</code> means "assigned to the authenticated user." <code>#Unresolved</code> means "not in a resolved state." You can combine these freely:</p><pre><code>&gt; Show me critical bugs in the Ecom project updated this week

  Calling youtrack_search_issues({
    query: "project: Ecom Type: Bug Priority: Critical updated: {this week}"
  })
</code></pre><h3>"Tell me about this issue"</h3><pre><code>&gt; What's the full story on ECOM-342?

  Calling youtrack_get_issue({ issue_id: "ECOM-342" })

  ECOM-342: Fix checkout timeout on mobile
  Description: Users on iOS Safari experience a 30s timeout when submitting
  the checkout form. The request reaches the server but the response is not
  received by the client...
  Project: Ecom
  Reporter: Anna Larsen
  Created: 2026-05-22 09:14 UTC
  Updated: 2026-05-26 16:30 UTC
  Custom Fields:
    Priority: Critical
    State: In Progress
    Assignee: Knut W. Horne
    Type: Bug
    Subsystem: Checkout
</code></pre><p>The agent sees everything: custom fields, tags, timestamps, reporter, votes. Enough context to start working on the fix immediately.</p><h3>"Fix it and update the issue"</h3><p>This is where it gets interesting. You can chain the issue context directly into code work:</p><pre><code>&gt; Read ECOM-342, fix the bug, and update the issue when you're done
</code></pre><p>The agent reads the issue, understands the problem from the description, finds the relevant code, makes the fix, runs the tests, and then:</p><pre><code>  Calling youtrack_update_issue({
    issue_id: "ECOM-342",
    custom_fields: [{ name: "State", value: { name: "Fixed" } }]
  })

  Calling youtrack_add_comment({
    issue_id: "ECOM-342",
    text: "Fixed in `CheckoutController@submit`. The timeout was caused by
    a missing `await` on the payment gateway response. Added proper async
    handling and a 15s client-side timeout with retry."
  })
</code></pre><p>No tab switching. No copy-pasting. The agent goes from issue to fix to update in one conversation.</p><h3>"Create an issue for what I just found"</h3><p>When the agent discovers something during its work — a missing index, a potential race condition, a deprecated API call — it can file an issue directly:</p><pre><code>&gt; I noticed the users table is missing an index on email. Create an issue for that.

  Calling youtrack_get_issue_fields_schema({ project_id: "ECOM" })
  Calling youtrack_create_issue({
    project_id: "0-7",
    summary: "Add database index on users.email column",
    description: "The `users` table is missing an index on the `email` column.
    This causes full table scans on login and password reset lookups.
    Currently ~50k rows, will degrade as the table grows.",
    custom_fields: [
      { name: "Type", value: { name: "Task" } },
      { name: "Priority", value: { name: "Normal" } },
      { name: "Subsystem", value: { name: "Database" } }
    ]
  })

  Created issue ECOM-358
  URL: https://works.gets.no/issue/ECOM-358
</code></pre><p>Notice it called <code>get_issue_fields_schema</code> first. That's the skill teaching the agent to discover which custom fields exist and what values are valid before trying to create an issue. No guessing. No "field not found" errors.</p><h3>"Reassign and comment"</h3><pre><code>&gt; Reassign POS-201 to @anna and add a comment explaining why

  Calling youtrack_change_assignee({ issue_id: "POS-201", assignee: "anna" })
  Calling youtrack_add_comment({
    issue_id: "POS-201",
    text: "Reassigning to @anna — this is in the receipt printing subsystem
    which she owns. The encoding issue is likely in the ESC/POS byte sequence
    for Norwegian characters (ø, æ, å)."
  })
</code></pre><h3>"What did the team discuss?"</h3><pre><code>&gt; Show me the comments on FEED-89

  Calling youtrack_get_comments({ issue_id: "FEED-89" })

  3 comment(s):

  [2026-05-23 11:20 UTC] Anna Larsen:
  The RSS spec requires `&lt;enclosure&gt;` tags for images, not `&lt;image&gt;`.
  See https://www.rssboard.org/rss-specification#ltenclosuregtSubelementOfLtitemgt

  [2026-05-24 09:45 UTC] Knut W. Horne:
  Good catch. The feed generator uses a custom template — need to update
  `FeedItemTransformer` to emit enclosure tags.

  [2026-05-26 14:10 UTC] Anna Larsen:
  Also check if we need `type` and `length` attributes. Some readers
  reject enclosures without them.
</code></pre><p>Now the agent has the full discussion context. It can read the comments, understand the requirements, and implement the fix correctly on the first try.</p><h2>The full toolkit</h2><p>Category Tools Issues <code>search_issues</code>, <code>get_issue</code>, <code>create_issue</code>, <code>update_issue</code> Assignment <code>change_assignee</code> Comments <code>add_comment</code>, <code>get_comments</code> Tags and links <code>manage_tags</code>, <code>link_issues</code> Projects <code>find_projects</code>, <code>get_project</code>, <code>get_issue_fields_schema</code> Users <code>find_user</code>, <code>get_current_user</code> Knowledge base <code>search_articles</code>, <code>get_article</code>, <code>create_article</code> Time tracking <code>log_work</code></p><p>The tools mirror YouTrack's own MCP tool set, but they run natively inside Elyra — no MCP server needed, no separate process, no stdio transport. Just direct REST API calls with proper error handling and formatted output.</p><h2>Why this matters</h2><p>Issue trackers and code editors are two halves of the same workflow. The issue describes what needs to change. The editor is where the change happens. But they've always been separate applications, separate windows, separate contexts.</p><p>When the agent can read issues, it understands <em>why</em> the code needs to change — not just <em>what</em> you're asking it to do. When it can update issues, the project management side stays in sync without you doing manual bookkeeping. When it can read comments, it picks up context from your team's discussion that you might not have thought to mention.</p><p>The result is fewer context switches, less copy-pasting, and an agent that understands your work at the project level — not just the file level.</p><h2>Get it</h2><pre><code class="language-bash">npm install -g @elyracode/coding-agent@0.8.1
elyra install npm:@elyracode/youtrack
</code></pre><p>Set your <code>YOUTRACK_BASE_URL</code> and <code>YOUTRACK_TOKEN</code>, and the 18 tools are available immediately.</p><p>Full changelog: <a target="_blank" rel="noopener noreferrer nofollow" href="https://elyracode.com/changelog#v0.8.1">v0.8.1</a></p>