openryoko 2026.8.21 → 2026.8.28

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 (169) hide show
  1. package/dist/package.json +2 -2
  2. package/dist/src/cli/initial-config.d.ts +13 -0
  3. package/dist/src/cli/initial-config.d.ts.map +1 -0
  4. package/dist/src/cli/initial-config.js +39 -0
  5. package/dist/src/cli/initial-config.js.map +1 -0
  6. package/dist/src/cli/setup.d.ts.map +1 -1
  7. package/dist/src/cli/setup.js +4 -47
  8. package/dist/src/cli/setup.js.map +1 -1
  9. package/dist/src/cli/skills.d.ts +6 -0
  10. package/dist/src/cli/skills.d.ts.map +1 -1
  11. package/dist/src/cli/skills.js +96 -30
  12. package/dist/src/cli/skills.js.map +1 -1
  13. package/dist/src/gateway/api.d.ts.map +1 -1
  14. package/dist/src/gateway/api.js +40 -36
  15. package/dist/src/gateway/api.js.map +1 -1
  16. package/dist/src/gateway/onboarding-personalize.d.ts +15 -0
  17. package/dist/src/gateway/onboarding-personalize.d.ts.map +1 -0
  18. package/dist/src/gateway/onboarding-personalize.js +31 -0
  19. package/dist/src/gateway/onboarding-personalize.js.map +1 -0
  20. package/dist/src/gateway/portal-config.d.ts +14 -0
  21. package/dist/src/gateway/portal-config.d.ts.map +1 -0
  22. package/dist/src/gateway/portal-config.js +47 -0
  23. package/dist/src/gateway/portal-config.js.map +1 -0
  24. package/dist/src/sessions/context.d.ts +40 -0
  25. package/dist/src/sessions/context.d.ts.map +1 -1
  26. package/dist/src/sessions/context.js +142 -35
  27. package/dist/src/sessions/context.js.map +1 -1
  28. package/dist/src/shared/paths.d.ts +2 -0
  29. package/dist/src/shared/paths.d.ts.map +1 -1
  30. package/dist/src/shared/paths.js +9 -1
  31. package/dist/src/shared/paths.js.map +1 -1
  32. package/dist/src/shared/types.d.ts +10 -0
  33. package/dist/src/shared/types.d.ts.map +1 -1
  34. package/dist/web/404.html +1 -1
  35. package/dist/web/__next.__PAGE__.txt +1 -1
  36. package/dist/web/__next._full.txt +1 -1
  37. package/dist/web/__next._tree.txt +1 -1
  38. package/dist/web/_next/static/chunks/{0y5p4spyfs35l.js → 302onz3a3kflv.js} +1 -1
  39. package/dist/web/_not-found/__next._full.txt +1 -1
  40. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
  41. package/dist/web/_not-found/__next._tree.txt +1 -1
  42. package/dist/web/_not-found.html +1 -1
  43. package/dist/web/_not-found.txt +1 -1
  44. package/dist/web/chat/__next._full.txt +2 -2
  45. package/dist/web/chat/__next._tree.txt +1 -1
  46. package/dist/web/chat/__next.chat.__PAGE__.txt +2 -2
  47. package/dist/web/chat.html +1 -1
  48. package/dist/web/chat.txt +2 -2
  49. package/dist/web/cron/__next._full.txt +1 -1
  50. package/dist/web/cron/__next._tree.txt +1 -1
  51. package/dist/web/cron/__next.cron.__PAGE__.txt +1 -1
  52. package/dist/web/cron.html +1 -1
  53. package/dist/web/cron.txt +1 -1
  54. package/dist/web/index.html +1 -1
  55. package/dist/web/index.txt +1 -1
  56. package/dist/web/kanban/__next._full.txt +1 -1
  57. package/dist/web/kanban/__next._tree.txt +1 -1
  58. package/dist/web/kanban/__next.kanban.__PAGE__.txt +1 -1
  59. package/dist/web/kanban.html +1 -1
  60. package/dist/web/kanban.txt +1 -1
  61. package/dist/web/logs/__next._full.txt +1 -1
  62. package/dist/web/logs/__next._tree.txt +1 -1
  63. package/dist/web/logs/__next.logs.__PAGE__.txt +1 -1
  64. package/dist/web/logs.html +1 -1
  65. package/dist/web/logs.txt +1 -1
  66. package/dist/web/org/__next._full.txt +1 -1
  67. package/dist/web/org/__next._tree.txt +1 -1
  68. package/dist/web/org/__next.org.__PAGE__.txt +1 -1
  69. package/dist/web/org.html +1 -1
  70. package/dist/web/org.txt +1 -1
  71. package/dist/web/sessions/__next._full.txt +1 -1
  72. package/dist/web/sessions/__next._tree.txt +1 -1
  73. package/dist/web/sessions/__next.sessions.__PAGE__.txt +1 -1
  74. package/dist/web/sessions.html +1 -1
  75. package/dist/web/sessions.txt +1 -1
  76. package/dist/web/settings/__next._full.txt +1 -1
  77. package/dist/web/settings/__next._tree.txt +1 -1
  78. package/dist/web/settings/__next.settings.__PAGE__.txt +1 -1
  79. package/dist/web/settings.html +1 -1
  80. package/dist/web/settings.txt +1 -1
  81. package/dist/web/skills/__next._full.txt +1 -1
  82. package/dist/web/skills/__next._tree.txt +1 -1
  83. package/dist/web/skills/__next.skills.__PAGE__.txt +1 -1
  84. package/dist/web/skills.html +1 -1
  85. package/dist/web/skills.txt +1 -1
  86. package/package.json +2 -2
  87. package/template/AGENTS.md +6 -5
  88. package/template/BOOTSTRAP.md +5 -3
  89. package/template/CLAUDE.md +4 -5
  90. package/template/config.default.yaml +19 -4
  91. package/template/docs/architecture.md +2 -2
  92. package/template/docs/cron.md +5 -3
  93. package/template/docs/mcp.md +1 -1
  94. package/template/docs/org.md +17 -11
  95. package/template/docs/overview.md +4 -3
  96. package/template/docs/self-modification.md +7 -7
  97. package/template/docs/skills.md +11 -8
  98. package/template/migrations/2026.8.28/MIGRATION.md +34 -0
  99. package/template/skills/cron-manager/SKILL.md +7 -7
  100. package/template/skills/management/SKILL.md +1 -1
  101. package/template/skills/self-heal/SKILL.md +7 -7
  102. package/template/skills/skill-creator/SKILL.md +9 -9
  103. package/dist/web/__next._head.txt +0 -6
  104. package/dist/web/__next._index.txt +0 -6
  105. package/dist/web/_next/static/chunks/012aakl34ff5a.js +0 -5
  106. package/dist/web/_next/static/chunks/03~yq9q893hmn.js +0 -1
  107. package/dist/web/_next/static/chunks/0a2uy1kw.~j~c.js +0 -1
  108. package/dist/web/_next/static/chunks/0agxgztb0b~.7.js +0 -5
  109. package/dist/web/_next/static/chunks/0dtbl8648b3u9.js +0 -7
  110. package/dist/web/_next/static/chunks/0e3pdjkorr5zl.js +0 -2
  111. package/dist/web/_next/static/chunks/0ewpxy-mzj3j3.js +0 -1
  112. package/dist/web/_next/static/chunks/0g6xt.91k~0bc.js +0 -5
  113. package/dist/web/_next/static/chunks/0jm3e~uc~qd~p.js +0 -79
  114. package/dist/web/_next/static/chunks/0jzw1gpuag8bc.js +0 -5
  115. package/dist/web/_next/static/chunks/0lkp92-ovteta.js +0 -5
  116. package/dist/web/_next/static/chunks/0lt7kv1k1jla0.js +0 -1
  117. package/dist/web/_next/static/chunks/0msmlzd_~uk0y.js +0 -5
  118. package/dist/web/_next/static/chunks/0ru56x83x4rkk.js +0 -1
  119. package/dist/web/_next/static/chunks/0tcvgwr3rcw29.js +0 -1
  120. package/dist/web/_next/static/chunks/0tf9kpygstdls.js +0 -1
  121. package/dist/web/_next/static/chunks/0y3dnnq~kxyz_.js +0 -1
  122. package/dist/web/_next/static/chunks/0~6m1p5hnsx2f.js +0 -1
  123. package/dist/web/_next/static/chunks/10-liamt-ipcu.js +0 -1
  124. package/dist/web/_next/static/chunks/103zsy0q9psfj.css +0 -1
  125. package/dist/web/_next/static/chunks/10l08hq.acixl.js +0 -5
  126. package/dist/web/_next/static/chunks/11rbefjn.e-3-.js +0 -1
  127. package/dist/web/_next/static/chunks/11rodb4s1x4of.js +0 -1
  128. package/dist/web/_next/static/chunks/12_uxtnrqhoo1.js +0 -1
  129. package/dist/web/_next/static/chunks/12m97bwrg1tuu.js +0 -5
  130. package/dist/web/_next/static/chunks/13juizw904g.e.js +0 -1
  131. package/dist/web/_next/static/chunks/14ge_q22f0n.f.js +0 -1
  132. package/dist/web/_next/static/chunks/17-u9c_weg12-.js +0 -31
  133. package/dist/web/_next/static/chunks/17oc2l.ekcs8b.css +0 -1
  134. package/dist/web/_next/static/chunks/turbopack-0dt987bw_1nyf.js +0 -1
  135. package/dist/web/_next/static/media/apple-icon.0.wpl4.d-5bkf.jpg +0 -0
  136. package/dist/web/_next/static/media/icon.0.wpl4.d-5bkf.jpg +0 -0
  137. package/dist/web/_next/static/qeykWjfc1T7SjJSULdD7s/_buildManifest.js +0 -11
  138. package/dist/web/_next/static/qeykWjfc1T7SjJSULdD7s/_clientMiddlewareManifest.js +0 -1
  139. package/dist/web/_next/static/qeykWjfc1T7SjJSULdD7s/_ssgManifest.js +0 -1
  140. package/dist/web/_not-found/__next._head.txt +0 -6
  141. package/dist/web/_not-found/__next._index.txt +0 -6
  142. package/dist/web/_not-found/__next._not-found.txt +0 -5
  143. package/dist/web/chat/__next._head.txt +0 -6
  144. package/dist/web/chat/__next._index.txt +0 -6
  145. package/dist/web/chat/__next.chat.txt +0 -5
  146. package/dist/web/cron/__next._head.txt +0 -6
  147. package/dist/web/cron/__next._index.txt +0 -6
  148. package/dist/web/cron/__next.cron.txt +0 -5
  149. package/dist/web/kanban/__next._head.txt +0 -6
  150. package/dist/web/kanban/__next._index.txt +0 -6
  151. package/dist/web/kanban/__next.kanban.txt +0 -5
  152. package/dist/web/logs/__next._head.txt +0 -6
  153. package/dist/web/logs/__next._index.txt +0 -6
  154. package/dist/web/logs/__next.logs.txt +0 -5
  155. package/dist/web/org/__next._head.txt +0 -6
  156. package/dist/web/org/__next._index.txt +0 -6
  157. package/dist/web/org/__next.org.txt +0 -5
  158. package/dist/web/sessions/__next._head.txt +0 -6
  159. package/dist/web/sessions/__next._index.txt +0 -6
  160. package/dist/web/sessions/__next.sessions.txt +0 -5
  161. package/dist/web/settings/__next._head.txt +0 -6
  162. package/dist/web/settings/__next._index.txt +0 -6
  163. package/dist/web/settings/__next.settings.txt +0 -5
  164. package/dist/web/skills/__next._head.txt +0 -6
  165. package/dist/web/skills/__next._index.txt +0 -6
  166. package/dist/web/skills/__next.skills.txt +0 -5
  167. /package/dist/web/_next/static/{UDwWEfKiZ-eIOpfOIPKQr → ISh1Cwq_yjagxndTluTPc}/_buildManifest.js +0 -0
  168. /package/dist/web/_next/static/{UDwWEfKiZ-eIOpfOIPKQr → ISh1Cwq_yjagxndTluTPc}/_clientMiddlewareManifest.js +0 -0
  169. /package/dist/web/_next/static/{UDwWEfKiZ-eIOpfOIPKQr → ISh1Cwq_yjagxndTluTPc}/_ssgManifest.js +0 -0
@@ -13,7 +13,7 @@ f:I[85920,["/_next/static/chunks/39eyhhcdqji59.js","/_next/static/chunks/3tddjc7
13
13
  a:X
14
14
  12:X
15
15
  12:C
16
- 0:{"buildId":"qeykWjfc1T7SjJSULdD7s","data":[{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/2qfwwz46jhx3z.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0094rdygwixc5.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":"$@9","staleTime":"$a","varyParams":null},{"rsc":["$","$1","h",{"children":[null,["$","$Lb",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}]]}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$7",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"OpenRyoko"}],["$","meta","1",{"name":"description","content":"OpenRyoko — Slackで空気を読んで働くAIゲートウェイ"}],["$","link","2",{"rel":"icon","href":"/icon.jpg?icon.3fko7w33xarow.jpg","sizes":"800x800","type":"image/jpeg"}],["$","link","3",{"rel":"apple-touch-icon","href":"/apple-icon.jpg?apple-icon.3fko7w33xarow.jpg","sizes":"800x800","type":"image/jpeg"}],["$","$Ld","4",{}]]}]}]}],null]}],"isPartial":"$@e","staleTime":"$a","varyParams":null},{"rsc":["$","$1","c",{"children":[null,["$","$Lf",null,{"parallelRouterKey":"children","template":["$","$L10",null,{}]}]]}],"isPartial":"$@11","staleTime":"$a","varyParams":"$12"},{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/13onw-m8t1drh.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/39eyhhcdqji59.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3tddjc7ntk5ue.js","async":true}]],["$","html",null,{"lang":"ja","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()"}}]}],["$","body",null,{"children":["$","$L13",null,{"children":["$","$Lf",null,{"parallelRouterKey":"children","template":["$","$L10",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]]}]]}],"isPartial":"$@14","staleTime":"$a","varyParams":null}],"isUpgradeableISRFallback":false,"a":"$@15","rootVaryParams":null,"needsRuntimeRequest":"$@16"}
16
+ 0:{"buildId":"ISh1Cwq_yjagxndTluTPc","data":[{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/2qfwwz46jhx3z.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0094rdygwixc5.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":"$@9","staleTime":"$a","varyParams":null},{"rsc":["$","$1","h",{"children":[null,["$","$Lb",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}]]}],["$","div",null,{"hidden":true,"children":["$","$Lc",null,{"children":["$","$7",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"OpenRyoko"}],["$","meta","1",{"name":"description","content":"OpenRyoko — Slackで空気を読んで働くAIゲートウェイ"}],["$","link","2",{"rel":"icon","href":"/icon.jpg?icon.3fko7w33xarow.jpg","sizes":"800x800","type":"image/jpeg"}],["$","link","3",{"rel":"apple-touch-icon","href":"/apple-icon.jpg?apple-icon.3fko7w33xarow.jpg","sizes":"800x800","type":"image/jpeg"}],["$","$Ld","4",{}]]}]}]}],null]}],"isPartial":"$@e","staleTime":"$a","varyParams":null},{"rsc":["$","$1","c",{"children":[null,["$","$Lf",null,{"parallelRouterKey":"children","template":["$","$L10",null,{}]}]]}],"isPartial":"$@11","staleTime":"$a","varyParams":"$12"},{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/13onw-m8t1drh.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/39eyhhcdqji59.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/3tddjc7ntk5ue.js","async":true}]],["$","html",null,{"lang":"ja","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()"}}]}],["$","body",null,{"children":["$","$L13",null,{"children":["$","$Lf",null,{"parallelRouterKey":"children","template":["$","$L10",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]]}]]}],"isPartial":"$@14","staleTime":"$a","varyParams":null}],"isUpgradeableISRFallback":false,"a":"$@15","rootVaryParams":null,"needsRuntimeRequest":"$@16"}
17
17
  4:{}
18
18
  5:"$0:data:0:rsc:props:children:0:props:serverProvidedParams:params"
19
19
  8:null
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/_next/static/chunks/13onw-m8t1drh.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2q9pem30qccb2.js"/><script src="/_next/static/chunks/3m14pwz5rz7tl.js" async=""></script><script src="/_next/static/chunks/0y7lqjb424p1t.js" async=""></script><script src="/_next/static/chunks/turbopack-0my_el9wn34di.js" async=""></script><script src="/_next/static/chunks/39eyhhcdqji59.js" async="" crossorigin=""></script><script src="/_next/static/chunks/3tddjc7ntk5ue.js" async="" crossorigin=""></script><script src="/_next/static/chunks/2qfwwz46jhx3z.js" async="" crossorigin=""></script><script src="/_next/static/chunks/0094rdygwixc5.js" async="" crossorigin=""></script><title>OpenRyoko</title><meta name="description" content="OpenRyoko — Slackで空気を読んで働くAIゲートウェイ"/><link rel="icon" href="/icon.jpg?icon.3fko7w33xarow.jpg" sizes="800x800" type="image/jpeg"/><link rel="apple-touch-icon" href="/apple-icon.jpg?apple-icon.3fko7w33xarow.jpg" sizes="800x800" type="image/jpeg"/><script>(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()</script><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="flex min-h-dvh items-center justify-center bg-[var(--bg)] text-sm text-[var(--text-tertiary)]">Checking gateway access…</div><script src="/_next/static/chunks/2q9pem30qccb2.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[38085,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"ClientProviders\"]\n3:I[85920,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"default\"]\n4:I[5370,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"default\"]\n5:I[1101,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"ClientPageRoot\"]\n6:I[53947,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\",\"/_next/static/chunks/2qfwwz46jhx3z.js\",\"/_next/static/chunks/0094rdygwixc5.js\"],\"default\"]\n9:I[5437,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"OutletBoundary\"]\na:\"$Sreact.suspense\"\nd:I[5437,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"ViewportBoundary\"]\nf:I[5437,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"MetadataBoundary\"]\n11:I[56753,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/13onw-m8t1drh.css\",\"style\"]\nc:X\n0:{\"P\":null,\"c\":[\"\",\"skills\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/13onw-m8t1drh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/39eyhhcdqji59.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/3tddjc7ntk5ue.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ja\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()\"}}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@7\",\"$@8\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2qfwwz46jhx3z.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0094rdygwixc5.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@b\"}]}]]}],{},null,false,null]},null,false,\"$c\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L10\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/13onw-m8t1drh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"qeykWjfc1T7SjJSULdD7s\"}\nc:C\n7:{}\n8:\"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params\"\ne:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\n12:I[56045,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"IconMark\"]\nb:null\n10:[[\"$\",\"title\",\"0\",{\"children\":\"OpenRyoko\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"OpenRyoko — Slackで空気を読んで働くAIゲートウェイ\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.jpg?icon.3fko7w33xarow.jpg\",\"sizes\":\"800x800\",\"type\":\"image/jpeg\"}],[\"$\",\"link\",\"3\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.jpg?apple-icon.3fko7w33xarow.jpg\",\"sizes\":\"800x800\",\"type\":\"image/jpeg\"}],[\"$\",\"$L12\",\"4\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/_next/static/chunks/13onw-m8t1drh.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2q9pem30qccb2.js"/><script src="/_next/static/chunks/3m14pwz5rz7tl.js" async=""></script><script src="/_next/static/chunks/0y7lqjb424p1t.js" async=""></script><script src="/_next/static/chunks/turbopack-0my_el9wn34di.js" async=""></script><script src="/_next/static/chunks/39eyhhcdqji59.js" async="" crossorigin=""></script><script src="/_next/static/chunks/3tddjc7ntk5ue.js" async="" crossorigin=""></script><script src="/_next/static/chunks/2qfwwz46jhx3z.js" async="" crossorigin=""></script><script src="/_next/static/chunks/0094rdygwixc5.js" async="" crossorigin=""></script><title>OpenRyoko</title><meta name="description" content="OpenRyoko — Slackで空気を読んで働くAIゲートウェイ"/><link rel="icon" href="/icon.jpg?icon.3fko7w33xarow.jpg" sizes="800x800" type="image/jpeg"/><link rel="apple-touch-icon" href="/apple-icon.jpg?apple-icon.3fko7w33xarow.jpg" sizes="800x800" type="image/jpeg"/><script>(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()</script><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="flex min-h-dvh items-center justify-center bg-[var(--bg)] text-sm text-[var(--text-tertiary)]">Checking gateway access…</div><script src="/_next/static/chunks/2q9pem30qccb2.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[38085,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"ClientProviders\"]\n3:I[85920,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"default\"]\n4:I[5370,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"default\"]\n5:I[1101,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"ClientPageRoot\"]\n6:I[53947,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\",\"/_next/static/chunks/2qfwwz46jhx3z.js\",\"/_next/static/chunks/0094rdygwixc5.js\"],\"default\"]\n9:I[5437,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"OutletBoundary\"]\na:\"$Sreact.suspense\"\nd:I[5437,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"ViewportBoundary\"]\nf:I[5437,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"MetadataBoundary\"]\n11:I[56753,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/13onw-m8t1drh.css\",\"style\"]\nc:X\n0:{\"P\":null,\"c\":[\"\",\"skills\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/13onw-m8t1drh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/39eyhhcdqji59.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/3tddjc7ntk5ue.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ja\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()\"}}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@7\",\"$@8\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2qfwwz46jhx3z.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0094rdygwixc5.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@b\"}]}]]}],{},null,false,null]},null,false,\"$c\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L10\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/13onw-m8t1drh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"ISh1Cwq_yjagxndTluTPc\"}\nc:C\n7:{}\n8:\"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params\"\ne:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\n12:I[56045,[\"/_next/static/chunks/39eyhhcdqji59.js\",\"/_next/static/chunks/3tddjc7ntk5ue.js\"],\"IconMark\"]\nb:null\n10:[[\"$\",\"title\",\"0\",{\"children\":\"OpenRyoko\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"OpenRyoko — Slackで空気を読んで働くAIゲートウェイ\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.jpg?icon.3fko7w33xarow.jpg\",\"sizes\":\"800x800\",\"type\":\"image/jpeg\"}],[\"$\",\"link\",\"3\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-icon.jpg?apple-icon.3fko7w33xarow.jpg\",\"sizes\":\"800x800\",\"type\":\"image/jpeg\"}],[\"$\",\"$L12\",\"4\",{}]]\n"])</script></body></html>
@@ -11,7 +11,7 @@ f:I[5437,["/_next/static/chunks/39eyhhcdqji59.js","/_next/static/chunks/3tddjc7n
11
11
  11:I[56753,["/_next/static/chunks/39eyhhcdqji59.js","/_next/static/chunks/3tddjc7ntk5ue.js"],"default",1]
12
12
  :HL["/_next/static/chunks/13onw-m8t1drh.css","style"]
13
13
  c:X
14
- 0:{"P":null,"c":["","skills"],"q":"","i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/13onw-m8t1drh.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/39eyhhcdqji59.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3tddjc7ntk5ue.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"ja","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()"}}]}],["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/2qfwwz46jhx3z.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0094rdygwixc5.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,null]},null,false,"$c"]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/13onw-m8t1drh.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"qeykWjfc1T7SjJSULdD7s"}
14
+ 0:{"P":null,"c":["","skills"],"q":"","i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/13onw-m8t1drh.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/39eyhhcdqji59.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/3tddjc7ntk5ue.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"ja","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()"}}]}],["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/2qfwwz46jhx3z.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0094rdygwixc5.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,null]},null,false,"$c"]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/13onw-m8t1drh.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"ISh1Cwq_yjagxndTluTPc"}
15
15
  c:C
16
16
  7:{}
17
17
  8:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openryoko",
3
- "version": "2026.8.21",
3
+ "version": "2026.8.28",
4
4
  "description": "OpenRyoko — Slackで空気を読んで働くAIアシスタント・ゲートウェイ(Jinnベース、Claude Code/Codex/Gemini CLI対応)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,7 +17,7 @@
17
17
  "template/"
18
18
  ],
19
19
  "scripts": {
20
- "build": "rm -rf dist && tsc -p tsconfig.build.json && cp -r assets dist/assets",
20
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && cp -r assets dist/assets && cp -r ../web/out dist/web",
21
21
  "dev": "tsc && (tsc --watch &) && node --watch-path=dist dist/bin/jimmy.js start",
22
22
  "typecheck": "tsc --noEmit",
23
23
  "test": "vitest run",
@@ -7,11 +7,12 @@
7
7
 
8
8
  ## 自己定義ファイル(必読)
9
9
 
10
- セッション開始時、最初のターンで必ず以下3ファイルを `~/.ryoko/` から読み込んでください。Codex は `@`-import 構文を解釈しないので、Read で明示的に取得すること。
10
+ セッション開始時、最初のターンで必ず以下2ファイルを `~/.ryoko/` から読み込んでください。Codex は `@`-import 構文を解釈しないので、Read で明示的に取得すること。
11
11
 
12
12
  - `~/.ryoko/IDENTITY.md` — 名前・雰囲気・絵文字・由来。あなたが「誰であるか」
13
13
  - `~/.ryoko/SOUL.md` — トーン・意見の出し方・ユーモア・境界線。あなたが「どう振る舞うか」
14
- - `~/.ryoko/MEMORY.md` — 長期記憶(事実・好み・決定)
14
+
15
+ **MEMORY.md(長期記憶)は自分から Read しない**。gateway が信頼相手(private web セッション、または `portal.trustedSpeakers` に Slack ID を載せた相手との DM)とのセッションにだけ system prompt へ注入する。共有チャンネルでは誰が話していても注入されない。個人情報を含むため、必要があって自分で Read した場合も、内容を当人以外に出力で出さないこと。
15
16
 
16
17
  これらの内容は以後のセッション全体に反映してください。
17
18
 
@@ -43,7 +44,7 @@
43
44
  | `AGENTS.md` | Codexセッション向けの指示書(本ファイル) |
44
45
  | `IDENTITY.md` | あなたの自己定義(名前・雰囲気・絵文字) |
45
46
  | `SOUL.md` | 人格・トーン・境界線 |
46
- | `MEMORY.md` | 長期記憶(短い・必ず読まれる) |
47
+ | `MEMORY.md` | 長期記憶(短く保つ。信頼話者とのセッションに gateway が注入) |
47
48
  | `TOOLS.md` | ツール覚書(運用ノウハウ) |
48
49
  | `BOOTSTRAP.md` | 初回起動の儀式(完了後に自分で削除) |
49
50
  | `memory/` | 日次ノート(`YYYY-MM-DD.md`) |
@@ -63,9 +64,9 @@
63
64
 
64
65
  記憶は**2層**に分離します。混ぜないでください。
65
66
 
66
- ### 1. 長期記憶 — `MEMORY.md`(毎セッション読まれる)
67
+ ### 1. 長期記憶 — `MEMORY.md`(信頼話者とのセッションに毎回注入される)
67
68
 
68
- 短く重要な「事実・好み・決定」を1ファイルに集約。セッション開始時に Read で読み込むので、ここに長文を書くと毎ターン トークンを浪費します。
69
+ 短く重要な「事実・好み・決定」を1ファイルに集約。gateway が信頼話者とのセッションで常時注入するので、ここに長文を書くと毎ターン トークンを浪費します。
69
70
 
70
71
  書く対象:
71
72
  - 変わりにくいユーザー事実(所属、役割、主要言語)
@@ -21,7 +21,7 @@
21
21
 
22
22
  旧バージョンからのアップグレードの場合のみ:
23
23
 
24
- 1. `~/.ryoko/knowledge/` 配下のファイルを ls で確認
24
+ 1. `./knowledge/` 配下のファイルを ls で確認(作業ディレクトリは常に自分のホーム)
25
25
  2. `user-profile.md` `preferences.md` `projects.md` 等が存在すれば Read
26
26
  3. 内容を要約してユーザーに「これらを引き継ぎますか?」と確認
27
27
  4. 承認されたら、短い事実は `MEMORY.md` に転記、長文は `knowledge/` に残す
@@ -30,7 +30,7 @@
30
30
 
31
31
  ### 1. onboarding スキルを起動
32
32
 
33
- `~/.ryoko/skills/onboarding/SKILL.md` を読み、書かれた手順を最後まで実行してください。
33
+ `./skills/onboarding/SKILL.md` を読み、書かれた手順を最後まで実行してください。
34
34
  このスキルが IDENTITY.md / SOUL.md / MEMORY.md / TOOLS.md を対話で埋めます。
35
35
 
36
36
  ステップ 0 で既知の情報がある場合、onboarding 内のヒアリング質問はその部分をスキップして残りだけ聞いてください。
@@ -46,7 +46,9 @@
46
46
  ### 3. このファイルを削除
47
47
 
48
48
  ```bash
49
- rm ~/.ryoko/BOOTSTRAP.md
49
+ rm ./BOOTSTRAP.md
50
50
  ```
51
51
 
52
+ (作業ディレクトリは常に自分のホーム。`RYOKO_INSTANCE` で別名インスタンスとして動いている場合もこの相対パスなら正しいファイルを消せる)
53
+
52
54
  削除後、ユーザーに「セットアップ完了。これから {{portalName}} として動きます」と短く宣言してください。
@@ -11,11 +11,10 @@
11
11
 
12
12
  @IDENTITY.md
13
13
  @SOUL.md
14
- @MEMORY.md
15
14
 
16
15
  - **IDENTITY.md** — 名前・雰囲気・絵文字・由来。あなたが「誰であるか」
17
16
  - **SOUL.md** — トーン・意見の出し方・ユーモア・境界線。あなたが「どう振る舞うか」
18
- - **MEMORY.md** — 長期記憶(事実・好み・決定)。短く保つこと
17
+ - **MEMORY.md**(長期記憶)は **ここで import しない**。gateway が信頼相手(private web セッション、または `portal.trustedSpeakers` に Slack ID を載せた相手との DM)とのセッションにだけ system prompt へ注入する。共有チャンネルでは誰が話していても注入されない。個人情報を含むため、仮に自分で Read した場合も、内容を当人以外に出力で出さないこと
19
18
 
20
19
  ---
21
20
 
@@ -45,7 +44,7 @@
45
44
  | `AGENTS.md` | Codexセッション向けの指示書 |
46
45
  | `IDENTITY.md` | あなたの自己定義(名前・雰囲気・絵文字) |
47
46
  | `SOUL.md` | 人格・トーン・境界線 |
48
- | `MEMORY.md` | 長期記憶(短い・必ず読まれる) |
47
+ | `MEMORY.md` | 長期記憶(短く保つ。信頼話者とのセッションに gateway が注入) |
49
48
  | `TOOLS.md` | ツール覚書(運用ノウハウ) |
50
49
  | `BOOTSTRAP.md` | 初回起動の儀式(完了後に自分で削除) |
51
50
  | `memory/` | 日次ノート(`YYYY-MM-DD.md`) |
@@ -65,9 +64,9 @@
65
64
 
66
65
  記憶は**2層**に分離します。混ぜないでください。
67
66
 
68
- ### 1. 長期記憶 — `MEMORY.md`(毎セッション読まれる)
67
+ ### 1. 長期記憶 — `MEMORY.md`(信頼話者とのセッションに毎回注入される)
69
68
 
70
- 短く重要な「事実・好み・決定」を1ファイルに集約。冒頭の `@MEMORY.md` で常時注入されるので、ここに長文を書くと毎ターン トークンを浪費します。
69
+ 短く重要な「事実・好み・決定」を1ファイルに集約。gateway が信頼話者とのセッションで常時注入するので、ここに長文を書くと毎ターン トークンを浪費します。
71
70
 
72
71
  書く対象:
73
72
  - 変わりにくいユーザー事実(所属、役割、主要言語)
@@ -82,16 +82,31 @@ mcp:
82
82
  # env:
83
83
  # API_KEY: ${MY_API_KEY}
84
84
 
85
- # セッション上限(従業員ごとにYAMLで上書き可)
86
- sessions:
87
- maxDurationMinutes: 30
88
- maxCostUsd: 10.00
85
+ # セッション上限(予約済みキー: 現行ランタイムはまだ参照しない。有効化しても効かない点に注意)
86
+ # sessions:
87
+ # maxDurationMinutes: 30
88
+ # maxCostUsd: 10.00
89
89
 
90
90
  # Cron設定
91
91
  cron:
92
92
  # alertConnector: slack
93
93
  # alertChannel: "#alerts"
94
94
 
95
+ # portal.operatorSlackId = オペレータ本人の Slack ID。設定すると本人確認が ID の
96
+ # 厳密一致になり、表示名の一致では「オペレータ本人」と扱われなくなる(表示名は
97
+ # 誰でも変更できるため、信頼できないメンバーがいるワークスペースでは必ず設定する)。
98
+ # operatorSlackId: U0XXXXXXX
99
+ #
100
+ # portal.trustedSpeakers = MEMORY.md(長期記憶)を DM で注入してよい「信頼話者」の
101
+ # Slack ID リスト。オペレータ本人の ID も必ずここに入れる(表示名は偽装できるため、
102
+ # 名前ではなく不変の Slack ID だけがゲートを通る)。
103
+ # 注入されるのは private web セッションと、ここに載る相手との DM のみ。
104
+ # 共有チャンネルでは誰が話していても注入されない(スレッドのセッションは参加者を
105
+ # またいで再利用されるため、一度注入した記憶が履歴に残るのを防ぐ)。記入例:
106
+ # trustedSpeakers:
107
+ # - U0XXXXXXX # 表示名(所属・関係のメモ)
108
+ # 注意: portal ブロックの内側にはコメントを書かない(Web オンボーディングの
109
+ # 部分書き換えがブロックを再生成するため、内側のコメントは保持されない)。
95
110
  portal:
96
111
  portalName: Ryoko
97
112
  language: Japanese
@@ -54,13 +54,13 @@ Modular adapters that implement a standard interface. Each connector translates
54
54
  Uses `node-cron` to run scheduled AI jobs. Watches `cron/jobs.json` for hot-reload. See `cron.md`.
55
55
 
56
56
  ### File Watcher
57
- Uses `chokidar` to watch `~/.jinn/` for changes and trigger appropriate reloads:
57
+ Uses `chokidar` to watch `~/.ryoko/` for changes and trigger appropriate reloads:
58
58
  - `config.yaml` changes → reload gateway configuration
59
59
  - `cron/jobs.json` changes → reschedule cron jobs
60
60
  - `org/` changes → rebuild employee registry
61
61
 
62
62
  ### SQLite Session Registry
63
- Stores session metadata (id, engine, employee, connector source, timestamps) in `jinn.db`.
63
+ Stores session metadata (id, engine, employee, connector source, timestamps) in `sessions/registry.db`.
64
64
 
65
65
  ## Data Flow
66
66
 
@@ -1,6 +1,6 @@
1
1
  # Cron
2
2
 
3
- {{portalName}} supports scheduled AI jobs defined in `~/.jinn/cron/jobs.json`.
3
+ {{portalName}} supports scheduled AI jobs defined in `~/.ryoko/cron/jobs.json`.
4
4
 
5
5
  ## Job Schema
6
6
 
@@ -59,7 +59,7 @@ No restart required. Engines can edit `jobs.json` directly to create or modify s
59
59
 
60
60
  ## Run Logs
61
61
 
62
- Each job execution is logged to `~/.jinn/cron/runs/<jobId>.jsonl`. Each line is a JSON object:
62
+ Each job execution is logged to `~/.ryoko/cron/runs/<jobId>.jsonl`. Each line is a JSON object:
63
63
 
64
64
  ```json
65
65
  {
@@ -76,6 +76,8 @@ Each job execution is logged to `~/.jinn/cron/runs/<jobId>.jsonl`. Each line is
76
76
 
77
77
  When a cron job produces analytical, reporting, or decision-informing output, it should **always target {{portalSlug}}** (the COO), not the employee directly. {{portalName}} then delegates to the employee via a child session, reviews the output, filters noise, and delivers the final result.
78
78
 
79
+ > Note: `"employee": "{{portalSlug}}"` here refers to the COO portal session itself — it is NOT an `org/` employee (org.md: `org/` starts empty and {{portalName}} is not defined there). The runner resolves an unknown employee name to a portal session, which is exactly the intended routing.
80
+
79
81
  **Correct** — cron → {{portalSlug}} → employee (via child session) → {{portalSlug}} reviews → delivery:
80
82
  ```json
81
83
  {
@@ -138,7 +140,7 @@ Direct employee-to-user delivery is only acceptable for simple, no-review-needed
138
140
  "timezone": "America/New_York",
139
141
  "engine": "claude",
140
142
  "employee": "{{portalSlug}}",
141
- "prompt": "Review all skills in ~/.jinn/skills/ and suggest improvements or removals for unused skills."
143
+ "prompt": "Review all skills in ~/.ryoko/skills/ and suggest improvements or removals for unused skills."
142
144
  }
143
145
  ]
144
146
  ```
@@ -6,7 +6,7 @@
6
6
 
7
7
  1. MCP servers are defined in `config.yaml` under the `mcp:` section
8
8
  2. When a session starts, {{portalName}} resolves which MCP servers the employee needs
9
- 3. A temporary MCP config JSON file is written to `~/.jinn/tmp/mcp/`
9
+ 3. A temporary MCP config JSON file is written to `~/.ryoko/tmp/mcp/`
10
10
  4. The file is passed to Claude Code via `--mcp-config <path>`
11
11
  5. The file is cleaned up after the session completes
12
12
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Employee Personas
6
6
 
7
- Employee files live at `~/.jinn/org/<department>/<name>.yaml`.
7
+ Employee files live at `~/.ryoko/org/<department>/<name>.yaml`.
8
8
 
9
9
  ```yaml
10
10
  name: alice
@@ -33,10 +33,10 @@ persona: |
33
33
 
34
34
  ## Departments
35
35
 
36
- Each department is a directory under `~/.jinn/org/` containing:
36
+ Each department is a directory under `~/.ryoko/org/` containing:
37
37
 
38
38
  ```
39
- ~/.jinn/org/engineering/
39
+ ~/.ryoko/org/engineering/
40
40
  department.yaml # Department metadata
41
41
  board.json # Shared task board
42
42
  alice.yaml # Employee persona
@@ -90,16 +90,22 @@ Task fields: `id`, `title`, `assignee`, `status` (open, in-progress, done, block
90
90
 
91
91
  ## Default Organization
92
92
 
93
- {{portalName}} ships with a single executive employee:
93
+ `org/` starts empty. {{portalName}} itself is the executive (COO) and is not
94
+ defined as an org employee — employees are the workers {{portalName}} delegates to.
95
+
96
+ The onboarding skill proposes a starter scaffold matched to the user's profile
97
+ (e.g. an `engineering/` department with a `dev-assistant` employee for a solo
98
+ developer), and the management skill handles hiring from there. An employee
99
+ file looks like:
94
100
 
95
101
  ```yaml
96
- name: {{portalSlug}}
97
- displayName: {{portalName}}
98
- department: executive
99
- rank: executive
102
+ name: dev-assistant
103
+ displayName: Dev Assistant
104
+ department: engineering
105
+ rank: employee
100
106
  engine: claude
101
- model: opus
107
+ model: claude-opus-5
102
108
  persona: |
103
- You are {{portalName}}, the executive AI assistant and gateway administrator.
104
- You manage the organization, delegate tasks, and handle direct requests.
109
+ You are a careful software engineer. You implement tasks assigned by
110
+ {{portalName}}, report progress on the board, and escalate blockers.
105
111
  ```
@@ -1,6 +1,6 @@
1
1
  # {{portalName}} Overview
2
2
 
3
- {{portalName}} is a lightweight AI gateway daemon that wraps professional AI CLI tools as "engines." It is published as `jinn-cli`.
3
+ {{portalName}} is a lightweight AI gateway daemon that wraps professional AI CLI tools as "engines." It is published as `openryoko`.
4
4
 
5
5
  ## Core Principle
6
6
 
@@ -22,9 +22,10 @@ Traditional approaches build custom tool-calling loops, manage context windows,
22
22
  ## Directory Structure
23
23
 
24
24
  ```
25
- ~/.jinn/
25
+ ~/.ryoko/
26
26
  config.yaml # Gateway configuration
27
- jinn.db # SQLite session registry
27
+ sessions/
28
+ registry.db # SQLite session registry
28
29
  docs/ # These reference docs
29
30
  skills/ # Skill directories with SKILL.md files
30
31
  cron/
@@ -1,6 +1,6 @@
1
1
  # Self-Modification
2
2
 
3
- {{portalName}}'s engines operate within `~/.jinn/` and can modify any file in that directory. This enables {{portalName}} to update its own configuration, create skills, manage cron jobs, and restructure the organization at runtime.
3
+ {{portalName}}'s engines operate within `~/.ryoko/` and can modify any file in that directory. This enables {{portalName}} to update its own configuration, create skills, manage cron jobs, and restructure the organization at runtime.
4
4
 
5
5
  ## What {{portalName}} Can Edit
6
6
 
@@ -25,7 +25,7 @@ Changes take effect immediately. No restart required.
25
25
 
26
26
  ## Safety Guidelines
27
27
 
28
- Engines have full file access within `~/.jinn/`. To avoid breaking the gateway:
28
+ Engines have full file access within `~/.ryoko/`. To avoid breaking the gateway:
29
29
 
30
30
  ### Do
31
31
 
@@ -38,28 +38,28 @@ Engines have full file access within `~/.jinn/`. To avoid breaking the gateway:
38
38
  ### Do Not
39
39
 
40
40
  - Break `config.yaml` structure — invalid YAML will prevent config reload
41
- - Corrupt `jinn.db` — the SQLite database is managed by the gateway process
41
+ - Corrupt `sessions/registry.db` — the SQLite database is managed by the gateway process
42
42
  - Write invalid JSON to `jobs.json` — this will cancel all cron jobs with nothing to replace them
43
43
  - Delete the `docs/` directory — these reference docs are needed for self-awareness
44
- - Modify files outside `~/.jinn/` unless explicitly instructed by the user
44
+ - Modify files outside `~/.ryoko/` unless explicitly instructed by the user
45
45
 
46
46
  ## Example: Creating a Cron Job at Runtime
47
47
 
48
48
  An engine can create a new cron job by reading `cron/jobs.json`, appending a new entry, and writing it back:
49
49
 
50
50
  ```
51
- 1. Read ~/.jinn/cron/jobs.json
51
+ 1. Read ~/.ryoko/cron/jobs.json
52
52
  2. Parse the JSON array
53
53
  3. Append new job object with unique id, schedule, prompt, etc.
54
54
  4. Validate the full array
55
- 5. Write back to ~/.jinn/cron/jobs.json
55
+ 5. Write back to ~/.ryoko/cron/jobs.json
56
56
  6. The file watcher automatically reschedules all jobs
57
57
  ```
58
58
 
59
59
  ## Example: Adding a New Employee
60
60
 
61
61
  ```
62
- 1. Create ~/.jinn/org/<department>/<name>.yaml with required fields
62
+ 1. Create ~/.ryoko/org/<department>/<name>.yaml with required fields
63
63
  2. The file watcher detects the new file and rebuilds the employee registry
64
64
  3. The new employee is immediately available for @mention routing
65
65
  ```
@@ -4,7 +4,7 @@ Skills are markdown instruction sets that engines read and follow. There is no r
4
4
 
5
5
  ## How Skills Work
6
6
 
7
- Each skill is a directory in `~/.jinn/skills/` containing at minimum a `SKILL.md` file. When an engine starts a session, it has access to the skills directory and can read any skill's instructions.
7
+ Each skill is a directory in `~/.ryoko/skills/` containing at minimum a `SKILL.md` file. When an engine starts a session, it has access to the skills directory and can read any skill's instructions.
8
8
 
9
9
  The `SKILL.md` file contains:
10
10
  - **Trigger description**: When this skill should be activated
@@ -14,7 +14,7 @@ The `SKILL.md` file contains:
14
14
  ## Creating a Skill
15
15
 
16
16
  ```
17
- ~/.jinn/skills/
17
+ ~/.ryoko/skills/
18
18
  my-skill/
19
19
  SKILL.md # Required: instructions
20
20
  data.json # Optional: supporting data
@@ -41,13 +41,16 @@ When the user says "deploy" or asks about deployment status.
41
41
 
42
42
  ## Pre-packaged Skills
43
43
 
44
- {{portalName}} ships with several default skills:
44
+ {{portalName}} ships with these default skills (see `~/.ryoko/skills/`):
45
45
 
46
- - **self**: Instructions for {{portalName}} to understand and modify its own configuration
47
- - **slack**: Slack-specific behavior and formatting guidelines
48
- - **cron**: How to create and manage scheduled jobs
49
- - **org**: Working with the organization structure and employee personas
50
- - **skills**: Meta-skill for creating and managing other skills
46
+ - **onboarding**: First-run setup — fills IDENTITY.md / SOUL.md / MEMORY.md interactively
47
+ - **management**: Hiring, firing, promotions, delegation, and board reviews for the org
48
+ - **cron-manager**: Create, edit, enable/disable, and troubleshoot cron jobs
49
+ - **skill-creator**: Write a SKILL.md playbook to create a new skill
50
+ - **find-and-install**: Discover skills via `npx skills find` and install them
51
+ - **self-heal**: Diagnose and repair {{portalName}}'s own configuration and runtime
52
+ - **migrate**: Apply pending version migrations
53
+ - **sync** / **new** / **status**: Slash-command playbooks (`/sync`, `/new`, `/status`)
51
54
 
52
55
  ## Key Points
53
56
 
@@ -0,0 +1,34 @@
1
+ # Migration: 2026.8.28 (MEMORY.md のプライバシーゲート付き注入)
2
+
3
+ ## Summary
4
+
5
+ MEMORY.md(長期記憶)の扱いがコア機能になった。gateway が **private web セッションと、
6
+ `portal.trustedSpeakers` に載る相手との DM に限り** MEMORY.md を system prompt に注入する。
7
+ 共有チャンネル・cron・employee セッションには注入されない。
8
+
9
+ これまで MEMORY.md はコードでは一切注入されず、テンプレート CLAUDE.md の `@MEMORY.md`
10
+ import(Claude エンジンのみ・**話者を問わず**)だけが読み込んでいた。この import は
11
+ 新ゲートの迂回路になるため、既存インスタンスの指示ファイルから取り除く必要がある。
12
+
13
+ ## 既存インスタンスへの適用手順(このファイルを読んだ AI セッションが実行する)
14
+
15
+ 1. **`~/.ryoko/CLAUDE.md` から `@MEMORY.md` の行を削除する**(`@IDENTITY.md` `@SOUL.md` は残す)。
16
+ ユーザーが独自に編集している場合も、`@MEMORY.md` の import 行だけをピンポイントで消す
17
+ 2. CLAUDE.md / AGENTS.md の自己定義・記憶セクションに「MEMORY.md は毎セッション読む/読まれる」
18
+ という記述があれば、次の内容に沿って書き換える(ユーザーの独自ルールは保持し、該当文だけ更新):
19
+ - MEMORY.md は自分から Read しない。gateway が信頼相手(private web セッション、または
20
+ `portal.trustedSpeakers` に Slack ID を載せた相手との DM)とのセッションにだけ注入する
21
+ - 共有チャンネルでは誰が話していても注入されない
22
+ - 必要があって自分で Read した場合も、内容を当人以外に出力で出さない
23
+ 3. **ユーザーに次の設定を推奨として伝える**(config.yaml の `portal:` 直上のコメント参照。
24
+ 勝手に値を推測して書き込まない — Slack ID はユーザーに確認する):
25
+ - `portal.operatorSlackId` — オペレータ本人の Slack ID。設定すると本人確認が ID の厳密一致になる
26
+ - `portal.trustedSpeakers` — MEMORY を DM で注入してよい相手(オペレータ自身の ID も入れる)
27
+ 4. 適用後、`~/.ryoko/CLAUDE.md` に `@MEMORY.md` が残っていないことを grep で確認する
28
+
29
+ ## 互換性メモ
30
+
31
+ - `portal.operatorSlackId` / `portal.trustedSpeakers` 未設定でも動作は安全側
32
+ (MEMORY は web セッションでのみ注入。Slack では一切注入されない)
33
+ - 旧挙動(@MEMORY.md による無差別読み込み)に戻したい場合は import を書き戻せばよいが、
34
+ 共有チャンネルでの個人情報露出リスクを理解した上で行うこと
@@ -11,7 +11,7 @@ This skill activates when the user wants to create, edit, delete, enable, disabl
11
11
 
12
12
  ## Data File
13
13
 
14
- All cron jobs are stored in `~/.jinn/cron/jobs.json` as a JSON array of job objects. If the file does not exist, create it with an empty array `[]`.
14
+ All cron jobs are stored in `cron/jobs.json` (relative to the {{portalName}} home directory, which is always your working directory) as a JSON array of job objects. If the file does not exist, create it with an empty array `[]`.
15
15
 
16
16
  ## CronJob Schema
17
17
 
@@ -51,7 +51,7 @@ Field details:
51
51
 
52
52
  ### Creating a Job
53
53
 
54
- 1. Read the current `~/.jinn/cron/jobs.json` (or initialize as `[]` if missing).
54
+ 1. Read the current `cron/jobs.json` (or initialize as `[]` if missing).
55
55
  2. Ask the user for the required fields: name, schedule, engine, model, and prompt.
56
56
  3. Ask about the timezone. Default to `UTC` if not specified.
57
57
  4. Ask about the employee persona to use. This is optional.
@@ -60,12 +60,12 @@ Field details:
60
60
  7. Generate a UUID for the `id` field.
61
61
  8. Set `enabled` to `true` by default.
62
62
  9. Append the new job object to the array.
63
- 10. Write the updated array back to `~/.jinn/cron/jobs.json`.
63
+ 10. Write the updated array back to `cron/jobs.json`.
64
64
  11. Confirm the creation and summarize the schedule in plain English.
65
65
 
66
66
  ### Editing a Job
67
67
 
68
- 1. Read `~/.jinn/cron/jobs.json`.
68
+ 1. Read `cron/jobs.json`.
69
69
  2. Find the job by name or id.
70
70
  3. Show the current values to the user.
71
71
  4. Apply the requested changes.
@@ -74,7 +74,7 @@ Field details:
74
74
 
75
75
  ### Deleting a Job
76
76
 
77
- 1. Read `~/.jinn/cron/jobs.json`.
77
+ 1. Read `cron/jobs.json`.
78
78
  2. Find the job by name or id.
79
79
  3. Confirm deletion with the user (show job details).
80
80
  4. Remove the job from the array.
@@ -83,7 +83,7 @@ Field details:
83
83
 
84
84
  ### Enabling / Disabling a Job
85
85
 
86
- 1. Read `~/.jinn/cron/jobs.json`.
86
+ 1. Read `cron/jobs.json`.
87
87
  2. Find the job by name or id.
88
88
  3. Set `enabled` to `true` (enable) or `false` (disable).
89
89
  4. Write the updated array back.
@@ -91,7 +91,7 @@ Field details:
91
91
 
92
92
  ### Listing Jobs
93
93
 
94
- 1. Read `~/.jinn/cron/jobs.json`.
94
+ 1. Read `cron/jobs.json`.
95
95
  2. Display jobs in a readable format, grouped by enabled/disabled.
96
96
  3. Include name, schedule (with plain-English interpretation), timezone, engine, and delivery info.
97
97