<?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: Kirill</title>
    <description>The latest articles on DEV Community by Kirill (@waterflane).</description>
    <link>https://dev.to/waterflane</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%2F4032101%2F26c72ccd-f179-4c59-9c37-cebdac37bc96.png</url>
      <title>DEV Community: Kirill</title>
      <link>https://dev.to/waterflane</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/waterflane"/>
    <language>en</language>
    <item>
      <title>ContextForge: How to Build a Bounded and Verifiable Context for Coding Agents</title>
      <dc:creator>Kirill</dc:creator>
      <pubDate>Sat, 22 Aug 2026 12:38:30 +0000</pubDate>
      <link>https://dev.to/waterflane/contextforge-how-to-build-a-bounded-and-verifiable-context-for-coding-agents-27nn</link>
      <guid>https://dev.to/waterflane/contextforge-how-to-build-a-bounded-and-verifiable-context-for-coding-agents-27nn</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcnxq8xvoq1j5mkv9qzwb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcnxq8xvoq1j5mkv9qzwb.png" alt=" " width="512" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  In Brief
&lt;/h2&gt;

&lt;p&gt;Large agents are good at writing code, and many work well with context, but in large projects, context often bloats significantly, rendering local models almost useless, and large ones consume so much context that they can even hit limits! But that's not the only problem: sometimes you need to fix one small bug, but the agent spends more than half of its context just analyzing the project!&lt;/p&gt;

&lt;p&gt;And so three problems arise:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The context bloats;&lt;/li&gt;
&lt;li&gt;It accumulates things that are unnecessary for the task;&lt;/li&gt;
&lt;li&gt;Local models stop working properly altogether.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I created a project that solves these problems.&lt;/p&gt;

&lt;p&gt;ContextForge is a separate layer between the repository and the coding agent. It doesn't write code: it analyzes the project, selects a limited set of the required context, and returns the result in the form of your prompt + context.&lt;/p&gt;

&lt;p&gt;I recently released the project into open beta testing; you can find it on GitHub at the end of the article!&lt;/p&gt;




&lt;h2&gt;
  
  
  Why do we need a separate context layer at all?
&lt;/h2&gt;

&lt;p&gt;Let's say we assign a task to an agent.&lt;/p&gt;

&lt;p&gt;A human already knows where to look. But for the agent, the whole chain of thought starts all over again:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What project is this?&lt;/li&gt;
&lt;li&gt;What version?&lt;/li&gt;
&lt;li&gt;Do the source files match the git repository?&lt;/li&gt;
&lt;li&gt;Where is the main file?&lt;/li&gt;
&lt;li&gt;What function is this?&lt;/li&gt;
&lt;li&gt;Which variables and functions already exist, and which ones need to be written?&lt;/li&gt;
&lt;li&gt;And so on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, before writing the code, the agent performs one more task: &lt;strong&gt;scanning the repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And maybe my wording is a bit crude (in addition to scanning, the agent is also thinking about how to test, etc.), but scanning a repository is a problem that grows as the repository grows and consumes more and more tokens with each request.&lt;/p&gt;




&lt;h1&gt;
  
  
  Bottom Line
&lt;/h1&gt;

&lt;p&gt;Initially, I wanted to take one thing away from the agent—context management.&lt;/p&gt;

&lt;p&gt;Currently, the project is still in beta (or even alpha) status. Context may be generated incorrectly, and the local model may introduce hallucinations into the context (and not fix them during testing). But for the most part, the project is already working.&lt;/p&gt;

&lt;p&gt;If you don't mind, I'd love to get a review and hear your ideas and concerns!&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/waterflane/ContextForge" rel="noopener noreferrer"&gt;https://github.com/waterflane/ContextForge&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>context</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Telegram Has Rich Messages Now — So I Built a Markdown Workflow for Them</title>
      <dc:creator>Kirill</dc:creator>
      <pubDate>Thu, 16 Jul 2026 12:19:02 +0000</pubDate>
      <link>https://dev.to/waterflane/telegram-has-rich-messages-now-so-i-built-a-markdown-workflow-for-them-34og</link>
      <guid>https://dev.to/waterflane/telegram-has-rich-messages-now-so-i-built-a-markdown-workflow-for-them-34og</guid>
      <description>&lt;p&gt;Telegram messages have traditionally been fairly simple.&lt;/p&gt;

&lt;p&gt;You could send text, apply basic formatting, attach media, or use a few special message types such as polls. More complex posts usually had to be split across multiple messages or assembled manually with separate media groups.&lt;/p&gt;

&lt;p&gt;That changed with Telegram's new &lt;strong&gt;rich messages&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rich messages can contain structured blocks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;section headings;&lt;/li&gt;
&lt;li&gt;paragraphs;&lt;/li&gt;
&lt;li&gt;quotations;&lt;/li&gt;
&lt;li&gt;collapsible details;&lt;/li&gt;
&lt;li&gt;mathematical expressions;&lt;/li&gt;
&lt;li&gt;dividers;&lt;/li&gt;
&lt;li&gt;inline images and videos;&lt;/li&gt;
&lt;li&gt;collages;&lt;/li&gt;
&lt;li&gt;slideshows;&lt;/li&gt;
&lt;li&gt;and more!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of treating a post as one text string followed by attachments, Telegram can now represent it as a sequence of content blocks.&lt;/p&gt;

&lt;p&gt;This makes a Telegram message feel much closer to a small article.&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%2Fgithub.com%2Fuser-attachments%2Fassets%2Faa85dd3b-7934-4c95-b971-530d2cb420fb" 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%2Fgithub.com%2Fuser-attachments%2Fassets%2Faa85dd3b-7934-4c95-b971-530d2cb420fb" alt="Example of a Telegram rich message" width="506" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Two related Telegram updates
&lt;/h2&gt;

&lt;p&gt;There are two parts of this change that are easy to confuse.&lt;/p&gt;

&lt;p&gt;In June 2026, Telegram introduced rich-text messages for bots. The Bot API gained structured rich-message objects that bots could use to send long, block-based posts.&lt;/p&gt;

&lt;p&gt;In July 2026, Telegram added a visual rich-text editor to its official clients. The editor supports headings, lists, tables, quotations, code blocks, inline media and messages containing more than 32,000 characters.&lt;/p&gt;

&lt;p&gt;However, Telegram currently makes the visual editor available only to Telegram Premium users.&lt;/p&gt;

&lt;p&gt;The underlying rich-message format is not limited to manually composed Premium messages. Bots can construct rich messages through Telegram's official API.&lt;/p&gt;

&lt;p&gt;That distinction creates an interesting opportunity: alternative editors can be built on top of the official bot interface.&lt;/p&gt;

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

&lt;p&gt;The new format is useful for more than decorative channel posts.&lt;/p&gt;

&lt;p&gt;A structured message can represent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a project announcement;&lt;/li&gt;
&lt;li&gt;release notes;&lt;/li&gt;
&lt;li&gt;technical documentation;&lt;/li&gt;
&lt;li&gt;an event schedule;&lt;/li&gt;
&lt;li&gt;a tutorial;&lt;/li&gt;
&lt;li&gt;a community guide;&lt;/li&gt;
&lt;li&gt;a FAQ;&lt;/li&gt;
&lt;li&gt;a product changelog;&lt;/li&gt;
&lt;li&gt;a formatted news post;&lt;/li&gt;
&lt;li&gt;a collection of images with commentary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Previously, creating this kind of content in Telegram often required several separate messages. The result was harder to edit, forward and read as one document.&lt;/p&gt;

&lt;p&gt;Rich messages make the structure explicit.&lt;/p&gt;

&lt;p&gt;A heading is a heading. A list is a list. A collage is a content block rather than a loosely associated group of attachments.&lt;/p&gt;

&lt;h2&gt;
  
  
  The current accessibility problem
&lt;/h2&gt;

&lt;p&gt;The feature itself was generally received as useful, but the Premium restriction generated a predictable discussion.&lt;/p&gt;

&lt;p&gt;In a recent discussion on r/Telegram, users questioned why basic formatting such as lists and richer posts required a subscription. Some Premium subscribers also argued that formatting is not inherently an advanced or resource-intensive feature.&lt;/p&gt;

&lt;p&gt;This resembles the reaction to Telegram checklists. When collaborative checklists were introduced, users reported that non-Premium members could see a checklist but could not necessarily interact with it in the way group members expected.&lt;/p&gt;

&lt;p&gt;The issue is not simply that Telegram Premium exists. Premium subscriptions fund Telegram and include many optional capabilities.&lt;/p&gt;

&lt;p&gt;The practical problem is that structured content is especially useful in collaborative environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;community channels;&lt;/li&gt;
&lt;li&gt;open-source projects;&lt;/li&gt;
&lt;li&gt;student groups;&lt;/li&gt;
&lt;li&gt;small teams;&lt;/li&gt;
&lt;li&gt;public announcements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In those environments, requiring every author to use the same paid editor can make adoption less convenient.&lt;/p&gt;

&lt;p&gt;Bots provide another interface to the same platform capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Markdown-based approach
&lt;/h2&gt;

&lt;p&gt;I wanted to test whether rich Telegram posts could be created without building another large visual editor.&lt;/p&gt;

&lt;p&gt;Markdown was a natural input format because it is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;readable as plain text;&lt;/li&gt;
&lt;li&gt;familiar to developers;&lt;/li&gt;
&lt;li&gt;easy to store in Git;&lt;/li&gt;
&lt;li&gt;portable between editors;&lt;/li&gt;
&lt;li&gt;suitable for templates;&lt;/li&gt;
&lt;li&gt;straightforward to generate programmatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The resulting workflow is intentionally simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a post in Markdown.&lt;/li&gt;
&lt;li&gt;Send the text or a UTF-8 &lt;code&gt;.md&lt;/code&gt; file to a Telegram bot.&lt;/li&gt;
&lt;li&gt;Let the bot parse the document.&lt;/li&gt;
&lt;li&gt;Convert supported Markdown extensions into Telegram rich-message blocks.&lt;/li&gt;
&lt;li&gt;Preview and publish the resulting message.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7xyvrgxueuh84klob22j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7xyvrgxueuh84klob22j.png" alt="test" width="465" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is called &lt;strong&gt;Amethyst-Post-Bot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is not a modified Telegram client and it does not imitate user actions. It uses Telegram's official bot APIs to construct messages from structured blocks.&lt;/p&gt;

&lt;p&gt;You can check out my implementation on GitHub: &lt;a href="https://github.com/rassvetteam/Amethyst-Post-Bot" rel="noopener noreferrer"&gt;https://github.com/rassvetteam/Amethyst-Post-Bot&lt;/a&gt;&lt;br&gt;
And support me, too! &lt;a href="https://www.patreon.com/waterflane_dev" rel="noopener noreferrer"&gt;https://www.patreon.com/waterflane_dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>telegram</category>
      <category>bot</category>
      <category>dev</category>
    </item>
  </channel>
</rss>
