<?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: Javier Leandro Arancibia</title>
    <description>The latest articles on DEV Community by Javier Leandro Arancibia (@javimosch).</description>
    <link>https://dev.to/javimosch</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%2F1655837%2F30baec18-fb3d-4a4b-97af-0441d12b5f28.jpg</url>
      <title>DEV Community: Javier Leandro Arancibia</title>
      <link>https://dev.to/javimosch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/javimosch"/>
    <language>en</language>
    <item>
      <title>Introducing SuperCLI: A Config-Driven, AI-Friendly Dynamic CLI for Developers</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Sat, 25 Apr 2026 06:59:32 +0000</pubDate>
      <link>https://dev.to/javimosch/introducing-supercli-a-config-driven-ai-friendly-dynamic-cli-for-developers-3kgo</link>
      <guid>https://dev.to/javimosch/introducing-supercli-a-config-driven-ai-friendly-dynamic-cli-for-developers-3kgo</guid>
      <description>&lt;h1&gt;
  
  
  Introducing SuperCLI: A Config-Driven, AI-Friendly Dynamic CLI for Developers
&lt;/h1&gt;

&lt;p&gt;As developers, we constantly juggle dozens of CLI tools — from essential utilities like &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;docker&lt;/code&gt; to specialized tools for testing, linting, and deployment. Managing this tool ecosystem is challenging: different interfaces, inconsistent flags, and the constant need to learn new commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SuperCLI&lt;/strong&gt; (also known as &lt;code&gt;superacli&lt;/code&gt; or &lt;code&gt;sc&lt;/code&gt;) is a config-driven, AI-friendly dynamic CLI that unifies your development tools under a single, consistent interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SuperCLI?
&lt;/h2&gt;

&lt;p&gt;SuperCLI is a wrapper that lets you define tools through JSON configuration files. Instead of memorizing each tool's specific flags and syntax, you interact with everything through a unified command structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sc &amp;lt;namespace&amp;gt; &amp;lt;resource&amp;gt; &amp;lt;action&amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;flags]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&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 git version&lt;/span&gt;
sc git self version

&lt;span class="c"&gt;# List Docker containers&lt;/span&gt;
sc docker container list

&lt;span class="c"&gt;# Run tests with jest&lt;/span&gt;
sc jest &lt;span class="nb"&gt;test &lt;/span&gt;run &lt;span class="nt"&gt;--watch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Config-Driven Architecture&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tools are defined in &lt;code&gt;plugin.json&lt;/code&gt; files that specify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commands and their arguments&lt;/li&gt;
&lt;li&gt;Input validation schemas&lt;/li&gt;
&lt;li&gt;Help text and descriptions&lt;/li&gt;
&lt;li&gt;Installation checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No need to memorize tool-specific syntax&lt;/li&gt;
&lt;li&gt;Consistent interface across all tools&lt;/li&gt;
&lt;li&gt;Easy to add new tools&lt;/li&gt;
&lt;li&gt;Self-documenting commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;AI-Friendly Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;SuperCLI was built with AI agents in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured JSON schemas for command inputs&lt;/li&gt;
&lt;li&gt;Clear descriptions for each parameter&lt;/li&gt;
&lt;li&gt;Consistent naming conventions&lt;/li&gt;
&lt;li&gt;Skill files that teach agents how to use each tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI agents can discover available commands, understand their parameters, and execute them reliably without manual intervention.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Bundled Plugin Ecosystem&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;SuperCLI comes with 350+ pre-configured plugins covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Development tools&lt;/strong&gt;: git, docker, npm, cargo, brew&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt;: jest, pytest, go test&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code quality&lt;/strong&gt;: eslint, prettier, black&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File operations&lt;/strong&gt;: ripgrep, fd, tokei&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network tools&lt;/strong&gt;: curl, wget, httpie&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;And many more&lt;/strong&gt;: 350+ plugins across all categories&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Extensible Plugin System&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Add your own tools by creating a simple JSON configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"My custom tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"commands"&lt;/span&gt;&lt;span class="p"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"namespace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"adapter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"process"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"adapterConfig"&lt;/span&gt;&lt;span class="p"&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="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"baseArgs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"build"&lt;/span&gt;&lt;span class="p"&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="p"&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="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. &lt;strong&gt;Multiple Adapters&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;SuperCLI supports different execution backends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Process adapter&lt;/strong&gt;: Execute CLI commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP adapter&lt;/strong&gt;: Make HTTP requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP adapter&lt;/strong&gt;: Connect to Model Context Protocol servers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Builtin adapter&lt;/strong&gt;: Built-in commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. &lt;strong&gt;Server Mode&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Run SuperCLI as a web server for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remote tool execution&lt;/li&gt;
&lt;li&gt;Team configuration sharing&lt;/li&gt;
&lt;li&gt;API-based tool access&lt;/li&gt;
&lt;li&gt;Dashboard UI for plugin management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; superacli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use any of the aliased commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; dcli
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; scli
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; supercli
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; sc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Basic Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List all available commands&lt;/span&gt;
sc list

&lt;span class="c"&gt;# Get help for a specific command&lt;/span&gt;
sc git self &lt;span class="nt"&gt;--help&lt;/span&gt;

&lt;span class="c"&gt;# Execute a command&lt;/span&gt;
sc git branch list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding Plugins
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install a bundled plugin&lt;/span&gt;
sc plugins &lt;span class="nb"&gt;install&lt;/span&gt; ./plugins/ripgrep &lt;span class="nt"&gt;--on-conflict&lt;/span&gt; replace

&lt;span class="c"&gt;# List installed plugins&lt;/span&gt;
sc plugins list

&lt;span class="c"&gt;# Remove a plugin&lt;/span&gt;
sc plugins remove ripgrep
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For Individual Developers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified interface&lt;/strong&gt;: One command syntax for all tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced cognitive load&lt;/strong&gt;: No need to remember tool-specific flags&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick discovery&lt;/strong&gt;: &lt;code&gt;sc list&lt;/code&gt; shows all available commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy learning&lt;/strong&gt;: Consistent patterns across tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For Teams
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared configuration&lt;/strong&gt;: Distribute plugin configurations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standardized workflows&lt;/strong&gt;: Enforce consistent tool usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server mode&lt;/strong&gt;: Centralized tool access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: Self-documenting command structure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For AI Agents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured inputs&lt;/strong&gt;: JSON schemas for reliable execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear semantics&lt;/strong&gt;: Namespace/resource/action structure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skill files&lt;/strong&gt;: Teachable patterns for each tool&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discoverable&lt;/strong&gt;: Agents can query available commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Code Analysis Workflow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Count lines of code&lt;/span&gt;
sc tokei self stats

&lt;span class="c"&gt;# Search for TODO comments&lt;/span&gt;
sc rg search &lt;span class="nt"&gt;--pattern&lt;/span&gt; &lt;span class="s2"&gt;"TODO"&lt;/span&gt; &lt;span class="nt"&gt;--type-add&lt;/span&gt; &lt;span class="s2"&gt;"md:*.md"&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt; md

&lt;span class="c"&gt;# Format code&lt;/span&gt;
sc prettier format &lt;span class="nt"&gt;--write&lt;/span&gt; &lt;span class="s2"&gt;"src/**/*.ts"&lt;/span&gt;

&lt;span class="c"&gt;# Run linter&lt;/span&gt;
sc eslint lint &lt;span class="nt"&gt;--fix&lt;/span&gt; &lt;span class="s2"&gt;"src/**/*.ts"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deployment Pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Build Docker image&lt;/span&gt;
sc docker image build &lt;span class="nt"&gt;--tag&lt;/span&gt; myapp:latest

&lt;span class="c"&gt;# Run tests&lt;/span&gt;
sc jest &lt;span class="nb"&gt;test &lt;/span&gt;run &lt;span class="nt"&gt;--coverage&lt;/span&gt;

&lt;span class="c"&gt;# Deploy to production&lt;/span&gt;
sc kubectl deployment apply &lt;span class="nt"&gt;--file&lt;/span&gt; k8s/deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Project Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Initialize git repository&lt;/span&gt;
sc git repo init

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
sc npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Run initial build&lt;/span&gt;
sc npm run build

&lt;span class="c"&gt;# Run tests&lt;/span&gt;
sc jest &lt;span class="nb"&gt;test &lt;/span&gt;run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Advanced Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MCP Integration
&lt;/h3&gt;

&lt;p&gt;SuperCLI supports the Model Context Protocol (MCP), enabling stateful tool sessions and knowledge base integration:&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;# Start MCP daemon&lt;/span&gt;
sc mcp daemon start

&lt;span class="c"&gt;# Call MCP tools&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_search &lt;span class="nt"&gt;--input-json&lt;/span&gt; &lt;span class="s1"&gt;'{"queries":["routes"]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Environment Variable Management
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Set environment variables&lt;/span&gt;
sc config &lt;span class="nb"&gt;set &lt;/span&gt;ENV production

&lt;span class="c"&gt;# Get environment variables&lt;/span&gt;
sc config get ENV
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Custom Aliases
&lt;/h3&gt;

&lt;p&gt;Create shortcuts for frequently used commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sc &lt;span class="nb"&gt;alias &lt;/span&gt;create &lt;span class="s2"&gt;"build"&lt;/span&gt; &lt;span class="s2"&gt;"npm run build"&lt;/span&gt;
sc &lt;span class="nb"&gt;alias &lt;/span&gt;create &lt;span class="s2"&gt;"test"&lt;/span&gt; &lt;span class="s2"&gt;"jest test run"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;SuperCLI follows a clean, modular architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────┐
│         CLI Interface              │
│    (sc, supercli, dcli, scli)       │
└──────────────┬──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│      Command Router                 │
│   Parse namespace/resource/action    │
└──────────────┬──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│      Plugin Registry                │
│   Load and manage plugin configs    │
└──────────────┬──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│      Adapter Layer                  │
│  Process | HTTP | MCP | Builtin      │
└──────────────┬──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│      Tool Execution                 │
│   Execute commands via adapters     │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;SuperCLI is open source and welcomes contributions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Add new plugins&lt;/strong&gt;: Create plugin configurations for your favorite tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve adapters&lt;/strong&gt;: Enhance existing adapters or add new ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix bugs&lt;/strong&gt;: Report and fix issues&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: Improve docs and examples&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/javimosch/supercli" rel="noopener noreferrer"&gt;https://github.com/javimosch/supercli&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] More bundled plugins (target: 500+)&lt;/li&gt;
&lt;li&gt;[ ] Enhanced MCP integration&lt;/li&gt;
&lt;li&gt;[ ] Plugin marketplace&lt;/li&gt;
&lt;li&gt;[ ] Web UI improvements&lt;/li&gt;
&lt;li&gt;[ ] Performance optimizations&lt;/li&gt;
&lt;li&gt;[ ] Better error messages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;SuperCLI provides a unified, AI-friendly interface for your development tools. By standardizing command structures and providing a rich plugin ecosystem, it reduces cognitive load and enables both humans and AI agents to work more efficiently.&lt;/p&gt;

&lt;p&gt;Whether you're an individual developer looking to simplify your CLI workflow, a team wanting to standardize tool usage, or an AI agent seeking reliable tool execution, SuperCLI offers a flexible and powerful solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get started today:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; superacli
sc list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/javimosch/supercli" rel="noopener noreferrer"&gt;https://github.com/javimosch/supercli&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NPM: &lt;a href="https://www.npmjs.com/package/superacli" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/superacli&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://github.com/javimosch/supercli/blob/master/README.md" rel="noopener noreferrer"&gt;https://github.com/javimosch/supercli/blob/master/README.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>cli</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>New Dev.to Publish Plugin for SuperCLI: Publish Articles from the Command Line</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Sat, 25 Apr 2026 06:06:10 +0000</pubDate>
      <link>https://dev.to/javimosch/new-devto-publish-plugin-for-supercli-publish-articles-from-the-command-line-5510</link>
      <guid>https://dev.to/javimosch/new-devto-publish-plugin-for-supercli-publish-articles-from-the-command-line-5510</guid>
      <description>&lt;p&gt;I just released a new plugin for supercli that lets you publish articles to Dev.to directly from the command line.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is devto-publish?
&lt;/h2&gt;

&lt;p&gt;devto-publish is a supercli plugin that wraps the Dev.to REST API, allowing you to publish articles without leaving your terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sc devto article publish   &lt;span class="nt"&gt;--api-key&lt;/span&gt; &lt;span class="s2"&gt;"your-api-key"&lt;/span&gt;   &lt;span class="nt"&gt;--title&lt;/span&gt; &lt;span class="s2"&gt;"My Article Title"&lt;/span&gt;   &lt;span class="nt"&gt;--body-markdown&lt;/span&gt; &lt;span class="s2"&gt;"# Content here"&lt;/span&gt;   &lt;span class="nt"&gt;--tags&lt;/span&gt; &lt;span class="s2"&gt;"javascript,nodejs"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Draft mode&lt;/strong&gt;: Save as drafts before publishing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag management&lt;/strong&gt;: Up to 4 tags with comma-separated format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent-friendly&lt;/strong&gt;: Comprehensive skill guide with 10 common pitfalls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API key authentication&lt;/strong&gt;: Secure flag-based auth&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Get API key from &lt;a href="https://dev.to/settings/account"&gt;https://dev.to/settings/account&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install plugin: &lt;code&gt;sc plugins install ./plugins/devto-publish&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Publish away!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Agent Integration
&lt;/h2&gt;

&lt;p&gt;The plugin includes a detailed SKILL.md that teaches AI agents how to use it, covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API key security best practices&lt;/li&gt;
&lt;li&gt;Markdown escaping pitfalls&lt;/li&gt;
&lt;li&gt;Tag format requirements&lt;/li&gt;
&lt;li&gt;Rate limiting handling&lt;/li&gt;
&lt;li&gt;Character encoding issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means agents using supercli can now publish articles to Dev.to as part of their workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;Publish a technical article:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sc devto article publish   &lt;span class="nt"&gt;--api-key&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DEVTO_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;   &lt;span class="nt"&gt;--title&lt;/span&gt; &lt;span class="s2"&gt;"How to Build a REST API with Node.js"&lt;/span&gt;   &lt;span class="nt"&gt;--body-markdown&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;article.md&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;   &lt;span class="nt"&gt;--tags&lt;/span&gt; &lt;span class="s2"&gt;"javascript,nodejs,api,webdev"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;Plugin: &lt;a href="https://github.com/javimosch/supercli/tree/master/plugins/devto-publish" rel="noopener noreferrer"&gt;https://github.com/javimosch/supercli/tree/master/plugins/devto-publish&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SuperCLI: &lt;a href="https://github.com/javimosch/supercli" rel="noopener noreferrer"&gt;https://github.com/javimosch/supercli&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy publishing! 🚀&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>cli</category>
      <category>devto</category>
    </item>
    <item>
      <title>How We Made Stateful MCP Servers Work in One-Shot CLI Calls</title>
      <dc:creator>Javier Leandro Arancibia</dc:creator>
      <pubDate>Sat, 25 Apr 2026 05:54:43 +0000</pubDate>
      <link>https://dev.to/javimosch/how-we-made-stateful-mcp-servers-work-in-one-shot-cli-calls-3g8e</link>
      <guid>https://dev.to/javimosch/how-we-made-stateful-mcp-servers-work-in-one-shot-cli-calls-3g8e</guid>
      <description>&lt;h1&gt;
  
  
  How We Made Stateful MCP Servers Work in One-Shot CLI Calls
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem: Stateful Servers vs Stateless CLI
&lt;/h2&gt;

&lt;p&gt;Context-mode is a powerful MCP (Model Context Protocol) server that maintains a SQLite knowledge base and session history. It reduces AI context window usage by up to 98% by keeping raw tool output out of conversations and only returning relevant snippets.&lt;/p&gt;

&lt;p&gt;But there was a problem: context-mode is &lt;strong&gt;stateful&lt;/strong&gt;. It needs to stay alive between calls to maintain its knowledge base. Traditional CLI tools are stateless — each invocation is a fresh process.&lt;/p&gt;

&lt;p&gt;When we tried to integrate context-mode into supercli (a CLI wrapper for external tools), we hit a wall:&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;# Call 1: Index project structure&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_index &lt;span class="nt"&gt;--input-json&lt;/span&gt; &lt;span class="s1"&gt;'{"content":"..."}'&lt;/span&gt;

&lt;span class="c"&gt;# Call 2: Search — but knowledge is gone! New process, new database.&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_search &lt;span class="nt"&gt;--input-json&lt;/span&gt; &lt;span class="s1"&gt;'{"queries":["routes"]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each &lt;code&gt;sc&lt;/code&gt; call spawned a new context-mode process. The knowledge base was lost between calls. Agents using supercli in one-shot CLI invocations couldn't benefit from context-mode's stateful features.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: MCP Daemon
&lt;/h2&gt;

&lt;p&gt;We built a &lt;strong&gt;daemon process manager&lt;/strong&gt; that keeps MCP servers alive persistently across CLI invocations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────┐
│  CLI Call (one-shot)                                     │
│  sc mcp call --mcp-server context-mode --tool ctx_search │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│  MCP Daemon (persistent background process)             │
│  Unix socket: ~/.supercli/mcp-daemon.sock               │
│  Process pool: Map&amp;lt;&amp;lt;serverName, ChildProcess&amp;gt;&amp;gt;           │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│  context-mode (long-lived process)                      │
│  SQLite knowledge base persists across CLI calls        │
└─────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unix Socket Server&lt;/strong&gt;: Daemon listens on &lt;code&gt;~/.supercli/mcp-daemon.sock&lt;/code&gt; for JSON-RPC requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Process Pool&lt;/strong&gt;: Maintains long-lived child processes for each MCP server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Start&lt;/strong&gt;: Daemon starts automatically on first tool call if not running&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stateful Flag&lt;/strong&gt;: MCP servers can be marked as &lt;code&gt;stateful: true&lt;/code&gt; to use the daemon&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful Shutdown&lt;/strong&gt;: Cleanly stops all MCP processes on daemon exit&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Implementation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Daemon&lt;/strong&gt; (&lt;code&gt;cli/mcp-daemon.js&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Unix socket server&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;net&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;call_tool&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getOrSpawnServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serverConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SOCKET_PATH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Client&lt;/strong&gt; (&lt;code&gt;cli/mcp-daemon-client.js&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callDaemonTool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;serverConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;timeout_ms&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;isDaemonRunning&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;startDaemon&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Auto-start if not running&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;sendDaemonRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;call_tool&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;serverConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;timeout_ms&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;MCP Adapter&lt;/strong&gt; (&lt;code&gt;cli/adapters/mcp.js&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stateful&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Route through daemon instead of spawning new process&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;callDaemonTool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;serverConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;timeout_ms&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Existing behavior: spawn per call&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;stdioCallToolJsonRpc&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; context-mode
sc plugins &lt;span class="nb"&gt;install&lt;/span&gt; ./plugins/context-mode &lt;span class="nt"&gt;--on-conflict&lt;/span&gt; replace &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;span class="c"&gt;# Automatically registers as stateful MCP server + starts daemon&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CLI Commands
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Daemon management&lt;/span&gt;
sc mcp daemon start     &lt;span class="c"&gt;# Start daemon&lt;/span&gt;
sc mcp daemon status    &lt;span class="c"&gt;# Check status + active servers&lt;/span&gt;
sc mcp daemon stop      &lt;span class="c"&gt;# Stop daemon&lt;/span&gt;
sc mcp daemon restart   &lt;span class="c"&gt;# Restart daemon&lt;/span&gt;

&lt;span class="c"&gt;# Add stateful MCP server&lt;/span&gt;
sc mcp add my-server &lt;span class="nt"&gt;--command&lt;/span&gt; my-tool &lt;span class="nt"&gt;--stateful&lt;/span&gt;

&lt;span class="c"&gt;# Call context-mode tools (knowledge persists across calls)&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_batch_execute &lt;span class="nt"&gt;--input-json&lt;/span&gt; &lt;span class="s1"&gt;'{
  "commands": [
    {"label": "Package", "command": "cat package.json"},
    {"label": "Source tree", "command": "find src -name \"*.js\" | head -40"}
  ],
  "queries": ["entry point", "dependencies"]
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Benefits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Knowledge Base Persistence
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Call 1: Index docs&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_index &lt;span class="nt"&gt;--input-json&lt;/span&gt; &lt;span class="s1"&gt;'{
  "content": "...large documentation...",
  "source": "api-docs"
}'&lt;/span&gt;

&lt;span class="c"&gt;# Call 2 (new shell, new process): Knowledge persists!&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_search &lt;span class="nt"&gt;--input-json&lt;/span&gt; &lt;span class="s1"&gt;'{
  "queries": ["authentication", "token expiry"]
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Context Window Reduction
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ctx_batch_execute&lt;/code&gt; runs commands, auto-indexes output, and searches in one call — returning only matched snippets, not raw output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Executed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;commands&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;lines,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="err"&gt;KB).&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Indexed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;sections.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Searched&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;queries.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;##&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;dependencies&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;relevant&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;snippets&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;returned)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;###&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Package&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="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&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="nl"&gt;"dotenv"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.3.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ejs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.1.9"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.18.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"mongodb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.3.0"&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="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Agent-Friendly
&lt;/h3&gt;

&lt;p&gt;Agents call supercli as one-shot commands. The daemon ensures knowledge base persistence:&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;# Agent call 1&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_batch_execute ...

&lt;span class="c"&gt;# Agent call 2 (different process, different shell)&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_search ...
&lt;span class="c"&gt;# Knowledge base still available via daemon&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Zero Setup for Agents
&lt;/h3&gt;

&lt;p&gt;The daemon auto-starts on first tool call. Agents don't need to manage it:&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;# First call: daemon auto-starts&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_doctor &lt;span class="nt"&gt;--input-json&lt;/span&gt; &lt;span class="s1"&gt;'{}'&lt;/span&gt;

&lt;span class="c"&gt;# Subsequent calls: daemon already running&lt;/span&gt;
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_search ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Technical Details
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Protocol
&lt;/h3&gt;

&lt;p&gt;Daemon uses JSON over Unix socket:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Request&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"call_tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"context-mode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctx_search"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;}}}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Response&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Process Lifecycle
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Daemon starts (detached process, no TTY)&lt;/li&gt;
&lt;li&gt;First tool call → daemon spawns context-mode process&lt;/li&gt;
&lt;li&gt;JSON-RPC handshake (initialize → notifications/initialized)&lt;/li&gt;
&lt;li&gt;Tool calls routed through daemon&lt;/li&gt;
&lt;li&gt;Process stays alive for subsequent calls&lt;/li&gt;
&lt;li&gt;Daemon shutdown → graceful termination of all MCP processes&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Wire Mode
&lt;/h3&gt;

&lt;p&gt;We discovered context-mode uses JSONL (newline-delimited JSON) not LSP framing. The daemon defaults to JSONL for stdio MCP servers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;wireMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;serverConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wire_mode&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;jsonl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Default to JSONL&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Future Directions
&lt;/h2&gt;

&lt;p&gt;Now that we have the daemon infrastructure, we can explore:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Automatic output reduction&lt;/strong&gt;: Process adapter could pipe output through context-mode automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask command caching&lt;/strong&gt;: LLM suggestions cached in knowledge base&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow context&lt;/strong&gt;: Cross-step knowledge indexing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error learning&lt;/strong&gt;: Pattern-based error solutions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server mode shared KB&lt;/strong&gt;: Collective intelligence across API clients&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The MCP daemon enables stateful MCP servers like context-mode to work seamlessly in one-shot CLI environments. Agents get full context-mode benefits (98% context reduction, knowledge base persistence) while supercli remains a clean, stateless CLI wrapper.&lt;/p&gt;

&lt;p&gt;The architecture is extensible — any stateful MCP server can now integrate with supercli via the daemon, opening possibilities for persistent tool sessions across CLI invocations.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it out:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; context-mode
sc plugins &lt;span class="nb"&gt;install&lt;/span&gt; ./plugins/context-mode &lt;span class="nt"&gt;--on-conflict&lt;/span&gt; replace &lt;span class="nt"&gt;--json&lt;/span&gt;
sc mcp daemon status
sc mcp call &lt;span class="nt"&gt;--mcp-server&lt;/span&gt; context-mode &lt;span class="nt"&gt;--tool&lt;/span&gt; ctx_doctor &lt;span class="nt"&gt;--input-json&lt;/span&gt; &lt;span class="s1"&gt;'{}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>node</category>
      <category>cli</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
