noskills 4.1.41 → 4.1.43
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/README.md +44 -16
- package/chunks/approve-NPG6X7O6.js +1 -0
- package/chunks/block-LSEXCK45.js +1 -0
- package/chunks/cancel-7NGO246Z.js +1 -0
- package/chunks/{chunk-CIYGCZTM.js → chunk-3SLKOP72.js} +1 -1
- package/chunks/{chunk-RIME26D6.js → chunk-LWCWPXCS.js} +41 -41
- package/chunks/chunk-MRZT23BL.js +1 -0
- package/chunks/{chunk-GBSAQ2FM.js → chunk-SNHYXBHM.js} +1 -1
- package/chunks/chunk-TMC5H2A5.js +1 -0
- package/chunks/chunk-YYCDBPWA.js +16 -0
- package/chunks/chunk-ZMVD5IU4.js +109 -0
- package/chunks/{concern-E56E2MFL.js → concern-3K3QUYG4.js} +1 -1
- package/chunks/done-OMGLEA32.js +1 -0
- package/chunks/free-BO5UA5V2.js +1 -0
- package/chunks/init-UQLVVP2M.js +1 -0
- package/chunks/invoke-hook-THWB24OS.js +10 -0
- package/chunks/next-4IJJBQBE.js +8 -0
- package/chunks/{purge-6T4L2FXI.js → purge-MDSEQLDQ.js} +1 -1
- package/chunks/reopen-EKSLLO54.js +1 -0
- package/chunks/reset-WRTVX7TT.js +1 -0
- package/chunks/{rule-UDTLRXFA.js → rule-QP5BSH27.js} +1 -1
- package/chunks/run-ROKOTYPH.js +3 -0
- package/chunks/spec-ZLE74TVR.js +1 -0
- package/chunks/status-S2X4ADGF.js +1 -0
- package/chunks/{sync-QYUBOAMK.js → sync-VS4HROEX.js} +1 -1
- package/chunks/watch-4HJMGNF4.js +8 -0
- package/chunks/wontfix-CDPG2GUG.js +1 -0
- package/noskills.js +1 -1
- package/package.json +1 -1
- package/chunks/approve-R5UDYN3P.js +0 -1
- package/chunks/block-P7TM5EPZ.js +0 -1
- package/chunks/cancel-TU3C6MKE.js +0 -1
- package/chunks/chunk-2WH262CW.js +0 -1
- package/chunks/chunk-KDWUWWE5.js +0 -81
- package/chunks/chunk-M7KSO4EF.js +0 -1
- package/chunks/chunk-U2T4X5EN.js +0 -11
- package/chunks/done-NQMUXJYO.js +0 -1
- package/chunks/init-3O7FXLIZ.js +0 -1
- package/chunks/invoke-hook-MPDIOIHR.js +0 -10
- package/chunks/next-5LH223G2.js +0 -8
- package/chunks/reopen-JIHLM3KX.js +0 -1
- package/chunks/reset-4RHO7MSF.js +0 -1
- package/chunks/run-77R3ANIQ.js +0 -3
- package/chunks/spec-DPDGDRW2.js +0 -1
- package/chunks/status-4YV2X73D.js +0 -1
- package/chunks/watch-XVGIYX6X.js +0 -8
- package/chunks/wontfix-VCV45TPJ.js +0 -1
package/README.md
CHANGED
|
@@ -110,8 +110,9 @@ reminders into every task. Stack concerns to define your project's character.
|
|
|
110
110
|
|
|
111
111
|
**One source of truth for every tool.** Write rules once in `.eser/rules/`.
|
|
112
112
|
noskills generates CLAUDE.md, .cursorrules, Kiro steering files, Copilot
|
|
113
|
-
instructions,
|
|
114
|
-
|
|
113
|
+
instructions, Windsurf rules, OpenCode AGENTS.md + plugins, Codex CLI hooks +
|
|
114
|
+
TOML agents, and Copilot CLI hooks + MCP config. Your teammate on Cursor and
|
|
115
|
+
your teammate on Claude Code both get the same conventions, automatically.
|
|
115
116
|
|
|
116
117
|
**A human who's always in charge.** noskills never makes decisions silently.
|
|
117
118
|
Discovery questions -> you answer. Spec approval -> you decide. Architectural
|
|
@@ -261,6 +262,11 @@ eser noskills concern add open-source # Activate concerns
|
|
|
261
262
|
eser noskills spec new "photo upload" # Start spec -> DISCOVERY
|
|
262
263
|
# Agent takes over: calls noskills next, answers questions,
|
|
263
264
|
# builds to spec, reports progress. You approve transitions.
|
|
265
|
+
|
|
266
|
+
# Or skip structure entirely:
|
|
267
|
+
eser noskills free # FREE mode — no enforcement
|
|
268
|
+
# Work freely, then exit when you want structure back:
|
|
269
|
+
eser noskills free --exit # Back to IDLE
|
|
264
270
|
```
|
|
265
271
|
|
|
266
272
|
After `init`, your CLAUDE.md (or .cursorrules, etc.) tells the agent to call
|
|
@@ -349,13 +355,15 @@ Every spec follows a deterministic phase flow:
|
|
|
349
355
|
|
|
350
356
|
```
|
|
351
357
|
IDLE -> DISCOVERY -> DISCOVERY_REVIEW -> SPEC_DRAFT -> SPEC_APPROVED -> EXECUTING <-> BLOCKED
|
|
352
|
-
^
|
|
358
|
+
^ \ |
|
|
359
|
+
| <-> FREE |
|
|
353
360
|
+--------------------------------- DONE <---------------------------------+
|
|
354
361
|
```
|
|
355
362
|
|
|
356
363
|
| Phase | What happens |
|
|
357
364
|
| -------------------- | ---------------------------------------------------------------------- |
|
|
358
365
|
| **IDLE** | No active spec. Start one with `noskills spec new "..."` |
|
|
366
|
+
| **FREE** | No enforcement. Work freely. Agent has no restrictions from noskills |
|
|
359
367
|
| **DISCOVERY** | 6 blended questions probe product, engineering, and QA simultaneously |
|
|
360
368
|
| **DISCOVERY_REVIEW** | User reviews and confirms all discovery answers before spec generation |
|
|
361
369
|
| **SPEC_DRAFT** | Spec generated from discovery answers. Human reviews |
|
|
@@ -411,7 +419,7 @@ Every `noskills next` call returns a structured JSON payload:
|
|
|
411
419
|
"Do not refactor, improve, or modify code outside this task's scope.",
|
|
412
420
|
"Complete the task, then report progress. The user handles git."
|
|
413
421
|
],
|
|
414
|
-
"tone": "Direct.
|
|
422
|
+
"tone": "Direct. Orchestrate immediately — spawn sub-agents."
|
|
415
423
|
},
|
|
416
424
|
"context": {
|
|
417
425
|
"rules": ["Use Deno for all TypeScript"],
|
|
@@ -462,13 +470,15 @@ noskills status -o json # Structured status for scripts
|
|
|
462
470
|
Every `noskills next` output includes a `behavioral` block with phase-specific
|
|
463
471
|
rules. These tell the agent HOW to behave, not just WHAT to do:
|
|
464
472
|
|
|
465
|
-
| Phase | Behavioral tone
|
|
466
|
-
| ---------- |
|
|
467
|
-
|
|
|
468
|
-
|
|
|
469
|
-
|
|
|
470
|
-
|
|
|
471
|
-
|
|
|
473
|
+
| Phase | Behavioral tone | Key rules |
|
|
474
|
+
| ---------- | -------------------------------- | ------------------------------------------------------------- |
|
|
475
|
+
| IDLE | "Welcoming. Present choices" | No file edits until free mode or spec approved |
|
|
476
|
+
| FREE | "Quiet. No enforcement." | No restrictions — work freely |
|
|
477
|
+
| DISCOVERY | "Curious, has a stake" | Push back on shallow answers, probe for specifics, don't code |
|
|
478
|
+
| SPEC_DRAFT | "The user is reviewing" | Don't modify the spec, don't start coding |
|
|
479
|
+
| EXECUTING | "Orchestrate — spawn sub-agents" | Delegate to sub-agents, don't edit files directly |
|
|
480
|
+
| BLOCKED | "Brief. Decision time." | Present decision as-is, don't suggest preferences |
|
|
481
|
+
| DONE | "Celebrate briefly, then stop" | Don't start new work |
|
|
472
482
|
|
|
473
483
|
**Git is read-only** for agents (configurable via `allowGit: true` in manifest).
|
|
474
484
|
Agents may read (`git log`, `git diff`, `git status`) but never write
|
|
@@ -634,9 +644,10 @@ noskills next --answer='{"involvesWebUI":true,"involvesCLI":false,"involvesPubli
|
|
|
634
644
|
|
|
635
645
|
### Hooks — Zero-Token Bookkeeping
|
|
636
646
|
|
|
637
|
-
noskills installs hooks for Claude Code (`.claude/settings.json`)
|
|
638
|
-
(`.kiro/settings/hooks.json`)
|
|
639
|
-
|
|
647
|
+
noskills installs hooks for Claude Code (`.claude/settings.json`), Kiro
|
|
648
|
+
(`.kiro/settings/hooks.json`), OpenCode (`.opencode/plugins/noskills.ts`), Codex
|
|
649
|
+
CLI (`.codex/hooks.json`), and Copilot CLI (`.github/hooks/noskills.json`) that
|
|
650
|
+
handle state bookkeeping without spending LLM tokens. Claude Code hooks:
|
|
640
651
|
|
|
641
652
|
| Hook | Event | What it does |
|
|
642
653
|
| ------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -648,6 +659,11 @@ tokens. Claude Code hooks:
|
|
|
648
659
|
|
|
649
660
|
Kiro hooks map the same behavioral guarantees to Kiro-native triggers (Pre Tool
|
|
650
661
|
Use, Post Tool Use, Agent Stop, Prompt Submit) using Run Command actions.
|
|
662
|
+
OpenCode hooks use the plugin system (`.opencode/plugins/`) with event handlers
|
|
663
|
+
for session.created, tool.execute.before/after, and session.deleted. Codex CLI
|
|
664
|
+
hooks use `.codex/hooks.json` with PascalCase events (SessionStart, PreToolUse,
|
|
665
|
+
PostToolUse, Stop). Copilot CLI hooks use `.github/hooks/noskills.json` with a
|
|
666
|
+
versioned schema (`{"version": 1, "hooks": {...}}`) and array-format commands.
|
|
651
667
|
|
|
652
668
|
Hooks are CLI subcommands (`noskills invoke-hook <name>`), not generated script
|
|
653
669
|
files. This avoids ESM/CJS issues — the same Deno entry point handles
|
|
@@ -674,7 +690,18 @@ noskills generates instruction files for every AI tool your team uses:
|
|
|
674
690
|
|-- -> .kiro/agents/*.json (Kiro custom agents)
|
|
675
691
|
|-- -> .kiro/specs/ (Kiro spec projection)
|
|
676
692
|
|-- -> .github/copilot-instructions.md (GitHub Copilot)
|
|
677
|
-
|
|
693
|
+
|-- -> .windsurfrules (Windsurf)
|
|
694
|
+
|-- -> AGENTS.md (OpenCode / Codex / Copilot CLI)
|
|
695
|
+
|-- -> .opencode/plugins/noskills.ts (OpenCode hooks)
|
|
696
|
+
|-- -> .opencode/agents/*.md (OpenCode agents)
|
|
697
|
+
|-- -> .opencode/skills/*.md (OpenCode spec projection)
|
|
698
|
+
|-- -> opencode.json (OpenCode MCP registration)
|
|
699
|
+
|-- -> .codex/hooks.json (Codex CLI hooks)
|
|
700
|
+
|-- -> .codex/agents/*.toml (Codex CLI agents)
|
|
701
|
+
|-- -> .codex/config.toml (Codex CLI MCP registration)
|
|
702
|
+
|-- -> .github/hooks/noskills.json (Copilot CLI hooks)
|
|
703
|
+
|-- -> .github/agents/*.agent.md (Copilot CLI agents)
|
|
704
|
+
+-- -> .copilot/mcp.json (Copilot CLI MCP registration)
|
|
678
705
|
```
|
|
679
706
|
|
|
680
707
|
Write your rules once in `.eser/rules/`, run `noskills sync`, and every tool
|
|
@@ -843,7 +870,8 @@ install all get correct command references.
|
|
|
843
870
|
**Tools vs Providers:**
|
|
844
871
|
|
|
845
872
|
- **Tools** = the IDE or agent environment (`claude-code`, `cursor`, `kiro`,
|
|
846
|
-
`copilot`, `windsurf`). Affects which sync
|
|
873
|
+
`copilot`, `windsurf`, `opencode`, `codex`, `copilot-cli`). Affects which sync
|
|
874
|
+
output files are generated.
|
|
847
875
|
- **Providers** = AI model access methods (`anthropic`, `openai`, `ollama`,
|
|
848
876
|
`claude-code` CLI). Used by the Agent Bridge for validation and
|
|
849
877
|
`noskills run`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as k}from"./chunk-SNHYXBHM.js";import{a as x,d as F}from"./chunk-3SLKOP72.js";import"./chunk-VPXOI7CR.js";import{c as p}from"./chunk-YK6UG66R.js";import{g as P,i as A}from"./chunk-TMC5H2A5.js";import{d as y,f as C,h as R,i as w,j as u,l as D,p as E}from"./chunk-LWCWPXCS.js";import{c as i,d as l,f as a,g as d,k as m,o as S,q as v,r as g}from"./chunk-Y6AFIAJP.js";import{a as h,b as n}from"./chunk-2N4GTHXQ.js";import{b as c}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var M=async _=>{let s=S({renderer:g.ansi(),sink:v.stdout()}),r=c.process.cwd(),o=R(_);if(!o.ok)return s.writeln(a(o.error)),await s.close(),n({exitCode:1});let t;try{t=await C(r,o.spec)}catch(e){let f=e instanceof Error?e.message:String(e);return s.writeln(a(f)),await s.close(),n({exitCode:1})}let $=await D(r);if(t.spec!==null){let e=`${r}/${y.specDir(t.spec)}`;try{await c.fs.stat(e)}catch{return s.writeln(a(`Active spec '${t.spec}' directory not found.`)),s.writeln(l("Run `noskills reset` to return to IDLE.")),await s.close(),n({exitCode:1})}}if(t.phase==="SPEC_DRAFT"){if(t.classification===null&&t.spec!==null){let b=(await E(r)).filter(I=>$?.concerns.includes(I.id)??!1);try{await k(r,t,b)}catch{}}let e=A(t);await w(r,e),e.spec!==null&&await u(r,e.spec,e),e.spec!==null&&(await x(r,e.spec,"approved"),await F(r,e.spec,"approved")),s.writeln(d("\u2714")," Spec approved. Phase: ",m("SPEC_APPROVED")),s.writeln("When ready, run ",i(`${p('next --answer="start"')}`)," to begin execution.")}else if(t.phase==="DISCOVERY_REVIEW"){let e=P(t);await w(r,e),e.spec!==null&&await u(r,e.spec,e),s.writeln(d("\u2714")," Discovery answers approved. Phase: ",m("SPEC_DRAFT")),s.writeln("Review the spec and run ",i(p("approve"))," again to approve.")}else t.phase==="DISCOVERY"&&t.discovery.completed?(s.writeln(l("Discovery complete. Spec draft already generated.")),s.writeln("Review the spec and run ",i(p("approve"))," again when in SPEC_DRAFT phase.")):s.writeln(a(`Cannot approve in phase: ${t.phase}`));return await s.close(),h(void 0)};export{M as main};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as v}from"./chunk-YK6UG66R.js";import{k as A}from"./chunk-TMC5H2A5.js";import{d as k,f as S,h as y,i as x,j as C}from"./chunk-LWCWPXCS.js";import{c as d,d as l,f as i,h as f,o as w,q as h,r as g}from"./chunk-Y6AFIAJP.js";import{a as u,b as r}from"./chunk-2N4GTHXQ.js";import{b as c}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var q=async p=>{let e=w({renderer:g.ansi(),sink:h.stdout()}),n=c.process.cwd(),o=y(p);if(!o.ok)return e.writeln(i(o.error)),await e.close(),r({exitCode:1});let m=(p??[]).filter(t=>!t.startsWith("--spec=")).join(" ")||"No reason given",s;try{s=await S(n,o.spec)}catch(t){let E=t instanceof Error?t.message:String(t);return e.writeln(i(E)),await e.close(),r({exitCode:1})}if(s.spec!==null){let t=`${n}/${k.specDir(s.spec)}`;try{await c.fs.stat(t)}catch{return e.writeln(i(`Active spec '${s.spec}' directory not found.`)),e.writeln(l("Run `noskills reset` to return to IDLE.")),await e.close(),r({exitCode:1})}}if(s.phase!=="EXECUTING")return e.writeln(i(`Cannot block in phase: ${s.phase}`)),await e.close(),r({exitCode:1});let a=A(s,m);return await x(n,a),a.spec!==null&&await C(n,a.spec,a),e.writeln(f("\u26A0")," Spec blocked: ",l(m)),e.writeln("Resolve with: ",d(`${v('next --answer="resolution"')}`)),await e.close(),u(void 0)};export{q as main};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as k,d as D}from"./chunk-3SLKOP72.js";import{m as C}from"./chunk-TMC5H2A5.js";import{d as w,f as h,h as S,i as g,j as y}from"./chunk-LWCWPXCS.js";import{d as l,f as n,g as m,o as u,q as d,r as f}from"./chunk-Y6AFIAJP.js";import{a as p,b as i}from"./chunk-2N4GTHXQ.js";import{b as o}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var R=async E=>{let e=u({renderer:f.ansi(),sink:d.stdout()}),r=o.process.cwd(),c=S(E);if(!c.ok)return e.writeln(n(c.error)),await e.close(),i({exitCode:1});let s;try{s=await h(r,c.spec)}catch(a){let I=a instanceof Error?a.message:String(a);return e.writeln(n(I)),await e.close(),i({exitCode:1})}if(s.phase==="IDLE"||s.phase==="UNINITIALIZED"||s.phase==="COMPLETED")return e.writeln(n(`Cannot cancel in phase: ${s.phase}`)),await e.close(),i({exitCode:1});if(s.spec!==null){let a=`${r}/${w.specDir(s.spec)}`;try{await o.fs.stat(a)}catch{return e.writeln(n(`Active spec '${s.spec}' directory not found.`)),e.writeln(l("Run `noskills reset` to return to IDLE.")),await e.close(),i({exitCode:1})}}let t=C(s,"cancelled");return await g(r,t),t.spec!==null&&await y(r,t.spec,t),t.spec!==null&&(await k(r,t.spec,"cancelled"),await D(r,t.spec,"cancelled")),e.writeln(m("\u2714")," Spec cancelled."),await e.close(),p(void 0)};export{R as main};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{d as o}from"./chunk-
|
|
1
|
+
import{d as o}from"./chunk-LWCWPXCS.js";import{b as e}from"./chunk-MNEZ5QGX.js";var d=async(r,i,n)=>{let s=`${r}/${o.specFile(i)}`;try{let t=await e.fs.readTextFile(s);t=t.replace(/^## Status: .+$/m,`## Status: ${n}`),await e.fs.writeTextFile(s,t)}catch{}},u=async(r,i,n)=>{let s=`${r}/${o.specFile(i)}`;try{let t=await e.fs.readTextFile(s),a=new RegExp(`^(- )\\[ \\]( ${n}:.*)$`,"m");t=t.replace(a,"$1[x]$2"),await e.fs.writeTextFile(s,t)}catch{}},w=async(r,i,n,s)=>{let t=`${r}/${o.specDir(i)}/progress.json`;try{let a=await e.fs.readTextFile(t),c=JSON.parse(a);for(let p of c.tasks)p.id===n&&(p.status=s);c.updatedAt=new Date().toISOString(),await e.fs.writeTextFile(t,JSON.stringify(c,null,2)+`
|
|
2
2
|
`)}catch{}},f=async(r,i,n)=>{let s=`${r}/${o.specDir(i)}/progress.json`;try{let t=await e.fs.readTextFile(s),a=JSON.parse(t);a.status=n,a.updatedAt=new Date().toISOString(),await e.fs.writeTextFile(s,JSON.stringify(a,null,2)+`
|
|
3
3
|
`)}catch{}};export{d as a,u as b,w as c,f as d};
|