openryoko 2026.8.21 → 2026.8.27
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.
- package/dist/package.json +2 -2
- package/dist/src/cli/initial-config.d.ts +13 -0
- package/dist/src/cli/initial-config.d.ts.map +1 -0
- package/dist/src/cli/initial-config.js +39 -0
- package/dist/src/cli/initial-config.js.map +1 -0
- package/dist/src/cli/setup.d.ts.map +1 -1
- package/dist/src/cli/setup.js +4 -47
- package/dist/src/cli/setup.js.map +1 -1
- package/dist/src/cli/skills.d.ts +6 -0
- package/dist/src/cli/skills.d.ts.map +1 -1
- package/dist/src/cli/skills.js +96 -30
- package/dist/src/cli/skills.js.map +1 -1
- package/dist/src/gateway/api.d.ts.map +1 -1
- package/dist/src/gateway/api.js +36 -35
- package/dist/src/gateway/api.js.map +1 -1
- package/dist/src/gateway/onboarding-personalize.d.ts +15 -0
- package/dist/src/gateway/onboarding-personalize.d.ts.map +1 -0
- package/dist/src/gateway/onboarding-personalize.js +31 -0
- package/dist/src/gateway/onboarding-personalize.js.map +1 -0
- package/dist/src/gateway/portal-config.d.ts +14 -0
- package/dist/src/gateway/portal-config.d.ts.map +1 -0
- package/dist/src/gateway/portal-config.js +47 -0
- package/dist/src/gateway/portal-config.js.map +1 -0
- package/dist/src/sessions/context.d.ts +1 -0
- package/dist/src/sessions/context.d.ts.map +1 -1
- package/dist/src/sessions/context.js +44 -28
- package/dist/src/sessions/context.js.map +1 -1
- package/dist/src/shared/paths.d.ts +2 -0
- package/dist/src/shared/paths.d.ts.map +1 -1
- package/dist/src/shared/paths.js +9 -1
- package/dist/src/shared/paths.js.map +1 -1
- package/dist/web/404.html +1 -1
- package/dist/web/__next.__PAGE__.txt +1 -1
- package/dist/web/__next._full.txt +1 -1
- package/dist/web/__next._tree.txt +1 -1
- package/dist/web/_next/static/chunks/{0y5p4spyfs35l.js → 302onz3a3kflv.js} +1 -1
- package/dist/web/_not-found/__next._full.txt +1 -1
- package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/dist/web/_not-found/__next._tree.txt +1 -1
- package/dist/web/_not-found.html +1 -1
- package/dist/web/_not-found.txt +1 -1
- package/dist/web/chat/__next._full.txt +2 -2
- package/dist/web/chat/__next._tree.txt +1 -1
- package/dist/web/chat/__next.chat.__PAGE__.txt +2 -2
- package/dist/web/chat.html +1 -1
- package/dist/web/chat.txt +2 -2
- package/dist/web/cron/__next._full.txt +1 -1
- package/dist/web/cron/__next._tree.txt +1 -1
- package/dist/web/cron/__next.cron.__PAGE__.txt +1 -1
- package/dist/web/cron.html +1 -1
- package/dist/web/cron.txt +1 -1
- package/dist/web/index.html +1 -1
- package/dist/web/index.txt +1 -1
- package/dist/web/kanban/__next._full.txt +1 -1
- package/dist/web/kanban/__next._tree.txt +1 -1
- package/dist/web/kanban/__next.kanban.__PAGE__.txt +1 -1
- package/dist/web/kanban.html +1 -1
- package/dist/web/kanban.txt +1 -1
- package/dist/web/logs/__next._full.txt +1 -1
- package/dist/web/logs/__next._tree.txt +1 -1
- package/dist/web/logs/__next.logs.__PAGE__.txt +1 -1
- package/dist/web/logs.html +1 -1
- package/dist/web/logs.txt +1 -1
- package/dist/web/org/__next._full.txt +1 -1
- package/dist/web/org/__next._tree.txt +1 -1
- package/dist/web/org/__next.org.__PAGE__.txt +1 -1
- package/dist/web/org.html +1 -1
- package/dist/web/org.txt +1 -1
- package/dist/web/sessions/__next._full.txt +1 -1
- package/dist/web/sessions/__next._tree.txt +1 -1
- package/dist/web/sessions/__next.sessions.__PAGE__.txt +1 -1
- package/dist/web/sessions.html +1 -1
- package/dist/web/sessions.txt +1 -1
- package/dist/web/settings/__next._full.txt +1 -1
- package/dist/web/settings/__next._tree.txt +1 -1
- package/dist/web/settings/__next.settings.__PAGE__.txt +1 -1
- package/dist/web/settings.html +1 -1
- package/dist/web/settings.txt +1 -1
- package/dist/web/skills/__next._full.txt +1 -1
- package/dist/web/skills/__next._tree.txt +1 -1
- package/dist/web/skills/__next.skills.__PAGE__.txt +1 -1
- package/dist/web/skills.html +1 -1
- package/dist/web/skills.txt +1 -1
- package/package.json +2 -2
- package/template/BOOTSTRAP.md +5 -3
- package/template/config.default.yaml +4 -4
- package/template/docs/architecture.md +2 -2
- package/template/docs/cron.md +5 -3
- package/template/docs/mcp.md +1 -1
- package/template/docs/org.md +17 -11
- package/template/docs/overview.md +4 -3
- package/template/docs/self-modification.md +7 -7
- package/template/docs/skills.md +11 -8
- package/template/skills/cron-manager/SKILL.md +7 -7
- package/template/skills/management/SKILL.md +1 -1
- package/template/skills/self-heal/SKILL.md +7 -7
- package/template/skills/skill-creator/SKILL.md +9 -9
- package/dist/web/__next._head.txt +0 -6
- package/dist/web/__next._index.txt +0 -6
- package/dist/web/_next/static/chunks/012aakl34ff5a.js +0 -5
- package/dist/web/_next/static/chunks/03~yq9q893hmn.js +0 -1
- package/dist/web/_next/static/chunks/0a2uy1kw.~j~c.js +0 -1
- package/dist/web/_next/static/chunks/0agxgztb0b~.7.js +0 -5
- package/dist/web/_next/static/chunks/0dtbl8648b3u9.js +0 -7
- package/dist/web/_next/static/chunks/0e3pdjkorr5zl.js +0 -2
- package/dist/web/_next/static/chunks/0ewpxy-mzj3j3.js +0 -1
- package/dist/web/_next/static/chunks/0g6xt.91k~0bc.js +0 -5
- package/dist/web/_next/static/chunks/0jm3e~uc~qd~p.js +0 -79
- package/dist/web/_next/static/chunks/0jzw1gpuag8bc.js +0 -5
- package/dist/web/_next/static/chunks/0lkp92-ovteta.js +0 -5
- package/dist/web/_next/static/chunks/0lt7kv1k1jla0.js +0 -1
- package/dist/web/_next/static/chunks/0msmlzd_~uk0y.js +0 -5
- package/dist/web/_next/static/chunks/0ru56x83x4rkk.js +0 -1
- package/dist/web/_next/static/chunks/0tcvgwr3rcw29.js +0 -1
- package/dist/web/_next/static/chunks/0tf9kpygstdls.js +0 -1
- package/dist/web/_next/static/chunks/0y3dnnq~kxyz_.js +0 -1
- package/dist/web/_next/static/chunks/0~6m1p5hnsx2f.js +0 -1
- package/dist/web/_next/static/chunks/10-liamt-ipcu.js +0 -1
- package/dist/web/_next/static/chunks/103zsy0q9psfj.css +0 -1
- package/dist/web/_next/static/chunks/10l08hq.acixl.js +0 -5
- package/dist/web/_next/static/chunks/11rbefjn.e-3-.js +0 -1
- package/dist/web/_next/static/chunks/11rodb4s1x4of.js +0 -1
- package/dist/web/_next/static/chunks/12_uxtnrqhoo1.js +0 -1
- package/dist/web/_next/static/chunks/12m97bwrg1tuu.js +0 -5
- package/dist/web/_next/static/chunks/13juizw904g.e.js +0 -1
- package/dist/web/_next/static/chunks/14ge_q22f0n.f.js +0 -1
- package/dist/web/_next/static/chunks/17-u9c_weg12-.js +0 -31
- package/dist/web/_next/static/chunks/17oc2l.ekcs8b.css +0 -1
- package/dist/web/_next/static/chunks/turbopack-0dt987bw_1nyf.js +0 -1
- package/dist/web/_next/static/media/apple-icon.0.wpl4.d-5bkf.jpg +0 -0
- package/dist/web/_next/static/media/icon.0.wpl4.d-5bkf.jpg +0 -0
- package/dist/web/_next/static/qeykWjfc1T7SjJSULdD7s/_buildManifest.js +0 -11
- package/dist/web/_next/static/qeykWjfc1T7SjJSULdD7s/_clientMiddlewareManifest.js +0 -1
- package/dist/web/_next/static/qeykWjfc1T7SjJSULdD7s/_ssgManifest.js +0 -1
- package/dist/web/_not-found/__next._head.txt +0 -6
- package/dist/web/_not-found/__next._index.txt +0 -6
- package/dist/web/_not-found/__next._not-found.txt +0 -5
- package/dist/web/chat/__next._head.txt +0 -6
- package/dist/web/chat/__next._index.txt +0 -6
- package/dist/web/chat/__next.chat.txt +0 -5
- package/dist/web/cron/__next._head.txt +0 -6
- package/dist/web/cron/__next._index.txt +0 -6
- package/dist/web/cron/__next.cron.txt +0 -5
- package/dist/web/kanban/__next._head.txt +0 -6
- package/dist/web/kanban/__next._index.txt +0 -6
- package/dist/web/kanban/__next.kanban.txt +0 -5
- package/dist/web/logs/__next._head.txt +0 -6
- package/dist/web/logs/__next._index.txt +0 -6
- package/dist/web/logs/__next.logs.txt +0 -5
- package/dist/web/org/__next._head.txt +0 -6
- package/dist/web/org/__next._index.txt +0 -6
- package/dist/web/org/__next.org.txt +0 -5
- package/dist/web/sessions/__next._head.txt +0 -6
- package/dist/web/sessions/__next._index.txt +0 -6
- package/dist/web/sessions/__next.sessions.txt +0 -5
- package/dist/web/settings/__next._head.txt +0 -6
- package/dist/web/settings/__next._index.txt +0 -6
- package/dist/web/settings/__next.settings.txt +0 -5
- package/dist/web/skills/__next._head.txt +0 -6
- package/dist/web/skills/__next._index.txt +0 -6
- package/dist/web/skills/__next.skills.txt +0 -5
- /package/dist/web/_next/static/{UDwWEfKiZ-eIOpfOIPKQr → Da2BlMpDPFofGxzd6GngP}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{UDwWEfKiZ-eIOpfOIPKQr → Da2BlMpDPFofGxzd6GngP}/_clientMiddlewareManifest.js +0 -0
- /package/dist/web/_next/static/{UDwWEfKiZ-eIOpfOIPKQr → Da2BlMpDPFofGxzd6GngP}/_ssgManifest.js +0 -0
package/template/docs/org.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Employee Personas
|
|
6
6
|
|
|
7
|
-
Employee files live at `~/.
|
|
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 `~/.
|
|
36
|
+
Each department is a directory under `~/.ryoko/org/` containing:
|
|
37
37
|
|
|
38
38
|
```
|
|
39
|
-
~/.
|
|
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}}
|
|
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:
|
|
97
|
-
displayName:
|
|
98
|
-
department:
|
|
99
|
-
rank:
|
|
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
|
|
104
|
-
|
|
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 `
|
|
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
|
-
~/.
|
|
25
|
+
~/.ryoko/
|
|
26
26
|
config.yaml # Gateway configuration
|
|
27
|
-
|
|
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 `~/.
|
|
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 `~/.
|
|
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 `
|
|
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 `~/.
|
|
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 ~/.
|
|
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 ~/.
|
|
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 ~/.
|
|
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
|
```
|
package/template/docs/skills.md
CHANGED
|
@@ -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 `~/.
|
|
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
|
-
~/.
|
|
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
|
|
44
|
+
{{portalName}} ships with these default skills (see `~/.ryoko/skills/`):
|
|
45
45
|
|
|
46
|
-
- **
|
|
47
|
-
- **
|
|
48
|
-
- **cron**:
|
|
49
|
-
- **
|
|
50
|
-
- **
|
|
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
|
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
|
@@ -11,7 +11,7 @@ This skill activates when the user wants to manage their organization: hiring or
|
|
|
11
11
|
|
|
12
12
|
## Organization Structure
|
|
13
13
|
|
|
14
|
-
The organization lives under
|
|
14
|
+
The organization lives under `org/` in the {{portalName}} home directory — which is always your working directory, so relative paths in this skill resolve correctly on any instance. Each department is a subdirectory containing employee persona YAML files and a task board.
|
|
15
15
|
|
|
16
16
|
```
|
|
17
17
|
org/
|
|
@@ -11,11 +11,11 @@ This skill activates when {{portalName}} is experiencing issues, errors, or unex
|
|
|
11
11
|
|
|
12
12
|
## Diagnostic Steps
|
|
13
13
|
|
|
14
|
-
Work through these checks in order. Stop and fix issues as you find them.
|
|
14
|
+
Work through these checks in order. Stop and fix issues as you find them. All relative paths below are relative to the {{portalName}} home directory, which is always your working directory.
|
|
15
15
|
|
|
16
16
|
### 1. Check Gateway Logs
|
|
17
17
|
|
|
18
|
-
Read
|
|
18
|
+
Read the newest log file under `logs/` and look for:
|
|
19
19
|
- Error messages or stack traces
|
|
20
20
|
- Repeated failures or crash loops
|
|
21
21
|
- Connection refused or timeout errors
|
|
@@ -26,7 +26,7 @@ Summarize any problems found to the user.
|
|
|
26
26
|
|
|
27
27
|
### 2. Validate Configuration
|
|
28
28
|
|
|
29
|
-
Read
|
|
29
|
+
Read `config.yaml` and verify:
|
|
30
30
|
- The file is valid YAML (no syntax errors)
|
|
31
31
|
- The `port` field is a valid number (typically 3777)
|
|
32
32
|
- Required fields are present: `port`, `engine`, `model`
|
|
@@ -44,13 +44,13 @@ If the engine command is not found, inform the user that the engine is not insta
|
|
|
44
44
|
### 4. Check Session Database
|
|
45
45
|
|
|
46
46
|
Look at the session registry for stuck sessions:
|
|
47
|
-
- Read
|
|
47
|
+
- Read `sessions/registry.db` (the SQLite session registry)
|
|
48
48
|
- Look for sessions with status `running` that have not been updated recently (more than 30 minutes old)
|
|
49
49
|
- These may be stuck and need to be reset
|
|
50
50
|
|
|
51
51
|
### 5. Check Disk and Temp Files
|
|
52
52
|
|
|
53
|
-
- Check if
|
|
53
|
+
- Check if `tmp/` contains stale files that should be cleaned up
|
|
54
54
|
- Large or numerous temp files can cause issues
|
|
55
55
|
|
|
56
56
|
## Common Fixes
|
|
@@ -68,7 +68,7 @@ jinn stop && jinn start
|
|
|
68
68
|
|
|
69
69
|
If temp files are stale or causing issues:
|
|
70
70
|
|
|
71
|
-
Delete all contents of
|
|
71
|
+
Delete all contents of `tmp/` but keep the directory itself.
|
|
72
72
|
|
|
73
73
|
### Fix Malformed JSON
|
|
74
74
|
|
|
@@ -104,7 +104,7 @@ If the gateway cannot bind to its configured port:
|
|
|
104
104
|
|
|
105
105
|
## Reference
|
|
106
106
|
|
|
107
|
-
For understanding {{portalName}}'s architecture and component relationships, refer to the documentation in
|
|
107
|
+
For understanding {{portalName}}'s architecture and component relationships, refer to the documentation in `docs/` if available.
|
|
108
108
|
|
|
109
109
|
## Error Handling
|
|
110
110
|
|
|
@@ -11,25 +11,25 @@ This skill activates when the user wants to create a new custom skill for {{port
|
|
|
11
11
|
|
|
12
12
|
## Output Location
|
|
13
13
|
|
|
14
|
-
All skills are stored at
|
|
14
|
+
All skills are stored at `skills/<skill-name>/SKILL.md`. Each skill lives in its own directory named with kebab-case.
|
|
15
15
|
|
|
16
16
|
## Behavior by Engine
|
|
17
17
|
|
|
18
18
|
### Claude Code (claude engine)
|
|
19
19
|
|
|
20
|
-
Claude Code has native skill creation capabilities. Defer to the engine's built-in skill/memory system when available. The engine knows how to create well-structured instruction files. Simply ensure the output file lands at the correct path:
|
|
20
|
+
Claude Code has native skill creation capabilities. Defer to the engine's built-in skill/memory system when available. The engine knows how to create well-structured instruction files. Simply ensure the output file lands at the correct path: `skills/<skill-name>/SKILL.md`.
|
|
21
21
|
|
|
22
22
|
### Codex (codex engine)
|
|
23
23
|
|
|
24
|
-
Create the SKILL.md file manually following the conventions below. Write the file directly to
|
|
24
|
+
Create the SKILL.md file manually following the conventions below. Write the file directly to `skills/<skill-name>/SKILL.md`.
|
|
25
25
|
|
|
26
26
|
## Steps
|
|
27
27
|
|
|
28
28
|
1. Ask the user what the skill should do. Get a clear description of the capability.
|
|
29
29
|
2. Ask for a name (kebab-case). Suggest one if the user does not provide it.
|
|
30
|
-
3. Create the directory
|
|
30
|
+
3. Create the directory `skills/<skill-name>/` if it does not exist.
|
|
31
31
|
4. Generate the SKILL.md content following the conventions below.
|
|
32
|
-
5. Write the file to
|
|
32
|
+
5. Write the file to `skills/<skill-name>/SKILL.md`.
|
|
33
33
|
6. Confirm the skill was created and summarize what it does.
|
|
34
34
|
|
|
35
35
|
## Conventions for Writing Good SKILL.md Files
|
|
@@ -47,12 +47,12 @@ Bad: "This skill does reporting stuff."
|
|
|
47
47
|
|
|
48
48
|
Provide numbered steps that an AI engine can follow without ambiguity. Each step should be a concrete action, not a vague directive.
|
|
49
49
|
|
|
50
|
-
Good: "1. Read the file at
|
|
50
|
+
Good: "1. Read the file at `data/repos.json`. 2. For each repository, fetch the latest commits from the past 7 days."
|
|
51
51
|
Bad: "1. Get the data. 2. Process it."
|
|
52
52
|
|
|
53
53
|
### 3. Data File References
|
|
54
54
|
|
|
55
|
-
Specify exact file paths for any data the skill reads or writes
|
|
55
|
+
Specify exact file paths for any data the skill reads or writes, relative to the {{portalName}} home directory (always the working directory). Define the expected schema for any JSON or YAML files.
|
|
56
56
|
|
|
57
57
|
### 4. Error Handling Guidance
|
|
58
58
|
|
|
@@ -84,7 +84,7 @@ This skill activates when <specific trigger description>.
|
|
|
84
84
|
|
|
85
85
|
## Data Files
|
|
86
86
|
|
|
87
|
-
-
|
|
87
|
+
- `<path>` — <description of the file and its format>
|
|
88
88
|
|
|
89
89
|
## Steps
|
|
90
90
|
|
|
@@ -103,7 +103,7 @@ This skill activates when <specific trigger description>.
|
|
|
103
103
|
|
|
104
104
|
## Auto-Sync
|
|
105
105
|
|
|
106
|
-
The gateway automatically creates symlinks in
|
|
106
|
+
The gateway automatically creates symlinks in `.claude/skills/` and `.agents/skills/` pointing to each skill directory. This happens on startup and whenever the `skills/` directory changes. You do not need to manage symlinks manually.
|
|
107
107
|
|
|
108
108
|
## Error Handling
|
|
109
109
|
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:I[84459,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"ViewportBoundary"]
|
|
3
|
-
3:I[84459,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"MetadataBoundary"]
|
|
4
|
-
4:"$Sreact.suspense"
|
|
5
|
-
5:I[93236,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"IconMark"]
|
|
6
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",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":["$","$L3",null,{"children":["$","$4",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.0.wpl4.d-5bkf.jpg","sizes":"800x800","type":"image/jpeg"}],["$","link","3",{"rel":"apple-touch-icon","href":"/apple-icon.jpg?apple-icon.0.wpl4.d-5bkf.jpg","sizes":"800x800","type":"image/jpeg"}],["$","$L5","4",{}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"UDwWEfKiZ-eIOpfOIPKQr"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
1:"$Sreact.fragment"
|
|
2
|
-
2:I[3971,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"ClientProviders"]
|
|
3
|
-
3:I[87979,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
|
|
4
|
-
4:I[35855,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
|
|
5
|
-
:HL["/_next/static/chunks/103zsy0q9psfj.css","style"]
|
|
6
|
-
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/103zsy0q9psfj.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0y3dnnq~kxyz_.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/14ge_q22f0n.f.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/0~6m1p5hnsx2f.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":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","template":["$","$L4",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":false,"staleTime":300,"varyParams":null,"buildId":"UDwWEfKiZ-eIOpfOIPKQr"}
|