oh-my-agent 10.20.1 → 10.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bin/cli.js +1 -1
  2. package/package.json +1 -1
package/bin/cli.js CHANGED
@@ -24,7 +24,7 @@ Expecting one of '${G.join("', '")}'`);if(this._lifeCycleHooks[$])this._lifeCycl
24
24
  `),this.outputHelp({error:!0});let G=z||{},J=G.exitCode||1,Q=G.code||"commander.error";this._exit(J,Q,$)}_parseOptionsEnv(){this.options.forEach(($)=>{if($.envVar&&$.envVar in h4.env){let z=$.attributeName();if(this.getOptionValue(z)===void 0||["default","config","env"].includes(this.getOptionValueSource(z)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,h4.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new rk5(this.options),z=(G)=>{return this.getOptionValue(G)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(G))};this.options.filter((G)=>G.implied!==void 0&&z(G.attributeName())&&$.valueFromOption(this.getOptionValue(G.attributeName()),G)).forEach((G)=>{Object.keys(G.implied).filter((J)=>!z(J)).forEach((J)=>{this.setOptionValueWithSource(J,G.implied[J],"implied")})})}missingArgument($){let z=`error: missing required argument '${$}'`;this.error(z,{code:"commander.missingArgument"})}optionMissingArgument($){let z=`error: option '${$.flags}' argument missing`;this.error(z,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue($){let z=`error: required option '${$.flags}' not specified`;this.error(z,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption($,z){let G=(K)=>{let Z=K.attributeName(),U=this.getOptionValue(Z),Y=this.options.find((V)=>V.negate&&Z===V.attributeName()),W=this.options.find((V)=>!V.negate&&Z===V.attributeName());if(Y&&(Y.presetArg===void 0&&U===!1||Y.presetArg!==void 0&&U===Y.presetArg))return Y;return W||K},J=(K)=>{let Z=G(K),U=Z.attributeName();if(this.getOptionValueSource(U)==="env")return`environment variable '${Z.envVar}'`;return`option '${Z.flags}'`},Q=`error: ${J($)} cannot be used with ${J(z)}`;this.error(Q,{code:"commander.conflictingOption"})}unknownOption($){if(this._allowUnknownOption)return;let z="";if($.startsWith("--")&&this._showSuggestionAfterError){let J=[],Q=this;do{let K=Q.createHelp().visibleOptions(Q).filter((Z)=>Z.long).map((Z)=>Z.long);J=J.concat(K),Q=Q.parent}while(Q&&!Q._enablePositionalOptions);z=sW2($,J)}let G=`error: unknown option '${$}'${z}`;this.error(G,{code:"commander.unknownOption"})}_excessArguments($){if(this._allowExcessArguments)return;let z=this.registeredArguments.length,G=z===1?"":"s",Q=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${z} argument${G} but got ${$.length}.`;this.error(Q,{code:"commander.excessArguments"})}unknownCommand(){let $=this.args[0],z="";if(this._showSuggestionAfterError){let J=[];this.createHelp().visibleCommands(this).forEach((Q)=>{if(J.push(Q.name()),Q.alias())J.push(Q.alias())}),z=sW2($,J)}let G=`error: unknown command '${$}'${z}`;this.error(G,{code:"commander.unknownCommand"})}version($,z,G){if($===void 0)return this._version;this._version=$,z=z||"-V, --version",G=G||"output the version number";let J=this.createOption(z,G);return this._versionOptionName=J.attributeName(),this._registerOption(J),this.on("option:"+J.name(),()=>{this._outputConfiguration.writeOut(`${$}
25
25
  `),this._exit(0,"commander.version",$)}),this}description($,z){if($===void 0&&z===void 0)return this._description;if(this._description=$,z)this._argsDescription=z;return this}summary($){if($===void 0)return this._summary;return this._summary=$,this}alias($){if($===void 0)return this._aliases[0];let z=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)z=this.commands[this.commands.length-1];if($===z._name)throw Error("Command alias can't be the same as its name");let G=this.parent?._findCommand($);if(G){let J=[G.name()].concat(G.aliases()).join("|");throw Error(`cannot add alias '${$}' to command '${this.name()}' as already have command '${J}'`)}return z._aliases.push($),this}aliases($){if($===void 0)return this._aliases;return $.forEach((z)=>this.alias(z)),this}usage($){if($===void 0){if(this._usage)return this._usage;let z=this.registeredArguments.map((G)=>{return nk5(G)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?z:[]).join(" ")}return this._usage=$,this}name($){if($===void 0)return this._name;return this._name=$,this}helpGroup($){if($===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=$,this}commandsGroup($){if($===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=$,this}optionsGroup($){if($===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=$,this}_initOptionGroup($){if(this._defaultOptionGroup&&!$.helpGroupHeading)$.helpGroup(this._defaultOptionGroup)}_initCommandGroup($){if(this._defaultCommandGroup&&!$.helpGroup())$.helpGroup(this._defaultCommandGroup)}nameFromFilename($){return this._name=UG.basename($,UG.extname($)),this}executableDir($){if($===void 0)return this._executableDir;return this._executableDir=$,this}helpInformation($){let z=this.createHelp(),G=this._getOutputContext($);z.prepareContext({error:G.error,helpWidth:G.helpWidth,outputHasColors:G.hasColors});let J=z.formatHelp(this,z);if(G.hasColors)return J;return this._outputConfiguration.stripColor(J)}_getOutputContext($){$=$||{};let z=!!$.error,G,J,Q;if(z)G=(Z)=>this._outputConfiguration.writeErr(Z),J=this._outputConfiguration.getErrHasColors(),Q=this._outputConfiguration.getErrHelpWidth();else G=(Z)=>this._outputConfiguration.writeOut(Z),J=this._outputConfiguration.getOutHasColors(),Q=this._outputConfiguration.getOutHelpWidth();return{error:z,write:(Z)=>{if(!J)Z=this._outputConfiguration.stripColor(Z);return G(Z)},hasColors:J,helpWidth:Q}}outputHelp($){let z;if(typeof $==="function")z=$,$=void 0;let G=this._getOutputContext($),J={error:G.error,write:G.write,command:this};this._getCommandAndAncestors().reverse().forEach((K)=>K.emit("beforeAllHelp",J)),this.emit("beforeHelp",J);let Q=this.helpInformation({error:G.error});if(z){if(Q=z(Q),typeof Q!=="string"&&!Buffer.isBuffer(Q))throw Error("outputHelp callback must return a string or a Buffer")}if(G.write(Q),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",J),this._getCommandAndAncestors().forEach((K)=>K.emit("afterAllHelp",J))}helpOption($,z){if(typeof $==="boolean"){if($){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption($??"-h, --help",z??"display help for command"),$||z)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption($){return this._helpOption=$,this._initOptionGroup($),this}help($){this.outputHelp($);let z=Number(h4.exitCode??0);if(z===0&&$&&typeof $!=="function"&&$.error)z=1;this._exit(z,"commander.help","(outputHelp)")}addHelpText($,z){let G=["beforeAll","before","after","afterAll"];if(!G.includes($))throw Error(`Unexpected value for position to addHelpText.
26
26
  Expecting one of '${G.join("', '")}'`);let J=`${$}Help`;return this.on(J,(Q)=>{let K;if(typeof z==="function")K=z({error:Q.error,command:Q.command});else K=z;if(K)Q.write(`${K}
27
- `)}),this}_outputHelpIfRequested($){let z=this._getHelpOption();if(z&&$.find((J)=>z.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function tW2($){return $.map((z)=>{if(!z.startsWith("--inspect"))return z;let G,J="127.0.0.1",Q="9229",K;if((K=z.match(/^(--inspect(-brk)?)$/))!==null)G=K[1];else if((K=z.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(G=K[1],/^\d+$/.test(K[3]))Q=K[3];else J=K[3];else if((K=z.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)G=K[1],J=K[3],Q=K[4];if(G&&Q!=="0")return`${G}=${J}:${parseInt(Q)+1}`;return z})}function af(){if(h4.env.NO_COLOR||h4.env.FORCE_COLOR==="0"||h4.env.FORCE_COLOR==="false")return!1;if(h4.env.FORCE_COLOR||h4.env.CLICOLOR_FORCE!==void 0)return!0;return}sk5.Command=of;sk5.useColor=af});var JY2=C((GA5)=>{var{Argument:$Y2}=iR(),{Command:rf}=eW2(),{CommanderError:$A5,InvalidArgumentError:zY2}=qF(),{Help:zA5}=lf(),{Option:GY2}=pf();GA5.program=new rf;GA5.createCommand=($)=>new rf($);GA5.createOption=($,z)=>new GY2($,z);GA5.createArgument=($,z)=>new $Y2($,z);GA5.Command=rf;GA5.Option=GY2;GA5.Argument=$Y2;GA5.Help=zA5;GA5.CommanderError=$A5;GA5.InvalidArgumentError=zY2;GA5.InvalidOptionArgumentError=zY2});var QY2,ba4,_a4,xa4,Sa4,ya4,ua4,ga4,pR,ha4,fa4,ma4;var sf=k(()=>{QY2=E2(JY2(),1),{program:ba4,createCommand:_a4,createArgument:xa4,createOption:Sa4,CommanderError:ya4,InvalidArgumentError:ua4,InvalidOptionArgumentError:ga4,Command:pR,Argument:ha4,Option:fa4,Help:ma4}=QY2.default});var dR;var tf=k(()=>{dR={name:"oh-my-agent",version:"10.20.1",description:"Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin"],keywords:["oh-my-agent","antigravity",".agents","agent","skills","agent-skills","multi-agent","orchestrator","claude","claude-code","codex","opencode","copilot","cursor","chatgpt","pm","frontend","backend","mobile","qa","debug","terraform","database","workflow","bug-fixing"],author:"our.first.fluke <our.first.fluke@gmail.com>",contributors:["gracefullight <gracefullight.dev@gmail.com>","gahyun-git <go4it.gh@gmail.com>"],license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/first-fluke"},{type:"buymeacoffee",url:"https://buymeacoffee.com/firstfluke"}],scripts:{"sync:readme":"node ./scripts/sync-readme.mjs","generate:skill-data":"node ./scripts/generate-skill-data.mjs",build:"bun run generate:skill-data && bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify --external @napi-rs/keyring",dev:"bun run generate:skill-data && bun run cli.ts",lint:"biome check .","lint:fix":"biome check --write --unsafe .","check:boundaries":"node ./scripts/check-boundaries.mjs","check:emit-drift":"node ./scripts/check-emit-drift.mjs",test:"vitest run","test:coverage":"vitest run --coverage",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.1.0","@date-fns/tz":"^1.4.1","@napi-rs/keyring":"^1.3.0",axios:"^1.15.0","better-sqlite3":"^12.9.0",chokidar:"^5.0.0",commander:"^14.0.3","date-fns":"^4.2.1",eld:"^2.0.3","fast-xml-parser":"^5",minimatch:"^10.2.5","p-map":"^7.0.4",picocolors:"^1.1.1","puppeteer-core":"^24",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.6.1",unified:"^11.0.5",ws:"^8.18.0",yaml:"^2.8.2",zod:"^4.3.6"},optionalDependencies:{pptxgenjs:"^3.12.0"},devDependencies:{"@biomejs/biome":"^2.5.4","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^24","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.4",typescript:"^6",vitest:"^4.0.18"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},homepage:"https://firstfluke.com/oh-my-agent",bugs:{url:"https://github.com/first-fluke/oh-my-agent/issues"},antigravity:{skillsPath:".agents/skills",skills:["oma-architecture","oma-brainstorm","oma-coordination","oma-pm","oma-frontend","oma-backend","oma-db","oma-mobile","oma-qa","oma-debug","oma-orchestrator","oma-dev-workflow","oma-tf-infra","oma-scm","oma-pdf","oma-recap"]}}});import*as nY from"node:fs";import{homedir as LA5}from"node:os";import*as LF from"node:path";function ZY2($){if(nR)throw Error("install context already set in this process");nR=$}function UY2(){if(nR===null)throw Error("install context not set — entry point must call setInstallContext()");return nR}function aY(){return UY2().installRoot}function Q6(){return UY2().mode}function oY(){try{return Q6()}catch{return"project"}}function WY2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return FA5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:LA5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function FA5($){if(!LF.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of KY2)if($===G||$.startsWith(G+LF.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=nY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of KY2)if(z===G||z.startsWith(G+LF.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{nY.accessSync(z,nY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var nR=null,KY2;var WG=k(()=>{KY2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as NA5}from"node:path";function FF($){return $.endsWith("/")?$:`${$}/`}function T7($,z){let G=z.split("/").filter((J)=>J.length>0);return NA5($,...G)}var b0=".agents",aR,b3,yJ,YY2,VY2,oR,kA5=".antigravitycli",BY2,AA5=".migration-backup",jA5,MA5,OA5,IA5,RA5,ef;var _3=k(()=>{aR=`${b0}/skills`,b3=`${b0}/results`,yJ=`${b0}/state`,YY2=`${yJ}/sessions`,VY2=`${yJ}/retry`,oR=`${yJ}/archive`,BY2=`${b0}/backup`;jA5=FF(b3),MA5=FF(yJ),OA5=FF(kA5),IA5=FF(BY2),RA5=FF(AA5),ef=[OA5,jA5,MA5,IA5,RA5]});var i1="first-fluke/oh-my-agent",f4,_0,rR,DA5,vA5,YG,z3;var S$=k(()=>{_3();f4=aR,_0=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],rR=["pi","opencode"],DA5=["copilot","hermes"],vA5=["zcode"],YG=[..._0,...DA5,...vA5].sort(),z3={antigravity:{projectPath:".gemini/antigravity-cli/skills",homePath:".gemini/antigravity-cli/skills",requiresHomeConsent:!0},claude:{projectPath:".claude/skills",homePath:".claude/skills"},codex:{projectPath:".codex/skills",homePath:".codex/skills"},commandcode:{projectPath:".commandcode/skills",homePath:".commandcode/skills",optIn:!0},copilot:{projectPath:".github/skills",homePath:".copilot/skills"},cursor:{projectPath:".cursor/skills",homePath:".cursor/skills"},hermes:{projectPath:".hermes/skills/oma",homePath:".hermes/skills/oma",requiresHomeConsent:!0},kimi:{projectPath:".kimi-code/skills",homePath:".kimi-code/skills",requiresHomeConsent:!0,optIn:!0},kiro:{projectPath:".kiro/skills",homePath:".kiro/skills",optIn:!0},opencode:{projectPath:".opencode/skills",homePath:".opencode/skills"},qwen:{projectPath:".qwen/skills",homePath:".qwen/skills"}}});var kY2={};z5(kY2,{runAction:()=>C2,resolveJsonMode:()=>A5,printDescribe:()=>hA5,addOutputOptions:()=>j5});function j5($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!NF.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${NF.join(", ")}`);return J})}function EA5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&NF.includes(z))return z;if(process.env[qY2]?.trim().toLowerCase()==="json")return"json";return"text"}function A5($){return EA5($)==="json"}function LY2($){let z=$.at(-1);return z instanceof pR?z:null}function wA5($){let z=LY2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function CA5($){if($ instanceof Error)return $.message;return String($)}function uJ($){throw Error($)}function zm($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)uJ(`${z} must not contain control characters`)}}function PA5($,z){if(zm($,z),/[?#%]/.test($))uJ(`${z} must not contain ?, #, or %`);if($.includes(".."))uJ(`${z} must not contain '..'`)}function TA5($,z){zm($,z);try{new URL($)}catch{uJ(`${z} must be a valid absolute URL`)}}function $m($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){PA5($,z);return}if(G==="url"){TA5($,z);return}zm($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())$m(Q,`${z}[${J}]`,G)}function HY2($){let z=$.toLowerCase();if(z==="url"||z.endsWith("url"))return"url";if(z.includes("id")||z.includes("type")||z.includes("vendor")||z.includes("session"))return"identifier";return"text"}function bA5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!YG.includes(K)).length>0)uJ(`vendor must be one of ${YG.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!NF.includes(G))uJ(`output must be one of ${NF.join(", ")}`)}function _A5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let Z=Q.name?.()||String(K),U=z[K];if($m(U,Z,HY2(Z)),Z==="agent-type"&&typeof U==="string"&&!XY2.includes(U))uJ(`agent-type must be one of ${XY2.join(", ")}`)});let J=$.opts();bA5(J);for(let[Q,K]of Object.entries(J))$m(K,Q,HY2(Q))}function xA5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function SA5($){return $.options.map((z)=>({flags:z.flags,long:z.long||void 0,short:z.short||void 0,description:z.description||"",required:!!z.required||!!z.mandatory,optional:!!z.optional,defaultValue:z.defaultValue}))}function FY2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function yA5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function uA5($){return $.options.some((z)=>z.long==="--dry-run")}function NY2($){return{name:$.name(),path:FY2($),summary:$.summary()||void 0,description:$.description(),arguments:xA5($),options:SA5($),supportsJsonOutput:yA5($),supportsDryRun:uA5($),subcommands:$.commands.map((z)=>NY2(z))}}function gA5($,z){if(!z?.trim())return $;let G=z.trim(),J=[...$.commands];while(J.length>0){let Q=J.shift();if(!Q)continue;if(Q.name()===G||FY2(Q)===G)return Q;J.push(...Q.commands)}return null}function hA5($,z){let G=gA5($,z);if(!G)uJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[qY2]:"Set to json to force machine-readable output on commands that support it."},command:NY2(G)};console.log(JSON.stringify(J,null,2))}function C2($,z={}){return async(...G)=>{let J=LY2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=wA5(G);try{if(J)_A5(J);await $(...G)}catch(K){let Z=CA5(K);if(z.supportsJsonOutput&&A5(Q))console.log(JSON.stringify({error:Z},null,2));else console.error(Z);process.exitCode=1}}}var qY2="OH_MY_AG_OUTPUT_FORMAT",NF,XY2;var m4=k(()=>{sf();S$();NF=["text","json"],XY2=["backend","frontend","mobile","qa","debug","pm"]});var AY2,jY2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},MY2=($)=>{return $===8987||$===9001||$>=12272&&$<=12287||$>=12289&&$<=12350||$>=12441&&$<=12543||$>=12549&&$<=12591||$>=12593&&$<=12686||$>=12688&&$<=12771||$>=12783&&$<=12830||$>=12832&&$<=12871||$>=12880&&$<=19903||$>=65040&&$<=65049||$>=65072&&$<=65106||$>=65108&&$<=65126||$>=65128&&$<=65131||$>=127488&&$<=127490||$>=127504&&$<=127547||$>=127552&&$<=127560||$>=131072&&$<=196605||$>=196608&&$<=262141};var OY2=k(()=>{AY2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var fA5,mA5,IY2,cA5,RY2,iA5,lA5,pA5,DY2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?DY2(Q,pA5,G).width:0),Z=0,U=G.controlWidth??0,Y=G.tabWidth??8,W=G.emojiWidth??2,V=2,B=G.regularWidth??1,H=G.wideWidth??2,X=[[iA5,B],[fA5,0],[mA5,U],[cA5,Y],[RY2,W],[IY2,H]],q=0,L=0,F=$.length,N=0,A=!1,j=F,M=Math.max(0,J-K),O=0,R=0,I=0,D=0;$:while(!0){if(R>O||L>=F&&L>q){let E=$.slice(O,R)||$.slice(q,L);N=0;for(let P of E.replaceAll(lA5,"")){let _=P.codePointAt(0)||0;if(jY2(_))D=2;else if(MY2(_))D=H;else D=B;if(I+D>M)j=Math.min(j,Math.max(O,q)+N);if(I+D>J){A=!0;break $}N+=P.length,I+=D}O=R=0}if(L>=F)break $;for(let E=0,P=X.length;E<P;E++){let[_,u]=X[E];if(_.lastIndex=L,_.test($)){if(N=_===IY2?AY2($.slice(L,_.lastIndex)):_===RY2?1:_.lastIndex-L,D=N*u,I+D>M)j=Math.min(j,L+Math.floor((M-I)/u));if(I+D>J){A=!0;break $}I+=D,O=q,R=L,L=q=_.lastIndex;continue $}}L+=1}return{width:A?M:I,index:A?j:F,truncated:A,ellipsed:A&&J>=K}},vY2;var EY2=k(()=>{OY2();fA5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,mA5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,IY2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,cA5=/\t{1,1000}/y,RY2=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,iA5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,lA5=/\p{M}+/gu,pA5={limit:1/0,ellipsis:""},vY2=DY2});var dA5,nA5=($,z={})=>{return vY2($,dA5,z).width},w6;var Gm=k(()=>{EY2();dA5={limit:1/0,ellipsis:"",ellipsisWidth:0},w6=nA5});function y$($,z,G){return String($).normalize().split(tA5).map((J)=>sA5(J,z,G)).join(`
27
+ `)}),this}_outputHelpIfRequested($){let z=this._getHelpOption();if(z&&$.find((J)=>z.is(J)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function tW2($){return $.map((z)=>{if(!z.startsWith("--inspect"))return z;let G,J="127.0.0.1",Q="9229",K;if((K=z.match(/^(--inspect(-brk)?)$/))!==null)G=K[1];else if((K=z.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(G=K[1],/^\d+$/.test(K[3]))Q=K[3];else J=K[3];else if((K=z.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)G=K[1],J=K[3],Q=K[4];if(G&&Q!=="0")return`${G}=${J}:${parseInt(Q)+1}`;return z})}function af(){if(h4.env.NO_COLOR||h4.env.FORCE_COLOR==="0"||h4.env.FORCE_COLOR==="false")return!1;if(h4.env.FORCE_COLOR||h4.env.CLICOLOR_FORCE!==void 0)return!0;return}sk5.Command=of;sk5.useColor=af});var JY2=C((GA5)=>{var{Argument:$Y2}=iR(),{Command:rf}=eW2(),{CommanderError:$A5,InvalidArgumentError:zY2}=qF(),{Help:zA5}=lf(),{Option:GY2}=pf();GA5.program=new rf;GA5.createCommand=($)=>new rf($);GA5.createOption=($,z)=>new GY2($,z);GA5.createArgument=($,z)=>new $Y2($,z);GA5.Command=rf;GA5.Option=GY2;GA5.Argument=$Y2;GA5.Help=zA5;GA5.CommanderError=$A5;GA5.InvalidArgumentError=zY2;GA5.InvalidOptionArgumentError=zY2});var QY2,ba4,_a4,xa4,Sa4,ya4,ua4,ga4,pR,ha4,fa4,ma4;var sf=k(()=>{QY2=E2(JY2(),1),{program:ba4,createCommand:_a4,createArgument:xa4,createOption:Sa4,CommanderError:ya4,InvalidArgumentError:ua4,InvalidOptionArgumentError:ga4,Command:pR,Argument:ha4,Option:fa4,Help:ma4}=QY2.default});var dR;var tf=k(()=>{dR={name:"oh-my-agent",version:"10.20.2",description:"Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",type:"module",bin:{"oh-my-agent":"./bin/cli.js",oma:"./bin/cli.js"},files:["bin"],keywords:["oh-my-agent","antigravity",".agents","agent","skills","agent-skills","multi-agent","orchestrator","claude","claude-code","codex","opencode","copilot","cursor","chatgpt","pm","frontend","backend","mobile","qa","debug","terraform","database","workflow","bug-fixing"],author:"our.first.fluke <our.first.fluke@gmail.com>",contributors:["gracefullight <gracefullight.dev@gmail.com>","gahyun-git <go4it.gh@gmail.com>"],license:"MIT",funding:[{type:"github",url:"https://github.com/sponsors/first-fluke"},{type:"buymeacoffee",url:"https://buymeacoffee.com/firstfluke"}],scripts:{"sync:readme":"node ./scripts/sync-readme.mjs","generate:skill-data":"node ./scripts/generate-skill-data.mjs",build:"bun run generate:skill-data && bun run sync:readme && bun build cli.ts --outfile bin/cli.js --target node --minify --external @napi-rs/keyring",dev:"bun run generate:skill-data && bun run cli.ts",lint:"biome check .","lint:fix":"biome check --write --unsafe .","check:boundaries":"node ./scripts/check-boundaries.mjs","check:emit-drift":"node ./scripts/check-emit-drift.mjs",test:"vitest run","test:coverage":"vitest run --coverage",prepublishOnly:"bun run build"},dependencies:{"@clack/prompts":"^1.1.0","@date-fns/tz":"^1.4.1","@napi-rs/keyring":"^1.3.0",axios:"^1.15.0","better-sqlite3":"^12.9.0",chokidar:"^5.0.0",commander:"^14.0.3","date-fns":"^4.2.1",eld:"^2.0.3","fast-xml-parser":"^5",minimatch:"^10.2.5","p-map":"^7.0.4",picocolors:"^1.1.1","puppeteer-core":"^24",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-parse":"^11.0.0","smol-toml":"^1.6.1",unified:"^11.0.5",ws:"^8.18.0",yaml:"^2.8.2",zod:"^4.3.6"},optionalDependencies:{pptxgenjs:"^3.12.0"},devDependencies:{"@biomejs/biome":"^2.5.4","@types/better-sqlite3":"^7.6.13","@types/mdast":"^4.0.4","@types/node":"^24","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.4",typescript:"^6",vitest:"^4.0.18"},repository:{type:"git",url:"https://github.com/first-fluke/oh-my-agent"},homepage:"https://firstfluke.com/oh-my-agent",bugs:{url:"https://github.com/first-fluke/oh-my-agent/issues"},antigravity:{skillsPath:".agents/skills",skills:["oma-architecture","oma-brainstorm","oma-coordination","oma-pm","oma-frontend","oma-backend","oma-db","oma-mobile","oma-qa","oma-debug","oma-orchestrator","oma-dev-workflow","oma-tf-infra","oma-scm","oma-pdf","oma-recap"]}}});import*as nY from"node:fs";import{homedir as LA5}from"node:os";import*as LF from"node:path";function ZY2($){if(nR)throw Error("install context already set in this process");nR=$}function UY2(){if(nR===null)throw Error("install context not set — entry point must call setInstallContext()");return nR}function aY(){return UY2().installRoot}function Q6(){return UY2().mode}function oY(){try{return Q6()}catch{return"project"}}function WY2($){let z=process.env.OMA_HOME,G=$.global===!0||process.env.OMA_INSTALL_GLOBAL==="1";if(z!==void 0&&z!=="")return FA5(z),{installRoot:z,mode:G?"global":"project"};if(G)return{installRoot:LA5(),mode:"global"};return{installRoot:process.cwd(),mode:"project"}}function FA5($){if(!LF.isAbsolute($))throw Error("OMA_HOME must be absolute path");for(let G of KY2)if($===G||$.startsWith(G+LF.sep))throw Error(`OMA_HOME=${$} is forbidden (system path ${G})`);let z;try{z=nY.realpathSync($)}catch(G){let J=G instanceof Error?G.message:String(G);throw Error(`OMA_HOME=${$}: ${J}`)}for(let G of KY2)if(z===G||z.startsWith(G+LF.sep))throw Error(`OMA_HOME=${z} is forbidden (system path ${G})`);try{nY.accessSync(z,nY.constants.W_OK)}catch{throw Error(`OMA_HOME=${z} is not writable`)}}var nR=null,KY2;var WG=k(()=>{KY2=["/etc","/usr","/bin","/boot","/sys","/proc"]});import{join as NA5}from"node:path";function FF($){return $.endsWith("/")?$:`${$}/`}function T7($,z){let G=z.split("/").filter((J)=>J.length>0);return NA5($,...G)}var b0=".agents",aR,b3,yJ,YY2,VY2,oR,kA5=".antigravitycli",BY2,AA5=".migration-backup",jA5,MA5,OA5,IA5,RA5,ef;var _3=k(()=>{aR=`${b0}/skills`,b3=`${b0}/results`,yJ=`${b0}/state`,YY2=`${yJ}/sessions`,VY2=`${yJ}/retry`,oR=`${yJ}/archive`,BY2=`${b0}/backup`;jA5=FF(b3),MA5=FF(yJ),OA5=FF(kA5),IA5=FF(BY2),RA5=FF(AA5),ef=[OA5,jA5,MA5,IA5,RA5]});var i1="first-fluke/oh-my-agent",f4,_0,rR,DA5,vA5,YG,z3;var S$=k(()=>{_3();f4=aR,_0=["antigravity","claude","codex","commandcode","cursor","grok","kimi","kiro","qwen"],rR=["pi","opencode"],DA5=["copilot","hermes"],vA5=["zcode"],YG=[..._0,...DA5,...vA5].sort(),z3={antigravity:{projectPath:".gemini/antigravity-cli/skills",homePath:".gemini/antigravity-cli/skills",requiresHomeConsent:!0},claude:{projectPath:".claude/skills",homePath:".claude/skills"},codex:{projectPath:".codex/skills",homePath:".codex/skills"},commandcode:{projectPath:".commandcode/skills",homePath:".commandcode/skills",optIn:!0},copilot:{projectPath:".github/skills",homePath:".copilot/skills"},cursor:{projectPath:".cursor/skills",homePath:".cursor/skills"},hermes:{projectPath:".hermes/skills/oma",homePath:".hermes/skills/oma",requiresHomeConsent:!0},kimi:{projectPath:".kimi-code/skills",homePath:".kimi-code/skills",requiresHomeConsent:!0,optIn:!0},kiro:{projectPath:".kiro/skills",homePath:".kiro/skills",optIn:!0},opencode:{projectPath:".opencode/skills",homePath:".opencode/skills"},qwen:{projectPath:".qwen/skills",homePath:".qwen/skills"}}});var kY2={};z5(kY2,{runAction:()=>C2,resolveJsonMode:()=>A5,printDescribe:()=>hA5,addOutputOptions:()=>j5});function j5($,z="Output as JSON"){return $.option("--json",z).option("--output <format>","Output format (text/json)",(G)=>{let J=G.trim().toLowerCase();if(!NF.includes(J))throw Error(`Invalid output format: ${G}. Expected one of ${NF.join(", ")}`);return J})}function EA5($){if($?.json)return"json";let z=$?.output?.trim().toLowerCase();if(z&&NF.includes(z))return z;if(process.env[qY2]?.trim().toLowerCase()==="json")return"json";return"text"}function A5($){return EA5($)==="json"}function LY2($){let z=$.at(-1);return z instanceof pR?z:null}function wA5($){let z=LY2($);if(z)return z.opts();let G=$.at(-1);return G&&typeof G==="object"?G:{}}function CA5($){if($ instanceof Error)return $.message;return String($)}function uJ($){throw Error($)}function zm($,z){for(let G of $){let J=G.charCodeAt(0);if(J>=0&&J<=31||J===127)uJ(`${z} must not contain control characters`)}}function PA5($,z){if(zm($,z),/[?#%]/.test($))uJ(`${z} must not contain ?, #, or %`);if($.includes(".."))uJ(`${z} must not contain '..'`)}function TA5($,z){zm($,z);try{new URL($)}catch{uJ(`${z} must be a valid absolute URL`)}}function $m($,z,G="text"){if(typeof $==="string"){if(G==="identifier"){PA5($,z);return}if(G==="url"){TA5($,z);return}zm($,z);return}if(Array.isArray($))for(let[J,Q]of $.entries())$m(Q,`${z}[${J}]`,G)}function HY2($){let z=$.toLowerCase();if(z==="url"||z.endsWith("url"))return"url";if(z.includes("id")||z.includes("type")||z.includes("vendor")||z.includes("session"))return"identifier";return"text"}function bA5($){let z=$.vendor;if(typeof z==="string"){if(z.split(",").map((K)=>K.trim()).filter(Boolean).filter((K)=>!YG.includes(K)).length>0)uJ(`vendor must be one of ${YG.join(", ")}`)}let G=$.output;if(typeof G==="string"&&!NF.includes(G))uJ(`output must be one of ${NF.join(", ")}`)}function _A5($){let z=$.processedArgs??$.args??[];($.registeredArguments??[]).forEach((Q,K)=>{let Z=Q.name?.()||String(K),U=z[K];if($m(U,Z,HY2(Z)),Z==="agent-type"&&typeof U==="string"&&!XY2.includes(U))uJ(`agent-type must be one of ${XY2.join(", ")}`)});let J=$.opts();bA5(J);for(let[Q,K]of Object.entries(J))$m(K,Q,HY2(Q))}function xA5($){return($.registeredArguments??[]).map((z)=>({name:z.name?.()||"",required:!!z.required,variadic:!!z.variadic}))}function SA5($){return $.options.map((z)=>({flags:z.flags,long:z.long||void 0,short:z.short||void 0,description:z.description||"",required:!!z.required||!!z.mandatory,optional:!!z.optional,defaultValue:z.defaultValue}))}function FY2($){let z=[],G=$;while(G?.parent)z.unshift(G.name()),G=G.parent;return z.join(" ")}function yA5($){return $.options.some((z)=>z.long==="--json"||z.long==="--output")}function uA5($){return $.options.some((z)=>z.long==="--dry-run")}function NY2($){return{name:$.name(),path:FY2($),summary:$.summary()||void 0,description:$.description(),arguments:xA5($),options:SA5($),supportsJsonOutput:yA5($),supportsDryRun:uA5($),subcommands:$.commands.map((z)=>NY2(z))}}function gA5($,z){if(!z?.trim())return $;let G=z.trim(),J=[...$.commands];while(J.length>0){let Q=J.shift();if(!Q)continue;if(Q.name()===G||FY2(Q)===G)return Q;J.push(...Q.commands)}return null}function hA5($,z){let G=gA5($,z);if(!G)uJ(`Unknown command: ${z}`);let J={name:$.name(),version:$.version(),description:$.description(),env:{[qY2]:"Set to json to force machine-readable output on commands that support it."},command:NY2(G)};console.log(JSON.stringify(J,null,2))}function C2($,z={}){return async(...G)=>{let J=LY2(G);if(J&&G.length>=2)G[G.length-2]=J.optsWithGlobals();let Q=wA5(G);try{if(J)_A5(J);await $(...G)}catch(K){let Z=CA5(K);if(z.supportsJsonOutput&&A5(Q))console.log(JSON.stringify({error:Z},null,2));else console.error(Z);process.exitCode=1}}}var qY2="OH_MY_AG_OUTPUT_FORMAT",NF,XY2;var m4=k(()=>{sf();S$();NF=["text","json"],XY2=["backend","frontend","mobile","qa","debug","pm"]});var AY2,jY2=($)=>{return $===12288||$>=65281&&$<=65376||$>=65504&&$<=65510},MY2=($)=>{return $===8987||$===9001||$>=12272&&$<=12287||$>=12289&&$<=12350||$>=12441&&$<=12543||$>=12549&&$<=12591||$>=12593&&$<=12686||$>=12688&&$<=12771||$>=12783&&$<=12830||$>=12832&&$<=12871||$>=12880&&$<=19903||$>=65040&&$<=65049||$>=65072&&$<=65106||$>=65108&&$<=65126||$>=65128&&$<=65131||$>=127488&&$<=127490||$>=127504&&$<=127547||$>=127552&&$<=127560||$>=131072&&$<=196605||$>=196608&&$<=262141};var OY2=k(()=>{AY2=(()=>{let $=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(z)=>{let G=0;$.lastIndex=0;while($.test(z))G+=1;return z.length-G}})()});var fA5,mA5,IY2,cA5,RY2,iA5,lA5,pA5,DY2=($,z={},G={})=>{let J=z.limit??1/0,Q=z.ellipsis??"",K=z?.ellipsisWidth??(Q?DY2(Q,pA5,G).width:0),Z=0,U=G.controlWidth??0,Y=G.tabWidth??8,W=G.emojiWidth??2,V=2,B=G.regularWidth??1,H=G.wideWidth??2,X=[[iA5,B],[fA5,0],[mA5,U],[cA5,Y],[RY2,W],[IY2,H]],q=0,L=0,F=$.length,N=0,A=!1,j=F,M=Math.max(0,J-K),O=0,R=0,I=0,D=0;$:while(!0){if(R>O||L>=F&&L>q){let E=$.slice(O,R)||$.slice(q,L);N=0;for(let P of E.replaceAll(lA5,"")){let _=P.codePointAt(0)||0;if(jY2(_))D=2;else if(MY2(_))D=H;else D=B;if(I+D>M)j=Math.min(j,Math.max(O,q)+N);if(I+D>J){A=!0;break $}N+=P.length,I+=D}O=R=0}if(L>=F)break $;for(let E=0,P=X.length;E<P;E++){let[_,u]=X[E];if(_.lastIndex=L,_.test($)){if(N=_===IY2?AY2($.slice(L,_.lastIndex)):_===RY2?1:_.lastIndex-L,D=N*u,I+D>M)j=Math.min(j,L+Math.floor((M-I)/u));if(I+D>J){A=!0;break $}I+=D,O=q,R=L,L=q=_.lastIndex;continue $}}L+=1}return{width:A?M:I,index:A?j:F,truncated:A,ellipsed:A&&J>=K}},vY2;var EY2=k(()=>{OY2();fA5=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,mA5=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,IY2=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,cA5=/\t{1,1000}/y,RY2=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,iA5=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,lA5=/\p{M}+/gu,pA5={limit:1/0,ellipsis:""},vY2=DY2});var dA5,nA5=($,z={})=>{return vY2($,dA5,z).width},w6;var Gm=k(()=>{EY2();dA5={limit:1/0,ellipsis:"",ellipsisWidth:0},w6=nA5});function y$($,z,G){return String($).normalize().split(tA5).map((J)=>sA5(J,z,G)).join(`
28
28
  `)}var sR="\x1B",bY2="›",aA5=39,Qm="\x07",_Y2="[",oA5="]",xY2="m",Km,wY2,CY2=($)=>{if($>=30&&$<=37)return 39;if($>=90&&$<=97)return 39;if($>=40&&$<=47)return 49;if($>=100&&$<=107)return 49;if($===1||$===2)return 22;if($===3)return 23;if($===4)return 24;if($===7)return 27;if($===8)return 28;if($===9)return 29;if($===0)return 0;return},PY2=($)=>`${sR}${_Y2}${$}${xY2}`,TY2=($)=>`${sR}${Km}${$}${Qm}`,Jm=($,z,G)=>{let J=z[Symbol.iterator](),Q=!1,K=!1,Z=$.at(-1),U=Z===void 0?0:w6(Z),Y=J.next(),W=J.next(),V=0;while(!Y.done){let B=Y.value,H=w6(B);if(U+H<=G)$[$.length-1]+=B;else $.push(B),U=0;if(B===sR||B===bY2)Q=!0,K=z.startsWith(Km,V+1);if(Q){if(K){if(B===Qm)Q=!1,K=!1}else if(B===xY2)Q=!1}else if(U+=H,U===G&&!W.done)$.push(""),U=0;Y=W,W=J.next(),V+=B.length}if(Z=$.at(-1),!U&&Z!==void 0&&Z.length&&$.length>1)$[$.length-2]+=$.pop()},rA5=($)=>{let z=$.split(" "),G=z.length;while(G){if(w6(z[G-1]))break;G--}if(G===z.length)return $;return z.slice(0,G).join(" ")+z.slice(G).join("")},sA5=($,z,G={})=>{if(G.trim!==!1&&$.trim()==="")return"";let J="",Q,K,Z=$.split(" "),U=[""],Y=0;for(let B=0;B<Z.length;B++){let H=Z[B];if(G.trim!==!1){let q=U.at(-1)??"",L=q.trimStart();if(q.length!==L.length)U[U.length-1]=L,Y=w6(L)}if(B!==0){if(Y>=z&&(G.wordWrap===!1||G.trim===!1))U.push(""),Y=0;if(Y||G.trim===!1)U[U.length-1]+=" ",Y++}let X=w6(H);if(G.hard&&X>z){let q=z-Y,L=1+Math.floor((X-q-1)/z);if(Math.floor((X-1)/z)<L)U.push("");Jm(U,H,z),Y=w6(U.at(-1)??"");continue}if(Y+X>z&&Y&&X){if(G.wordWrap===!1&&Y<z){Jm(U,H,z),Y=w6(U.at(-1)??"");continue}U.push(""),Y=0}if(Y+X>z&&G.wordWrap===!1){Jm(U,H,z),Y=w6(U.at(-1)??"");continue}U[U.length-1]+=H,Y+=X}if(G.trim!==!1)U=U.map((B)=>rA5(B));let W=U.join(`
29
29
  `),V=!1;for(let B=0;B<W.length;B++){let H=W[B];if(J+=H,!V){if(V=H>="\uD800"&&H<="\uDBFF",V)continue}else V=!1;if(H===sR||H===bY2){wY2.lastIndex=B+1;let q=wY2.exec(W)?.groups;if(q?.code!==void 0){let L=Number.parseFloat(q.code);Q=L===aA5?void 0:L}else if(q?.uri!==void 0)K=q.uri.length===0?void 0:q.uri}if(W[B+1]===`
30
30
  `){if(K)J+=TY2("");let X=Q?CY2(Q):void 0;if(Q&&X)J+=PY2(X)}else if(H===`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-agent",
3
- "version": "10.20.1",
3
+ "version": "10.20.2",
4
4
  "description": "Portable multi-agent harness for .agents-based skills and workflows across Antigravity, Claude Code, Codex, OpenCode, and more",
5
5
  "type": "module",
6
6
  "bin": {