<?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: yunate</title>
    <description>The latest articles on DEV Community by yunate (@yunate).</description>
    <link>https://dev.to/yunate</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%2F4137273%2Fba559696-0566-4436-a9a4-26b55f8825c8.jpg</url>
      <title>DEV Community: yunate</title>
      <link>https://dev.to/yunate</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yunate"/>
    <language>en</language>
    <item>
      <title>I built a Postman-like workspace for local scripts</title>
      <dc:creator>yunate</dc:creator>
      <pubDate>Tue, 22 Sep 2026 09:29:21 +0000</pubDate>
      <link>https://dev.to/yunate/i-built-a-postman-like-workspace-for-local-scripts-2d6e</link>
      <guid>https://dev.to/yunate/i-built-a-postman-like-workspace-for-local-scripts-2d6e</guid>
      <description>&lt;h3&gt;
  
  
  Windows Terminal is great, but I wanted a better way to manage my scripts
&lt;/h3&gt;

&lt;p&gt;Windows Terminal is already a very good terminal. I use it regularly, and I do not want to replace it.&lt;/p&gt;

&lt;p&gt;The part that kept bothering me happened before I could actually run anything. I had to remember where a script was stored, navigate to its directory, type or paste the path, and then provide the right values for the environment I was working with. As my collection grew, I also ended up with scripts scattered across folders and slightly different copies of the same script.&lt;/p&gt;

&lt;p&gt;I wanted something closer to the workflow I use in Postman, but for local scripts instead of HTTP requests. That led me to build a Windows application called &lt;strong&gt;MagicHat&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&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%2F21ir8neo1niczm85waoa.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%2F21ir8neo1niczm85waoa.png" alt="command page" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  A workspace for reusable scripts
&lt;/h3&gt;

&lt;p&gt;The Command page organizes scripts in a folder tree and lets me edit and run them without first locating them from the command line. It currently supports PowerShell, JavaScript, Python, and batch scripts, although PowerShell is the main reason I started building it.&lt;/p&gt;

&lt;p&gt;The storage location is configurable. MagicHat does not require scripts to live in an internal database, so I can keep a workspace in a normal directory and manage it with Git. This makes the scripts portable and keeps their history outside the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Postman-like parameter groups
&lt;/h3&gt;

&lt;p&gt;Many of my scripts are structurally identical across development, test, and production environments. Usually only URLs, IDs, paths, or tokens change.&lt;/p&gt;

&lt;p&gt;MagicHat lets a command have multiple parameter groups. A script can reference values with macros such as &lt;code&gt;mh{baseUrl}&lt;/code&gt; or &lt;code&gt;mh{accessToken}&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;Authorization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer mh{accessToken}"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;-Method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mh{baseUrl}/api/jobs/mh{jobId}"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;-Headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I can switch parameter groups without editing the script. Macro values can also reference other macros, which is useful when several endpoints share the same base path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Letting scripts update shared state
&lt;/h3&gt;

&lt;p&gt;Some values are only known after a script runs. An authentication script, for example, might receive a new access token that should be reused by later commands.&lt;/p&gt;

&lt;p&gt;Inside a MagicHat PowerShell terminal, a script can persist a parameter value with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;mhsetenv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;AccessToken&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$newToken&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This avoids manually copying the result back into a parameter editor after every run.&lt;/p&gt;

&lt;p&gt;A saved command can also synchronously call another command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;mhcall&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./Get-AccessToken.mh"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That makes it possible to compose small scripts while keeping each one independently runnable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recurring automation
&lt;/h3&gt;

&lt;p&gt;I later added a Task Center for scripts or actions that need to run repeatedly.&lt;/p&gt;

&lt;p&gt;A simple example is a periodic task that presses &lt;code&gt;F15&lt;/code&gt; and slightly moves the mouse. It can keep a workstation or application from entering an idle state. The same mechanism can be used for maintenance scripts, polling, cleanup, or other recurring local automation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Small tools I kept reaching for
&lt;/h3&gt;

&lt;p&gt;MagicHat also includes a Tools page for small utilities I often need while working, such as JSON and YAML formatting, Base64, URL conversion, regular-expression testing, hashes, timestamps, UUID generation, QR codes, OCR, and file-occupancy inspection.&lt;/p&gt;

&lt;p&gt;These tools are secondary to script management, but keeping them in the same local application reduces context switching for me.&lt;/p&gt;

&lt;blockquote&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%2F9um1n5d6pno2rghoruuy.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%2F9um1n5d6pno2rghoruuy.png" alt="tools page" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Where it is now
&lt;/h3&gt;

&lt;p&gt;MagicHat is a local Windows application built for my own workflow, and I am still learning whether the same approach is useful to other developers.&lt;/p&gt;

&lt;p&gt;I would especially like feedback from people who maintain personal or team script repositories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do you organize scripts that you run repeatedly?&lt;/li&gt;
&lt;li&gt;How do you manage environment-specific values?&lt;/li&gt;
&lt;li&gt;Do you prefer plain repositories and modules, or would a visual workspace help?&lt;/li&gt;
&lt;li&gt;Which part of this workflow feels useful, and which part feels unnecessary?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Project and download:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ddmagichat/magichat-release/releases/tag/latest" rel="noopener noreferrer"&gt;https://github.com/ddmagichat/magichat-release/releases/tag/latest&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>terminal</category>
      <category>scriptmanager</category>
    </item>
  </channel>
</rss>
