loki-mode 11.18.0 → 11.20.0

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 (89) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/dashboard/__init__.py +1 -1
  4. package/docs/CLI-REFERENCE.md +1 -1
  5. package/docs/INSTALLATION.md +1 -1
  6. package/loki-ts/dist/loki.js +2 -2
  7. package/mcp/__init__.py +1 -1
  8. package/memory/embeddings.py +111 -0
  9. package/package.json +2 -2
  10. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  11. package/skills/00-index.md +28 -0
  12. package/skills/agents.md +14 -0
  13. package/skills/artifacts.md +12 -0
  14. package/skills/compound-learning.md +20 -0
  15. package/skills/documentation.md +18 -0
  16. package/skills/extending.md +13 -0
  17. package/skills/factory-operations.md +23 -0
  18. package/skills/github-integration.md +27 -0
  19. package/skills/healing.md +28 -0
  20. package/skills/magic-modules.md +24 -0
  21. package/skills/memory.md +20 -0
  22. package/skills/model-selection.md +34 -0
  23. package/skills/openspec-integration.md +16 -0
  24. package/skills/parallel-workflows.md +44 -0
  25. package/skills/patterns-advanced.md +11 -0
  26. package/skills/production.md +19 -0
  27. package/skills/providers.md +18 -0
  28. package/skills/quality-gates.md +54 -0
  29. package/skills/release-cadence.md +16 -0
  30. package/skills/sdlc-fleet.md +17 -0
  31. package/skills/testing.md +12 -0
  32. package/skills/troubleshooting.md +41 -1
  33. package/web-app/dist/assets/{AdminPage-Ccl4YEiK.js → AdminPage-B-bEZytb.js} +1 -1
  34. package/web-app/dist/assets/{Avatar-CNr3zMt9.js → Avatar-AVq-BBUz.js} +1 -1
  35. package/web-app/dist/assets/{Badge-BvHGigQF.js → Badge-BGp6pTWA.js} +1 -1
  36. package/web-app/dist/assets/{Button-BPOUvGtk.js → Button-BOg2qFMK.js} +1 -1
  37. package/web-app/dist/assets/{CockpitPage-CaQew8Gv.js → CockpitPage-XIwAzBEn.js} +1 -1
  38. package/web-app/dist/assets/{ComparePage-BR3EinOa.js → ComparePage-1xndNmeA.js} +1 -1
  39. package/web-app/dist/assets/{ErrorBoundary-_w7Oyx3U.js → ErrorBoundary-Be-tq62u.js} +1 -1
  40. package/web-app/dist/assets/{EvidenceReceiptPanel-CzMl43Ae.js → EvidenceReceiptPanel-CLzGyfv0.js} +1 -1
  41. package/web-app/dist/assets/{GitHubIssuesPanel-DG_OioDO.js → GitHubIssuesPanel-Dbmz-k3i.js} +1 -1
  42. package/web-app/dist/assets/{GitHubPRsPanel-B6LqESL1.js → GitHubPRsPanel-D7XMEJcR.js} +1 -1
  43. package/web-app/dist/assets/{HomePage-CNsoKByl.js → HomePage-DGVhPfDg.js} +2 -2
  44. package/web-app/dist/assets/{LoginPage-aP55S_EK.js → LoginPage-DZiBc6jd.js} +1 -1
  45. package/web-app/dist/assets/{MagicPage-CtYd65MA.js → MagicPage-DqL0_Lc6.js} +1 -1
  46. package/web-app/dist/assets/{MetricsPage-4cghRPlD.js → MetricsPage-ChVqKn71.js} +1 -1
  47. package/web-app/dist/assets/{NotFoundPage-BQ1L2OHR.js → NotFoundPage-DappfBO6.js} +1 -1
  48. package/web-app/dist/assets/{ProjectPage-CWZw_DTd.js → ProjectPage-CHbZsIUs.js} +3 -3
  49. package/web-app/dist/assets/{ProjectsPage-CTqLKk01.js → ProjectsPage-B6HTzGg0.js} +1 -1
  50. package/web-app/dist/assets/{SettingsPage-W7Ntgwvx.js → SettingsPage-C4fA0CFo.js} +1 -1
  51. package/web-app/dist/assets/{ShowcasePage-Bnb-SpWP.js → ShowcasePage-BL_6Nsvm.js} +1 -1
  52. package/web-app/dist/assets/{SystemSettingsPage-DmkyMEEf.js → SystemSettingsPage-D70hAp-u.js} +1 -1
  53. package/web-app/dist/assets/{TeamsPage-BDg_dylr.js → TeamsPage-Dag5RT5f.js} +1 -1
  54. package/web-app/dist/assets/{TemplatesPage-zwUCIEOg.js → TemplatesPage-cp7d1hN7.js} +1 -1
  55. package/web-app/dist/assets/{TerminalOutput-Raof8c5U.js → TerminalOutput-BHcgTkgY.js} +1 -1
  56. package/web-app/dist/assets/{activity-IB3YlI9q.js → activity-DoYq1Z4M.js} +1 -1
  57. package/web-app/dist/assets/{bell-BDzVZvca.js → bell-Dc4idmgk.js} +1 -1
  58. package/web-app/dist/assets/{bot-DsRGUgID.js → bot-WhQrzVl8.js} +1 -1
  59. package/web-app/dist/assets/{check-C7E0WGL4.js → check-S_mzCWxV.js} +1 -1
  60. package/web-app/dist/assets/{chevron-left-D-ICnF5T.js → chevron-left-DHQHGUiI.js} +1 -1
  61. package/web-app/dist/assets/{circle-alert-CZqV3x2-.js → circle-alert-Bc0XFZyt.js} +1 -1
  62. package/web-app/dist/assets/{clock-BIEgg_GJ.js → clock-BdFy2s87.js} +1 -1
  63. package/web-app/dist/assets/{cloud-DRzjdYzI.js → cloud-B23nmmiG.js} +1 -1
  64. package/web-app/dist/assets/{code-xml-BQYPTsLd.js → code-xml-BGDz8B3H.js} +1 -1
  65. package/web-app/dist/assets/{database-gBcDKVfn.js → database-DFhZ-uHK.js} +1 -1
  66. package/web-app/dist/assets/{dollar-sign-Bnsh4Jq8.js → dollar-sign-JcYLq2s0.js} +1 -1
  67. package/web-app/dist/assets/{file-code-corner-BhXnk7-V.js → file-code-corner-CfbFrxzM.js} +1 -1
  68. package/web-app/dist/assets/{file-plus-l1DKdi2E.js → file-plus-CNGwBTPi.js} +1 -1
  69. package/web-app/dist/assets/{globe-D8W2cVH_.js → globe-Dx80kAI0.js} +1 -1
  70. package/web-app/dist/assets/{hammer-DFPCUfHe.js → hammer-BSXFz8qY.js} +1 -1
  71. package/web-app/dist/assets/{index-BMB47fiQ.js → index-CGIhXeB0.js} +3 -3
  72. package/web-app/dist/assets/{layers-Dlu05krU.js → layers-CzZgAtpQ.js} +1 -1
  73. package/web-app/dist/assets/{loader-circle-BGagtH3f.js → loader-circle-D5gsWJnZ.js} +1 -1
  74. package/web-app/dist/assets/{lock-DBl7GNrr.js → lock-B1CRcUxR.js} +1 -1
  75. package/web-app/dist/assets/{package-BsZzFTn1.js → package-B9YObxi2.js} +1 -1
  76. package/web-app/dist/assets/{plus-D1iwT9Vz.js → plus-CiKIplJ-.js} +1 -1
  77. package/web-app/dist/assets/{refresh-cw-WqyzmGbv.js → refresh-cw-DFE5RmgT.js} +1 -1
  78. package/web-app/dist/assets/{rotate-ccw-BiOYJbPr.js → rotate-ccw-DVaCDpoi.js} +1 -1
  79. package/web-app/dist/assets/{scroll-text-r-VNmnk_.js → scroll-text-B189mONr.js} +1 -1
  80. package/web-app/dist/assets/{server-B-gocXVg.js → server-BtEO_lvf.js} +1 -1
  81. package/web-app/dist/assets/{shield-alert-CU9Diuka.js → shield-alert-BQQIizhH.js} +1 -1
  82. package/web-app/dist/assets/{thumbs-up-Ds9MPsEN.js → thumbs-up-CMkSaDGZ.js} +1 -1
  83. package/web-app/dist/assets/{trash-2-CUqmSInK.js → trash-2-CaevwAvU.js} +1 -1
  84. package/web-app/dist/assets/{trending-down-CIvvdZtN.js → trending-down-ZAVX1hIK.js} +1 -1
  85. package/web-app/dist/assets/{trending-up-CXVZ5vkw.js → trending-up-Cu0vmuAX.js} +1 -1
  86. package/web-app/dist/assets/{upload-DiB_d7Yc.js → upload-l80dpaxu.js} +1 -1
  87. package/web-app/dist/assets/{usePolling-DNrz_v7v.js → usePolling-CqxddWrH.js} +1 -1
  88. package/web-app/dist/assets/{user-CSnRzMEQ.js → user-CPG0fF2X.js} +1 -1
  89. package/web-app/dist/index.html +1 -1
package/SKILL.md CHANGED
@@ -3,7 +3,7 @@ name: loki-mode
3
3
  description: An autonomous software factory that knows what it is supposed to deliver, and proves it did. Use when the user says Loki Mode or asks to build, fix or verify software autonomously.
4
4
  ---
5
5
 
6
- # Loki Mode v11.18.0
6
+ # Loki Mode v11.20.0
7
7
 
8
8
  **Current entry points (Loki 10 engine):** `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"` run the Loki 10 engine and end with a signed receipt (`loki verify`). `loki backlog owner/repo --all` runs many issues in parallel. Guide: `docs/v10/GUIDE.md`. The skill instructions below, and `loki start`, describe the previous bash loop. PRD-file starts (`loki start ./prd.md`) and the opencode provider still run on it until FC38-SWEEP ports them; the legacy-engine command and the LOKI_ENGINE switch remain removed. Prefer `loki owner/repo#N` for issues.
9
9
 
@@ -483,4 +483,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
483
483
 
484
484
  ---
485
485
 
486
- **v11.18.0 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
486
+ **v11.20.0 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 11.18.0
1
+ 11.20.0
@@ -7,6 +7,6 @@ Modules:
7
7
  control: Session control helpers (status, atomic writes, origin check)
8
8
  """
9
9
 
10
- __version__ = "11.18.0"
10
+ __version__ = "11.20.0"
11
11
 
12
12
  __all__ = ["__version__"]
@@ -1,6 +1,6 @@
1
1
  # CLI reference
2
2
 
3
- Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.18.0. Do not edit by hand.
3
+ Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.20.0. Do not edit by hand.
4
4
  Hidden and legacy-only commands are omitted; see `docs/v10/CLI-MODERN.md` for the full inventory.
5
5
 
6
6
  | Command | Description |
@@ -2,7 +2,7 @@
2
2
 
3
3
  Loki Mode, by [Autonomi](https://www.autonomi.dev/), turns a spec or an issue into a verified pull request with a receipt you can check. This page covers installing it, a first run, and the options around it.
4
4
 
5
- **Version:** v11.18.0
5
+ **Version:** v11.20.0
6
6
 
7
7
  **Engine note:** `loki start` is the primary command. `loki start`, `loki "<task>"`, `loki owner/repo#N` and `loki quick` all run the Loki 10 engine, whatever the flag order or input form (PRD file, issue ref, task or one-word brief). The previous loop runs only on `--engine legacy`, `LOKI_ENGINE=legacy`, or for one call when a flag Loki 10 cannot honor is present. See the [user guide](v10/GUIDE.md) and the [5-minute quickstart](QUICKSTART.md).
8
8
 
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var ky0=Object.create;var{getPrototypeOf:xy0,defineProperty:UK,getOwnPropertyNames:wi,getOwnPropertyDescriptor:Sy0}=Object,_i=Object.prototype.hasOwnProperty;function ki(Z){return this[Z]}var yy0,by0,vy0=(Z,$,J)=>{var X=Z!=null&&typeof Z==="object";if(X){var Y=$?yy0??=new WeakMap:by0??=new WeakMap,Q=Y.get(Z);if(Q)return Q}J=Z!=null?ky0(xy0(Z)):{};let z=$||!Z||!Z.__esModule?UK(J,"default",{value:Z,enumerable:!0}):J;for(let W of wi(Z))if(!_i.call(z,W))UK(z,W,{get:ki.bind(Z,W),enumerable:!0});if(X)Y.set(Z,z);return z},hy0=(Z)=>{var $=(Di??=new WeakMap).get(Z),J;if($)return $;if($=UK({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function"){for(var X of wi(Z))if(!_i.call($,X))UK($,X,{get:ki.bind(Z,X),enumerable:!(J=Sy0(Z,X))||J.enumerable})}return Di.set(Z,$),$},Di,vN=(Z,$)=>()=>($||Z(($={exports:{}}).exports,$),$.exports);var fy0=(Z)=>Z;function gy0(Z,$){this[Z]=fy0.bind(null,$)}var A0=(Z,$)=>{for(var J in $)UK(Z,J,{get:$[J],enumerable:!0,configurable:!0,set:gy0.bind($,J)})};var S=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var s9=import.meta.require;var Si={};A0(Si,{lokiDir:()=>P0,homeLokiDir:()=>B2,findRepoRootForVersion:()=>BK,REPO_ROOT:()=>F0});import{resolve as AZ,dirname as mR}from"path";import{fileURLToPath as my0}from"url";import{existsSync as hN}from"fs";import{homedir as uy0}from"os";function py0(){let Z=xi;for(let $=0;$<6;$++){if(hN(AZ(Z,"VERSION"))&&hN(AZ(Z,"autonomy/run.sh")))return Z;let J=mR(Z);if(J===Z)break;Z=J}return AZ(xi,"..","..","..")}function BK(Z){let $=Z;for(let J=0;J<6;J++){if(hN(AZ($,"VERSION"))&&hN(AZ($,"autonomy/run.sh")))return $;let X=mR($);if(X===$)break;$=X}return AZ(Z,"..","..","..")}function P0(){return process.env.LOKI_DIR??AZ(process.cwd(),".loki")}function B2(){return AZ(uy0(),".loki")}var xi,F0;var n0=S(()=>{xi=mR(my0(import.meta.url));F0=py0()});import{readFileSync as dy0}from"fs";import{resolve as cy0,dirname as ly0}from"path";import{fileURLToPath as ay0}from"url";function q6(){if(D1!==null)return D1;let Z="11.18.0";if(typeof Z==="string"&&Z.length>0)return D1=Z,D1;try{let $=ly0(ay0(import.meta.url)),J=BK($);D1=dy0(cy0(J,"VERSION"),"utf-8").trim()}catch{D1="unknown"}return D1}var D1=null;var LZ=S(()=>{n0()});import{mkdirSync as pR,readFileSync as fN,realpathSync as iy0,statSync as oy0,writeFileSync as dR}from"fs";import{dirname as XY,join as uR,resolve as yi}from"path";function ey0(){return yi(B2(),"cache","update-check.json")}function jZ(Z){let $=/^(\d+)\.(\d+)\.(\d+)$/.exec(Z.trim());if(!$)return null;return[Number($[1]),Number($[2]),Number($[3])]}function NK(Z,$){let J=jZ(Z),X=jZ($);if(!J||!X)return!1;let[Y,Q,z]=J,[W,K,V]=X;if(Y!==W)return Y>W;if(Q!==K)return Q>K;return z>V}function bi(){let Z=(process.env.LOKI_NO_UPDATE_CHECK??"").trim().toLowerCase();if(Z==="1"||Z==="true"||Z==="yes")return!0;if(process.env.CI)return!0;if(!process.stdout.isTTY)return!0;return!1}function vi(Z){try{let $=fN(Z,"utf-8"),J=JSON.parse($);if(typeof J.checkedAt==="number"&&typeof J.latest==="string"&&jZ(J.latest)!==null)return{checkedAt:J.checkedAt,latest:J.latest}}catch{}return null}function Zb0(Z){try{let $=JSON.parse(fN(Z,"utf-8")).failedAt;if(typeof $==="number")return $}catch{}return null}function $b0(Z,$){let J=vi(Z);try{pR(XY(Z),{recursive:!0}),dR(Z,JSON.stringify({...J??{},failedAt:$}),"utf-8")}catch{}}function Jb0(Z,$){try{pR(XY(Z),{recursive:!0}),dR(Z,JSON.stringify($),"utf-8")}catch{}}async function Xb0(){try{let Z=await fetch(ny0,{signal:AbortSignal.timeout(ry0),headers:{accept:"application/json"}});if(!Z.ok)return null;let $=await Z.json();if(typeof $.version==="string"&&jZ($.version)!==null)return $.version}catch{}return null}async function Yb0(Z=Date.now(),$=Xb0,J=ey0()){let X=vi(J);if(X&&Z-X.checkedAt<sy0)return X.latest;let Y=Zb0(J);if(Y!==null&&Z-Y>=0&&Z-Y<ty0)return null;let Q=await $();if(Q===null)return $b0(J,Z),null;return Jb0(J,{checkedAt:Z,latest:Q}),Q}function Qb0(Z,$=process.env){if(jZ(Z)===null)return null;let X=$.PATH;if(!X)return null;let Y=new Set;for(let Q of X.split(":")){if(!Q)continue;let z=uR(Q,"loki"),W;try{oy0(z),W=iy0(z)}catch{continue}if(Y.has(W))continue;Y.add(W);try{let K=uR(XY(XY(W)),"package.json"),V=JSON.parse(fN(K,"utf8")).version;if(typeof V!=="string")continue;if(NK(V,Z))return{path:z,version:V}}catch{continue}}return null}function zb0(){return yi(B2(),"cache","last-seen-version.json")}function Wb0(Z,$={}){try{if(bi())return!1;if(jZ(Z)===null)return!1;let J=$.seenFile??zb0(),X=null;try{let Q=JSON.parse(fN(J,"utf-8")).version;if(typeof Q==="string"&&jZ(Q)!==null)X=Q}catch{}if(X!==null&&!NK(Z,X))return!1;try{pR(XY(J),{recursive:!0}),dR(J,JSON.stringify({version:Z}),"utf-8")}catch{return!1}if(X===null)return!1;return($.write??((Q)=>process.stderr.write(Q)))(`Loki Mode upgraded ${X} -> ${Z}. What is new: https://github.com/asklokesh/loki-mode/releases/tag/v${Z}
2
+ var ky0=Object.create;var{getPrototypeOf:xy0,defineProperty:UK,getOwnPropertyNames:wi,getOwnPropertyDescriptor:Sy0}=Object,_i=Object.prototype.hasOwnProperty;function ki(Z){return this[Z]}var yy0,by0,vy0=(Z,$,J)=>{var X=Z!=null&&typeof Z==="object";if(X){var Y=$?yy0??=new WeakMap:by0??=new WeakMap,Q=Y.get(Z);if(Q)return Q}J=Z!=null?ky0(xy0(Z)):{};let z=$||!Z||!Z.__esModule?UK(J,"default",{value:Z,enumerable:!0}):J;for(let W of wi(Z))if(!_i.call(z,W))UK(z,W,{get:ki.bind(Z,W),enumerable:!0});if(X)Y.set(Z,z);return z},hy0=(Z)=>{var $=(Di??=new WeakMap).get(Z),J;if($)return $;if($=UK({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function"){for(var X of wi(Z))if(!_i.call($,X))UK($,X,{get:ki.bind(Z,X),enumerable:!(J=Sy0(Z,X))||J.enumerable})}return Di.set(Z,$),$},Di,vN=(Z,$)=>()=>($||Z(($={exports:{}}).exports,$),$.exports);var fy0=(Z)=>Z;function gy0(Z,$){this[Z]=fy0.bind(null,$)}var A0=(Z,$)=>{for(var J in $)UK(Z,J,{get:$[J],enumerable:!0,configurable:!0,set:gy0.bind($,J)})};var S=(Z,$)=>()=>(Z&&($=Z(Z=0)),$);var s9=import.meta.require;var Si={};A0(Si,{lokiDir:()=>P0,homeLokiDir:()=>B2,findRepoRootForVersion:()=>BK,REPO_ROOT:()=>F0});import{resolve as AZ,dirname as mR}from"path";import{fileURLToPath as my0}from"url";import{existsSync as hN}from"fs";import{homedir as uy0}from"os";function py0(){let Z=xi;for(let $=0;$<6;$++){if(hN(AZ(Z,"VERSION"))&&hN(AZ(Z,"autonomy/run.sh")))return Z;let J=mR(Z);if(J===Z)break;Z=J}return AZ(xi,"..","..","..")}function BK(Z){let $=Z;for(let J=0;J<6;J++){if(hN(AZ($,"VERSION"))&&hN(AZ($,"autonomy/run.sh")))return $;let X=mR($);if(X===$)break;$=X}return AZ(Z,"..","..","..")}function P0(){return process.env.LOKI_DIR??AZ(process.cwd(),".loki")}function B2(){return AZ(uy0(),".loki")}var xi,F0;var n0=S(()=>{xi=mR(my0(import.meta.url));F0=py0()});import{readFileSync as dy0}from"fs";import{resolve as cy0,dirname as ly0}from"path";import{fileURLToPath as ay0}from"url";function q6(){if(D1!==null)return D1;let Z="11.20.0";if(typeof Z==="string"&&Z.length>0)return D1=Z,D1;try{let $=ly0(ay0(import.meta.url)),J=BK($);D1=dy0(cy0(J,"VERSION"),"utf-8").trim()}catch{D1="unknown"}return D1}var D1=null;var LZ=S(()=>{n0()});import{mkdirSync as pR,readFileSync as fN,realpathSync as iy0,statSync as oy0,writeFileSync as dR}from"fs";import{dirname as XY,join as uR,resolve as yi}from"path";function ey0(){return yi(B2(),"cache","update-check.json")}function jZ(Z){let $=/^(\d+)\.(\d+)\.(\d+)$/.exec(Z.trim());if(!$)return null;return[Number($[1]),Number($[2]),Number($[3])]}function NK(Z,$){let J=jZ(Z),X=jZ($);if(!J||!X)return!1;let[Y,Q,z]=J,[W,K,V]=X;if(Y!==W)return Y>W;if(Q!==K)return Q>K;return z>V}function bi(){let Z=(process.env.LOKI_NO_UPDATE_CHECK??"").trim().toLowerCase();if(Z==="1"||Z==="true"||Z==="yes")return!0;if(process.env.CI)return!0;if(!process.stdout.isTTY)return!0;return!1}function vi(Z){try{let $=fN(Z,"utf-8"),J=JSON.parse($);if(typeof J.checkedAt==="number"&&typeof J.latest==="string"&&jZ(J.latest)!==null)return{checkedAt:J.checkedAt,latest:J.latest}}catch{}return null}function Zb0(Z){try{let $=JSON.parse(fN(Z,"utf-8")).failedAt;if(typeof $==="number")return $}catch{}return null}function $b0(Z,$){let J=vi(Z);try{pR(XY(Z),{recursive:!0}),dR(Z,JSON.stringify({...J??{},failedAt:$}),"utf-8")}catch{}}function Jb0(Z,$){try{pR(XY(Z),{recursive:!0}),dR(Z,JSON.stringify($),"utf-8")}catch{}}async function Xb0(){try{let Z=await fetch(ny0,{signal:AbortSignal.timeout(ry0),headers:{accept:"application/json"}});if(!Z.ok)return null;let $=await Z.json();if(typeof $.version==="string"&&jZ($.version)!==null)return $.version}catch{}return null}async function Yb0(Z=Date.now(),$=Xb0,J=ey0()){let X=vi(J);if(X&&Z-X.checkedAt<sy0)return X.latest;let Y=Zb0(J);if(Y!==null&&Z-Y>=0&&Z-Y<ty0)return null;let Q=await $();if(Q===null)return $b0(J,Z),null;return Jb0(J,{checkedAt:Z,latest:Q}),Q}function Qb0(Z,$=process.env){if(jZ(Z)===null)return null;let X=$.PATH;if(!X)return null;let Y=new Set;for(let Q of X.split(":")){if(!Q)continue;let z=uR(Q,"loki"),W;try{oy0(z),W=iy0(z)}catch{continue}if(Y.has(W))continue;Y.add(W);try{let K=uR(XY(XY(W)),"package.json"),V=JSON.parse(fN(K,"utf8")).version;if(typeof V!=="string")continue;if(NK(V,Z))return{path:z,version:V}}catch{continue}}return null}function zb0(){return yi(B2(),"cache","last-seen-version.json")}function Wb0(Z,$={}){try{if(bi())return!1;if(jZ(Z)===null)return!1;let J=$.seenFile??zb0(),X=null;try{let Q=JSON.parse(fN(J,"utf-8")).version;if(typeof Q==="string"&&jZ(Q)!==null)X=Q}catch{}if(X!==null&&!NK(Z,X))return!1;try{pR(XY(J),{recursive:!0}),dR(J,JSON.stringify({version:Z}),"utf-8")}catch{return!1}if(X===null)return!1;return($.write??((Q)=>process.stderr.write(Q)))(`Loki Mode upgraded ${X} -> ${Z}. What is new: https://github.com/asklokesh/loki-mode/releases/tag/v${Z}
3
3
  `),!0}catch{return!1}}function Kb0(Z){let $=Z.replace(/\\/g,"/");if($.includes("/Cellar/"))return"brew upgrade loki-mode";if(/\/pnpm\//.test($)||$.includes("/.pnpm/"))return"pnpm add -g loki-mode (or npm i -g loki-mode)";if($.includes("/yarn/global/")||$.includes("/.yarn/"))return"yarn global add loki-mode (or npm i -g loki-mode)";if($.includes("/.bun/"))return"bun install -g loki-mode (or npm i -g loki-mode)";if($.includes("/lib/node_modules/"))return"npm i -g loki-mode (or bun install -g loki-mode)";if($.includes("/homebrew/"))return"brew upgrade loki-mode";return"bun install -g loki-mode (or npm i -g loki-mode)"}async function hi(Z,$={}){try{if(bi())return;if(jZ(Z)===null)return;let J=$.write??((Q)=>process.stderr.write(Q));Wb0(Z,{write:J,...$.cacheFile?{seenFile:uR(XY($.cacheFile),"last-seen-version.json")}:{}});let X=Qb0(Z,$.env??process.env);if(X!==null){J(`Loki Mode ${X.version} is installed but not the one running (you are running ${Z}).
4
4
  Another loki earlier on PATH is winning. Newer copy: ${X.path}
5
5
  Run \`which -a loki\` to see the order, then remove or re-point the earlier entry.
@@ -3236,4 +3236,4 @@ Unknown commands exit 2 with a suggestion; run 'loki help' for the full list.
3236
3236
  `);{let{suggestCommand:X}=await Promise.resolve().then(() => (t7(),No)),Y=$===void 0?void 0:X($);if(Y)process.stderr.write(`Did you mean 'loki ${Y}'?
3237
3237
  `)}return process.stderr.write(Ty0),2}}DF0();var Py0=()=>globalThis[Symbol.for("loki.ownsStopSignals")]===!0;process.on("SIGINT",()=>{if(!Py0())process.exit(130)});process.on("SIGTERM",()=>{if(!Py0())process.exit(143)});var aH9=await lH9(Bun.argv.slice(2));process.exit(aH9);
3238
3238
 
3239
- //# debugId=4D848EF2E7DD75F8F5F0665DF7717B6D
3239
+ //# debugId=1C6B0BF2D739E7FB0A438A0B127FC984
package/mcp/__init__.py CHANGED
@@ -75,4 +75,4 @@ try:
75
75
  except ImportError:
76
76
  __all__ = ['mcp']
77
77
 
78
- __version__ = '11.18.0'
78
+ __version__ = '11.20.0'
@@ -6,6 +6,7 @@ with support for multiple providers:
6
6
  - Local: sentence-transformers (default, no API key required)
7
7
  - OpenAI: text-embedding-3-small/large
8
8
  - Cohere: embed-english-v3.0
9
+ - Voyage: voyage-code-4 (code retrieval; opt-in only via LOKI_EMBEDDING_PROVIDER=voyage)
9
10
 
10
11
  Features:
11
12
  - Provider fallback chain for resilience
@@ -60,6 +61,7 @@ class EmbeddingProvider(Enum):
60
61
  LOCAL = "local"
61
62
  OPENAI = "openai"
62
63
  COHERE = "cohere"
64
+ VOYAGE = "voyage"
63
65
 
64
66
 
65
67
  class ChunkingStrategy(Enum):
@@ -88,6 +90,7 @@ class EmbeddingConfig:
88
90
  # API keys (loaded from env if not provided)
89
91
  openai_api_key: Optional[str] = None
90
92
  cohere_api_key: Optional[str] = None
93
+ voyage_api_key: Optional[str] = None
91
94
 
92
95
  # Chunking settings
93
96
  chunking_strategy: str = "semantic"
@@ -126,6 +129,11 @@ class EmbeddingConfig:
126
129
  "multilingual": "embed-multilingual-v3.0",
127
130
  }
128
131
 
132
+ VOYAGE_MODELS = {
133
+ "default": "voyage-code-4",
134
+ "general": "voyage-4",
135
+ }
136
+
129
137
  # Model dimensions
130
138
  MODEL_DIMENSIONS = {
131
139
  "all-MiniLM-L6-v2": 384,
@@ -137,6 +145,10 @@ class EmbeddingConfig:
137
145
  "embed-english-v3.0": 1024,
138
146
  "embed-english-light-v3.0": 384,
139
147
  "embed-multilingual-v3.0": 1024,
148
+ "voyage-code-4": 1024,
149
+ "voyage-4": 1024,
150
+ "voyage-code-3": 1024,
151
+ "voyage-3": 1024,
140
152
  }
141
153
 
142
154
  def __post_init__(self):
@@ -145,6 +157,8 @@ class EmbeddingConfig:
145
157
  self.openai_api_key = os.environ.get("OPENAI_API_KEY")
146
158
  if self.cohere_api_key is None:
147
159
  self.cohere_api_key = os.environ.get("COHERE_API_KEY")
160
+ if self.voyage_api_key is None:
161
+ self.voyage_api_key = os.environ.get("VOYAGE_API_KEY")
148
162
 
149
163
  # Set default model based on provider
150
164
  if self.model is None:
@@ -154,6 +168,8 @@ class EmbeddingConfig:
154
168
  self.model = self.OPENAI_MODELS["default"]
155
169
  elif self.provider == "cohere":
156
170
  self.model = self.COHERE_MODELS["default"]
171
+ elif self.provider == "voyage":
172
+ self.model = self.VOYAGE_MODELS["default"]
157
173
 
158
174
  # Update dimension based on model
159
175
  if self.model in self.MODEL_DIMENSIONS:
@@ -167,6 +183,7 @@ class EmbeddingConfig:
167
183
  model=os.environ.get("LOKI_EMBEDDING_MODEL"),
168
184
  openai_api_key=os.environ.get("OPENAI_API_KEY"),
169
185
  cohere_api_key=os.environ.get("COHERE_API_KEY"),
186
+ voyage_api_key=os.environ.get("VOYAGE_API_KEY"),
170
187
  chunking_strategy=os.environ.get("LOKI_EMBEDDING_CHUNKING", "semantic"),
171
188
  include_context=os.environ.get("LOKI_EMBEDDING_CONTEXT", "true").lower() == "true",
172
189
  )
@@ -217,6 +234,7 @@ class EmbeddingConfig:
217
234
  "timeout": self.timeout,
218
235
  "has_openai_key": self.openai_api_key is not None,
219
236
  "has_cohere_key": self.cohere_api_key is not None,
237
+ "has_voyage_key": self.voyage_api_key is not None,
220
238
  }
221
239
 
222
240
 
@@ -770,6 +788,83 @@ class CohereEmbeddingProvider(BaseEmbeddingProvider):
770
788
  return self._cohere_available and self.api_key is not None
771
789
 
772
790
 
791
+ class VoyageEmbeddingProvider(BaseEmbeddingProvider):
792
+ """Voyage AI embedding provider (voyage-code-4 for code retrieval).
793
+
794
+ Remote: sends text to a third party. Registered only when the user
795
+ names it via LOKI_EMBEDDING_PROVIDER=voyage; a VOYAGE_API_KEY alone
796
+ never selects it.
797
+ """
798
+
799
+ def __init__(
800
+ self,
801
+ api_key: Optional[str] = None,
802
+ model: str = "voyage-code-4",
803
+ dimension: int = 1024,
804
+ timeout: float = 30.0
805
+ ):
806
+ self.api_key = api_key or os.environ.get("VOYAGE_API_KEY")
807
+ self.model = model
808
+ self.dimension = dimension
809
+ self.timeout = timeout
810
+ self._client: Optional[Any] = None
811
+ self._voyage_available = False
812
+
813
+ try:
814
+ import voyageai # noqa: F401
815
+ self._voyage_available = True
816
+ except ImportError:
817
+ logger.warning("voyageai package not installed. Install with: pip install voyageai")
818
+
819
+ def _get_client(self) -> Any:
820
+ """Get or create Voyage client."""
821
+ if self._client is None:
822
+ import voyageai
823
+ self._client = voyageai.Client(
824
+ api_key=self.api_key,
825
+ timeout=self.timeout
826
+ )
827
+ return self._client
828
+
829
+ def embed(self, text: str) -> np.ndarray:
830
+ """Generate embedding for a single text."""
831
+ return self.embed_batch([text])[0]
832
+
833
+ def embed_batch(self, texts: List[str]) -> np.ndarray:
834
+ """Generate embeddings for multiple texts."""
835
+ if not texts:
836
+ return np.empty((0, self.dimension), dtype=np.float32)
837
+
838
+ if not self.is_available():
839
+ raise RuntimeError("Voyage provider not available")
840
+
841
+ client = self._get_client()
842
+
843
+ # Voyage accepts up to 128 inputs per request
844
+ embeddings = []
845
+ batch_size = 128
846
+
847
+ for i in range(0, len(texts), batch_size):
848
+ batch = texts[i:i + batch_size]
849
+ response = client.embed(
850
+ batch,
851
+ model=self.model,
852
+ input_type="document"
853
+ )
854
+ embeddings.extend(response.embeddings)
855
+
856
+ return np.array(embeddings, dtype=np.float32)
857
+
858
+ def get_dimension(self) -> int:
859
+ return self.dimension
860
+
861
+ def get_name(self) -> str:
862
+ return "voyage"
863
+
864
+ def is_available(self) -> bool:
865
+ return self._voyage_available and self.api_key is not None
866
+
867
+
773
868
  # -----------------------------------------------------------------------------
774
869
  # Main Embedding Engine
775
870
  # -----------------------------------------------------------------------------
@@ -873,6 +968,22 @@ class EmbeddingEngine:
873
968
  timeout=self.config.timeout,
874
969
  )
875
970
 
971
+ # Voyage is opt-in only: registered when named as the provider or an
972
+ # explicit fallback, never from the presence of VOYAGE_API_KEY alone.
973
+ voyage_named = (
974
+ self.config.provider == "voyage"
975
+ or "voyage" in self.config.fallback_providers
976
+ )
977
+ if self.config.voyage_api_key and voyage_named:
978
+ voyage_model = self.config.model if self.config.provider == "voyage" else "voyage-code-4"
979
+ voyage_dim = self.config.MODEL_DIMENSIONS.get(voyage_model, 1024)
980
+ self._providers["voyage"] = VoyageEmbeddingProvider(
981
+ api_key=self.config.voyage_api_key,
982
+ model=voyage_model,
983
+ dimension=voyage_dim,
984
+ timeout=self.config.timeout,
985
+ )
986
+
876
987
  # Set primary provider
877
988
  if self.config.provider in self._providers:
878
989
  provider = self._providers[self.config.provider]
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "loki-mode",
3
3
  "mcpName": "io.github.asklokesh/loki-mode",
4
- "version": "11.18.0",
4
+ "version": "11.20.0",
5
5
  "description": "An autonomous software factory that knows what it is supposed to deliver, and proves it did.",
6
6
  "keywords": [
7
7
  "agent",
@@ -160,5 +160,5 @@
160
160
  "dependencies": {
161
161
  "@resvg/resvg-wasm": "^2.6.2"
162
162
  },
163
- "gitHead": "96bf456ce704b32f454588206efa07da8f46ebf8"
163
+ "gitHead": "f75f7870ffb623de7e2ec4c5c130d2fb136a910f"
164
164
  }
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "loki-mode",
4
4
  "displayName": "Loki Mode",
5
- "version": "11.18.0",
5
+ "version": "11.20.0",
6
6
  "description": "Autonomous spec-to-product build system with a built-in trust layer (RARV-C closure loop, 8 quality gates, completion council). Ships Loki's spec-hardening, drift-detection, and deterministic PR verification commands plus the Loki MCP server.",
7
7
  "author": {
8
8
  "name": "Autonomi",
@@ -1,5 +1,33 @@
1
1
  # Skill Modules Index
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Module Selection Rules](#module-selection-rules)
7
+ - [Module Descriptions](#module-descriptions)
8
+ - [model-selection.md](#model-selectionmd)
9
+ - [quality-gates.md](#quality-gatesmd)
10
+ - [patterns-advanced.md](#patterns-advancedmd)
11
+ - [testing.md](#testingmd)
12
+ - [production.md](#productionmd)
13
+ - [troubleshooting.md](#troubleshootingmd)
14
+ - [agents.md](#agentsmd)
15
+ - [artifacts.md](#artifactsmd)
16
+ - [parallel-workflows.md](#parallel-workflowsmd)
17
+ - [github-integration.md](#github-integrationmd)
18
+ - [openspec-integration.md](#openspec-integrationmd)
19
+ - [mirofish-integration.md](#mirofish-integrationmd)
20
+ - [documentation.md](#documentationmd)
21
+ - [compound-learning.md (v5.30.0)](#compound-learningmd-v5300)
22
+ - [healing.md (v6.67.0)](#healingmd-v6670)
23
+ - [sdlc-fleet.md](#sdlc-fleetmd)
24
+ - [factory-operations.md](#factory-operationsmd)
25
+ - [release-cadence.md](#release-cadencemd)
26
+ - [extending.md](#extendingmd)
27
+ - [providers.md (v5.0.0)](#providersmd-v500)
28
+ - [How to Load](#how-to-load)
29
+ <!-- TOC:END -->
30
+
3
31
  **Load 1-3 modules based on your current task. Do not load all modules.**
4
32
 
5
33
  > **Full documentation:** For comprehensive details, see `references/` directory:
package/skills/agents.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Agent Dispatch & Structured Prompting
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [How Agents Actually Work](#how-agents-actually-work)
7
+ - [Structured Prompting Template](#structured-prompting-template)
8
+ - [Specialist Review Pattern (v5.30.0)](#specialist-review-pattern-v5300)
9
+ - [Confidence-Based Routing](#confidence-based-routing)
10
+ - [Agent Handoffs](#agent-handoffs)
11
+ - [Project AGENTS.md](#project-agentsmd)
12
+ - [A2A-Inspired Communication (Google Protocol)](#a2a-inspired-communication-google-protocol)
13
+ - [Agentic Patterns Reference (awesome-agentic-patterns)](#agentic-patterns-reference-awesome-agentic-patterns)
14
+ - [The 41 Agent Roles (37 Domain + 4 Orchestration)](#the-41-agent-roles-37-domain--4-orchestration)
15
+ <!-- TOC:END -->
16
+
3
17
  > **Full agent type definitions:** See `references/agent-types.md` for complete 41 agent role specifications across 8 domains (Engineering, Operations, Business, Data, Product, Growth, Review, Orchestration). These are prompt-defined specifications the orchestrator adopts per phase; parallelism on Claude Code comes from the blind review council, the adversarial reviewer, and optional git-worktree streams, sequential on other providers.
4
18
 
5
19
  ---
@@ -1,5 +1,17 @@
1
1
  # Artifact Generation & Code Transformation
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Artifact Generation (Antigravity Pattern)](#artifact-generation-antigravity-pattern)
7
+ - [Artifact Types](#artifact-types)
8
+ - [Verification Report](#verification-report)
9
+ - [Architecture Diff](#architecture-diff)
10
+ - [Screenshot Gallery](#screenshot-gallery)
11
+ - [Code Transformation Agent (Amazon Q Pattern)](#code-transformation-agent-amazon-q-pattern)
12
+ - [Release Notes Generation](#release-notes-generation)
13
+ <!-- TOC:END -->
14
+
3
15
  ## Artifact Generation (Antigravity Pattern)
4
16
 
5
17
  **Auto-generate verifiable deliverables for audit trail without human intervention.**
@@ -1,5 +1,25 @@
1
1
  # Compound Learning & Deep Planning
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Knowledge Compounding (Post-VERIFY)](#knowledge-compounding-post-verify)
7
+ - [When to Compound](#when-to-compound)
8
+ - [When NOT to Compound](#when-not-to-compound)
9
+ - [Solution File Format](#solution-file-format)
10
+ - [Categories](#categories)
11
+ - [YAML Frontmatter Fields](#yaml-frontmatter-fields)
12
+ - [Loading Solutions (REASON Phase)](#loading-solutions-reason-phase)
13
+ - [Matching Logic](#matching-logic)
14
+ - [Context Injection Format](#context-injection-format)
15
+ - [Deepen-Plan Phase](#deepen-plan-phase)
16
+ - [When to Run](#when-to-run)
17
+ - [Research Agents (4 parallel -- launch in ONE message)](#research-agents-4-parallel----launch-in-one-message)
18
+ - [After All 4 Complete](#after-all-4-complete)
19
+ - [Example Output Integration](#example-output-integration)
20
+ - [Composable Phases](#composable-phases)
21
+ <!-- TOC:END -->
22
+
3
23
  **Inspired by:** Compound Engineering Plugin (Every/Kieran Klaassen) -- knowledge compounding philosophy where each unit of work makes subsequent work easier.
4
24
 
5
25
  ---
@@ -1,5 +1,23 @@
1
1
  # Documentation Skill Module
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Research Foundation](#research-foundation)
7
+ - [When to Load This Module](#when-to-load-this-module)
8
+ - [Documentation Types](#documentation-types)
9
+ - [Model Selection](#model-selection)
10
+ - [Repowise Integration](#repowise-integration)
11
+ - [Detection](#detection)
12
+ - [Documentation Quality Criteria](#documentation-quality-criteria)
13
+ - [Prompts](#prompts)
14
+ - [For README generation](#for-readme-generation)
15
+ - [For ARCHITECTURE generation](#for-architecture-generation)
16
+ - [For API documentation](#for-api-documentation)
17
+ - [For DECISIONS documentation](#for-decisions-documentation)
18
+ - [Integration with Other Skills](#integration-with-other-skills)
19
+ <!-- TOC:END -->
20
+
3
21
  ## Research Foundation
4
22
 
5
23
  | Source | Key Contribution | Citation |
@@ -1,5 +1,18 @@
1
1
  # Extending the Loop
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [What is actually extensible today](#what-is-actually-extensible-today)
7
+ - [The reviewer seam (R10)](#the-reviewer-seam-r10)
8
+ - [Install](#install)
9
+ - [When it fires](#when-it-fires)
10
+ - [Three invariants you cannot override](#three-invariants-you-cannot-override)
11
+ - [Manifests are data, never code](#manifests-are-data-never-code)
12
+ - [`src/plugins/` is NOT a seam (status: unwired)](#srcplugins-is-not-a-seam-status-unwired)
13
+ - [Adding a real gate](#adding-a-real-gate)
14
+ <!-- TOC:END -->
15
+
3
16
  **When to load:** you want to add your own reviewer, agent, or gate to the RARV
4
17
  loop without editing engine files.
5
18
 
@@ -1,5 +1,28 @@
1
1
  # Factory Operations (skill module)
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [1. Roles: what each one DECIDES vs what it ADVISES](#1-roles-what-each-one-decides-vs-what-it-advises)
7
+ - [2. Partition: how two teams never edit the same file](#2-partition-how-two-teams-never-edit-the-same-file)
8
+ - [2.1 Per-file ownership is the primary mechanism](#21-per-file-ownership-is-the-primary-mechanism)
9
+ - [2.2 Worktree isolation is the EXCEPTION, not the default](#22-worktree-isolation-is-the-exception-not-the-default)
10
+ - [2.3 A red test during a review window may be someone else's mutation](#23-a-red-test-during-a-review-window-may-be-someone-elses-mutation)
11
+ - [3. WIP limit](#3-wip-limit)
12
+ - [3.1 Why one gate, not more](#31-why-one-gate-not-more)
13
+ - [3.2 Why 3 implementation streams](#32-why-3-implementation-streams)
14
+ - [3.3 The admission rule](#33-the-admission-rule)
15
+ - [4. Escalation: what a blocked team does instead of waiting](#4-escalation-what-a-blocked-team-does-instead-of-waiting)
16
+ - [4.1 A stall is a measurement problem, not a patience problem](#41-a-stall-is-a-measurement-problem-not-a-patience-problem)
17
+ - [4.2 An exit code reports a PROCESS, never the WORLD](#42-an-exit-code-reports-a-process-never-the-world)
18
+ - [5. Release windows: main is WIP=1](#5-release-windows-main-is-wip1)
19
+ - [6. Contended main: verify ancestry, never force](#6-contended-main-verify-ancestry-never-force)
20
+ - [7. The void measurement: the failure shape that costs the most](#7-the-void-measurement-the-failure-shape-that-costs-the-most)
21
+ - [7.1 The three rules that follow](#71-the-three-rules-that-follow)
22
+ - [7.2 Why this is a COORDINATION rule, not a testing tip](#72-why-this-is-a-coordination-rule-not-a-testing-tip)
23
+ - [7.3 If this module is ever trimmed](#73-if-this-module-is-ever-trimmed)
24
+ <!-- TOC:END -->
25
+
3
26
  **Purpose:** the operating system for running multiple agent teams against this
4
27
  repo at once without losing work, without false greens, and without the teams
5
28
  blocking each other.
@@ -1,5 +1,32 @@
1
1
  # GitHub Integration (v5.41.0)
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Quick Reference](#quick-reference)
7
+ - [Environment Variables](#environment-variables)
8
+ - [Issue Import Workflow](#issue-import-workflow)
9
+ - [1. Check gh CLI Authentication](#1-check-gh-cli-authentication)
10
+ - [2. Import Open Issues](#2-import-open-issues)
11
+ - [3. Priority Mapping](#3-priority-mapping)
12
+ - [PR Creation Workflow](#pr-creation-workflow)
13
+ - [PR Body Template](#pr-body-template)
14
+ - [Status Sync Workflow](#status-sync-workflow)
15
+ - [Usage Examples](#usage-examples)
16
+ - [Import Issues and Create PR](#import-issues-and-create-pr)
17
+ - [Sync with Specific Repo](#sync-with-specific-repo)
18
+ - [Filter by Milestone](#filter-by-milestone)
19
+ - [Multiple issues at once (parallel, reliably)](#multiple-issues-at-once-parallel-reliably)
20
+ - [Sequential (simplest, one process, one checkout)](#sequential-simplest-one-process-one-checkout)
21
+ - [Concurrent (one isolated run PER issue)](#concurrent-one-isolated-run-per-issue)
22
+ - [Inside a Claude Code session (the Loki Mode skill)](#inside-a-claude-code-session-the-loki-mode-skill)
23
+ - [CLI Commands](#cli-commands)
24
+ - [Dashboard API](#dashboard-api)
25
+ - [Sync Behavior](#sync-behavior)
26
+ - [Error Handling](#error-handling)
27
+ - [gh CLI Quick Reference](#gh-cli-quick-reference)
28
+ <!-- TOC:END -->
29
+
3
30
  **When:** Importing issues from GitHub, creating PRs, syncing task status back
4
31
 
5
32
  > **Requires:** `gh` CLI authenticated (`gh auth status`)
package/skills/healing.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Legacy System Healing
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Research Foundation](#research-foundation)
7
+ - [When to Load This Module](#when-to-load-this-module)
8
+ - [Core Principles](#core-principles)
9
+ - [1. Friction is Semantics (Amazon AGI Lab)](#1-friction-is-semantics-amazon-agi-lab)
10
+ - [2. Characterize Before Modifying (Feathers)](#2-characterize-before-modifying-feathers)
11
+ - [3. Strangler Fig Pattern (Fowler)](#3-strangler-fig-pattern-fowler)
12
+ - [4. Anti-Corruption Layer (Evans, DDD)](#4-anti-corruption-layer-evans-ddd)
13
+ - [5. System-Boundary Verification (RepoMod-Bench)](#5-system-boundary-verification-repomod-bench)
14
+ - [Healing Pipeline](#healing-pipeline)
15
+ - [Phase Gates](#phase-gates)
16
+ - [Healing RARV Cycle](#healing-rarv-cycle)
17
+ - [RARV-C Closure Flags (v7.5.0+)](#rarv-c-closure-flags-v750)
18
+ - [Structured Fault Injection (Honest Alternative to RL Gyms)](#structured-fault-injection-honest-alternative-to-rl-gyms)
19
+ - [Multi-Agent Decomposition (AWS Transform Pattern)](#multi-agent-decomposition-aws-transform-pattern)
20
+ - [Health Score Formula](#health-score-formula)
21
+ - [Healing-Specific Code Review](#healing-specific-code-review)
22
+ - [Healing Metrics](#healing-metrics)
23
+ - [Golden-master boundary equivalence (modernize -> validate gate)](#golden-master-boundary-equivalence-modernize---validate-gate)
24
+ - [Healing Signals](#healing-signals)
25
+ - [Environment Variables](#environment-variables)
26
+ - [Known Limitations](#known-limitations)
27
+ - [Quick Reference](#quick-reference)
28
+ - [Checkpoint metadata hardening (v7.5.8)](#checkpoint-metadata-hardening-v758)
29
+ <!-- TOC:END -->
30
+
3
31
  ## Research Foundation
4
32
 
5
33
  This module synthesizes ideas from multiple validated sources. Each technique is cited.
@@ -1,5 +1,29 @@
1
1
  # Magic Modules Skill
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Research Foundation](#research-foundation)
7
+ - [When to Load This Module](#when-to-load-this-module)
8
+ - [Core Concept](#core-concept)
9
+ - [1. Spec-First Generation (MagicModules -- Roman Nurik)](#1-spec-first-generation-magicmodules----roman-nurik)
10
+ - [2. Multi-Persona Debate (MoMoA -- Reto Meier)](#2-multi-persona-debate-momoa----reto-meier)
11
+ - [Commands](#commands)
12
+ - [Workflow Integration](#workflow-integration)
13
+ - [With RARV Cycle](#with-rarv-cycle)
14
+ - [With Documentation System (`loki docs`)](#with-documentation-system-loki-docs)
15
+ - [With Git Intelligence](#with-git-intelligence)
16
+ - [With Quality Gates](#with-quality-gates)
17
+ - [File Layout](#file-layout)
18
+ - [Design Tokens](#design-tokens)
19
+ - [Generation Targets](#generation-targets)
20
+ - [Debate Personas](#debate-personas)
21
+ - [Anti-Patterns](#anti-patterns)
22
+ - [Quick Reference](#quick-reference)
23
+ - [Integration with Other Skills](#integration-with-other-skills)
24
+ - [See Also](#see-also)
25
+ <!-- TOC:END -->
26
+
3
27
  ## Research Foundation
4
28
 
5
29
  | Source | Key Contribution | Citation |
package/skills/memory.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Memory Integration (v7.2.0+)
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Flag hierarchy](#flag-hierarchy)
7
+ - [Schema mapping](#schema-mapping)
8
+ - [How RARV-C uses managed memory](#how-rarv-c-uses-managed-memory)
9
+ - [REASON phase (read augment)](#reason-phase-read-augment)
10
+ - [REFLECT/VERIFY phase (shadow-write)](#reflectverify-phase-shadow-write)
11
+ - [Completion council (augment + verdict)](#completion-council-augment--verdict)
12
+ - [Session-boot hydrate](#session-boot-hydrate)
13
+ - [Multiagent council (research preview)](#multiagent-council-research-preview)
14
+ - [Cross-session learning](#cross-session-learning)
15
+ - [PII redaction](#pii-redaction)
16
+ - [Observability](#observability)
17
+ - [Honest disclosure: what is NOT tested](#honest-disclosure-what-is-not-tested)
18
+ - [Rollback](#rollback)
19
+ - [Troubleshooting](#troubleshooting)
20
+ - [References](#references)
21
+ <!-- TOC:END -->
22
+
3
23
  Loki Mode ships two memory layers:
4
24
 
5
25
  1. **Local memory** (`.loki/memory/`) -- project-scoped, authoritative, versioned
@@ -1,5 +1,39 @@
1
1
  # Model Selection & Task Tool
2
2
 
3
+ <!-- TOC:START (generated by scripts/skill-toc.sh; do not edit) -->
4
+ ## Contents
5
+
6
+ - [Session-Pinned Model (default)](#session-pinned-model-default)
7
+ - [Fable 5 (top-tier advisory model)](#fable-5-top-tier-advisory-model)
8
+ - [Mid-flight model switching](#mid-flight-model-switching)
9
+ - [Architecture-tier opt-in: `LOKI_FABLE_ARCHITECT`](#architecture-tier-opt-in-loki_fable_architect)
10
+ - [Financial / physical-stakes work (manual override, by design)](#financial--physical-stakes-work-manual-override-by-design)
11
+ - [Cost estimate honesty](#cost-estimate-honesty)
12
+ - [Multi-Provider Support (v5.0.0)](#multi-provider-support-v500)
13
+ - [Abstract Model Tiers](#abstract-model-tiers)
14
+ - [Enabling Haiku](#enabling-haiku)
15
+ - [Model Selection by SDLC Phase](#model-selection-by-sdlc-phase)
16
+ - [Task Tool Examples (Claude Only)](#task-tool-examples-claude-only)
17
+ - [Provider Detection in Code](#provider-detection-in-code)
18
+ - [Task Categories](#task-categories)
19
+ - [Parallelization Strategy (Claude Only)](#parallelization-strategy-claude-only)
20
+ - [Extended Thinking Mode](#extended-thinking-mode)
21
+ - [Claude Adaptive Thinking (Effort Parameter)](#claude-adaptive-thinking-effort-parameter)
22
+ - [Codex --sandbox workspace-write Flag](#codex---sandbox-workspace-write-flag)
23
+ - [Prompt Repetition for Haiku](#prompt-repetition-for-haiku)
24
+ - [Advanced Parameters](#advanced-parameters)
25
+ - [Confidence-Based Routing](#confidence-based-routing)
26
+ - [Tiered Agent Escalation Triggers](#tiered-agent-escalation-triggers)
27
+ - [Tier Definitions](#tier-definitions)
28
+ - [Automatic Escalation Triggers](#automatic-escalation-triggers)
29
+ - [Threshold Rationale](#threshold-rationale)
30
+ - [Always-HIGH Triggers (No Escalation Path)](#always-high-triggers-no-escalation-path)
31
+ - [De-escalation Triggers (Cost Optimization)](#de-escalation-triggers-cost-optimization)
32
+ - [Escalation Flow Diagram](#escalation-flow-diagram)
33
+ - [Implementation in Provider Context](#implementation-in-provider-context)
34
+ - [Metrics for Tier Optimization](#metrics-for-tier-optimization)
35
+ <!-- TOC:END -->
36
+
3
37
  ## Session-Pinned Model (default)
4
38
 
5
39
  Since v6.81.0, the main RARV loop uses **one pinned model per session** instead of rotating models per RARV phase. This eliminates per-iteration tier churn and keeps the main loop behavior predictable.