@stratusagent/cli 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -7
- package/dist/index.d.ts +31 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +245 -28
- package/dist/index.js.map +1 -1
- package/package.json +21 -21
package/README.md
CHANGED
|
@@ -209,6 +209,8 @@ stratus doctor # what a run would use right now, and why
|
|
|
209
209
|
stratus agent new # create an agent (guided on a terminal)
|
|
210
210
|
stratus agent new --format soul > ava.md
|
|
211
211
|
stratus agents # who's on the team: souls, models, memory
|
|
212
|
+
stratus schedules # what the fleet has scheduled, and where it reports
|
|
213
|
+
stratus schedules cancel <id> # stop the next firing, revoke its destination
|
|
212
214
|
stratus dashboard # local browser dashboard
|
|
213
215
|
```
|
|
214
216
|
|
|
@@ -232,9 +234,13 @@ terminal to prompt on. If somebody *is* reachable, `--approvals remote` asks
|
|
|
232
234
|
them instead — see [Asking a human](#asking-a-human-remote-approval).
|
|
233
235
|
|
|
234
236
|
A tool that declares no risk counts as `gated`, never `safe` — forgetting to
|
|
235
|
-
classify something should cost a prompt, not an unattended command.
|
|
236
|
-
built-in tools (`demo.echo`, `memory.remember`, `
|
|
237
|
-
`
|
|
237
|
+
classify something should cost a prompt, not an unattended command. Most
|
|
238
|
+
built-in tools (`demo.echo`, `memory.remember`, `memory.recall`,
|
|
239
|
+
`memory.forget`, `agent.delegate`, `schedule.list`, `schedule.cancel`) are
|
|
240
|
+
`safe`; the built-in exceptions are `schedule.every`, `schedule.at`, and
|
|
241
|
+
`message.send`, which are `gated` because they act past the end of the turn —
|
|
242
|
+
see [Proactive agents](#proactive-schedules-and-outbound-messages). Anything
|
|
243
|
+
you install is where this starts to bite, which is what the
|
|
238
244
|
[Tools](#tools-what-an-agent-can-actually-do) section below is about.
|
|
239
245
|
|
|
240
246
|
A **shell** is the exception to the whole paragraph, because its risk is in
|
|
@@ -364,7 +370,8 @@ created before this shipped needs it enabled once, in its App Manifest.
|
|
|
364
370
|
|
|
365
371
|
## Tools: what an agent can actually do
|
|
366
372
|
|
|
367
|
-
Out of the box an agent can echo, remember, and
|
|
373
|
+
Out of the box an agent can echo, remember, recall and forget its own
|
|
374
|
+
memories, and delegate. Everything else —
|
|
368
375
|
files, a shell, the web, a browser — arrives as a **plugin**: one package you
|
|
369
376
|
install, list, and enable.
|
|
370
377
|
|
|
@@ -616,6 +623,77 @@ is a warning when the daemon loads the roster, never a refusal — a skill is
|
|
|
616
623
|
prose, and can degrade. `stratus run` and `stratus chat` serve the same skills
|
|
617
624
|
directory the daemon does, so a skill that routes locally routes in Slack.
|
|
618
625
|
|
|
626
|
+
## Proactive: schedules and outbound messages
|
|
627
|
+
|
|
628
|
+
Everything above answers when spoken to. Two toolsets make an always-on
|
|
629
|
+
daemon into agents that act on their own:
|
|
630
|
+
|
|
631
|
+
- **`schedule.every` / `schedule.at`** — recurring (an interval like `"30m"`
|
|
632
|
+
or a five-field cron expression, local time) or one-shot (ISO-8601), with
|
|
633
|
+
the prompt each firing runs and, optionally, the destination its reports
|
|
634
|
+
are pre-authorized to post to.
|
|
635
|
+
- **`schedule.list` / `schedule.cancel`** — an agent's own audit and undo.
|
|
636
|
+
- **`message.send`** — post to a channel or DM outside the current
|
|
637
|
+
conversation: `{ destination: { channel: "slack", to: "C0123456789" }, text }`.
|
|
638
|
+
Without it a scheduled turn works in silence.
|
|
639
|
+
|
|
640
|
+
Souls opt in like any other tool:
|
|
641
|
+
|
|
642
|
+
```markdown
|
|
643
|
+
---
|
|
644
|
+
name: Ava
|
|
645
|
+
tools:
|
|
646
|
+
- schedule.*
|
|
647
|
+
- message.send
|
|
648
|
+
---
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
**The approval belongs to the schedule, not to the firing.** Creating a
|
|
652
|
+
schedule is `gated`: a human approves "every morning, check the repo, report
|
|
653
|
+
to #eng" once — cadence, prompt, and destination together. A `message.send`
|
|
654
|
+
from that schedule's firings *to that destination* then runs unattended, in
|
|
655
|
+
headless mode included: it is the decision already made, not a new one.
|
|
656
|
+
Anywhere else — another channel, a DM, a schedule that declared no
|
|
657
|
+
destination — stays gated exactly as in an inbound turn, so under `headless`
|
|
658
|
+
it is refused and under `remote` it asks in Slack (in the configured
|
|
659
|
+
`approvals.slackChannel`, since a scheduled turn has no thread of its own).
|
|
660
|
+
Note that a plain **Allow once** on `schedule.every` therefore mints
|
|
661
|
+
something durable — the request shows the cadence, prompt, and destination,
|
|
662
|
+
because that is what is being approved.
|
|
663
|
+
|
|
664
|
+
The rest of the shape, briefly:
|
|
665
|
+
|
|
666
|
+
- **Each firing is its own session** (`schedule:<id>:<slot>`), dispatched
|
|
667
|
+
through the same path a channel message takes, marked
|
|
668
|
+
`scheduled: true` in metadata. Continuity across firings is what agent
|
|
669
|
+
memory is for.
|
|
670
|
+
- **Schedules are immutable.** Editing is cancel-plus-create, so the
|
|
671
|
+
approval's scope is exactly the row's lifetime.
|
|
672
|
+
- **A destination is validated at creation** — the agent's Slack app must be
|
|
673
|
+
able to see the conversation and be a member of it — so a schedule that
|
|
674
|
+
could never report is refused while somebody is present to hear why, not
|
|
675
|
+
at 6am. The same membership check runs on every send: no cold-DMing.
|
|
676
|
+
- **Schedules survive restarts** (they live in the daemon's own database),
|
|
677
|
+
a slot is consumed *before* its firing dispatches so a crash mid-firing
|
|
678
|
+
never double-runs it, and a missed window gets at most one late catch-up —
|
|
679
|
+
windows that passed entirely are skipped with a log line.
|
|
680
|
+
- **Two limits hold unattended spend down**: an interval floor (default one
|
|
681
|
+
minute) and a per-agent cap on concurrent scheduled turns (default one —
|
|
682
|
+
a firing that would exceed it waits for the next tick).
|
|
683
|
+
|
|
684
|
+
What the fleet has set is never only the agents' business:
|
|
685
|
+
|
|
686
|
+
```bash
|
|
687
|
+
stratus schedules # every agent's schedules, straight from the daemon's database
|
|
688
|
+
stratus schedules cancel <id> # stop the next firing; the destination grant dies with the row
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
Cancelling — from the CLI, the control API (`DELETE /schedules/:id`), or the
|
|
692
|
+
agent's own `schedule.cancel` — revokes the pre-authorized destination in the
|
|
693
|
+
same stroke, and a running daemon notices without a restart. The daemon log
|
|
694
|
+
records that a schedule was created, fired, or cancelled (ids and
|
|
695
|
+
destinations, never prompt contents beyond the row itself).
|
|
696
|
+
|
|
619
697
|
## Always on
|
|
620
698
|
|
|
621
699
|
`stratus serve` stays a foreground process on purpose — debuggable, and
|
|
@@ -699,7 +777,9 @@ conversation keeps it across daemon restarts.
|
|
|
699
777
|
The log is a **trace, not a second transcript**: it records that a tool ran and
|
|
700
778
|
that a session completed, with the tool's name, the agent, and the session id.
|
|
701
779
|
Prompts, replies, and tool inputs are not written — what was said lives in the
|
|
702
|
-
session store instead.
|
|
780
|
+
session store instead. A memory write or forget also records the **entry id**
|
|
781
|
+
it touched (never the fact itself), so "when did the agent learn this" has an
|
|
782
|
+
answer.
|
|
703
783
|
|
|
704
784
|
One exception worth knowing before you paste a log anywhere. A failed session
|
|
705
785
|
records the **provider's error text verbatim**, and providers routinely quote
|
|
@@ -784,7 +864,7 @@ provider: anthropic
|
|
|
784
864
|
model: claude-opus-5
|
|
785
865
|
tools:
|
|
786
866
|
- demo.echo
|
|
787
|
-
- memory
|
|
867
|
+
- memory.*
|
|
788
868
|
skills:
|
|
789
869
|
- code-review
|
|
790
870
|
---
|
|
@@ -792,7 +872,31 @@ skills:
|
|
|
792
872
|
You are a sharp, warm generalist. Answer first, explain second...
|
|
793
873
|
```
|
|
794
874
|
|
|
795
|
-
Agents remember: facts saved with the built-in `memory.remember` tool persist
|
|
875
|
+
Agents remember: facts saved with the built-in `memory.remember` tool persist
|
|
876
|
+
to `~/.stratus/memory.jsonl`, keyed to the agent — so the Ava you talk to
|
|
877
|
+
tomorrow remembers today, from any directory. Recall is something the agent
|
|
878
|
+
does, not only something done to it: the system prompt carries the most
|
|
879
|
+
recent facts (up to 20, within a byte budget), and everything older is
|
|
880
|
+
reachable through `memory.recall`, a full-text search over the agent's own
|
|
881
|
+
store — plain words in, matching facts out, newest first; a query like `C++`
|
|
882
|
+
or an unmatched quote is a search, never an error. `memory.forget` retires a
|
|
883
|
+
fact by id: it stops reaching prompts and recall, but stays in the file as a
|
|
884
|
+
tombstone line, so you can still see what an agent chose to drop. A single
|
|
885
|
+
fact is capped at 4 KiB — an oversized `memory.remember` is refused outright
|
|
886
|
+
rather than stored truncated.
|
|
887
|
+
|
|
888
|
+
One thing to check on souls written before recall existed: a `tools:`
|
|
889
|
+
allowlist naming exactly `memory.remember` lets the agent keep saving facts
|
|
890
|
+
but not search them, and with the prompt now carrying only the recent slice,
|
|
891
|
+
its older memories are out of reach. Add `memory.recall` and `memory.forget`
|
|
892
|
+
— or just `memory.*`, as the example above does. A soul with no `tools:`
|
|
893
|
+
list is unaffected; omitted means every registered tool.
|
|
894
|
+
|
|
895
|
+
The JSONL is the record and you may edit it: add a line by hand and it is
|
|
896
|
+
recallable; fix a typo and nothing goes stale. Search is served from a
|
|
897
|
+
derived FTS index the CLI writes alongside, `~/.stratus/memory.jsonl.index`
|
|
898
|
+
— safe to delete at any time, it is rebuilt from the JSONL on the next
|
|
899
|
+
recall.
|
|
796
900
|
|
|
797
901
|
**Ids are not labels.** Frontmatter may set `id:` explicitly, and it keys the
|
|
798
902
|
agent's sessions, memory, credentials, Slack tokens, and every per-agent path
|
package/dist/index.d.ts
CHANGED
|
@@ -135,6 +135,13 @@ export interface ParsedAgentsCommand {
|
|
|
135
135
|
/** Bearer token override, for a gateway whose token file is not local. */
|
|
136
136
|
token?: string;
|
|
137
137
|
}
|
|
138
|
+
export interface ParsedSchedulesCommand {
|
|
139
|
+
command: 'schedules';
|
|
140
|
+
action: 'list' | 'cancel';
|
|
141
|
+
/** cancel only: which schedule. */
|
|
142
|
+
scheduleId?: string;
|
|
143
|
+
format: 'text' | 'json';
|
|
144
|
+
}
|
|
138
145
|
export interface ParsedDoctorCommand {
|
|
139
146
|
command: 'doctor';
|
|
140
147
|
format: 'text' | 'json';
|
|
@@ -179,7 +186,7 @@ export interface ParsedServeCommand {
|
|
|
179
186
|
export interface ParsedHelpCommand {
|
|
180
187
|
command: 'help';
|
|
181
188
|
}
|
|
182
|
-
export type ParsedCommand = ParsedRunCommand | ParsedChatCommand | ParsedDashboardCommand | ParsedSetupCommand | ParsedAgentNewCommand | ParsedAgentsCommand | ParsedSkillAddCommand | ParsedSkillsCommand | ParsedDoctorCommand | ParsedLogsCommand | ParsedServiceCommand | ParsedServeCommand | ParsedHelpCommand;
|
|
189
|
+
export type ParsedCommand = ParsedRunCommand | ParsedChatCommand | ParsedDashboardCommand | ParsedSetupCommand | ParsedAgentNewCommand | ParsedAgentsCommand | ParsedSkillAddCommand | ParsedSkillsCommand | ParsedSchedulesCommand | ParsedDoctorCommand | ParsedLogsCommand | ParsedServiceCommand | ParsedServeCommand | ParsedHelpCommand;
|
|
183
190
|
export declare const CLI_VERSION = "0.7.0";
|
|
184
191
|
/**
|
|
185
192
|
* The range every package declares in its `engines` field. Two floors, not
|
|
@@ -202,10 +209,24 @@ export declare const SUPPORTED_NODE_RANGE = ">=22.13 <23 || >=23.4";
|
|
|
202
209
|
* string is a bad reason to refuse to run.
|
|
203
210
|
*/
|
|
204
211
|
export declare const unsupportedNodeMessage: (version: string) => string | undefined;
|
|
205
|
-
declare const HELP_TEXT = "Stratus Agent CLI\n\nUsage:\n stratus setup\n stratus chat\n stratus chat --soul ./examples/souls/ava.md\n stratus run --prompt \"Use the demo tool\"\n stratus run \"Say hello\"\n ANTHROPIC_API_KEY=... stratus run --provider anthropic \"Say hello\"\n stratus run --soul ./examples/souls/ava.md \"Say hello\"\n echo \"Use the echo tool\" | stratus run --stdin\n STRATUS_PROVIDER=openai OPENAI_API_KEY=... stratus run \"Say hello\"\n stratus run --config ./stratus.config.json --provider openai \"Say hello\"\n stratus agents\n stratus agents --gateway http://127.0.0.1:4123\n stratus skill add stratuslabs/skill-code-review\n stratus skill add ./my-skills --skill code-review --agent ava\n stratus skills\n stratus doctor\n stratus service install\n stratus service status\n stratus logs -f\n stratus logs --agent ava -n 200\n stratus dashboard\n stratus dashboard --port 4123 --host 0.0.0.0 --no-open\n\nCommands:\n setup Menu-driven onboarding: pick a provider, sign in (Claude\n subscription or API key), create your agent, connect it to\n Slack, and test it \u2014 settings go to ~/.stratus/config.json,\n sign-ins and channel tokens to ~/.stratus/credentials.json\n (0600). Save & finish offers to install any optional\n package your answers imply (the Slack channel, the control\n API and dashboard) before it starts the daemon\n chat Talk with your agent \u2014 the conversation persists across turns\n and remembered facts accumulate; /exit or Ctrl+C to leave\n run Execute one local Stratus Agent session\n serve Run stratusd, the always-on gateway: durable sessions, the\n whole roster live at once (each agent on its own provider),\n delegation, and a watchdog \u2014 Ctrl+C / SIGTERM drains cleanly\n (--idle-timeout <seconds>, --approvals <headless|remote>,\n --no-events, --no-log-file, --config <path>); everything it\n says is also written to ~/.stratus/logs, which\n \"stratus logs\" reads. With @stratusagent/control-api\n installed it also serves the HTTP + WebSocket control API\n on 127.0.0.1:4123 (--no-api, --api-host, --api-port, or\n the config file's \"api\" block)\n service Keep stratusd running under launchd (macOS) or systemd\n (Linux): install, uninstall, status, start, stop.\n Installing starts it now and at every login\n (--no-login installs without the login trigger,\n --config <path> pins the daemon to one config file)\n logs Read the daemon's log from any terminal: -f to follow,\n -n <count> for backlog, --agent / --session to filter,\n --format json for the raw records\n skill add Install skills from a GitHub repo (owner/repo or URL) or a\n local path into ~/.stratus/skills \u2014 whole directories, one\n per skill; works with skills published for other agents\n (skills.sh-style repos). Installed is not enabled: a soul\n opts in via skills:, or pass --agent <id> to enable now.\n --skill <id> picks from a multi-skill repo (repeatable),\n --force replaces an already-installed id\n skills List installed skills and which agents enable each\n (also: stratus skill list)\n agent new Create an agent identity (generates a human-ish name + avatar theme)\n agents List your agents: who they are, where their souls live, what\n they run on, what they remember (also: stratus agent list).\n --gateway <url> asks a running daemon instead of resolving\n locally, authenticating with ~/.stratus/gateway-token\n (override with --token or STRATUS_GATEWAY_TOKEN)\n doctor Show what a run would use right now \u2014 provider, model, soul \u2014\n and which file or environment variable decided each, then\n flag anything that would surprise you (--format json)\n dashboard Open the web dashboard: finds a running daemon (or starts one),\n mints a single-use sign-in link, and opens your browser at it.\n Needs @stratusagent/control-api and @stratusagent/dashboard\n help Show this help message\n\nAgent options:\n --name Agent name (omit to have one generated)\n --instructions The agent's persona/instructions\n --format Output format for agent new: text, json, or soul (a ready-to-edit soul file)\n\nOptions:\n --prompt, -p Prompt to send to the local agent loop\n --stdin Read the prompt from stdin\n --provider Provider to use: anthropic, openai, or demo\n --model Model name for real providers (anthropic default: claude-opus-5, openai default: gpt-4.1-mini)\n --base-url Override the provider API base URL\n --soul Run as the agent defined by a soul file (markdown + frontmatter, see examples/souls)\n --config Config file path (run: load settings from it, setup: write it)\n --format Output format: text or json (default: text)\n --no-events Hide event-by-event progress lines in text mode\n --approvals run/chat: tool approval mode \u2014 always, ask, or never (default: always)\n serve: how the daemon reaches a human \u2014 headless (refuse every\n gated call) or remote (ask in Slack). Default headless, or\n the config file's \"approvals.mode\"\n --max-turns Maximum provider turns per run (default: 8)\n --port dashboard: port for a daemon it starts (default: 4123)\n --host dashboard: host for a daemon it starts (default: 127.0.0.1)\n --no-open Do not open the browser automatically\n --gateway agents: read the roster from a running daemon's control API\n --token Bearer token for --gateway (default: ~/.stratus/gateway-token)\n --no-api serve: do not serve the control API\n --api-host serve: control API interface (default: 127.0.0.1)\n --api-port serve: control API port (default: 4123, 0 for any free port)\n --help, -h Show this help message\n\nConfig file:\n The CLI looks for ./stratus.config.json first, then a path from --config / STRATUS_CONFIG,\n then the global ~/.stratus/config.json written by `stratus setup`.\n A \"soul\" key (or STRATUS_SOUL) points at a soul file so every run uses that agent.\n\nPlugins (tools):\n Capability is optional: install a package, then list it under \"plugins\" in a\n TRUSTED config (--config, STRATUS_CONFIG, or ~/.stratus/config.json), keyed by\n package name. A plugin runs inside this process, so an auto-discovered\n project-local stratus.config.json may not enable one.\n\n \"plugins\": {\n \"@stratusagent/tool-fs\": { \"enabled\": true, \"roots\": [\"~/notes\"],\n \"agents\": { \"ava\": { \"roots\": [\"~/work/ava\"] } } },\n \"@stratusagent/tool-web\": { \"enabled\": true }\n }\n\n Available: @stratusagent/tool-fs (fs.read/list/search/write),\n @stratusagent/tool-shell (shell.run), @stratusagent/tool-web (web.fetch),\n @stratusagent/tool-browser (browser.goto/read/screenshot/act).\n Installing one grants no agent anything \u2014 each soul lists what it may call.\n\nSoul files:\n A soul file is markdown with frontmatter (name, provider, model, tools, skills, credentials)\n followed by the agent's persona in prose. See examples/souls/ava.md.\n \"tools\" takes exact names or a whole toolset: tools: [fs.read, fs.search] or\n tools: [fs.*]. Omitted means every registered tool.\n \"skills\" is the same allowlist shape over installed skills (see stratus\n skills), except omitted means none \u2014 a skill is enabled per agent, never\n by being installed.\n";
|
|
212
|
+
declare const HELP_TEXT = "Stratus Agent CLI\n\nUsage:\n stratus setup\n stratus chat\n stratus chat --soul ./examples/souls/ava.md\n stratus run --prompt \"Use the demo tool\"\n stratus run \"Say hello\"\n ANTHROPIC_API_KEY=... stratus run --provider anthropic \"Say hello\"\n stratus run --soul ./examples/souls/ava.md \"Say hello\"\n echo \"Use the echo tool\" | stratus run --stdin\n STRATUS_PROVIDER=openai OPENAI_API_KEY=... stratus run \"Say hello\"\n stratus run --config ./stratus.config.json --provider openai \"Say hello\"\n stratus agents\n stratus agents --gateway http://127.0.0.1:4123\n stratus skill add stratuslabs/skill-code-review\n stratus skill add ./my-skills --skill code-review --agent ava\n stratus skills\n stratus schedules\n stratus schedules cancel <id>\n stratus doctor\n stratus service install\n stratus service status\n stratus logs -f\n stratus logs --agent ava -n 200\n stratus dashboard\n stratus dashboard --port 4123 --host 0.0.0.0 --no-open\n\nCommands:\n setup Menu-driven onboarding: pick a provider, sign in (Claude\n subscription or API key), create your agent, connect it to\n Slack, and test it \u2014 settings go to ~/.stratus/config.json,\n sign-ins and channel tokens to ~/.stratus/credentials.json\n (0600). Save & finish offers to install any optional\n package your answers imply (the Slack channel, the control\n API and dashboard) before it starts the daemon\n chat Talk with your agent \u2014 the conversation persists across turns\n and remembered facts accumulate; /exit or Ctrl+C to leave\n run Execute one local Stratus Agent session\n serve Run stratusd, the always-on gateway: durable sessions, the\n whole roster live at once (each agent on its own provider),\n delegation, and a watchdog \u2014 Ctrl+C / SIGTERM drains cleanly\n (--idle-timeout <seconds>, --approvals <headless|remote>,\n --no-events, --no-log-file, --config <path>); everything it\n says is also written to ~/.stratus/logs, which\n \"stratus logs\" reads. With @stratusagent/control-api\n installed it also serves the HTTP + WebSocket control API\n on 127.0.0.1:4123 (--no-api, --api-host, --api-port, or\n the config file's \"api\" block)\n service Keep stratusd running under launchd (macOS) or systemd\n (Linux): install, uninstall, status, start, stop.\n Installing starts it now and at every login\n (--no-login installs without the login trigger,\n --config <path> pins the daemon to one config file)\n logs Read the daemon's log from any terminal: -f to follow,\n -n <count> for backlog, --agent / --session to filter,\n --format json for the raw records\n skill add Install skills from a GitHub repo (owner/repo or URL) or a\n local path into ~/.stratus/skills \u2014 whole directories, one\n per skill; works with skills published for other agents\n (skills.sh-style repos). Installed is not enabled: a soul\n opts in via skills:, or pass --agent <id> to enable now.\n --skill <id> picks from a multi-skill repo (repeatable),\n --force replaces an already-installed id\n skills List installed skills and which agents enable each\n (also: stratus skill list)\n schedules List every schedule the fleet has set \u2014 cadence, prompt,\n pre-authorized destination, next firing \u2014 straight from the\n daemon's database (--format json). \"stratus schedules\n cancel <id>\" stops the next firing and revokes the\n destination that was approved with it\n (also: stratus schedule list / schedule cancel <id>)\n agent new Create an agent identity (generates a human-ish name + avatar theme)\n agents List your agents: who they are, where their souls live, what\n they run on, what they remember (also: stratus agent list).\n --gateway <url> asks a running daemon instead of resolving\n locally, authenticating with ~/.stratus/gateway-token\n (override with --token or STRATUS_GATEWAY_TOKEN)\n doctor Show what a run would use right now \u2014 provider, model, soul \u2014\n and which file or environment variable decided each, then\n flag anything that would surprise you (--format json)\n dashboard Open the web dashboard: finds a running daemon (or starts one),\n mints a single-use sign-in link, and opens your browser at it.\n Needs @stratusagent/control-api and @stratusagent/dashboard\n help Show this help message\n\nAgent options:\n --name Agent name (omit to have one generated)\n --instructions The agent's persona/instructions\n --format Output format for agent new: text, json, or soul (a ready-to-edit soul file)\n\nOptions:\n --prompt, -p Prompt to send to the local agent loop\n --stdin Read the prompt from stdin\n --provider Provider to use: anthropic, openai, or demo\n --model Model name for real providers (anthropic default: claude-opus-5, openai default: gpt-4.1-mini)\n --base-url Override the provider API base URL\n --soul Run as the agent defined by a soul file (markdown + frontmatter, see examples/souls)\n --config Config file path (run: load settings from it, setup: write it)\n --format Output format: text or json (default: text)\n --no-events Hide event-by-event progress lines in text mode\n --approvals run/chat: tool approval mode \u2014 always, ask, or never (default: always)\n serve: how the daemon reaches a human \u2014 headless (refuse every\n gated call) or remote (ask in Slack). Default headless, or\n the config file's \"approvals.mode\"\n --max-turns Maximum provider turns per run (default: 8)\n --port dashboard: port for a daemon it starts (default: 4123)\n --host dashboard: host for a daemon it starts (default: 127.0.0.1)\n --no-open Do not open the browser automatically\n --gateway agents: read the roster from a running daemon's control API\n --token Bearer token for --gateway (default: ~/.stratus/gateway-token)\n --no-api serve: do not serve the control API\n --api-host serve: control API interface (default: 127.0.0.1)\n --api-port serve: control API port (default: 4123, 0 for any free port)\n --help, -h Show this help message\n\nConfig file:\n The CLI looks for ./stratus.config.json first, then a path from --config / STRATUS_CONFIG,\n then the global ~/.stratus/config.json written by `stratus setup`.\n A \"soul\" key (or STRATUS_SOUL) points at a soul file so every run uses that agent.\n\nPlugins (tools):\n Capability is optional: install a package, then list it under \"plugins\" in a\n TRUSTED config (--config, STRATUS_CONFIG, or ~/.stratus/config.json), keyed by\n package name. A plugin runs inside this process, so an auto-discovered\n project-local stratus.config.json may not enable one.\n\n \"plugins\": {\n \"@stratusagent/tool-fs\": { \"enabled\": true, \"roots\": [\"~/notes\"],\n \"agents\": { \"ava\": { \"roots\": [\"~/work/ava\"] } } },\n \"@stratusagent/tool-web\": { \"enabled\": true }\n }\n\n Available: @stratusagent/tool-fs (fs.read/list/search/write),\n @stratusagent/tool-shell (shell.run), @stratusagent/tool-web (web.fetch),\n @stratusagent/tool-browser (browser.goto/read/screenshot/act).\n Installing one grants no agent anything \u2014 each soul lists what it may call.\n\nSoul files:\n A soul file is markdown with frontmatter (name, provider, model, tools, skills, credentials)\n followed by the agent's persona in prose. See examples/souls/ava.md.\n \"tools\" takes exact names or a whole toolset: tools: [fs.read, fs.search] or\n tools: [fs.*]. Omitted means every registered tool.\n \"skills\" is the same allowlist shape over installed skills (see stratus\n skills), except omitted means none \u2014 a skill is enabled per agent, never\n by being installed.\n";
|
|
206
213
|
declare const stringifyValue: (value: JsonValue) => string;
|
|
207
214
|
export declare const parseCommand: (argv: string[], env?: CliEnvironment) => ParsedCommand;
|
|
208
215
|
export declare const formatEvent: (event: StratusEvent) => string | null;
|
|
216
|
+
/**
|
|
217
|
+
* The fields worth keeping per event type. Tool inputs and message text
|
|
218
|
+
* are deliberately excluded: the log is a trace of what happened, not a
|
|
219
|
+
* second copy of the transcript.
|
|
220
|
+
*
|
|
221
|
+
* The approval pair is the one place the trace carries a person's id, and
|
|
222
|
+
* it earns it: `always` widens what an agent may do unattended for the rest
|
|
223
|
+
* of the session, and "who decided that" is unanswerable afterwards from
|
|
224
|
+
* anything else. The refusal path is warned about by `onDecision`, but an
|
|
225
|
+
* *approval* produces no warning at all — without these two records a
|
|
226
|
+
* granted permission leaves no trace whatsoever. Still no tool input: what
|
|
227
|
+
* was asked is here, what it was asked with is not.
|
|
228
|
+
*/
|
|
229
|
+
export declare const eventDetail: (event: StratusEvent) => Record<string, unknown> | undefined;
|
|
209
230
|
/**
|
|
210
231
|
* Kept with its historical CLI signature: a parsed run command is a
|
|
211
232
|
* RuntimeSelection plus CLI-only fields the resolver ignores.
|
|
@@ -286,6 +307,14 @@ export declare const runLogs: (command: ParsedLogsCommand, streams: CliStreams,
|
|
|
286
307
|
*/
|
|
287
308
|
export declare const runService: (command: ParsedServiceCommand, streams: CliStreams, env?: CliEnvironment) => Promise<number>;
|
|
288
309
|
export declare const runSkillAdd: (command: ParsedSkillAddCommand, streams: CliStreams, env?: CliEnvironment) => Promise<number>;
|
|
310
|
+
/**
|
|
311
|
+
* List and cancel what the fleet has scheduled — against the daemon's own
|
|
312
|
+
* database, the way `stratus logs` reads the daemon's own log. WAL makes a
|
|
313
|
+
* second process on the file routine; a running daemon re-reads due rows
|
|
314
|
+
* every tick and the destination grant on every send, so a cancel from
|
|
315
|
+
* here takes effect without asking it anything.
|
|
316
|
+
*/
|
|
317
|
+
export declare const runSchedules: (command: ParsedSchedulesCommand, streams: CliStreams, env?: CliEnvironment) => Promise<number>;
|
|
289
318
|
export declare const runSkills: (streams: CliStreams, env?: CliEnvironment) => Promise<number>;
|
|
290
319
|
export declare const runAgentNew: (command: ParsedAgentNewCommand, streams: CliStreams, env?: CliEnvironment) => Promise<number>;
|
|
291
320
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAaL,KAAK,SAAS,EAGd,KAAK,OAAO,EACZ,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|