company-skill 4.6.6 → 4.6.8
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 +87 -20
- package/hooks/context-guard.js +43 -28
- package/package.json +18 -2
- package/scripts/company-autoloop.js +627 -0
- package/scripts/dashboard.js +831 -297
- package/scripts/statusline.js +226 -14
- package/skill/SKILL.md +2 -2
package/README.md
CHANGED
|
@@ -2,10 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/company-skill) [](https://www.npmjs.com/package/company-skill) [](https://github.com/jagmarques/company-skill/actions/workflows/check.yml) [](LICENSE)
|
|
4
4
|
|
|
5
|
-
**The agent company that can't stop until the work is verified done
|
|
5
|
+
**The agent company that can't stop until the work is verified done**
|
|
6
6
|
|
|
7
7
|
Your agent stops when it feels done. This makes it stop only when the work is actually done.
|
|
8
8
|
|
|
9
|
+
company-skill is a Claude Code skill for multi-agent orchestration. It runs your agents as a company with a verification gate, so a `/company` run cannot stop until every acceptance criterion is reproduced.
|
|
10
|
+
|
|
11
|
+
## What it is
|
|
12
|
+
|
|
13
|
+
You give it a goal. It splits the work across sub-agents, runs them in dependency waves, and keeps going across cycles until the result is proven instead of just claimed. It runs unattended. Each cycle re-runs every check, a reviewer attacks anything marked passing, and a stop guard blocks exit while any criterion still fails. Sub-agents get scoped delegation contracts rather than the whole problem. A digest writer compresses each finished cycle so the orchestrator stays under its context window, and work is split across models to keep cost down. Nothing is done until it is verified.
|
|
14
|
+
|
|
15
|
+
## Who it's for
|
|
16
|
+
|
|
17
|
+
Reach for it when "looks done" is not good enough and you want the loop to finish the job on its own:
|
|
18
|
+
|
|
19
|
+
- Build a REST API and prove the tests pass before it stops.
|
|
20
|
+
- Run an overnight refactor that won't quit half-done.
|
|
21
|
+
- Ship a feature where every acceptance criterion is reproduced, not asserted.
|
|
22
|
+
- Hand off a long task and come back to verified output instead of a half-finished draft.
|
|
23
|
+
|
|
24
|
+
Compared to a single agent or a plain prompt loop, the difference is the gate. A single agent stops when it decides it is finished. A company of agents keeps running, re-checking its own claims each cycle, until the evidence is there. It does not invent work outside the goal, and it tells you plainly when it is blocked.
|
|
25
|
+
|
|
9
26
|
<p align="center">
|
|
10
27
|
<img src="assets/dashboard.png" alt="Company dashboard showing org tree, context gauge, active agents, and criteria" width="900">
|
|
11
28
|
<br>
|
|
@@ -33,12 +50,15 @@ Optionally define your team first in `COMPANY.md` (skip it and a minimal company
|
|
|
33
50
|
|
|
34
51
|
Every criterion starts failing. Workers run in dependency waves under delegation contracts. At the end of each cycle, the Internal Reviewer re-runs every VERIFY-WITH command and the Devil's Advocate attacks everything marked passing. The stop guard physically blocks exit until every criterion has `passes: true` with reproduced evidence. Once done, `STATUS.md` and a `playbook.md` update are written for the next session.
|
|
35
52
|
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
```mermaid
|
|
54
|
+
flowchart TD
|
|
55
|
+
GOAL --> THINK
|
|
56
|
+
THINK --> EXECUTE["EXECUTE (parallel waves)"]
|
|
57
|
+
EXECUTE --> VERIFY
|
|
58
|
+
VERIFY -->|all criteria pass| DONE["Done (STATUS.md + playbook)"]
|
|
59
|
+
VERIFY -->|not done| COMPRESS
|
|
60
|
+
COMPRESS --> NEXT["THINK (next cycle)"]
|
|
61
|
+
NEXT --> EXECUTE
|
|
42
62
|
```
|
|
43
63
|
|
|
44
64
|
**Roles:** CEO orchestrator, Internal Reviewer, Devil's Advocate, Digest Writer. The orchestrator reads `COMPANY.md`, activates only the roles the goal needs, and writes delegation contracts in dependency order. Workers append FINDING + SOURCE lines to findings files. The Digest Writer compresses each finished cycle into the next cycle's briefing so the orchestrator never carries raw worker output in its own context.
|
|
@@ -52,43 +72,90 @@ The dashboard starts automatically when you run `/company` and prints its URL in
|
|
|
52
72
|
http://127.0.0.1:7421 <- your session's link, printed at startup and in the status bar
|
|
53
73
|
```
|
|
54
74
|
|
|
75
|
+
A per-session identity header sits at the top: the project, the session id, the active model, and an "All projects" link to the cross-project roll-up.
|
|
76
|
+
|
|
55
77
|
What you see, panel by panel:
|
|
56
78
|
|
|
57
|
-
**Context fill** - the live fill percentage, computed with the same formula the context-guard uses. When the session hits the restart threshold (default 50%), the
|
|
79
|
+
**Context fill** - the live fill percentage, computed with the same formula the context-guard uses. When the session hits the restart threshold (default 50%), the gauge marks the gate before it fires. Next to it sits an Apple-style auto-restart pill, locked on - the restart block is always enforced and the toggle cannot turn it off.
|
|
58
80
|
|
|
59
|
-
**Delegation tree** - SVG tree of orchestrator, department leads, and workers, with org-chart context filled from COMPANY.md. Click any node to expand its current task and status. Zoom with +/- buttons or the
|
|
81
|
+
**Delegation tree** - SVG tree of orchestrator, department leads, and workers, with org-chart context filled from COMPANY.md. Click any node to expand its current task and status. Zoom only with the pill-shaped +/- buttons, or use the expand button to blow the tree up to fill the screen and the contract button to bring it back. Drag to pan. A refresh resets the tree to its default view. Zero external JS libraries.
|
|
82
|
+
|
|
83
|
+
**Cycles and memory** - a savings card that shows human cycle and memory counts plus the dollars saved by model tiering and prompt caching, each marked approximate.
|
|
60
84
|
|
|
61
85
|
**Active agents** - centered live table of every agent the orchestrator has spawned this session, with model, status, and token count.
|
|
62
86
|
|
|
63
87
|
**Criteria** - compact progress view with a click-to-expand toggle for the full pass/fail list and reproduced evidence.
|
|
64
88
|
|
|
89
|
+
**All projects** - the "All projects" link near the session header opens `/all`, a cross-project roll-up. It reads `~/.claude/company-dashboards.json`, a small index every dashboard writes itself into, and shows aggregate cost, tokens, and cache reuse grouped by project. It lists only dashboards seen in the last 5 minutes, costs come from ccusage and are notional on a subscription plan, and a session whose usage row is missing shows `?` rather than zero. Each row links back to that session's own dashboard.
|
|
90
|
+
|
|
65
91
|
The dashboard binds 127.0.0.1 only, reads local files, and sends nothing anywhere. Override the port with `COMPANY_DASHBOARD_PORT`.
|
|
66
92
|
|
|
93
|
+
**You get this automatically.** Installing company-skill (npm or the install script) copies `dashboard.js` and `statusline.js` alongside the rest of the skill. Running `/company` then starts the dashboard for you and prints its localhost URL at startup and in the status line. No extra setup.
|
|
94
|
+
|
|
95
|
+
### Status line
|
|
96
|
+
|
|
97
|
+
`scripts/statusline.js` appends a labelled link to the per-session dashboard so the URL is one glance away on every turn. The appended segment is `📊 company dashboard <url>`.
|
|
98
|
+
|
|
99
|
+
With no status line of your own configured, it also renders the model and context fill. The context fill draws as a progress bar using Claude's native used_percentage so the number matches the session indicator, so the full line reads:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
Opus 4.8 (1M context) | [████░░░░░░] 25% | 📊 company dashboard http://127.0.0.1:7421
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
If you already have a status line, the setup step stores your prior command in `.company/statusline-base.json` and runs it first. Your line leads, the script appends only the link, and it does not re-print model or context since your own line owns those:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
<your status line> | 📊 company dashboard http://127.0.0.1:7421
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
## Unattended auto-restart loop
|
|
113
|
+
|
|
114
|
+
`scripts/company-autoloop.js` runs `/company` unattended across many sessions. It restarts into a fresh context automatically when a work session approaches the context threshold, so a long goal keeps going without a human pasting the restart prompt each time.
|
|
115
|
+
|
|
116
|
+
A script is needed because a fully unattended fresh-context restart cannot be done with Claude Code native features alone. Hooks cannot run `/clear` or start a fresh turn, a Stop-hook block keeps the same context, and auto-compaction only summarizes. The supervisor is the external driver that owns the restart decision. This is the validated finding.
|
|
117
|
+
|
|
118
|
+
Each turn runs a headless `claude -p` session while the supervisor watches the session context fill. At the threshold it drives `/company restart` to emit the `NEXT.md` continuation, then launches a fresh session seeded from it.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
node scripts/company-autoloop.js --max-turns 100 "/company GOAL: <your goal>"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Key flags and env:
|
|
125
|
+
|
|
126
|
+
- `--project-dir <path>` the project the run targets (default: current dir)
|
|
127
|
+
- `--company-dir <path>` override the `.company` dir (default: `<project-dir>/.company`)
|
|
128
|
+
- `--max-turns <n>` hard cap on work turns across all sessions (default: 100)
|
|
129
|
+
- `--restart-timeout-secs <n>` max wait for the restart markers (default: 420)
|
|
130
|
+
- `COMPANY_CONTEXT_THRESHOLD` fill fraction or percent that triggers a restart (default: 0.50, set a low value for testing)
|
|
131
|
+
|
|
132
|
+
It runs with `--permission-mode bypassPermissions` for the autonomy an unattended loop needs. The threshold is configurable, so you can drop it low to exercise the restart path during testing.
|
|
133
|
+
|
|
67
134
|
|
|
68
135
|
## Cost and quality
|
|
69
136
|
|
|
70
137
|
Multi-agent orchestration buys quality with tokens. /company's answer to the token cost: spend strong-model tokens only where they buy quality, and report the bill every cycle.
|
|
71
138
|
|
|
72
|
-
**Tiered model delegation
|
|
139
|
+
**Tiered model delegation** - each delegation contract carries a `MODEL: cheap|mid|strong` tag. The orchestrator maps the tag to a model at spawn time. Effort scales with both ROI and stakes - high-stakes or high-value work gets heavier spawn. Override every sub-agent with `CLAUDE_CODE_SUBAGENT_MODEL` at launch, or write `FORCE_BEST` into `.company/MODEL_POLICY` mid-run.
|
|
73
140
|
|
|
74
|
-
**Per-cycle cost reporting
|
|
141
|
+
**Per-cycle cost reporting** - every cycle produces a `COST:` line in the briefing and a `cycles/cycle-{N}-cost.json` artifact.
|
|
75
142
|
|
|
76
|
-
**Prompt caching
|
|
143
|
+
**Prompt caching** - agent prompts are laid out stable-first so repeated spawns hit a shared cache prefix.
|
|
77
144
|
|
|
78
|
-
**Fable 5 / adaptive thinking
|
|
145
|
+
**Fable 5 / adaptive thinking** - on models that support adaptive thinking (Fable 5 and later), the orchestrator and verify layers run with thinking enabled. No `budget_tokens` param - reflection depth is model-controlled.
|
|
79
146
|
|
|
80
147
|
|
|
81
148
|
## Key features
|
|
82
149
|
|
|
83
|
-
**Stop guard** - blocks session exit until every criterion has `passes: true` and reproduced evidence. Malformed state blocks rather than fails open. Deleting a hard criterion blocks instead of unlocking. [
|
|
150
|
+
**Stop guard** - blocks session exit until every criterion has `passes: true` and reproduced evidence. Malformed state blocks rather than fails open. Deleting a hard criterion blocks instead of unlocking. [42-check test](tests/stop-guard.test.js).
|
|
84
151
|
|
|
85
|
-
**Context-fill guard** - a second Stop hook forces `/company restart` once context reaches the threshold (default 50%). Reads the model id from the transcript to detect the context window.
|
|
152
|
+
**Context-fill guard** - a second Stop hook forces `/company restart` once context reaches the threshold (default 50%). Reads the model id from the transcript to detect the context window. The restart block is always on and the dashboard shows it as a locked Apple-style pill toggle. [63-check test](tests/context-guard.test.js).
|
|
86
153
|
|
|
87
|
-
**Delegation contracts** - a task does not exist without a filled contract. `check-contracts.js` rejects missing fields, vacuous VERIFY-WITH commands, invalid MODEL tiers, and cyclic dependencies. [
|
|
154
|
+
**Delegation contracts** - a task does not exist without a filled contract. `check-contracts.js` rejects missing fields, vacuous VERIFY-WITH commands, invalid MODEL tiers, and cyclic dependencies. [29-check test](tests/check-contracts.test.js).
|
|
88
155
|
|
|
89
|
-
**Multi-level verification
|
|
156
|
+
**Multi-level verification** - the Internal Reviewer re-runs every VERIFY-WITH command independently. The Devil's Advocate attacks everything marked passing. For criteria tagged `stakes: "high"` in `criteria.json` (irreversible action, security surface, or public-facing claim), the critic runs in three fresh contexts with distinct lenses - correctness, security, reproducibility - and unanimous ACCEPT is required. Normal criteria keep the single critic. The completeness probe enumerates every surface the GOAL names and auto-rejects any unchecked one.
|
|
90
157
|
|
|
91
|
-
**Design judge-panel
|
|
158
|
+
**Design judge-panel** - for criteria tagged `kind: design`, the lead may emit up to three contracts from materially different angles plus one synthesis contract, reserved for genuine design forks.
|
|
92
159
|
|
|
93
160
|
**Git isolation** - workers never push to main and never merge. Every code change lands as a draft PR. The merge gate is yours.
|
|
94
161
|
|
|
@@ -96,7 +163,7 @@ Multi-agent orchestration buys quality with tokens. /company's answer to the tok
|
|
|
96
163
|
|
|
97
164
|
**Codebase graph** - on repos with >200 tracked files, `scripts/codegraph.js` builds a commit-keyed ranked symbol map into `.company/codegraph/` for lead prompts.
|
|
98
165
|
|
|
99
|
-
**Status-line link** - `scripts/statusline.js` appends
|
|
166
|
+
**Status-line link** - `scripts/statusline.js` appends a labelled `📊 company dashboard <url>` segment to the Claude Code status bar, enforced idempotently on every `/company` run. The link resolves in any session through a cwd-independent global registry, with an `/all` fallback. It chains any status line you already have and never re-prints model or context when one is present. See [Status line](#status-line).
|
|
100
167
|
|
|
101
168
|
|
|
102
169
|
## Commands
|
|
@@ -128,7 +195,7 @@ State lives in `./.company/` (relocate with `COMPANY_DIR`):
|
|
|
128
195
|
|
|
129
196
|
## Examples
|
|
130
197
|
|
|
131
|
-
[`startup.md`](examples/startup.md), [`research-lab.md`](examples/research-lab.md), [`dev-team.md`](examples/dev-team.md)
|
|
198
|
+
[`startup.md`](examples/startup.md), [`research-lab.md`](examples/research-lab.md), [`dev-team.md`](examples/dev-team.md).
|
|
132
199
|
|
|
133
200
|
|
|
134
201
|
## Contributing
|
package/hooks/context-guard.js
CHANGED
|
@@ -48,7 +48,7 @@ function parseThreshold() {
|
|
|
48
48
|
return v > 1 ? v / 100 : v;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
// Hard ceiling:
|
|
51
|
+
// Hard ceiling: a higher informational level that changes the block wording only.
|
|
52
52
|
// Default 0.80. Overridable via COMPANY_CONTEXT_HARD_CEILING (fraction or percent).
|
|
53
53
|
// If the parsed value is below the soft threshold, it is clamped up to the threshold.
|
|
54
54
|
function parseHardCeiling(threshold) {
|
|
@@ -171,40 +171,30 @@ const fill = used / contextWindow;
|
|
|
171
171
|
|
|
172
172
|
if (fill < threshold) process.exit(0);
|
|
173
173
|
|
|
174
|
-
//
|
|
175
|
-
//
|
|
176
|
-
//
|
|
177
|
-
//
|
|
178
|
-
// the toggle suppresses the soft-threshold block. At or above the hard ceiling the
|
|
179
|
-
// toggle has no effect and we fall through to block unconditionally.
|
|
180
|
-
if (sessionId && fill < hardCeiling) {
|
|
181
|
-
const cfgPath = path.join(companyDir, 'context-guard-config.json');
|
|
182
|
-
try {
|
|
183
|
-
const cfgRaw = fs.readFileSync(cfgPath, 'utf8');
|
|
184
|
-
const cfg = JSON.parse(cfgRaw);
|
|
185
|
-
if (cfg && typeof cfg === 'object' &&
|
|
186
|
-
cfg.sessions && typeof cfg.sessions === 'object' &&
|
|
187
|
-
cfg.sessions[sessionId] && typeof cfg.sessions[sessionId] === 'object' &&
|
|
188
|
-
cfg.sessions[sessionId].enforceRestart === false) {
|
|
189
|
-
// Toggle is OFF and below the hard ceiling: allow through without blocking
|
|
190
|
-
process.exit(0);
|
|
191
|
-
}
|
|
192
|
-
// Any other value (true, missing, or unknown) falls through to block
|
|
193
|
-
} catch (e) {
|
|
194
|
-
// File missing or parse error: treat as enforceRestart=true (safe default)
|
|
195
|
-
}
|
|
196
|
-
}
|
|
174
|
+
// At or above the soft threshold the restart block is UNCONDITIONAL.
|
|
175
|
+
// No per-session suppression exists: the enforceRestart toggle was removed because
|
|
176
|
+
// a session at or above the threshold must always restart (founder-firm invariant).
|
|
177
|
+
// The hard ceiling only changes the wording of the block, never whether it fires.
|
|
197
178
|
|
|
198
179
|
// Fill is at or above threshold. Check the de-loop state file before blocking.
|
|
199
|
-
// De-loop state is SESSION-SCOPED
|
|
180
|
+
// De-loop state is SESSION-SCOPED JSON { "sessionId", "tokens", "releasedAtTokens"? }.
|
|
200
181
|
// A state file from a different session (or a legacy bare-number file) is treated as
|
|
201
182
|
// no prior fire for this session (lastFiredTokens = -1). This prevents a prior
|
|
202
183
|
// session's high-water mark from suppressing a first-fire in a fresh session.
|
|
203
184
|
// Within a session: first fire blocks + writes { sessionId, tokens }; subsequent stops
|
|
204
185
|
// with grown tokens require the debate artifact; a token DROP re-arms unconditionally.
|
|
186
|
+
// Once a debate is honored the release is STICKY: releasedAtTokens records the fill at
|
|
187
|
+
// which the restart was released so re-stops at the same fill stay quiet (no re-demand
|
|
188
|
+
// loop), mirroring how CANCEL is persistent.
|
|
205
189
|
const stateFile = path.join(companyDir, '.context-guard-state');
|
|
206
190
|
|
|
191
|
+
// Margin (5% of the context window) of new accumulation past the released high-water
|
|
192
|
+
// before a fresh restart demand is legitimate again. Below this, the session is treated
|
|
193
|
+
// as already released at this fill and the guard stays quiet.
|
|
194
|
+
const RELEASE_MARGIN_TOKENS = Math.round(contextWindow * 0.05);
|
|
195
|
+
|
|
207
196
|
let lastFiredTokens = -1;
|
|
197
|
+
let releasedAtTokens = -1;
|
|
208
198
|
try {
|
|
209
199
|
const raw = fs.readFileSync(stateFile, 'utf8').trim();
|
|
210
200
|
// Attempt JSON parse first (session-scoped format).
|
|
@@ -219,10 +209,30 @@ try {
|
|
|
219
209
|
typeof parsed.tokens === 'number') {
|
|
220
210
|
// State belongs to the current session: honor it.
|
|
221
211
|
lastFiredTokens = parsed.tokens;
|
|
212
|
+
if (typeof parsed.releasedAtTokens === 'number') releasedAtTokens = parsed.releasedAtTokens;
|
|
222
213
|
}
|
|
223
214
|
// Null sessionId either side, legacy bare-number, or different session: treat as fresh.
|
|
224
215
|
} catch (e) {}
|
|
225
216
|
|
|
217
|
+
// Sticky release: a restart already honored at releasedAtTokens silences the guard for
|
|
218
|
+
// re-stops at the same-or-similar fill. Only a meaningful rise past the margin re-arms.
|
|
219
|
+
if (releasedAtTokens >= 0) {
|
|
220
|
+
if (used <= releasedAtTokens + RELEASE_MARGIN_TOKENS) process.exit(0);
|
|
221
|
+
// Fill rose meaningfully above the released high-water: genuine new accumulation.
|
|
222
|
+
// Re-arm by recording a fresh first-fire at this fill and block once.
|
|
223
|
+
try { fs.writeFileSync(stateFile, JSON.stringify({ sessionId: sessionId, tokens: used })); } catch (e) {}
|
|
224
|
+
const sessionTagRearm = sessionId ? ' [session ' + sessionId + ']' : '';
|
|
225
|
+
const pctRearm = Math.round(fill * 100);
|
|
226
|
+
console.log(JSON.stringify({
|
|
227
|
+
decision: 'block',
|
|
228
|
+
reason: '[COMPANY] Context at ' + pctRearm + '% (grew past the prior restart point). ' +
|
|
229
|
+
'Run /company restart NOW: quiesce in-flight agents, commit their work as draft PRs, ' +
|
|
230
|
+
'refresh STATUS/NEXT, run the restart debate gate, and emit the verified continuation prompt. ' +
|
|
231
|
+
'This is enforced, not advisory - do not continue new work.' + sessionTagRearm,
|
|
232
|
+
}));
|
|
233
|
+
process.exit(0);
|
|
234
|
+
}
|
|
235
|
+
|
|
226
236
|
if (lastFiredTokens >= 0) {
|
|
227
237
|
// Fired once already this session. Re-arm unconditionally when tokens dropped below
|
|
228
238
|
// the fire count (a genuine context reset happened). Otherwise gate on the debate artifact.
|
|
@@ -253,8 +263,13 @@ if (lastFiredTokens >= 0) {
|
|
|
253
263
|
} catch (e) {}
|
|
254
264
|
|
|
255
265
|
if (artifactFresh) {
|
|
256
|
-
// Debate recorded. Allow the stop and
|
|
257
|
-
|
|
266
|
+
// Debate recorded. Allow the stop and record a STICKY release at this fill so the
|
|
267
|
+
// next stop at the same-or-similar fill does not re-demand the debate in a loop.
|
|
268
|
+
try {
|
|
269
|
+
fs.writeFileSync(stateFile, JSON.stringify({
|
|
270
|
+
sessionId: sessionId, tokens: used, releasedAtTokens: used,
|
|
271
|
+
}));
|
|
272
|
+
} catch (e) {}
|
|
258
273
|
// Best-effort: remove the consumed artifact so a stale one cannot release
|
|
259
274
|
// a future fire. Failure is ignored (artifact absence is also safe).
|
|
260
275
|
try { fs.unlinkSync(artifactPath); } catch (e) {}
|
|
@@ -287,7 +302,7 @@ const sessionTag = sessionId ? ' [session ' + sessionId + ']' : '';
|
|
|
287
302
|
const atHardCeiling = fill >= hardCeiling;
|
|
288
303
|
const reason = atHardCeiling
|
|
289
304
|
? '[COMPANY] Context at ' + pct + '% (>= ' + ceilPct + '% HARD CEILING). ' +
|
|
290
|
-
'
|
|
305
|
+
'This restart is always enforced and cannot be suppressed per-session. ' +
|
|
291
306
|
'Run /company restart NOW: quiesce in-flight agents, commit their work as draft PRs, ' +
|
|
292
307
|
'refresh STATUS/NEXT, run the restart debate gate, and emit the verified continuation prompt.' +
|
|
293
308
|
sessionTag
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "company-skill",
|
|
3
|
-
"version": "4.6.
|
|
3
|
+
"version": "4.6.8",
|
|
4
4
|
"description": "Goal-driven multi-employee company for Claude Code. Give it a goal, it runs until done.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"company-skill": "./bin/install.js"
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"scripts/check-contracts.js",
|
|
23
23
|
"scripts/check-findings.js",
|
|
24
24
|
"scripts/restart-debate.js",
|
|
25
|
+
"scripts/company-autoloop.js",
|
|
25
26
|
"scripts/dashboard.js",
|
|
26
27
|
"scripts/secret-scan.js",
|
|
27
28
|
"scripts/reset-company-guard.js",
|
|
@@ -35,7 +36,22 @@
|
|
|
35
36
|
"README.md",
|
|
36
37
|
"LICENSE"
|
|
37
38
|
],
|
|
38
|
-
"keywords": [
|
|
39
|
+
"keywords": [
|
|
40
|
+
"claude-code",
|
|
41
|
+
"skill",
|
|
42
|
+
"multi-agent",
|
|
43
|
+
"company",
|
|
44
|
+
"orchestration",
|
|
45
|
+
"model-agnostic",
|
|
46
|
+
"autonomous-agents",
|
|
47
|
+
"stop-hook",
|
|
48
|
+
"agent-orchestration",
|
|
49
|
+
"ai-agents",
|
|
50
|
+
"fable",
|
|
51
|
+
"claude-fable",
|
|
52
|
+
"mythos",
|
|
53
|
+
"claude-mythos"
|
|
54
|
+
],
|
|
39
55
|
"author": "jagmarques",
|
|
40
56
|
"license": "MIT",
|
|
41
57
|
"repository": {
|