@interactive-inc/claude-funnel 0.15.2 → 0.16.1
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 +34 -21
- package/dist/bin.js +572 -556
- package/dist/gateway/daemon.js +228 -215
- package/dist/index.d.ts +47 -12
- package/dist/index.js +54 -38
- package/funnel.schema.json +132 -104
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -96,29 +96,38 @@ Or drop a `funnel.json` in the repo and `fnl claude` (no args) inside the repo w
|
|
|
96
96
|
```json
|
|
97
97
|
{
|
|
98
98
|
"$schema": "./node_modules/@interactive-inc/claude-funnel/funnel.schema.json",
|
|
99
|
-
"
|
|
100
|
-
"options": ["--brief", "--agent", "cto"],
|
|
99
|
+
"options": ["--brief"],
|
|
101
100
|
"env": {
|
|
102
101
|
"ANTHROPIC_MODEL": "claude-sonnet-4-6"
|
|
103
102
|
},
|
|
104
|
-
"
|
|
103
|
+
"channels": [
|
|
105
104
|
{
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
105
|
+
"name": "ops",
|
|
106
|
+
"options": ["--agent", "pm"],
|
|
107
|
+
"connectors": [
|
|
108
|
+
{
|
|
109
|
+
"type": "slack",
|
|
110
|
+
"name": "my-slack",
|
|
111
|
+
"env": {
|
|
112
|
+
"botToken": "SLACK_BOT_TOKEN",
|
|
113
|
+
"appToken": "SLACK_APP_TOKEN"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "review",
|
|
120
|
+
"options": ["--agent", "reviewer"]
|
|
112
121
|
}
|
|
113
122
|
]
|
|
114
123
|
}
|
|
115
124
|
```
|
|
116
125
|
|
|
117
|
-
|
|
126
|
+
`channels[]` is required and the first entry is the default. `fnl claude --channel review` picks one by name; `fnl claude` with no `--channel` uses the first.
|
|
118
127
|
|
|
119
|
-
The optional `options` array is prepended to
|
|
128
|
+
The optional top-level `options` array is shared by every channel and prepended to each channel's own `options` (and both appear before user-supplied CLI args, which still come last). Use it for flags that should apply repo-wide (e.g. `--brief`). Per-channel `options` add channel-specific flags (e.g. a different `--agent`).
|
|
120
129
|
|
|
121
|
-
The optional top-level `env` is a `Record<string, string>` of environment variables
|
|
130
|
+
The optional top-level `env` is a `Record<string, string>` of environment variables shared by every channel; each channel's own `env` shallow-merges on top. `process.env` from the launching shell wins overall, so funnel.json sets defaults that the user can still override one-off via the shell.
|
|
122
131
|
|
|
123
132
|
The optional `connectors` array is treated as the source of truth for the declared channel: missing connectors are created, an existing connector that the spec references by token (not by name) is renamed in place, and connectors not declared in the spec are removed on launch. An absent `connectors` field leaves `~/.funnel` alone.
|
|
124
133
|
|
|
@@ -188,9 +197,9 @@ fnl profiles <name> as-default move to the front of the list
|
|
|
188
197
|
fnl profiles rename <old> <new>
|
|
189
198
|
fnl profiles remove <name>
|
|
190
199
|
|
|
191
|
-
fnl claude launch
|
|
192
|
-
fnl claude --
|
|
193
|
-
fnl claude --
|
|
200
|
+
fnl claude launch the first channel from ./funnel.json, or the default profile
|
|
201
|
+
fnl claude --channel <name> with funnel.json: pick that channel; without: raw launch
|
|
202
|
+
fnl claude --profile <name> launch a named profile (ignores funnel.json)
|
|
194
203
|
fnl claude [...] positionals and any flag other than -p / --profile / --channel
|
|
195
204
|
(e.g. --agent, --resume, -c, --model) pass through to claude
|
|
196
205
|
fnl mcp run as an MCP server (invoked from .mcp.json)
|
|
@@ -250,12 +259,16 @@ Connector =
|
|
|
250
259
|
Profile = { name, path, subAgent, channelId }
|
|
251
260
|
named launch preset; the first profile in the list is the default
|
|
252
261
|
|
|
253
|
-
LocalConfig = {
|
|
254
|
-
per-repo file (funnel.json)
|
|
255
|
-
options
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
262
|
+
LocalConfig = { options?, env?, channels: ChannelSpec[] }
|
|
263
|
+
per-repo file (funnel.json). channels[] required; first entry is default, --channel selects.
|
|
264
|
+
Top-level options/env are shared defaults merged into each channel.
|
|
265
|
+
|
|
266
|
+
ChannelSpec = { name, options?, env?, connectors? }
|
|
267
|
+
options[] is appended to the shared options (user CLI args still come last); env shallow-merges
|
|
268
|
+
on top of the shared env (process.env wins overall); connectors[] declares connectors to
|
|
269
|
+
materialize on launch (each token field accepts a literal, an env-var reference at
|
|
270
|
+
`env.<field>` resolved from process.env and ./.env.local, or omission for a TTY prompt
|
|
271
|
+
persisted to ~/.funnel)
|
|
259
272
|
|
|
260
273
|
Settings = { channels[], profiles[] } → ~/.funnel/settings.json
|
|
261
274
|
```
|