<?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>Forem: артем</title>
    <description>The latest articles on Forem by артем (@_7ea16626d11fb14534e).</description>
    <link>https://forem.com/_7ea16626d11fb14534e</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%2F3843144%2F5e8dacc8-d00b-4160-8db7-c630cad2fb52.png</url>
      <title>Forem: артем</title>
      <link>https://forem.com/_7ea16626d11fb14534e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/_7ea16626d11fb14534e"/>
    <language>en</language>
    <item>
      <title>Bash workflows are broken — I built a tool to make them predictable again</title>
      <dc:creator>артем</dc:creator>
      <pubDate>Sat, 09 May 2026 08:54:08 +0000</pubDate>
      <link>https://forem.com/_7ea16626d11fb14534e/bash-workflows-are-broken-i-built-a-tool-to-make-them-predictable-again-1kc5</link>
      <guid>https://forem.com/_7ea16626d11fb14534e/bash-workflows-are-broken-i-built-a-tool-to-make-them-predictable-again-1kc5</guid>
      <description>&lt;p&gt;If you’ve ever debugged a broken CI pipeline at 2 AM, you probably know this feeling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“It works locally, but fails in CI”&lt;/li&gt;
&lt;li&gt;“What changed since last deploy?”&lt;/li&gt;
&lt;li&gt;“Why does this script behave differently on another machine?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shell workflows are powerful, but they have a fundamental problem:&lt;br&gt;
they are &lt;strong&gt;not reproducible, not observable, and not structured by default&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I kept running into the same issues across different projects, so I decided to experiment with a small tool to fix this at the CLI level.&lt;/p&gt;


&lt;h1&gt;
  
  
  The problem: shell workflows are invisible systems
&lt;/h1&gt;

&lt;p&gt;Bash and CLI tools are great, but they share a few weaknesses:&lt;/p&gt;
&lt;h3&gt;
  
  
  ❌ No built-in logging
&lt;/h3&gt;

&lt;p&gt;Once a command runs, it disappears unless you explicitly log everything.&lt;/p&gt;
&lt;h3&gt;
  
  
  ❌ No reproducibility layer
&lt;/h3&gt;

&lt;p&gt;Two developers running the same script can still get different outcomes.&lt;/p&gt;
&lt;h3&gt;
  
  
  ❌ CI/CD setups drift over time
&lt;/h3&gt;

&lt;p&gt;YAML configs, scripts, and environment assumptions slowly diverge.&lt;/p&gt;
&lt;h3&gt;
  
  
  ❌ Debugging is mostly guesswork
&lt;/h3&gt;

&lt;p&gt;You reconstruct what happened instead of observing it directly.&lt;/p&gt;


&lt;h1&gt;
  
  
  The idea: what if the terminal had a “trace layer”?
&lt;/h1&gt;

&lt;p&gt;I wanted something simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every command is logged&lt;/li&gt;
&lt;li&gt;workflows are reproducible&lt;/li&gt;
&lt;li&gt;pipelines are predictable&lt;/li&gt;
&lt;li&gt;debugging is deterministic instead of reactive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I started building a small CLI toolkit called &lt;strong&gt;OLS (Open Linux Shell)&lt;/strong&gt;.&lt;/p&gt;


&lt;h1&gt;
  
  
  What OLS does
&lt;/h1&gt;

&lt;p&gt;OLS is not a shell replacement.&lt;br&gt;
It’s a &lt;strong&gt;toolkit layer on top of CLI workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It focuses on three things:&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Observability for CLI workflows
&lt;/h2&gt;

&lt;p&gt;Every action is recorded so you can trace what actually happened.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Predictable environment checks
&lt;/h2&gt;

&lt;p&gt;Instead of “it works on my machine”, you can validate setups explicitly.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Pipeline-first design
&lt;/h2&gt;

&lt;p&gt;Tools are designed to work cleanly in CI/CD environments.&lt;/p&gt;


&lt;h1&gt;
  
  
  Example: CI/CD setup in one command
&lt;/h1&gt;

&lt;p&gt;Instead of manually configuring GitHub Actions or copying templates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cicd init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates a ready-to-use CI/CD pipeline.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example: environment validation
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ols doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Checks your system and highlights issues like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;missing dependencies&lt;/li&gt;
&lt;li&gt;misconfigured environment&lt;/li&gt;
&lt;li&gt;potential runtime problems&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Most teams don’t fail because of code.&lt;/p&gt;

&lt;p&gt;They fail because of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inconsistent environments&lt;/li&gt;
&lt;li&gt;unclear system state&lt;/li&gt;
&lt;li&gt;missing visibility into what actually happened&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OLS tries to reduce that gap by making CLI workflows more observable and reproducible.&lt;/p&gt;




&lt;h1&gt;
  
  
  Philosophy behind OLS
&lt;/h1&gt;

&lt;p&gt;The design is based on a few principles:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Everything must be traceable
&lt;/h3&gt;

&lt;p&gt;All actions should leave a clear trace so debugging becomes deterministic.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Minimal cognitive overhead
&lt;/h3&gt;

&lt;p&gt;Commands should be simple and predictable, without unnecessary flags or complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Pipeline-first thinking
&lt;/h3&gt;

&lt;p&gt;Every tool should work naturally in CI/CD environments and support stdin/stdout workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Offline-first usage model
&lt;/h3&gt;

&lt;p&gt;Packages are downloaded once and cached locally for reuse.&lt;/p&gt;




&lt;h1&gt;
  
  
  Current status
&lt;/h1&gt;

&lt;p&gt;OLS is an early-stage MVP.&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;experimental&lt;/li&gt;
&lt;li&gt;evolving quickly&lt;/li&gt;
&lt;li&gt;open to feedback and contributors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to explore whether adding a lightweight “observability layer” to CLI workflows actually improves developer experience in practice.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I’m looking for
&lt;/h1&gt;

&lt;p&gt;Right now, I’m mainly interested in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;feedback from DevOps / backend engineers&lt;/li&gt;
&lt;li&gt;real-world edge cases&lt;/li&gt;
&lt;li&gt;ideas for improving CLI observability&lt;/li&gt;
&lt;li&gt;whether this approach is useful beyond personal workflows&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Closing thought
&lt;/h1&gt;

&lt;p&gt;We already have observability for systems, logs for applications, and metrics for infrastructure.&lt;/p&gt;

&lt;p&gt;But our &lt;strong&gt;terminal workflows are still mostly invisible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;OLS is an attempt to change that — starting with something simple.&lt;/p&gt;




&lt;p&gt;If you’ve worked with CI/CD, bash automation, or messy shell scripts, I’d really appreciate &lt;/p&gt;

</description>
      <category>devops</category>
      <category>opensource</category>
      <category>automation</category>
      <category>cli</category>
    </item>
    <item>
      <title>I stopped guessing in CLI — logging changed everything</title>
      <dc:creator>артем</dc:creator>
      <pubDate>Wed, 25 Mar 2026 13:41:44 +0000</pubDate>
      <link>https://forem.com/_7ea16626d11fb14534e/i-stopped-guessing-in-cli-logging-changed-everything-2d1p</link>
      <guid>https://forem.com/_7ea16626d11fb14534e/i-stopped-guessing-in-cli-logging-changed-everything-2d1p</guid>
      <description>&lt;p&gt;I used to guess at the commands, typing in the console: &lt;code&gt;ls /var/log | grep&lt;/code&gt; "EE" But that didn't help. At some point, I started logging everything, and now I can see everything I do. Errors appear immediately. You can filter them right in the pipeline.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lslog | &lt;span class="nb"&gt;grep &lt;/span&gt;EE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I compiled this into a small tool: &lt;a href="https://github.com/artemkolba321-spec/OLS" rel="noopener noreferrer"&gt;https://github.com/artemkolba321-spec/OLS&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why I built OLS for predictable CLI workflows</title>
      <dc:creator>артем</dc:creator>
      <pubDate>Wed, 25 Mar 2026 12:12:58 +0000</pubDate>
      <link>https://forem.com/_7ea16626d11fb14534e/why-i-built-ols-for-predictable-cli-workflows-aee</link>
      <guid>https://forem.com/_7ea16626d11fb14534e/why-i-built-ols-for-predictable-cli-workflows-aee</guid>
      <description>&lt;p&gt;Every time I worked with pipelines and logs in Linux, I found it difficult to keep track of what was happening inside scripts. Bugs would sometimes show up too late, and debugging could take hours.&lt;/p&gt;

&lt;p&gt;To solve this, I created &lt;strong&gt;OLS — Open Linux Shell&lt;/strong&gt;. All actions are now logged clearly and predictably, and the tools are designed for pipelines, so complex command chains run smoothly without surprises.&lt;/p&gt;

&lt;p&gt;There are built-in commands to check dependencies or search logs for errors, all included in OLS without needing extra scripts.&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;# Check dependencies&lt;/span&gt;
ols doctor

&lt;span class="c"&gt;# Trace a script and filter output&lt;/span&gt;
ols ./myscript.ols | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For those interested, the code is available as &lt;code&gt;artemkolba321-spec/OLS&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>cli</category>
      <category>linux</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
