Update documentation 2026-01-16

This commit is contained in:
rob 2026-01-16 06:23:31 -04:00
parent fcb3aaebce
commit ae767de2d7
19 changed files with 279 additions and 78 deletions

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">CmdForge</title><meta data-rh="true" property="og:title" content="CmdForge"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pages.brrd.tech/rob/CmdForge/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><link data-rh="true" rel="icon" href="/rob/CmdForge/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pages.brrd.tech/rob/CmdForge/404.html"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/404.html" hreflang="x-default"><link rel="stylesheet" href="/rob/CmdForge/assets/css/styles.6095798e.css">
<script src="/rob/CmdForge/assets/js/runtime~main.54641272.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/runtime~main.22550140.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/main.fe1fa999.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[894],{7836(e,s,i){i.r(s),i.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>t,toc:()=>r});const t=JSON.parse('{"id":"goals","title":"Goals","description":"Vision","source":"@site/docs/goals.md","sourceDirName":".","slug":"/goals","permalink":"/rob/CmdForge/goals","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"goals","project":"cmdforge","updated":"2026-01-12T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"CmdForge TODOs","permalink":"/rob/CmdForge/todos"},"next":{"title":"Ideas & Exploration","permalink":"/rob/CmdForge/ideas-and-exploration"}}');var n=i(4848),o=i(8453);const l={type:"goals",project:"cmdforge",updated:new Date("2026-01-12T00:00:00.000Z")},a="Goals",c={},r=[{value:"Vision",id:"vision",level:2},{value:"Active",id:"active",level:2},{value:"Future",id:"future",level:2},{value:"Non-Goals",id:"non-goals",level:2}];function d(e){const s={h1:"h1",h2:"h2",header:"header",input:"input",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"goals",children:"Goals"})}),"\n",(0,n.jsx)(s.h2,{id:"vision",children:"Vision"}),"\n",(0,n.jsx)(s.p,{children:"CmdForge empowers users to create custom AI-powered CLI commands as easily as writing a config file. It bridges the gap between powerful AI capabilities and the simplicity of Unix pipes, letting anyone build tools that fit their workflow without writing code."}),"\n",(0,n.jsx)(s.h2,{id:"active",children:"Active"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsx)(s.li,{children:"[~] Provide a simple, intuitive way for users to create AI-powered CLI tools without coding #high"}),"\n",(0,n.jsx)(s.li,{children:"[~] Enable tool sharing so users can discover, use, and improve community-created tools #high"}),"\n",(0,n.jsx)(s.li,{children:"[~] Integrate seamlessly with Unix workflows through standard stdin/stdout piping #medium"}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Abstract away AI provider complexity so tools work with any backend #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Maintain tool reliability through offline caching and graceful degradation #medium"]}),"\n",(0,n.jsx)(s.li,{children:"[~] Ensure tool quality through a curation system that prevents duplication and maintains standards #low"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"future",children:"Future"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Support tool composition where tools can chain together and build on each other #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Enable a sustainable ecosystem where quality tools can be monetized #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Provide extensibility for custom AI backends and integrations #low"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"non-goals",children:"Non-Goals"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Replace shell scripting #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Build a full IDE #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Require coding knowledge #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Lock users to specific providers #medium"]}),"\n"]})]})}function u(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453(e,s,i){i.d(s,{R:()=>l,x:()=>a});var t=i(6540);const n={},o=t.createContext(n);function l(e){const s=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]);

View File

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[894],{7836(e,i,s){s.r(i),s.d(i,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>t,toc:()=>r});const t=JSON.parse('{"id":"goals","title":"Goals","description":"Vision","source":"@site/docs/goals.md","sourceDirName":".","slug":"/goals","permalink":"/rob/CmdForge/goals","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"goals","project":"cmdforge","updated":"2026-01-13T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"CmdForge TODOs","permalink":"/rob/CmdForge/todos"},"next":{"title":"Ideas & Exploration","permalink":"/rob/CmdForge/ideas-and-exploration"}}');var n=s(4848),o=s(8453);const l={type:"goals",project:"cmdforge",updated:new Date("2026-01-13T00:00:00.000Z")},a="Goals",c={},r=[{value:"Vision",id:"vision",level:2},{value:"Active",id:"active",level:2},{value:"Future",id:"future",level:2},{value:"Non-Goals",id:"non-goals",level:2}];function d(e){const i={h1:"h1",h2:"h2",header:"header",input:"input",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.header,{children:(0,n.jsx)(i.h1,{id:"goals",children:"Goals"})}),"\n",(0,n.jsx)(i.h2,{id:"vision",children:"Vision"}),"\n",(0,n.jsx)(i.p,{children:"CmdForge empowers users to create custom AI-powered CLI commands as easily as writing a config file. It bridges the gap between powerful AI capabilities and the simplicity of Unix pipes, letting anyone build tools that fit their workflow without writing code."}),"\n",(0,n.jsx)(i.h2,{id:"active",children:"Active"}),"\n",(0,n.jsxs)(i.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(i.li,{className:"task-list-item",children:[(0,n.jsx)(i.input,{type:"checkbox",checked:!0,disabled:!0})," ","Provide a simple, intuitive way for users to create AI-powered CLI tools without coding #high"]}),"\n",(0,n.jsx)(i.li,{children:"[~] Enable tool sharing so users can discover, use, and improve community-created tools #high"}),"\n",(0,n.jsxs)(i.li,{className:"task-list-item",children:[(0,n.jsx)(i.input,{type:"checkbox",checked:!0,disabled:!0})," ","Integrate seamlessly with Unix workflows through standard stdin/stdout piping #medium"]}),"\n",(0,n.jsxs)(i.li,{className:"task-list-item",children:[(0,n.jsx)(i.input,{type:"checkbox",checked:!0,disabled:!0})," ","Abstract away AI provider complexity so tools work with any backend #medium"]}),"\n",(0,n.jsx)(i.li,{children:"[~] Maintain tool reliability through offline caching and graceful degradation #medium"}),"\n",(0,n.jsx)(i.li,{children:"[~] Ensure tool quality through a curation system that prevents duplication and maintains standards #low"}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"future",children:"Future"}),"\n",(0,n.jsxs)(i.ul,{className:"contains-task-list",children:["\n",(0,n.jsx)(i.li,{children:"[~] Support tool composition where tools can chain together and build on each other #medium"}),"\n",(0,n.jsxs)(i.li,{className:"task-list-item",children:[(0,n.jsx)(i.input,{type:"checkbox",disabled:!0})," ","Create a monetization plan for sustainable tool ecosystem #low"]}),"\n",(0,n.jsx)(i.li,{children:"[~] Provide extensibility for custom AI backends and integrations #low"}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"non-goals",children:"Non-Goals"}),"\n",(0,n.jsxs)(i.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(i.li,{className:"task-list-item",children:[(0,n.jsx)(i.input,{type:"checkbox",checked:!0,disabled:!0})," ","Replace shell scripting #medium"]}),"\n",(0,n.jsxs)(i.li,{className:"task-list-item",children:[(0,n.jsx)(i.input,{type:"checkbox",checked:!0,disabled:!0})," ","Build a full IDE #medium"]}),"\n",(0,n.jsxs)(i.li,{className:"task-list-item",children:[(0,n.jsx)(i.input,{type:"checkbox",checked:!0,disabled:!0})," ","Require coding knowledge #medium"]}),"\n",(0,n.jsxs)(i.li,{className:"task-list-item",children:[(0,n.jsx)(i.input,{type:"checkbox",checked:!0,disabled:!0})," ","Lock users to specific providers #medium"]}),"\n"]})]})}function u(e={}){const{wrapper:i}={...(0,o.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453(e,i,s){s.d(i,{R:()=>l,x:()=>a});var t=s(6540);const n={},o=t.createContext(n);function l(e){const i=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),t.createElement(o.Provider,{value:i},e.children)}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(()=>{"use strict";var e,r,t,a,o,n={},c={};function i(e){var r=c[e];if(void 0!==r)return r.exports;var t=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.loaded=!0,t.exports}i.m=n,i.c=c,e=[],i.O=(r,t,a,o)=>{if(!t){var n=1/0;for(l=0;l<e.length;l++){for(var[t,a,o]=e[l],c=!0,d=0;d<t.length;d++)(!1&o||n>=o)&&Object.keys(i.O).every(e=>i.O[e](t[d]))?t.splice(d--,1):(c=!1,o<n&&(n=o));if(c){e.splice(l--,1);var f=a();void 0!==f&&(r=f)}}return r}o=o||0;for(var l=e.length;l>0&&e[l-1][2]>o;l--)e[l]=e[l-1];e[l]=[t,a,o]},i.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return i.d(r,{a:r}),r},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);i.r(o);var n={};r=r||[null,t({}),t([]),t(t)];for(var c=2&a&&e;("object"==typeof c||"function"==typeof c)&&!~r.indexOf(c);c=t(c))Object.getOwnPropertyNames(c).forEach(r=>n[r]=()=>e[r]);return n.default=()=>e,i.d(o,n),o},i.d=(e,r)=>{for(var t in r)i.o(r,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((r,t)=>(i.f[t](e,r),r),[])),i.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",207:"e719f3dc",393:"1db78e9f",401:"17896441",413:"1db64337",443:"5281b7a2",574:"817f7194",647:"5e95c892",742:"aba21aa0",854:"3fbf7384",894:"5eebbccf"}[e]||e)+"."+{48:"b8c77466",98:"3ba34601",207:"a5309d63",237:"447ba118",393:"c1cfaf5f",401:"a2525508",413:"24dfc3f7",443:"2c953305",574:"a62b2c6a",647:"a3b66919",742:"4a552a5c",854:"58217f0b",894:"b83c9cc8"}[e]+".js",i.miniCssF=e=>{},i.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a={},o="project-public-docs:",i.l=(e,r,t,n)=>{if(a[e])a[e].push(r);else{var c,d;if(void 0!==t)for(var f=document.getElementsByTagName("script"),l=0;l<f.length;l++){var u=f[l];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==o+t){c=u;break}}c||(d=!0,(c=document.createElement("script")).charset="utf-8",i.nc&&c.setAttribute("nonce",i.nc),c.setAttribute("data-webpack",o+t),c.src=e),a[e]=[r];var b=(r,t)=>{c.onerror=c.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach(e=>e(t)),r)return r(t)},s=setTimeout(b.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=b.bind(null,c.onerror),c.onload=b.bind(null,c.onload),d&&document.head.appendChild(c)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="/rob/CmdForge/",i.gca=function(e){return e={17896441:"401",a94703ab:"48",a7bd4aaa:"98",e719f3dc:"207","1db78e9f":"393","1db64337":"413","5281b7a2":"443","817f7194":"574","5e95c892":"647",aba21aa0:"742","3fbf7384":"854","5eebbccf":"894"}[e]||e,i.p+i.u(e)},(()=>{var e={354:0,869:0};i.f.j=(r,t)=>{var a=i.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(354|869)$/.test(r))e[r]=0;else{var o=new Promise((t,o)=>a=e[r]=[t,o]);t.push(a[2]=o);var n=i.p+i.u(r),c=new Error;i.l(n,t=>{if(i.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;c.message="Loading chunk "+r+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}},"chunk-"+r,r)}},i.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[n,c,d]=t,f=0;if(n.some(r=>0!==e[r])){for(a in c)i.o(c,a)&&(i.m[a]=c[a]);if(d)var l=d(i)}for(r&&r(t);f<n.length;f++)o=n[f],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return i.O(l)},t=globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})()})();

View File

@ -1 +0,0 @@
(()=>{"use strict";var e,r,t,a,o,n={},i={};function c(e){var r=i[e];if(void 0!==r)return r.exports;var t=i[e]={id:e,loaded:!1,exports:{}};return n[e].call(t.exports,t,t.exports,c),t.loaded=!0,t.exports}c.m=n,c.c=i,e=[],c.O=(r,t,a,o)=>{if(!t){var n=1/0;for(l=0;l<e.length;l++){for(var[t,a,o]=e[l],i=!0,d=0;d<t.length;d++)(!1&o||n>=o)&&Object.keys(c.O).every(e=>c.O[e](t[d]))?t.splice(d--,1):(i=!1,o<n&&(n=o));if(i){e.splice(l--,1);var f=a();void 0!==f&&(r=f)}}return r}o=o||0;for(var l=e.length;l>0&&e[l-1][2]>o;l--)e[l]=e[l-1];e[l]=[t,a,o]},c.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return c.d(r,{a:r}),r},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);c.r(o);var n={};r=r||[null,t({}),t([]),t(t)];for(var i=2&a&&e;("object"==typeof i||"function"==typeof i)&&!~r.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach(r=>n[r]=()=>e[r]);return n.default=()=>e,c.d(o,n),o},c.d=(e,r)=>{for(var t in r)c.o(r,t)&&!c.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((r,t)=>(c.f[t](e,r),r),[])),c.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",207:"e719f3dc",393:"1db78e9f",401:"17896441",413:"1db64337",443:"5281b7a2",574:"817f7194",647:"5e95c892",742:"aba21aa0",854:"3fbf7384",894:"5eebbccf"}[e]||e)+"."+{48:"b8c77466",98:"3ba34601",207:"a5309d63",237:"447ba118",393:"cd3f507f",401:"a2525508",413:"dd4b0e6b",443:"06e90270",574:"8359c903",647:"a3b66919",742:"4a552a5c",854:"58217f0b",894:"ab36aeeb"}[e]+".js",c.miniCssF=e=>{},c.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a={},o="project-public-docs:",c.l=(e,r,t,n)=>{if(a[e])a[e].push(r);else{var i,d;if(void 0!==t)for(var f=document.getElementsByTagName("script"),l=0;l<f.length;l++){var u=f[l];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==o+t){i=u;break}}i||(d=!0,(i=document.createElement("script")).charset="utf-8",c.nc&&i.setAttribute("nonce",c.nc),i.setAttribute("data-webpack",o+t),i.src=e),a[e]=[r];var b=(r,t)=>{i.onerror=i.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(e=>e(t)),r)return r(t)},s=setTimeout(b.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=b.bind(null,i.onerror),i.onload=b.bind(null,i.onload),d&&document.head.appendChild(i)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.p="/rob/CmdForge/",c.gca=function(e){return e={17896441:"401",a94703ab:"48",a7bd4aaa:"98",e719f3dc:"207","1db78e9f":"393","1db64337":"413","5281b7a2":"443","817f7194":"574","5e95c892":"647",aba21aa0:"742","3fbf7384":"854","5eebbccf":"894"}[e]||e,c.p+c.u(e)},(()=>{var e={354:0,869:0};c.f.j=(r,t)=>{var a=c.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(354|869)$/.test(r))e[r]=0;else{var o=new Promise((t,o)=>a=e[r]=[t,o]);t.push(a[2]=o);var n=c.p+c.u(r),i=new Error;c.l(n,t=>{if(c.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+n+")",i.name="ChunkLoadError",i.type=o,i.request=n,a[1](i)}},"chunk-"+r,r)}},c.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[n,i,d]=t,f=0;if(n.some(r=>0!==e[r])){for(a in i)c.o(i,a)&&(c.m[a]=i[a]);if(d)var l=d(c)}for(r&&r(t);f<n.length;f++)o=n[f],c.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return c.O(l)},t=globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})()})();

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Goals | CmdForge</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pages.brrd.tech/rob/CmdForge/goals"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Goals | CmdForge"><meta data-rh="true" name="description" content="Vision"><meta data-rh="true" property="og:description" content="Vision"><link data-rh="true" rel="icon" href="/rob/CmdForge/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pages.brrd.tech/rob/CmdForge/goals"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/goals" hreflang="en"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/goals" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Goals","item":"https://pages.brrd.tech/rob/CmdForge/goals"}]}</script><link rel="stylesheet" href="/rob/CmdForge/assets/css/styles.6095798e.css">
<script src="/rob/CmdForge/assets/js/runtime~main.54641272.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/runtime~main.22550140.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/main.fe1fa999.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
@ -16,18 +16,18 @@
<p>CmdForge empowers users to create custom AI-powered CLI commands as easily as writing a config file. It bridges the gap between powerful AI capabilities and the simplicity of Unix pipes, letting anyone build tools that fit their workflow without writing code.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="active">Active<a href="#active" class="hash-link" aria-label="Direct link to Active" title="Direct link to Active" translate="no"></a></h2>
<ul class="contains-task-list containsTaskList_mC6p">
<li class="">[~] Provide a simple, intuitive way for users to create AI-powered CLI tools without coding #high</li>
<li class="task-list-item"><input type="checkbox" disabled="" checked=""> <!-- -->Provide a simple, intuitive way for users to create AI-powered CLI tools without coding #high</li>
<li class="">[~] Enable tool sharing so users can discover, use, and improve community-created tools #high</li>
<li class="">[~] Integrate seamlessly with Unix workflows through standard stdin/stdout piping #medium</li>
<li class="task-list-item"><input type="checkbox" disabled="" checked=""> <!-- -->Integrate seamlessly with Unix workflows through standard stdin/stdout piping #medium</li>
<li class="task-list-item"><input type="checkbox" disabled="" checked=""> <!-- -->Abstract away AI provider complexity so tools work with any backend #medium</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Maintain tool reliability through offline caching and graceful degradation #medium</li>
<li class="">[~] Maintain tool reliability through offline caching and graceful degradation #medium</li>
<li class="">[~] Ensure tool quality through a curation system that prevents duplication and maintains standards #low</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="future">Future<a href="#future" class="hash-link" aria-label="Direct link to Future" title="Direct link to Future" translate="no"></a></h2>
<ul class="contains-task-list containsTaskList_mC6p">
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Support tool composition where tools can chain together and build on each other #medium</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Enable a sustainable ecosystem where quality tools can be monetized #low</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Provide extensibility for custom AI backends and integrations #low</li>
<li class="">[~] Support tool composition where tools can chain together and build on each other #medium</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Create a monetization plan for sustainable tool ecosystem #low</li>
<li class="">[~] Provide extensibility for custom AI backends and integrations #low</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="non-goals">Non-Goals<a href="#non-goals" class="hash-link" aria-label="Direct link to Non-Goals" title="Direct link to Non-Goals" translate="no"></a></h2>
<ul class="contains-task-list containsTaskList_mC6p">

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Ideas &amp; Exploration | CmdForge</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pages.brrd.tech/rob/CmdForge/ideas-and-exploration"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Ideas &amp; Exploration | CmdForge"><meta data-rh="true" name="description" content="Ideas"><meta data-rh="true" property="og:description" content="Ideas"><link data-rh="true" rel="icon" href="/rob/CmdForge/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pages.brrd.tech/rob/CmdForge/ideas-and-exploration"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/ideas-and-exploration" hreflang="en"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/ideas-and-exploration" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Ideas & Exploration","item":"https://pages.brrd.tech/rob/CmdForge/ideas-and-exploration"}]}</script><link rel="stylesheet" href="/rob/CmdForge/assets/css/styles.6095798e.css">
<script src="/rob/CmdForge/assets/js/runtime~main.54641272.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/runtime~main.22550140.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/main.fe1fa999.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">CmdForge Overview | CmdForge</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pages.brrd.tech/rob/CmdForge/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="CmdForge Overview | CmdForge"><meta data-rh="true" name="description" content="A lightweight personal tool builder for AI-powered CLI commands."><meta data-rh="true" property="og:description" content="A lightweight personal tool builder for AI-powered CLI commands."><link data-rh="true" rel="icon" href="/rob/CmdForge/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pages.brrd.tech/rob/CmdForge/"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/" hreflang="en"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/" hreflang="x-default"><script data-rh="true">function insertBanner(){var n=document.createElement("div");n.id="__docusaurus-base-url-issue-banner-container";n.innerHTML='\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">/rob/CmdForge/</span> </p>\n <p>We suggest trying baseUrl = <span id="__docusaurus-base-url-issue-banner-suggestion-container" style="font-weight: bold; color: green;"></span></p>\n</div>\n',document.body.prepend(n);var e=document.getElementById("__docusaurus-base-url-issue-banner-suggestion-container"),o=window.location.pathname,s="/"===o.substr(-1)?o:o+"/";e.innerHTML=s}document.addEventListener("DOMContentLoaded",function(){void 0===window.docusaurus&&insertBanner()})</script><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"CmdForge Overview","item":"https://pages.brrd.tech/rob/CmdForge/"}]}</script><link rel="stylesheet" href="/rob/CmdForge/assets/css/styles.6095798e.css">
<script src="/rob/CmdForge/assets/js/runtime~main.54641272.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/runtime~main.22550140.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/main.fe1fa999.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
@ -16,7 +16,7 @@
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="project-links">Project Links<a href="#project-links" class="hash-link" aria-label="Direct link to Project Links" title="Direct link to Project Links" translate="no"></a></h2>
<table><thead><tr><th>Resource</th><th>URL</th></tr></thead><tbody><tr><td><strong>Public Website</strong></td><td><a href="https://cmdforge.brrd.tech/" target="_blank" rel="noopener noreferrer" class="">https://cmdforge.brrd.tech/</a></td></tr><tr><td><strong>Git Repository</strong></td><td><a href="https://gitea.brrd.tech/rob/CmdForge" target="_blank" rel="noopener noreferrer" class="">https://gitea.brrd.tech/rob/CmdForge</a></td></tr><tr><td><strong>Registry Repo</strong></td><td><a href="https://gitea.brrd.tech/rob/CmdForge-Registry" target="_blank" rel="noopener noreferrer" class="">https://gitea.brrd.tech/rob/CmdForge-Registry</a></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="components">Components<a href="#components" class="hash-link" aria-label="Direct link to Components" title="Direct link to Components" translate="no"></a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">┌─────────────────────────────────────────────────────────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ CmdForge │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├─────────────────┬─────────────────┬─────────────────────────┤</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ CLI Tool │ Web UI │ Registry │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ (cmdforge) │ (Flask) │ (API + DB) │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├─────────────────┼─────────────────┼─────────────────────────┤</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ Local install │ cmdforge.brrd. │ Tool publishing │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ~/.cmdforge/ │ tech │ Search, download │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">~/.local/bin/ │ │ User accounts │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">└─────────────────┴─────────────────┴─────────────────────────┘</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">┌─────────────────────────────────────────────────────────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ CmdForge │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├─────────────────┬─────────────────┬─────────────────────────┤</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ CLI + GUI │ Web UI │ Registry │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ (cmdforge) │ (Flask) │ (API + DB) │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├─────────────────┼─────────────────┼─────────────────────────┤</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ Local install │ cmdforge.brrd. │ Tool publishing │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ~/.cmdforge/ │ tech │ Search, download │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">PySide6 desktop │ │ User accounts │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">└─────────────────┴─────────────────┴─────────────────────────┘</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-directories">Key Directories<a href="#key-directories" class="hash-link" aria-label="Direct link to Key Directories" title="Direct link to Key Directories" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="development-ai-server">Development (AI-Server)<a href="#development-ai-server" class="hash-link" aria-label="Direct link to Development (AI-Server)" title="Direct link to Development (AI-Server)" translate="no"></a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">~/PycharmProjects/CmdForge/ # Source code</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">~/.cmdforge/ # Local tools storage</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">~/.local/bin/cmdforge # CLI symlink</span><br></span></code></pre></div></div>
@ -24,9 +24,25 @@
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">/srv/mergerfs/data_pool/home/rob/cmdforge-registry/ # Deployed code</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">/tmp/cmdforge-data/ # Runtime database</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="recent-changes">Recent Changes<a href="#recent-changes" class="hash-link" aria-label="Direct link to Recent Changes" title="Direct link to Recent Changes" translate="no"></a></h2>
<ul>
<li class=""><strong>2026-01-14</strong>: <strong>GUI conversion</strong> - Replaced urwid TUI with PySide6 desktop GUI</li>
<li class=""><strong>2026-01-14</strong>: Modern GUI with sidebar navigation (My Tools, Registry, Providers)</li>
<li class=""><strong>2026-01-14</strong>: GUI Tool Builder for creating/editing tools visually</li>
<li class=""><strong>2026-01-14</strong>: GUI Registry browser with search and one-click install</li>
<li class=""><strong>2026-01-14</strong>: GUI Connect dialog with polling-based account pairing</li>
<li class=""><strong>2026-01-14</strong>: App pairing - connect GUI to web account without manual token copying</li>
<li class=""><strong>2026-01-14</strong>: <code>cmdforge config connect &lt;username&gt;</code> command for CLI-based pairing</li>
<li class=""><strong>2026-01-14</strong>: &quot;Connections&quot; dashboard replaces &quot;API Tokens&quot; for simpler app management</li>
<li class=""><strong>2026-01-14</strong>: Private tool sync - auto-publish tools privately when connected</li>
<li class=""><strong>2026-01-13</strong>: Tool search and filtering with faceted results</li>
<li class=""><strong>2026-01-13</strong>: Docker containers: <code>Dockerfile.ready</code> (pre-installed), <code>Dockerfile.test-install</code> (fresh)</li>
<li class=""><strong>2026-01-13</strong>: Interactive installer script (<code>install.sh</code>)</li>
<li class=""><strong>2026-01-13</strong>: Database migration system (auto-adds missing columns)</li>
<li class=""><strong>2026-01-13</strong>: Gunicorn production server (replaced Flask dev server)</li>
<li class=""><strong>2026-01-13</strong>: CI/CD auto-deploy via Gitea webhook</li>
<li class=""><strong>2026-01-13</strong>: Full ToolSource support in registry (source_json)</li>
<li class=""><strong>2026-01-13</strong>: Improved error messages with line numbers and call stacks</li>
<li class=""><strong>2026-01-03</strong>: Migrated from SmartTools to CmdForge</li>
<li class=""><strong>2026-01-03</strong>: Added source field support for Fabric imports</li>
<li class=""><strong>2026-01-03</strong>: Created systemd service for web UI</li>
</ul></div></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--next" href="/rob/CmdForge/architecture"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">CmdForge Architecture</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#project-links" class="table-of-contents__link toc-highlight">Project Links</a></li><li><a href="#components" class="table-of-contents__link toc-highlight">Components</a></li><li><a href="#key-directories" class="table-of-contents__link toc-highlight">Key Directories</a><ul><li><a href="#development-ai-server" class="table-of-contents__link toc-highlight">Development (AI-Server)</a></li><li><a href="#production-openmediavault" class="table-of-contents__link toc-highlight">Production (OpenMediaVault)</a></li></ul></li><li><a href="#recent-changes" class="table-of-contents__link toc-highlight">Recent Changes</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/rob/CmdForge/">Overview</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://gitea.brrd.tech/rob/CmdForge" target="_blank" rel="noopener noreferrer" class="footer__link-item">Gitea<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">CmdForge Documentation</div></div></div></footer></div>
</body>
</html>

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Milestones | CmdForge</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pages.brrd.tech/rob/CmdForge/milestones"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Milestones | CmdForge"><meta data-rh="true" name="description" content="M0: Core Platform"><meta data-rh="true" property="og:description" content="M0: Core Platform"><link data-rh="true" rel="icon" href="/rob/CmdForge/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pages.brrd.tech/rob/CmdForge/milestones"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/milestones" hreflang="en"><link data-rh="true" rel="alternate" href="https://pages.brrd.tech/rob/CmdForge/milestones" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Milestones","item":"https://pages.brrd.tech/rob/CmdForge/milestones"}]}</script><link rel="stylesheet" href="/rob/CmdForge/assets/css/styles.6095798e.css">
<script src="/rob/CmdForge/assets/js/runtime~main.54641272.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/runtime~main.22550140.js" defer="defer"></script>
<script src="/rob/CmdForge/assets/js/main.fe1fa999.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
@ -20,21 +20,165 @@
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="m1-production-ready">M1: Production Ready<a href="#m1-production-ready" class="hash-link" aria-label="Direct link to M1: Production Ready" title="Direct link to M1: Production Ready" translate="no"></a></h4>
<p><strong>Target</strong>: February 2026
<strong>Status</strong>: In Progress (60%)</p>
<strong>Status</strong>: Completed (100%)</p>
<p>Production deployment with proper server configuration, complete documentation, and improved reliability.</p>
<table><thead><tr><th>Deliverable</th><th>Status</th></tr></thead><tbody><tr><td>Public documentation</td><td>Done</td></tr><tr><td>Systemd service setup</td><td>Done</td></tr><tr><td>Gunicorn production server</td><td>Not Started</td></tr><tr><td>Systemd linger for persistence</td><td>Not Started</td></tr><tr><td>CI/CD pipeline</td><td>Not Started</td></tr><tr><td>Error message improvements</td><td>Not Started</td></tr></tbody></table>
<table><thead><tr><th>Deliverable</th><th>Status</th></tr></thead><tbody><tr><td>Public documentation</td><td>Done</td></tr><tr><td>Systemd service setup</td><td>Done</td></tr><tr><td>Gunicorn production server</td><td>Done</td></tr><tr><td>Systemd linger for persistence</td><td>Done</td></tr><tr><td>CI/CD pipeline</td><td>Done</td></tr><tr><td>Error message improvements</td><td>Done</td></tr><tr><td>Source field display in web UI</td><td>Done</td></tr></tbody></table>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="m2-tool-discovery">M2: Tool Discovery<a href="#m2-tool-discovery" class="hash-link" aria-label="Direct link to M2: Tool Discovery" title="Direct link to M2: Tool Discovery" translate="no"></a></h4>
<p><strong>Target</strong>: Q2 2026
<strong>Status</strong>: Not Started</p>
<strong>Status</strong>: Completed (100%)</p>
<p>Enable users to discover, rate, and share tools through a marketplace interface with curation to maintain quality.</p>
<table><thead><tr><th>Deliverable</th><th>Status</th></tr></thead><tbody><tr><td>Tool search and filtering</td><td>Not Started</td></tr><tr><td>Registry curation system</td><td>Not Started</td></tr><tr><td>Tool ratings/reviews</td><td>Not Started</td></tr><tr><td>Import remaining Fabric patterns</td><td>Not Started</td></tr><tr><td>Tool marketplace UI</td><td>Not Started</td></tr></tbody></table>
<table><thead><tr><th>Deliverable</th><th>Status</th></tr></thead><tbody><tr><td>Tool search and filtering</td><td>Done</td></tr><tr><td>PySide6 GUI conversion</td><td>Done</td></tr><tr><td>GUI Registry browser</td><td>Done</td></tr><tr><td>GUI Publishing with connect flow</td><td>Done</td></tr><tr><td>Docker containers (test + ready)</td><td>Done</td></tr><tr><td>Interactive installer script</td><td>Done</td></tr><tr><td>Database migration system</td><td>Done</td></tr><tr><td>Registry curation system</td><td>Done</td></tr><tr><td>App pairing/connection flow</td><td>Done</td></tr><tr><td>Tool ratings/reviews</td><td>Done</td></tr><tr><td>Tool marketplace UI enhancements</td><td>Done</td></tr><tr><td>AI persona profiles</td><td>Done</td></tr><tr><td>AI-assisted code generation</td><td>Done</td></tr></tbody></table>
<p><strong>Tool search and filtering</strong> includes:</p>
<ul>
<li class=""><code>/api/v1/tags</code> endpoint for listing tags with counts</li>
<li class="">Advanced search with tag filtering (AND logic), multi-category (OR logic), owner, download range, date range</li>
<li class="">Faceted search responses with category/tag/owner counts</li>
<li class="">CLI: <code>--tag</code>, <code>--owner</code>, <code>--min-downloads</code>, <code>--popular</code>, <code>--since</code>, <code>--json</code>, <code>--show-facets</code> options</li>
<li class="">CLI: <code>registry tags</code> subcommand</li>
<li class="">Web UI: Filter sidebar with checkboxes, dropdowns, active filter chips, URL-based state</li>
</ul>
<p><strong>PySide6 GUI conversion</strong> includes:</p>
<ul>
<li class="">Modern desktop GUI replacing urwid TUI</li>
<li class="">Sidebar navigation (My Tools, Registry, Providers, Profiles)</li>
<li class="">Tool Builder with visual form for creating/editing tools</li>
<li class="">Keyboard shortcuts (Ctrl+N, Ctrl+S, Ctrl+R, Ctrl+1/2/3/4, Escape, Ctrl+Q)</li>
<li class="">Window geometry persistence</li>
</ul>
<p><strong>GUI Registry browser</strong> includes:</p>
<ul>
<li class="">Browse/search tools with category and sort filters</li>
<li class="">Star ratings display in table and details</li>
<li class="">Clickable tags for filtering</li>
<li class="">Installed indicator (✓) and update available (↑)</li>
<li class="">Pagination for large result sets</li>
<li class="">Publisher reputation info</li>
</ul>
<p><strong>GUI Publishing</strong> includes:</p>
<ul>
<li class="">Connect dialog with polling-based account pairing</li>
<li class="">Publish workflow with version selection</li>
<li class="">Full publish workflow with confirmation</li>
</ul>
<p><strong>Infrastructure improvements</strong>:</p>
<ul>
<li class=""><code>Dockerfile.test-install</code>: Fresh environment for testing installer</li>
<li class=""><code>Dockerfile.ready</code>: Pre-installed container for quick usage</li>
<li class=""><code>install.sh</code>: Interactive installer with venv, PATH setup, optional example tools</li>
<li class="">Database migration: Auto-adds missing columns on server start</li>
</ul>
<p><strong>Registry curation system</strong> includes:</p>
<ul>
<li class="">Role-based access control (user, moderator, admin)</li>
<li class="">Tool moderation workflow (pending → approved/rejected/removed)</li>
<li class="">Publisher management (ban/unban, role changes)</li>
<li class="">Private/unlisted tool visibility (auto-approved, owner-only access)</li>
<li class="">Audit logging for all moderation actions</li>
<li class="">Admin web UI pages (pending queue, publishers, reports, audit log)</li>
<li class="">Report resolution workflow</li>
</ul>
<p><strong>App pairing/connection flow</strong> includes:</p>
<ul>
<li class=""><code>cmdforge config connect &lt;username&gt;</code> CLI command</li>
<li class="">GUI Connect dialog with polling-based approval</li>
<li class="">Web UI &quot;Connections&quot; page (replaces API Tokens)</li>
<li class="">Device hostname tracking for connected apps</li>
</ul>
<p><strong>Tool ratings/reviews</strong> includes:</p>
<ul>
<li class="">5-star rating system with review text</li>
<li class="">Average rating display on tool cards</li>
<li class="">Publisher reputation scores</li>
<li class="">Rating count and distribution</li>
</ul>
<p><strong>Tool marketplace UI enhancements</strong> includes:</p>
<ul>
<li class="">Browse all tools on page load</li>
<li class="">Category filter dropdown</li>
<li class="">Sort by popularity, rating, newest, name</li>
<li class="">Clickable tags for filtering</li>
<li class="">Installed/update indicators</li>
<li class="">Pagination controls</li>
</ul>
<p><strong>AI persona profiles</strong> includes:</p>
<ul>
<li class="">Profile dataclass with name, description, system_prompt</li>
<li class="">8 built-in profiles (Comedian, Technical Writer, Teacher, Concise, Creative, Code Reviewer, Analyst)</li>
<li class="">Custom profile creation and storage</li>
<li class="">Profile selector in Prompt Step dialog</li>
<li class="">Profile injection during tool execution</li>
<li class="">Profiles page in GUI (Ctrl+4)</li>
</ul>
<p><strong>AI-assisted code generation</strong> includes:</p>
<ul>
<li class="">Split-view Code Step dialog (editor + AI assist panel)</li>
<li class="">Provider selector for AI calls</li>
<li class="">Smart prompt template with available variables</li>
<li class="">Background thread for non-blocking AI calls</li>
<li class="">Automatic markdown fence stripping</li>
<li class="">Python syntax checking before save</li>
</ul>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="m3-plugin-system">M3: Plugin System<a href="#m3-plugin-system" class="hash-link" aria-label="Direct link to M3: Plugin System" title="Direct link to M3: Plugin System" translate="no"></a></h4>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="m3-content--automation">M3: Content &amp; Automation<a href="#m3-content--automation" class="hash-link" aria-label="Direct link to M3: Content &amp; Automation" title="Direct link to M3: Content &amp; Automation" translate="no"></a></h4>
<p><strong>Target</strong>: Q3 2026
<strong>Status</strong>: Completed (100%)</p>
<p>Automated content ingestion and quality assurance for the tool ecosystem.</p>
<table><thead><tr><th>Deliverable</th><th>Status</th></tr></thead><tbody><tr><td>Import Fabric patterns (233 total)</td><td>Done</td></tr><tr><td>Scheduled Fabric repo sync</td><td>Done</td></tr><tr><td>Auto-vetting pipeline integration</td><td>Done</td></tr><tr><td>Community tool submissions workflow</td><td>Done</td></tr><tr><td>Duplicate detection automation</td><td>Done</td></tr></tbody></table>
<p><strong>Import Fabric patterns</strong> includes:</p>
<ul>
<li class="">Run existing <code>scripts/import_fabric.py</code> to populate registry</li>
<li class="">Automatic attribution with source fields (imported, MIT license, Daniel Miessler)</li>
<li class="">Category mapping based on pattern name prefixes</li>
<li class="">README generation with original pattern attribution</li>
</ul>
<p><strong>Auto-vetting pipeline</strong> includes:</p>
<ul>
<li class="">Integration with existing <code>scrutiny.py</code> (honesty, transparency, scope, efficiency checks)</li>
<li class="">Integration with existing <code>similarity.py</code> (duplicate detection)</li>
<li class="">Auto-approve/review/reject decision logic</li>
<li class="">Helpful suggestions for tool improvements</li>
</ul>
<p><strong>Scheduled sync</strong> includes:</p>
<ul>
<li class="">Periodic checks for Fabric repo updates</li>
<li class="">Automatic import of new patterns</li>
<li class="">Version tracking for updated patterns</li>
<li class="">Admin notifications for review queue</li>
</ul>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="m4-user-experience">M4: User Experience<a href="#m4-user-experience" class="hash-link" aria-label="Direct link to M4: User Experience" title="Direct link to M4: User Experience" translate="no"></a></h4>
<p><strong>Target</strong>: Q4 2026
<strong>Status</strong>: Planning (0%)</p>
<p>Extensible plugin architecture for custom backends, tool composition, and automated testing.</p>
<table><thead><tr><th>Deliverable</th><th>Status</th></tr></thead><tbody><tr><td>Plugin architecture design</td><td>Not Started</td></tr><tr><td>Custom AI backend support</td><td>Not Started</td></tr><tr><td>Tool composition and chaining</td><td>Not Started</td></tr><tr><td>Tool testing framework</td><td>Not Started</td></tr></tbody></table>
<p>Visual improvements and interactive guidance for tool creation and management.</p>
<table><thead><tr><th>Deliverable</th><th>Status</th></tr></thead><tbody><tr><td>Visual node-based step editor</td><td>Not Started</td></tr><tr><td>Interactive onboarding walkthroughs</td><td>Not Started</td></tr><tr><td>Tool visualization improvements</td><td>Not Started</td></tr><tr><td>Tool composition and chaining UI</td><td>Not Started</td></tr><tr><td>Drag-and-drop step reordering</td><td>Not Started</td></tr></tbody></table>
<p><strong>Visual node-based editor</strong> includes:</p>
<ul>
<li class="">Graphical nodes for steps (like n8n, Google Sketch)</li>
<li class="">Visual connections showing data flow between steps</li>
<li class="">Drag-and-drop step creation</li>
<li class="">Real-time preview of tool execution flow</li>
</ul>
<p><strong>Interactive walkthroughs</strong> includes:</p>
<ul>
<li class="">First-time user onboarding</li>
<li class="">Guided tool creation tutorial</li>
<li class="">Feature discovery tooltips</li>
<li class="">Context-sensitive help</li>
</ul>
<p><strong>Tool composition UI</strong> includes:</p>
<ul>
<li class="">Visual interface for chaining tools together</li>
<li class="">Input/output mapping between tools</li>
<li class="">Dependency visualization</li>
<li class="">Meta-tool builder</li>
</ul>
<hr>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="m5-plugin-system">M5: Plugin System<a href="#m5-plugin-system" class="hash-link" aria-label="Direct link to M5: Plugin System" title="Direct link to M5: Plugin System" translate="no"></a></h4>
<p><strong>Target</strong>: Q1 2027
<strong>Status</strong>: Planning (0%)</p>
<p>Extensible plugin architecture for custom backends and automated testing.</p>
<table><thead><tr><th>Deliverable</th><th>Status</th></tr></thead><tbody><tr><td>Plugin architecture design</td><td>Not Started</td></tr><tr><td>Custom AI backend support</td><td>Not Started</td></tr><tr><td>Tool testing framework</td><td>Not Started</td></tr><tr><td>Tool versioning support</td><td>Not Started</td></tr><tr><td>Plugin marketplace</td><td>Not Started</td></tr></tbody></table>
<hr></div></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/rob/CmdForge/ideas-and-exploration"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Ideas &amp; Exploration</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/rob/CmdForge/">Overview</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://gitea.brrd.tech/rob/CmdForge" target="_blank" rel="noopener noreferrer" class="footer__link-item">Gitea<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">CmdForge Documentation</div></div></div></footer></div>
</body>
</html>

File diff suppressed because one or more lines are too long