fastbrowser_cli 1.0.21 → 1.0.25
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 +55 -10
- package/dist/fastbrowser_cli/fastbrowser_cli.js +42 -72
- package/dist/fastbrowser_cli/fastbrowser_cli.js.map +1 -1
- package/dist/fastbrowser_cli/libs/query-builder.d.ts +17 -0
- package/dist/fastbrowser_cli/libs/query-builder.d.ts.map +1 -0
- package/dist/fastbrowser_cli/libs/query-builder.js +58 -0
- package/dist/fastbrowser_cli/libs/query-builder.js.map +1 -0
- package/dist/fastbrowser_cli/libs/server-manager.d.ts +8 -3
- package/dist/fastbrowser_cli/libs/server-manager.d.ts.map +1 -1
- package/dist/fastbrowser_cli/libs/server-manager.js +30 -15
- package/dist/fastbrowser_cli/libs/server-manager.js.map +1 -1
- package/dist/fastbrowser_httpd/fastbrowser_httpd.js +9 -6
- package/dist/fastbrowser_httpd/fastbrowser_httpd.js.map +1 -1
- package/dist/fastbrowser_httpd/libs/routes.d.ts +2 -1
- package/dist/fastbrowser_httpd/libs/routes.d.ts.map +1 -1
- package/dist/fastbrowser_httpd/libs/routes.js +2 -2
- package/dist/fastbrowser_httpd/libs/routes.js.map +1 -1
- package/dist/fastbrowser_mcp/fastbrowser_mcp.js +3 -0
- package/dist/fastbrowser_mcp/fastbrowser_mcp.js.map +1 -1
- package/docs/articles/ai_workflow_to_shell_scripts.md +74 -16
- package/docs/articles/ai_workflow_to_shell_scripts.notes.md +23 -0
- package/docs/articles/ai_workflow_to_shell_scripts.outline.md +64 -0
- package/docs/publishing_workflow.md +136 -0
- package/examples/post-to-x.sh +4 -1
- package/examples/welcometothejungle/fastbrowser_helper.ts +39 -0
- package/examples/welcometothejungle/wttj-job.ts +132 -153
- package/examples/welcometothejungle/wttj-search.ts +61 -84
- package/package.json +48 -47
- package/src/fastbrowser_cli/fastbrowser_cli.ts +52 -92
- package/src/fastbrowser_cli/libs/query-builder.ts +89 -0
- package/src/fastbrowser_cli/libs/server-manager.ts +45 -17
- package/src/fastbrowser_httpd/fastbrowser_httpd.ts +14 -6
- package/src/fastbrowser_httpd/libs/routes.ts +3 -2
- package/src/fastbrowser_mcp/fastbrowser_mcp.ts +6 -0
- package/tests/http-client.test.ts +63 -0
- package/tests/query-builder.test.ts +204 -0
- package/tests/server-manager.test.ts +124 -0
- package/.playwright-mcp/.gitignore +0 -3
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// node imports
|
|
3
3
|
import Path from 'node:path';
|
|
4
4
|
// npm imports
|
|
5
|
-
import { Command } from 'commander';
|
|
5
|
+
import { Command, Option } from 'commander';
|
|
6
6
|
import express from 'express';
|
|
7
7
|
// local imports
|
|
8
8
|
import { McpMyClient } from '../fastbrowser_mcp/libs/mcp_my_client.js';
|
|
@@ -13,11 +13,11 @@ import { Routes } from './libs/routes.js';
|
|
|
13
13
|
///////////////////////////////////////////////////////////////////////////////
|
|
14
14
|
///////////////////////////////////////////////////////////////////////////////
|
|
15
15
|
class MainHelper {
|
|
16
|
-
static async commandStart({ port, verbose = false, }) {
|
|
16
|
+
static async commandStart({ port, mcpTarget, verbose = false, }) {
|
|
17
17
|
// Spawn fastbrowser-mcp as a subprocess and hold a persistent MCP client to it.
|
|
18
18
|
const fastbrowserMcpEntry = Path.resolve(import.meta.dirname, '..', 'fastbrowser_mcp', 'fastbrowser_mcp.js');
|
|
19
19
|
let mcpServerCommand = process.execPath;
|
|
20
|
-
let mcpServerArgs = [fastbrowserMcpEntry, 'mcp_server'];
|
|
20
|
+
let mcpServerArgs = [fastbrowserMcpEntry, 'mcp_server', '--mcp_target', mcpTarget];
|
|
21
21
|
// trick to work without being in `./dist'
|
|
22
22
|
if (fastbrowserMcpEntry.includes('/dist/') === false) {
|
|
23
23
|
mcpServerCommand = '/usr/local/bin/npx';
|
|
@@ -27,7 +27,7 @@ class MainHelper {
|
|
|
27
27
|
const mcpClient = new McpMyClient({
|
|
28
28
|
name: 'fastbrowser-httpd',
|
|
29
29
|
version: '1.0.0',
|
|
30
|
-
mcpTarget
|
|
30
|
+
mcpTarget,
|
|
31
31
|
transport: {
|
|
32
32
|
type: 'stdio',
|
|
33
33
|
command: mcpServerCommand,
|
|
@@ -46,7 +46,7 @@ class MainHelper {
|
|
|
46
46
|
}
|
|
47
47
|
const app = express();
|
|
48
48
|
app.use(express.json({ limit: '2mb' }));
|
|
49
|
-
Routes.register(app, mcpClient);
|
|
49
|
+
Routes.register(app, mcpClient, mcpTarget);
|
|
50
50
|
const server = app.listen(port, () => {
|
|
51
51
|
console.error(`fastbrowser-httpd listening on http://localhost:${port}`);
|
|
52
52
|
});
|
|
@@ -72,13 +72,16 @@ async function main() {
|
|
|
72
72
|
.description('Persistent HTTP server fronting fastbrowser-mcp')
|
|
73
73
|
.option('-p, --port <number>', 'Port to listen on', '8787')
|
|
74
74
|
.option('-v, --verbose', 'Enable verbose logging')
|
|
75
|
+
.addOption(new Option('--mcp-target <target>', 'browser backend (default: $FASTBROWSER_MCP_TARGET or playwright)')
|
|
76
|
+
.choices(['chrome_devtools', 'playwright'])
|
|
77
|
+
.default(process.env.FASTBROWSER_MCP_TARGET ?? 'playwright'))
|
|
75
78
|
.action(async (opts) => {
|
|
76
79
|
const port = Number.parseInt(opts.port, 10);
|
|
77
80
|
if (Number.isNaN(port) === true) {
|
|
78
81
|
console.error(`Invalid --port: ${opts.port}`);
|
|
79
82
|
process.exit(1);
|
|
80
83
|
}
|
|
81
|
-
await MainHelper.commandStart({ port, verbose: opts.verbose });
|
|
84
|
+
await MainHelper.commandStart({ port, mcpTarget: opts.mcpTarget, verbose: opts.verbose });
|
|
82
85
|
});
|
|
83
86
|
await program.parseAsync(process.argv);
|
|
84
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastbrowser_httpd.js","sourceRoot":"","sources":["../../src/fastbrowser_httpd/fastbrowser_httpd.ts"],"names":[],"mappings":";AAEA,eAAe;AACf,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,cAAc;AACd,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"fastbrowser_httpd.js","sourceRoot":"","sources":["../../src/fastbrowser_httpd/fastbrowser_httpd.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Express } from 'express';
|
|
2
2
|
import { McpMyClient } from '../../fastbrowser_mcp/libs/mcp_my_client.js';
|
|
3
|
+
import type { FastBrowserMcpTarget } from '../../fastbrowser_mcp/fastbrowser_types.js';
|
|
3
4
|
export declare class Routes {
|
|
4
|
-
static register(app: Express, mcpClient: McpMyClient): void;
|
|
5
|
+
static register(app: Express, mcpClient: McpMyClient, mcpTarget: FastBrowserMcpTarget): void;
|
|
5
6
|
}
|
|
6
7
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/fastbrowser_httpd/libs/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/fastbrowser_httpd/libs/routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AASvF,qBAAa,MAAM;IAClB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,GAAG,IAAI;CA6B5F"}
|
|
@@ -5,9 +5,9 @@ import { TOOL_SCHEMAS, ToolResponseSchema } from './tool-schemas.js';
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
///////////////////////////////////////////////////////////////////////////////
|
|
7
7
|
export class Routes {
|
|
8
|
-
static register(app, mcpClient) {
|
|
8
|
+
static register(app, mcpClient, mcpTarget) {
|
|
9
9
|
app.get('/health', (_req, res) => {
|
|
10
|
-
res.json({ ok: true });
|
|
10
|
+
res.json({ ok: true, mcpTarget });
|
|
11
11
|
});
|
|
12
12
|
for (const entry of TOOL_SCHEMAS) {
|
|
13
13
|
const path = `/tools/${entry.routeName}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/fastbrowser_httpd/libs/routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/fastbrowser_httpd/libs/routes.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAErE,+EAA+E;AAC/E,+EAA+E;AAC/E,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAE/E,MAAM,OAAO,MAAM;IAClB,MAAM,CAAC,QAAQ,CAAC,GAAY,EAAE,SAAsB,EAAE,SAA+B;QACpF,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;YACnD,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,UAAU,KAAK,CAAC,SAAS,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAgB,EAAE,QAAkB,EAAE,EAAE;gBAC7D,8CAA8C;gBAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACjE,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;oBAC9B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC7D,OAAO;gBACR,CAAC;gBAED,IAAI,CAAC;oBACJ,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,IAA+B,CAAC,CAAC;oBACtG,uDAAuD;oBACvD,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC;wBAC7C,OAAO,EAAE,SAAS,CAAC,OAAO;qBAC1B,CAAC,CAAC;oBACH,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC7B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;CACD"}
|
|
@@ -23,6 +23,9 @@ class MainHelper {
|
|
|
23
23
|
static async _getA11yText(mcpClient) {
|
|
24
24
|
const mcpTarget = await mcpClient.getMcpTarget();
|
|
25
25
|
const toolConfig = await McpTargetHelper.targetToolTakeSnapshot(mcpTarget);
|
|
26
|
+
// FIXME: the first take_snapshot call after connecting to the MCP target often returns an empty snapshot for unknown reasons
|
|
27
|
+
// — working around this by calling it once and discarding the result before calling it again to get the actual snapshot text
|
|
28
|
+
await mcpClient.callTool(toolConfig.toolName, toolConfig.toolArgs);
|
|
26
29
|
const callToolResult = await mcpClient.callTool(toolConfig.toolName, toolConfig.toolArgs);
|
|
27
30
|
const snapshotText = await ResponseFormatter.formatTakeSnapshot(mcpTarget, callToolResult);
|
|
28
31
|
// sanity check
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastbrowser_mcp.js","sourceRoot":"","sources":["../../src/fastbrowser_mcp/fastbrowser_mcp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fastbrowser_mcp.js","sourceRoot":"","sources":["../../src/fastbrowser_mcp/fastbrowser_mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,79 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Use the Agent Once, Run the Script Forever
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
This document explains how to use SKILL.md files to create shell scripts from AI-assisted workflows.
|
|
3
|
+
Every time you let an AI agent solve the same problem twice, you're paying twice. There's a better pattern: use the agent to write the recipe, then throw the agent away.
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
- SKILL.md files contain knowledge — that's why they're called *skills*.
|
|
8
|
-
- To interact with the outside world, a skill launches shell commands from the command line.
|
|
5
|
+
This post is about a small workflow built on SKILL.md files that turns one-off agent runs into reusable shell scripts. The script is the artifact. The agent is just how you got there.
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
- You collaborate with an AI agent that uses a skill, which in turn runs a sequence of shell commands to accomplish a task.
|
|
12
|
-
- Once the workflow is proven, you ask the agent to extract those commands into a standalone shell script — a *recipe* that reproduces the same workflow without an agent in the loop.
|
|
7
|
+
## What's a SKILL.md?
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
- **First run (with AI):** expensive and relatively slow, since every step goes through the agent.
|
|
16
|
-
- **Subsequent runs (script only):** faster and cheaper — no AI calls, just the recorded recipe doing the same work.
|
|
17
|
-
- **Reproducibility:** same input produces the same output every time; the run-to-run variance of an agent disappears.
|
|
18
|
-
- **Auditability:** the script is a plain, reviewable artifact — you can read it, diff it, and commit it, instead of trusting opaque agent reasoning.
|
|
19
|
-
- **Automation-friendly:** the recipe drops cleanly into cron, CI/CD, Makefiles, or other scripts — places where keeping an agent in the loop isn't practical.
|
|
20
|
-
- **Offline / air-gapped:** runs with no internet access and no API key, which matters for restricted or disconnected environments.
|
|
9
|
+
A SKILL.md is a Markdown file that gives an agent a *skill* — a bounded chunk of knowledge plus the shell commands it uses to act in the world. "Post to Bluesky" is a skill. "Snapshot a webpage's accessibility tree" is a skill. "Search Perplexity and filter by domain" is a skill.
|
|
21
10
|
|
|
11
|
+
The important detail: skills don't reach into APIs through magic. They shell out. Every action a skill takes is a CLI call you could have typed yourself. That's not an implementation detail — it's the whole point. It means the agent's work is, by construction, already a sequence of shell commands.
|
|
12
|
+
|
|
13
|
+
If you want to see real ones, [skillmd_collection](https://github.com/jeromeetienne/skillmd_collection) has a handful: `fastbrowser_cli` for browser automation, `a11y_parse` for accessibility-tree queries, `bsky_client` for Bluesky, `perplexity_cli` for web search.
|
|
14
|
+
|
|
15
|
+
## The pattern: agent first, script second
|
|
16
|
+
|
|
17
|
+
There are three steps, and the third is where the leverage lives.
|
|
18
|
+
|
|
19
|
+
**Step 1 — Agent run.** You describe a task in plain English: *"Scrape this competitor's pricing page and email me the diff weekly."* The agent picks the relevant skills, figures out the right sequence of CLI calls, runs them, and you watch the output. You iterate until it's right.
|
|
20
|
+
|
|
21
|
+
**Step 2 — Extraction.** You ask the agent: *"Give me a standalone shell script that does exactly what you just did."* This is the cheap part — every step was already a shell command, so you're asking for transcription, not code generation.
|
|
22
|
+
|
|
23
|
+
**Step 3 — Replay.** From now on, the script is the recipe. You don't need the agent anymore. You don't need an API key, a network connection to a model provider, or 30 seconds of LLM round-trips. You run bash.
|
|
24
|
+
|
|
25
|
+
The mental model: **agent = compiler, script = binary.** You compile once. You execute forever.
|
|
26
|
+
|
|
27
|
+
## A different cost curve
|
|
28
|
+
|
|
29
|
+
The first run, with the agent, is the expensive one. LLM round-trips per step. Token bills. A small amount of variance, because the agent might pick a slightly different path on a different day.
|
|
30
|
+
|
|
31
|
+
Every run after that is local shell. No API call. No tokens. No variance. Same input, same output, every time.
|
|
32
|
+
|
|
33
|
+
For a workflow that runs daily, you pay for the agent's reasoning *once*. The other 364 runs are free. That math gets attractive fast.
|
|
34
|
+
|
|
35
|
+
## What you actually get out of the script
|
|
36
|
+
|
|
37
|
+
**Reproducibility.** No more "it worked when the agent did it on Tuesday." The recipe is frozen, in a file, on disk.
|
|
38
|
+
|
|
39
|
+
**Auditability.** A shell script is a plain, reviewable artifact. You can `diff` it. You can commit it. You can code-review it on a pull request. You cannot code-review an agent's reasoning.
|
|
40
|
+
|
|
41
|
+
**Automation-friendly.** Drops straight into cron, systemd timers, CI/CD, Makefiles, GitHub Actions — all the places where "wait for the agent to think" isn't an option.
|
|
42
|
+
|
|
43
|
+
**Offline / air-gapped.** No outbound LLM call. Matters for restricted environments, regulated industries, or just running on a laptop on a plane.
|
|
44
|
+
|
|
45
|
+
## A concrete example
|
|
46
|
+
|
|
47
|
+
I asked an agent to post a message to my X account. It picked the `fastbrowser_cli` skill, opened x.com, clicked the composer, typed the message, and hit post. Four CLI calls. I asked for the script. Here it is, slightly trimmed:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
#!/usr/bin/env bash
|
|
51
|
+
set -euo pipefail
|
|
52
|
+
MESSAGE="${1:?usage: $0 \"message\"}"
|
|
53
|
+
|
|
54
|
+
npx fastbrowser_cli new_page --url https://x.com/home
|
|
55
|
+
npx fastbrowser_cli click -s 'link[name="Post"]'
|
|
56
|
+
npx fastbrowser_cli fill_form -s 'dialog textbox' -v "$MESSAGE"
|
|
57
|
+
npx fastbrowser_cli click -s 'dialog button[name="Post"]'
|
|
58
|
+
npx fastbrowser_cli close_page --page-id 0
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Twelve lines of bash. Boring on purpose — that's the whole point. It now lives in a repo, runs from a Makefile target, and never bothers an LLM again.
|
|
62
|
+
|
|
63
|
+
The same shape applies to scraping a pricing page, posting a daily digest to Bluesky, pulling metrics and charting them, or any other "fetch / transform / publish" loop you've been quietly paying an agent to redo every morning.
|
|
64
|
+
|
|
65
|
+
## When to keep the agent in the loop
|
|
66
|
+
|
|
67
|
+
Be honest about which workflows actually need judgment on every run. Writing replies, triaging incidents, reviewing code — those need the agent. Don't extract them.
|
|
68
|
+
|
|
69
|
+
Workflows that *look* dynamic but actually follow a fixed shape are where extraction wins. Most "scrape / fetch / transform / post" pipelines are in this bucket, even when they feel bespoke the first time.
|
|
70
|
+
|
|
71
|
+
The honest test: *if I gave this task to a junior engineer with a checklist, would the checklist be the same every week?* If yes, extract.
|
|
72
|
+
|
|
73
|
+
One caveat for the determinism claim: the script is deterministic, but the world it runs against — websites, APIs, third-party services — isn't. Selectors break, sites redesign. That's a maintenance problem, not an argument against the pattern. When the script breaks, you bring the agent back for one run, regenerate, and you're done.
|
|
74
|
+
|
|
75
|
+
## Closing thought
|
|
76
|
+
|
|
77
|
+
The unlock isn't smarter agents. It's recognizing that **most agent runs are recipes in disguise** — and recipes belong in a file you can read, diff, and run without anyone's permission.
|
|
78
|
+
|
|
79
|
+
If you've already extracted a workflow out of agent-land, I'd love to see it. The repo is [here](https://github.com/jeromeetienne/skillmd_collection); the `examples/` folders are the ones I've kept.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Ai Workflow to Shell Scripts
|
|
2
|
+
|
|
3
|
+
## Introduction
|
|
4
|
+
This document explains how to use SKILL.md files to create shell scripts from AI-assisted workflows.
|
|
5
|
+
|
|
6
|
+
### What SKILL.md files are
|
|
7
|
+
- SKILL.md files contain knowledge — that's why they're called *skills*.
|
|
8
|
+
- To interact with the outside world, a skill launches shell commands from the command line.
|
|
9
|
+
|
|
10
|
+
### The AI-to-script workflow
|
|
11
|
+
- You collaborate with an AI agent that uses a skill, which in turn runs a sequence of shell commands to accomplish a task.
|
|
12
|
+
- Once the workflow is proven, you ask the agent to extract those commands into a standalone shell script — a *recipe* that reproduces the same workflow without an agent in the loop.
|
|
13
|
+
|
|
14
|
+
### Why this matters
|
|
15
|
+
- **First run (with AI):** expensive and relatively slow, since every step goes through the agent.
|
|
16
|
+
- **Subsequent runs (script only):** faster and cheaper — no AI calls, just the recorded recipe doing the same work.
|
|
17
|
+
|
|
18
|
+
### Benefits of the script-based recipe
|
|
19
|
+
- **Reproducibility:** same input produces the same output every time; the run-to-run variance of an agent disappears.
|
|
20
|
+
- **Auditability:** the script is a plain, reviewable artifact — you can read it, diff it, and commit it, instead of trusting opaque agent reasoning.
|
|
21
|
+
- **Automation-friendly:** the recipe drops cleanly into cron, CI/CD, Makefiles, or other scripts — places where keeping an agent in the loop isn't practical.
|
|
22
|
+
- **Offline / air-gapped:** runs with no internet access and no API key, which matters for restricted or disconnected environments.
|
|
23
|
+
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Outline for a LinkedIn article on turning AI-driven workflows into plain shell scripts via SKILL.md, so the agent runs once and the recipe runs forever.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Meta
|
|
6
|
+
|
|
7
|
+
- **Title:** Use the Agent Once, Run the Script Forever
|
|
8
|
+
- **Audience:** LinkedIn — engineers, tech leads, and dev-productivity folks who already use coding agents (Claude Code, Cursor, etc.) and are starting to feel the cost/latency/reliability ceiling.
|
|
9
|
+
- **Length:** ~900 words (LinkedIn article sweet spot)
|
|
10
|
+
- **Tone:** First-person, opinionated, practitioner voice. Concrete examples over theory. No marketing fluff.
|
|
11
|
+
- **Status:** outline
|
|
12
|
+
|
|
13
|
+
## Thesis
|
|
14
|
+
|
|
15
|
+
The most valuable artifact of an AI-assisted workflow isn't the output — it's the **shell script the agent leaves behind**. Run the agent once to discover the recipe; run the script a thousand times after that, with no API key, no latency, no variance.
|
|
16
|
+
|
|
17
|
+
## Article Structure
|
|
18
|
+
|
|
19
|
+
### Hook (the opening 2–3 lines that show in the LinkedIn preview)
|
|
20
|
+
- Something like: *"Every time you let an AI agent solve the same problem twice, you're paying twice. There's a better pattern: use the agent to write the recipe, then throw the agent away."*
|
|
21
|
+
- One line framing the rest: this post is about a small workflow built on SKILL.md files that turns one-off agent runs into reusable shell scripts.
|
|
22
|
+
|
|
23
|
+
### What's a SKILL.md?
|
|
24
|
+
- One-paragraph definition: a Markdown file that gives an agent a *skill* — a bounded chunk of knowledge plus the shell commands it uses to act in the world.
|
|
25
|
+
- Key point: skills don't talk to APIs through magic. They shell out. That's what makes the next step possible.
|
|
26
|
+
- Pointer (without making it a sales pitch): link to the `skillmd_collection` repo for readers who want to see real examples (`fastbrowser_cli`, `a11y_parse`, `bsky_cli`, `perplexity`).
|
|
27
|
+
|
|
28
|
+
### The pattern: agent first, script second
|
|
29
|
+
- **Step 1 — Agent run.** You describe a task ("scrape this site weekly," "post a digest to Bluesky," "pull metrics and chart them"). The agent picks a skill, figures out the right sequence of CLI calls, runs them, and you confirm the output is correct.
|
|
30
|
+
- **Step 2 — Extraction.** You ask the agent: *"Give me a standalone shell script that does exactly what you just did."* Because every step was already a shell command, this is a transcription job, not a code-generation job.
|
|
31
|
+
- **Step 3 — Replay.** From now on, the script is the recipe. The agent is no longer in the loop.
|
|
32
|
+
- One-line visual / mental model: **agent = compiler, script = binary.** You compile once, you execute forever.
|
|
33
|
+
|
|
34
|
+
### Why this is a different cost curve
|
|
35
|
+
- **First run (with agent):** slow (LLM round-trips per step), expensive (token cost), non-deterministic (the agent might pick a slightly different path).
|
|
36
|
+
- **Every run after:** local shell. No API call, no token bill, no variance. Same input → same output, every time.
|
|
37
|
+
- Frame it as the kind of math that gets attractive fast: a workflow that runs daily pays for the agent run *once*; the other 364 runs are free.
|
|
38
|
+
|
|
39
|
+
### What you actually get out of the script
|
|
40
|
+
- **Reproducibility.** No more "it worked when the agent did it on Tuesday." The recipe is frozen.
|
|
41
|
+
- **Auditability.** A shell script is a plain, reviewable artifact — you can `diff` it, commit it, code-review it. You can't code-review an agent's reasoning.
|
|
42
|
+
- **Automation-friendly.** Drops straight into cron, CI/CD, Makefiles, GitHub Actions. Places where "wait for the agent to think" isn't an option.
|
|
43
|
+
- **Offline / air-gapped.** No network, no API key. Matters for restricted environments, regulated industries, or just running on a laptop on a plane.
|
|
44
|
+
|
|
45
|
+
### A concrete example (keep it tight — one example, not three)
|
|
46
|
+
- Pick one of the skills in the repo — e.g., `bsky_cli` posting a daily digest, or `fastbrowser_cli` scraping a competitor's pricing page.
|
|
47
|
+
- Show in 4–5 lines: *"I asked the agent to do X. It used skill Y, which ran these three CLI calls. I then asked it for a script. Here it is — 12 lines of bash. It now runs in cron every morning at 7am."*
|
|
48
|
+
- Optional: a screenshot or short code block of the resulting script. Keep it boring on purpose — that's the whole point.
|
|
49
|
+
|
|
50
|
+
### When to keep the agent in the loop (intellectual honesty section)
|
|
51
|
+
- Workflows that genuinely need judgment on every run (writing replies, triaging incidents, reviewing code) — keep the agent.
|
|
52
|
+
- Workflows that *look* dynamic but actually follow a fixed shape — that's where extraction wins. Most "scrape / fetch / transform / post" pipelines fall here.
|
|
53
|
+
- The honest test: *"If I gave this task to a junior engineer with a checklist, would the checklist be the same every week?"* If yes, extract.
|
|
54
|
+
|
|
55
|
+
### Closing thought
|
|
56
|
+
- The unlock isn't smarter agents. It's recognizing that **most agent runs are recipes in disguise** — and recipes belong in a file you can read, diff, and run without permission.
|
|
57
|
+
- Soft CTA: link to the repo, invite people to share workflows they've already "extracted" out of agent-land.
|
|
58
|
+
|
|
59
|
+
## What to Avoid
|
|
60
|
+
- No "AI will replace engineers" framing. The opposite — this is engineers using AI like a tool, then putting the tool down.
|
|
61
|
+
- No vendor pitch. The pattern works regardless of which agent or model you use; SKILL.md is the *mechanism*, not the product.
|
|
62
|
+
- Don't oversell determinism. The script is deterministic; the *world it runs against* (websites, APIs) isn't. Acknowledge in one line, move on.
|
|
63
|
+
- No "in today's fast-paced AI landscape" / "unlock" / "revolutionize." LinkedIn is already drowning in that.
|
|
64
|
+
- Don't turn it into a SKILL.md tutorial. The article is about the *pattern*; tutorials live in the repo.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Publishing workflow
|
|
2
|
+
|
|
3
|
+
How to publish `fastbrowser_cli` to npm when it depends on the in-repo workspace package `a11y_parse`.
|
|
4
|
+
|
|
5
|
+
## Why this doc exists
|
|
6
|
+
|
|
7
|
+
This monorepo is a **pnpm** workspace (`packageManager: pnpm@9.15.0` in the root `package.json`, plus `pnpm-workspace.yaml`). `fastbrowser_cli` declares its sibling dep as:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
"a11y_parse": "workspace:*"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The `workspace:` protocol is a pnpm/yarn-berry convention. `npm` does not understand it, which causes two failure modes:
|
|
14
|
+
|
|
15
|
+
1. `npm install` from inside `packages/fastbrowser_cli/` fails immediately:
|
|
16
|
+
```
|
|
17
|
+
npm error code EUNSUPPORTEDPROTOCOL
|
|
18
|
+
npm error Unsupported URL Type "workspace:": workspace:*
|
|
19
|
+
```
|
|
20
|
+
2. `npm publish` either ships a tarball with `"workspace:*"` literally in `package.json` (consumers then hit the same error) or hard-errors on newer npm versions. The package becomes unpublishable via npm.
|
|
21
|
+
|
|
22
|
+
The fix is to use **pnpm** for both install and publish.
|
|
23
|
+
|
|
24
|
+
## One-time fixes
|
|
25
|
+
|
|
26
|
+
### 1. Use `pnpm publish` instead of `npm publish`
|
|
27
|
+
|
|
28
|
+
In `packages/fastbrowser_cli/package.json`, change the script from:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
"publish:all": "npm run build && npm version patch && npm publish --access public"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
to:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
"publish:all": "pnpm run build && npm version patch && pnpm publish --access public"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Only the `publish` verb has to change. `npm version patch` is fine — it just bumps the version field and creates a git tag, with no workspace awareness needed.
|
|
41
|
+
|
|
42
|
+
### 2. (Optional) Switch `workspace:*` to `workspace:^`
|
|
43
|
+
|
|
44
|
+
In the same file, the dep:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
"a11y_parse": "workspace:*"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
can become:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
"a11y_parse": "workspace:^"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
This affects what `pnpm publish` writes into the published tarball — see the cheatsheet below. The repo's root `.npmrc` already sets `save-workspace-protocol=rolling`, so any **future** `pnpm add --workspace` would record `workspace:^` automatically; the existing `workspace:*` is not retroactively rewritten.
|
|
57
|
+
|
|
58
|
+
## Version-rewriting cheatsheet
|
|
59
|
+
|
|
60
|
+
At publish time, `pnpm publish` reads `packages/a11y_parse/package.json`'s `version` field **from disk** and rewrites the dep in the tarball only (your source file is untouched):
|
|
61
|
+
|
|
62
|
+
| In source | In published tarball |
|
|
63
|
+
|-----------------------------|----------------------|
|
|
64
|
+
| `"a11y_parse": "workspace:*"` | `"a11y_parse": "1.0.3"` |
|
|
65
|
+
| `"a11y_parse": "workspace:^"` | `"a11y_parse": "^1.0.3"` |
|
|
66
|
+
| `"a11y_parse": "workspace:~"` | `"a11y_parse": "~1.0.3"` |
|
|
67
|
+
| `"a11y_parse": "workspace:1.2.3"` | `"a11y_parse": "1.2.3"` |
|
|
68
|
+
|
|
69
|
+
Tradeoff between `*` and `^`:
|
|
70
|
+
|
|
71
|
+
- `*` = exact pin. Every patch bump of `a11y_parse` requires a corresponding bump+republish of `fastbrowser_cli` for consumers to pick it up. Tight coupling, predictable.
|
|
72
|
+
- `^` = caret range. Consumers float on patch upgrades automatically. Looser coupling, easier dedupe.
|
|
73
|
+
|
|
74
|
+
## Per-release workflow
|
|
75
|
+
|
|
76
|
+
The order matters: **publish `a11y_parse` first**, because `pnpm publish` of `fastbrowser_cli` will bake in whatever version is currently on disk for `a11y_parse`. That version must already exist on the registry when consumers install.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# 0. Sync the workspace from the repo root (one-time per machine, plus after pulls)
|
|
80
|
+
cd ~/webwork/skillmd_collection
|
|
81
|
+
pnpm install
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Step 1 — Publish `a11y_parse` (only if it changed)
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
cd packages/a11y_parse
|
|
88
|
+
git status # working tree must be clean — `npm version` aborts otherwise
|
|
89
|
+
pnpm run publish:all # build → npm version patch (e.g. 1.0.3 → 1.0.4, commits + tags) → npm publish
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`a11y_parse` has no workspace deps, so its existing `npm publish` script is fine.
|
|
93
|
+
|
|
94
|
+
Verify the new version is live before continuing:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npm view a11y_parse version
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Step 2 — Publish `fastbrowser_cli`
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
cd ../fastbrowser_cli
|
|
104
|
+
git status # must be clean
|
|
105
|
+
pnpm run publish:all # build → npm version patch (e.g. 1.0.22 → 1.0.23) → pnpm publish
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
At the `pnpm publish` step, the workspace dep is rewritten in-tarball using the rules above.
|
|
109
|
+
|
|
110
|
+
### Step 3 — Push commits and tags
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
cd ../..
|
|
114
|
+
git push --follow-tags
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
This pushes the version-bump commits and the `vX.Y.Z` tags created by `npm version patch`.
|
|
118
|
+
|
|
119
|
+
## Gotchas
|
|
120
|
+
|
|
121
|
+
- **Dirty working tree** → `npm version patch` aborts with "Git working directory not clean." Commit or stash any pending edits (including the `a11y_parse` version bump itself) before running `publish:all`.
|
|
122
|
+
- **Wrong publish order** → `fastbrowser_cli@<new>` references an `a11y_parse` version that doesn't exist on the registry yet. Consumers get a 404 on install. Always do `a11y_parse` first when both have changed.
|
|
123
|
+
- **Skipping a `fastbrowser_cli` republish** when using `workspace:*` → consumers stay on the old `a11y_parse` exact-pin. If you want `a11y_parse` patch upgrades to flow without a `fastbrowser_cli` release, switch to `workspace:^`.
|
|
124
|
+
- **Don't run `npm install` anywhere in this repo.** It will trip on `workspace:*` and may write a stray `package-lock.json` that conflicts with `pnpm-lock.yaml`. Always use `pnpm install` (and `pnpm add` / `pnpm remove`).
|
|
125
|
+
- **`.npmrc`'s `save-workspace-protocol=rolling` is forward-only.** It governs what gets written when you run `pnpm add`. It does not retroactively rewrite existing `workspace:*` entries.
|
|
126
|
+
|
|
127
|
+
## Quick reference
|
|
128
|
+
|
|
129
|
+
| Task | Command |
|
|
130
|
+
|---------------------------------------|---------------------------------------------------------------|
|
|
131
|
+
| Install / link workspace deps | `pnpm install` (from repo root) |
|
|
132
|
+
| Add an external dep to `fastbrowser_cli` | `pnpm --filter fastbrowser_cli add <pkg>` |
|
|
133
|
+
| Add a workspace dep | `pnpm --filter fastbrowser_cli add <pkg> --workspace` |
|
|
134
|
+
| Publish `a11y_parse` | `cd packages/a11y_parse && pnpm run publish:all` |
|
|
135
|
+
| Publish `fastbrowser_cli` | `cd packages/fastbrowser_cli && pnpm run publish:all` |
|
|
136
|
+
| Inspect what would be published | `pnpm pack --dry-run` (from the package dir) |
|
package/examples/post-to-x.sh
CHANGED
|
@@ -7,7 +7,7 @@ set -euo pipefail
|
|
|
7
7
|
MESSAGE="${1:?usage: $0 \"message\"}"
|
|
8
8
|
|
|
9
9
|
# 1. Open x.com (assumes you're already logged in)
|
|
10
|
-
npx fastbrowser_cli
|
|
10
|
+
npx fastbrowser_cli new_page --url https://x.com/home
|
|
11
11
|
|
|
12
12
|
# 2. Open the composer (sidebar Post link → /compose/post)
|
|
13
13
|
npx fastbrowser_cli click -s 'link[name="Post"]'
|
|
@@ -18,4 +18,7 @@ npx fastbrowser_cli fill_form -s 'dialog textbox' -v "$MESSAGE"
|
|
|
18
18
|
# 4. Submit
|
|
19
19
|
npx fastbrowser_cli click -s 'dialog button[name="Post"]'
|
|
20
20
|
|
|
21
|
+
# 5. Close the page
|
|
22
|
+
npx fastbrowser_cli close_page --page-id 0
|
|
23
|
+
|
|
21
24
|
echo "posted: $MESSAGE"
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
|
|
3
|
+
export class FastBrowserHelper {
|
|
4
|
+
static run(command: string): string {
|
|
5
|
+
const fullCommand = `npx fastbrowser_cli ${command}`;
|
|
6
|
+
console.log(`Running command: ${fullCommand}`);
|
|
7
|
+
return execSync(fullCommand, { encoding: 'utf8' });
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
static navigatePage(url: string): void {
|
|
11
|
+
FastBrowserHelper.run(`navigate_page --url '${url}'`);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static fillForm(selector: string, value: string): void {
|
|
15
|
+
FastBrowserHelper.run(`fill_form --selector '${selector}' --value '${value}'`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
static pressKeys(keys: string): void {
|
|
19
|
+
FastBrowserHelper.run(`press_keys --keys '${keys}'`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static click(selector: string): void {
|
|
23
|
+
FastBrowserHelper.run(`click -s '${selector}'`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static querySelectorsAll(selector: string, limit: number): string {
|
|
27
|
+
return FastBrowserHelper.run(`query_selectors_all --selector '${selector}' --limit ${limit}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static takeSnapshot(): string {
|
|
31
|
+
return FastBrowserHelper.run('take_snapshot');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static querySelectors(selector: string, withAncestors = true): string {
|
|
35
|
+
const flag = withAncestors === false ? ' --no-with-ancestors' : '';
|
|
36
|
+
return FastBrowserHelper.run(`query_selectors --selector '${selector}'${flag}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
}
|