{"_id":"@c3-oss/foreach-agent","_rev":"2-160110fef0512274594ddfc8cd5d3835","name":"@c3-oss/foreach-agent","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@c3-oss/foreach-agent","version":"0.1.0","author":{"name":"Caian Ertl","email":"caian@c3.do"},"_id":"@c3-oss/foreach-agent@0.1.0","maintainers":[{"name":"caian","email":"hi@caian.org"}],"homepage":"https://github.com/c3-oss/sk.js#readme","bugs":{"url":"https://github.com/c3-oss/sk.js/issues"},"bin":{"foreach-agent":"dist/cli.js"},"dist":{"shasum":"ce426056463ea975564a75c0d4ee1d087ac5e83b","tarball":"https://registry.npmjs.org/@c3-oss/foreach-agent/-/foreach-agent-0.1.0.tgz","fileCount":11,"integrity":"sha512-OSrWJ8u+tbl2voeBhpBJSIcN7eweDaRPFcgu09SoAgRb/ibw+odzxm4vJMeDEqrVOnozAZctYALyJ+wpdC/Qvw==","signatures":[{"sig":"MEUCIFPwTf+XAfKspMf0gdW2gutGyOFzyIZmonyA1i2UPUImAiEAxOBtfQsgzGK8JAHwjflrdDQNzcYcU+Sw6O6NEmpYKWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375113},"type":"module","_from":"file:c3-oss-foreach-agent-0.1.0.tgz","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./cli":{"import":"./dist/cli.js","require":"./dist/cli.cjs"}},"scripts":{"lint":"biome check .","test":"vitest run","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts --clean --silent","clean":"rm -rf coverage dist node_modules .turbo","start":"node --import @swc-node/register/esm-register src/cli.ts","lint:fix":"biome check --fix .","test:coverage":"vitest run --coverage","lint:fix-unsafe":"biome check --fix --unsafe ."},"_npmUser":{"name":"caian","email":"hi@caian.org"},"_resolved":"/private/var/folders/70/zg4bz5kn71xb0tk82j0vj7rh0000gn/T/f55c5da732f6dce9c220b35ebaa6309d/c3-oss-foreach-agent-0.1.0.tgz","_integrity":"sha512-OSrWJ8u+tbl2voeBhpBJSIcN7eweDaRPFcgu09SoAgRb/ibw+odzxm4vJMeDEqrVOnozAZctYALyJ+wpdC/Qvw==","repository":{"url":"git+https://github.com/c3-oss/sk.js.git","type":"git"},"_npmVersion":"10.9.2","description":"Terminal UI to run prompt templates across multiple AI coding agents","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ink":"^6.3.1","yaml":"^2.8.1","react":"^19.1.1","filtrex":"^3.1.0","liquidjs":"^10.24.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","@swc/core":"^1.13.5","typescript":"^5.9.3","@types/node":"^24.9.1","@types/react":"^19.1.13","@swc-node/register":"^1.11.1","@c3-oss/config-biome":"^0.3.1","@c3-oss/config-vitest":"^0.3.0","@c3-oss/config-typescript":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/foreach-agent_0.1.0_1771520627838_0.6042938389920067","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@c3-oss/foreach-agent","description":"Terminal UI to run prompt templates across multiple AI coding agents","version":"0.1.1","author":{"name":"Caian Ertl","email":"caian@c3.do"},"type":"module","repository":{"type":"git","url":"git+https://github.com/c3-oss/sk.js.git"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./cli":{"import":"./dist/cli.js","require":"./dist/cli.cjs"}},"bin":{"foreach-agent":"dist/cli.js"},"dependencies":{"filtrex":"^3.1.0","ink":"^6.3.1","liquidjs":"^10.25.7","react":"^19.1.1","yaml":"^2.9.0"},"devDependencies":{"@swc-node/register":"^1.11.1","@swc/core":"^1.13.5","@types/node":"^24.9.1","@types/react":"^19.1.13","tsup":"^8.5.1","typescript":"^5.9.3","@c3-oss/config-vitest":"^0.3.1","@c3-oss/config-biome":"^0.3.1","@c3-oss/config-typescript":"^0.1.0"},"scripts":{"start":"node --import @swc-node/register/esm-register src/cli.ts","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts --clean --silent","lint":"biome check .","lint:fix":"biome check --fix .","lint:fix-unsafe":"biome check --fix --unsafe .","clean":"rm -rf coverage dist node_modules .turbo","test":"vitest run","test:coverage":"vitest run --coverage"},"_id":"@c3-oss/foreach-agent@0.1.1","bugs":{"url":"https://github.com/c3-oss/sk.js/issues"},"homepage":"https://github.com/c3-oss/sk.js#readme","_integrity":"sha512-mbhmvsxjh9VYu6yuW7uGQaSebA7skyWOCWL5kS43sMZ3Qb7OnMjQ0zVlhlqMuIKybP6j0sIfn7eMMgwKKBHu7A==","_resolved":"/private/var/folders/70/zg4bz5kn71xb0tk82j0vj7rh0000gn/T/bb7c2f4b52ba7c71e090025f838283c1/c3-oss-foreach-agent-0.1.1.tgz","_from":"file:c3-oss-foreach-agent-0.1.1.tgz","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-mbhmvsxjh9VYu6yuW7uGQaSebA7skyWOCWL5kS43sMZ3Qb7OnMjQ0zVlhlqMuIKybP6j0sIfn7eMMgwKKBHu7A==","shasum":"273f5f376afefa7a4cff5ae0246a5d2015b1e9db","tarball":"https://registry.npmjs.org/@c3-oss/foreach-agent/-/foreach-agent-0.1.1.tgz","fileCount":11,"unpackedSize":375113,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIB2yrdERcC3yb4qV1B+DHqQrDXuAN+a7GsWfZCpGlWwrAiAVO1d2np/ZUYTbW1Jd5763NdkJGDyNM6KNYj2JLLRb2w=="}]},"_npmUser":{"name":"caian","email":"hi@caian.org"},"directories":{},"maintainers":[{"name":"caian","email":"hi@caian.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/foreach-agent_0.1.1_1778704802472_0.5611399466406748"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-19T17:03:47.773Z","modified":"2026-05-13T20:40:02.757Z","0.1.0":"2026-02-19T17:03:47.987Z","0.1.1":"2026-05-13T20:40:02.638Z"},"bugs":{"url":"https://github.com/c3-oss/sk.js/issues"},"author":{"name":"Caian Ertl","email":"caian@c3.do"},"homepage":"https://github.com/c3-oss/sk.js#readme","repository":{"type":"git","url":"git+https://github.com/c3-oss/sk.js.git"},"description":"Terminal UI to run prompt templates across multiple AI coding agents","maintainers":[{"name":"caian","email":"hi@caian.org"}],"readme":"# foreach-agent\n\nRun Liquid templates in batch across AI coding agent CLIs (`claude`, `cursor-agent`, `gemini`, `codex`), with:\n\n- interactive TUI mode\n- headless CLI mode\n- programmatic API usage\n\n## Storage\n\nAll data is persisted under `~/.foreach-agent/`:\n\n- `templates/`: editable templates\n- `runs/<runId>/run.json`: consolidated run state\n- `runs/<runId>/prompts/*.md`: rendered prompt per task\n- `runs/<runId>/transcripts/*.jsonl`: raw transcript per task\n- `exports/`: run exports (JSON/CSV)\n\n## Run\n\nInteractive mode (default):\n\n```bash\ncd apps/foreach-agent\npnpm start\n```\n\nor:\n\n```bash\npnpm start tui\n```\n\nBuild:\n\n```bash\npnpm --filter @c3-oss/foreach-agent build\n```\n\n## Headless CLI\n\nMain commands:\n\n```bash\npnpm start run --template my-template.liquid --entries '[{\"name\":\"world\"}]'\npnpm start templates list --output-format table\npnpm start runs --query 'status == \"failed\"'\npnpm start tasks --run-id <runId> --query 'provider == \"codex\" and hasError'\npnpm start configs --query 'concurrency >= 10 and autoApproval'\npnpm start export --run-id <runId> --format csv --output /tmp/run.csv\n```\n\n### `--output-format` (tfplan-explorer style)\n\nSupported values:\n\n- `interactive`\n- `table`\n- `json`\n- `csv`\n\nDefaults:\n\n- `templates list`, `runs`, `tasks`, `configs`: `interactive`\n- `run`, `templates create/read/update/delete`: `table`\n\nNote:\n\n- `--query` requires non-interactive output (`table`, `json`, or `csv`)\n\nExamples:\n\n```bash\npnpm start runs --output-format interactive\npnpm start runs --output-format table\npnpm start runs --output-format json --query 'failedTasks > 0'\npnpm start templates list --output-format csv\n```\n\n### Template CRUD subcommands\n\nCreate:\n\n```bash\npnpm start templates create --name my-template --content 'Hello {{ name }}'\n```\n\nRead:\n\n```bash\npnpm start templates read --id my-template.liquid --output-format json\n```\n\nUpdate:\n\n```bash\npnpm start templates update --id my-template.liquid --content 'Hi {{ name }}'\n```\n\nDelete:\n\n```bash\npnpm start templates delete --id my-template.liquid\n```\n\nContent input for create/update:\n\n- `--content` (inline)\n- `--content-path` (file path)\n- `--content-stdin` (stdin)\n\n### Run without TUI\n\n```bash\npnpm start run \\\n  --template my-template.liquid \\\n  --entries-path /abs/path/entries.yaml \\\n  --providers 'claude,codex' \\\n  --codex-model gpt-5.3-codex \\\n  --concurrency 10 \\\n  --retries 3 \\\n  --timeout-seconds infinite \\\n  --cwd /abs/path/project \\\n  --auto-approval true\n```\n\nEntries input options:\n\n- `--entries` (inline JSON/YAML)\n- `--entries-path` (JSON/YAML file)\n- `--entries-stdin` (stdin)\n\n## `--query` (Filtrex)\n\n`--query` follows the same model used in `mzi-tfplan-explorer` via `filtrex`.\n\nExamples:\n\n```bash\npnpm start runs --query 'failedTasks > 0'\npnpm start templates list --query 'variablesCount >= 3 and content ~= \"TODO\"'\npnpm start tasks --run-id <runId> --query 'provider == \"codex\" and status != \"success\"'\npnpm start configs --query 'timeoutSeconds == -1 and autoApproval'\n```\n\nAvailable query fields:\n\n- `templates`: `id`, `name`, `filePath`, `updatedAt`, `updatedAtEpoch`, `content`, `contentLength`, `variablesCount`\n- `runs`: `id`, `status`, `templateName`, `templateId`, `providers`, `providerCount`, `entryCount`, `taskCount`, `successTasks`, `failedTasks`, `concurrency`, `retries`, `timeoutSeconds`, `autoApproval`, `cwd`, `createdAt`, `startedAt`, `finishedAt`\n- `tasks`: `id`, `runId`, `status`, `provider`, `model`, `entryIndex`, `attempt`, `maxAttempts`, `durationMs`, `hasError`, `hasOutput`, `errorMessage`, `outputText`, `templateName`, `concurrency`, `retries`, `autoApproval`, `cwd`\n- `configs`: `runId`, `runStatus`, `templateName`, `templateId`, `providerCount`, `providers`, `entryCount`, `concurrency`, `retries`, `timeoutSeconds`, `autoApproval`, `cwd`, `createdAt`\n\n## Programmatic usage\n\n```ts\nimport { executeHeadlessRun, filterWithQuery } from '@c3-oss/foreach-agent'\n\nconst run = await executeHeadlessRun({\n  template: 'my-template.liquid',\n  entriesText: '[{\"name\":\"world\"}]',\n  providers: ['codex'],\n})\n\nconst failedTasks = filterWithQuery(\n  run.tasks,\n  'status != \"success\"',\n  (task) => ({ status: task.status, provider: task.provider }),\n  (task) => task.id,\n)\n```\n\n## Main TUI shortcuts\n\nTemplates screen:\n\n- `j/k`: navigate\n- `n`: create template\n- `e`: edit template\n- `d`: delete template\n- `r`: open run setup\n- `u`: open runs history\n- `q`: quit\n\nRun setup screen:\n\n- `j/k`: navigate fields\n- `space`: toggle provider/boolean/source\n- `enter`: edit selected field\n- `enter` on `start run`: start execution\n\nRun monitor screen:\n\n- `j/k`: navigate tasks\n- `enter`: open pretty logs\n- `s`: status filter\n- `p`: provider filter\n- `/`: text filter\n- `x`: export JSON\n- `X`: export CSV\n\nMulti-line editor:\n\n- `Ctrl+S`: save\n- `Ctrl+L`: clear\n- `Esc`: cancel\n\n## Notes\n\n- Template engine: `liquidjs`\n- Entries accept JSON/YAML inline or file path\n- Default concurrency: `10`\n- Default retries: `3` attempts per task\n- Default timeout: infinite (minimum configurable value: `20s`)\n- Default auto-approval: enabled\n- Default `codex` model: `gpt-5.3-codex`\n  - `gpt-codex-5.3` was tested and did not work in this environment\n","readmeFilename":"README.md"}