<?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: Pascal van Kooten</title>
    <description>The latest articles on DEV Community by Pascal van Kooten (@kootenpv).</description>
    <link>https://dev.to/kootenpv</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%2F3892496%2Ff3508cf0-c01f-436a-9d45-a51a039a22ae.jpeg</url>
      <title>DEV Community: Pascal van Kooten</title>
      <link>https://dev.to/kootenpv</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kootenpv"/>
    <language>en</language>
    <item>
      <title>Announcing Cliche</title>
      <dc:creator>Pascal van Kooten</dc:creator>
      <pubDate>Wed, 29 Apr 2026 19:50:07 +0000</pubDate>
      <link>https://dev.to/kootenpv/announcing-cliche-ebm</link>
      <guid>https://dev.to/kootenpv/announcing-cliche-ebm</guid>
      <description>&lt;p&gt;Hi there!&lt;/p&gt;

&lt;p&gt;My background: over the last 10 years I have created quite some tools in open-source, but now in the AI era this is more interesting than ever.&lt;/p&gt;

&lt;p&gt;With LLMs, I found that those pesky/time consuming tasks are suddenly achievable without getting tired.&lt;/p&gt;

&lt;p&gt;I created cliche a few years ago and it had been used at the companies I worked at before, but I never made the push to publicly announce it since it had a lot of rough edges.&lt;/p&gt;

&lt;p&gt;So over the last few weeks (which is honestly very long when using a lot of LLMs) I have built upon a package that I hope will be useful to the Python ecosystem.&lt;/p&gt;

&lt;p&gt;While the code was largely generated by an LLM, I've written this post myself to ensure it remains personal and avoids the 'AI slop' label, please give it an honest chance :)&lt;/p&gt;

&lt;p&gt;Without further ado, I am pretty excited to announce the (mostly finished) preview of cliche:&lt;br&gt;
&lt;a href="https://github.com/kootenpv/cliche" rel="noopener noreferrer"&gt;https://github.com/kootenpv/cliche&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pypi.org/project/cliche" rel="noopener noreferrer"&gt;https://pypi.org/project/cliche&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core idea is that all you'd need to do to make a CLI from python code is to annotate a function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cliche&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cli&lt;/span&gt;
&lt;span class="nd"&gt;@cli&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hi &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you'd run &lt;code&gt;cliche install mytool&lt;/code&gt; and you can run it as &lt;code&gt;mytool greet &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There's not much more you need to know about the library to be able to use it, you can just bolt it onto your existing functions and it should generally work (support for pydantic/protobuf/enum out of the box).&lt;/p&gt;

&lt;p&gt;I added a lot of functionality to try to make it very nice and usable for humans, while at the same time optimizing it like crazy for AI as well.&lt;/p&gt;

&lt;p&gt;For this I added &lt;code&gt;--llm-help&lt;/code&gt; to both cliche as well as the tool that you create. This way, you won't have to explain to any LLM what to do and it can perfectly implement this for you.&lt;/p&gt;

&lt;p&gt;I would really hope that I can get this to be used (or at least understood by default) by LLMs such that you can say "make a python CLI tool" without having to refer to the help.&lt;/p&gt;

&lt;p&gt;Also: it's currently not in its form that it would have no breaking changes, I hope that people can help me find the blindspots so that I can make everything resilient and it'll be more battle-tested.&lt;br&gt;
The usage of cliche should not really change at this point, but I suspect perhaps some work is needed to avoid all possible bugs you guys might encounter.&lt;/p&gt;

&lt;p&gt;I really hope to get a lot of (constructive) positive (or negative) feedback (obviously, while I put a lot of effort, it can easily have huge blindspots, so I hope you give it a try)&lt;/p&gt;

&lt;p&gt;Thanks for your time!&lt;/p&gt;

&lt;p&gt;Your tools will automatically get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no boilerplate ugly code like Click that often involves multiple lines per function&lt;/li&gt;
&lt;li&gt;lightning fast startup time (3-50ms)&lt;/li&gt;
&lt;li&gt;autocomplete out of the box using C module built-in to cliche (&amp;lt;5ms per tab, whereas most other python tools would have 30ms-300ms) as it won't import any python modules&lt;/li&gt;
&lt;li&gt;prettified help (but simpler than typer's)&lt;/li&gt;
&lt;li&gt;LLM support (--llm-help)&lt;/li&gt;
&lt;li&gt;smaller traceback&lt;/li&gt;
&lt;li&gt;other --cli flags&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>llm</category>
      <category>opensource</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
