
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
@c3-oss/foreach-agent
Advanced tools
Terminal UI to run prompt templates across multiple AI coding agents
Run Liquid templates in batch across AI coding agent CLIs (claude, cursor-agent, gemini, codex), with:
All data is persisted under ~/.foreach-agent/:
templates/: editable templatesruns/<runId>/run.json: consolidated run stateruns/<runId>/prompts/*.md: rendered prompt per taskruns/<runId>/transcripts/*.jsonl: raw transcript per taskexports/: run exports (JSON/CSV)Interactive mode (default):
cd apps/foreach-agent
pnpm start
or:
pnpm start tui
Build:
pnpm --filter @c3-oss/foreach-agent build
Main commands:
pnpm start run --template my-template.liquid --entries '[{"name":"world"}]'
pnpm start templates list --output-format table
pnpm start runs --query 'status == "failed"'
pnpm start tasks --run-id <runId> --query 'provider == "codex" and hasError'
pnpm start configs --query 'concurrency >= 10 and autoApproval'
pnpm start export --run-id <runId> --format csv --output /tmp/run.csv
--output-format (tfplan-explorer style)Supported values:
interactivetablejsoncsvDefaults:
templates list, runs, tasks, configs: interactiverun, templates create/read/update/delete: tableNote:
--query requires non-interactive output (table, json, or csv)Examples:
pnpm start runs --output-format interactive
pnpm start runs --output-format table
pnpm start runs --output-format json --query 'failedTasks > 0'
pnpm start templates list --output-format csv
Create:
pnpm start templates create --name my-template --content 'Hello {{ name }}'
Read:
pnpm start templates read --id my-template.liquid --output-format json
Update:
pnpm start templates update --id my-template.liquid --content 'Hi {{ name }}'
Delete:
pnpm start templates delete --id my-template.liquid
Content input for create/update:
--content (inline)--content-path (file path)--content-stdin (stdin)pnpm start run \
--template my-template.liquid \
--entries-path /abs/path/entries.yaml \
--providers 'claude,codex' \
--codex-model gpt-5.3-codex \
--concurrency 10 \
--retries 3 \
--timeout-seconds infinite \
--cwd /abs/path/project \
--auto-approval true
Entries input options:
--entries (inline JSON/YAML)--entries-path (JSON/YAML file)--entries-stdin (stdin)--query (Filtrex)--query follows the same model used in mzi-tfplan-explorer via filtrex.
Examples:
pnpm start runs --query 'failedTasks > 0'
pnpm start templates list --query 'variablesCount >= 3 and content ~= "TODO"'
pnpm start tasks --run-id <runId> --query 'provider == "codex" and status != "success"'
pnpm start configs --query 'timeoutSeconds == -1 and autoApproval'
Available query fields:
templates: id, name, filePath, updatedAt, updatedAtEpoch, content, contentLength, variablesCountruns: id, status, templateName, templateId, providers, providerCount, entryCount, taskCount, successTasks, failedTasks, concurrency, retries, timeoutSeconds, autoApproval, cwd, createdAt, startedAt, finishedAttasks: id, runId, status, provider, model, entryIndex, attempt, maxAttempts, durationMs, hasError, hasOutput, errorMessage, outputText, templateName, concurrency, retries, autoApproval, cwdconfigs: runId, runStatus, templateName, templateId, providerCount, providers, entryCount, concurrency, retries, timeoutSeconds, autoApproval, cwd, createdAtimport { executeHeadlessRun, filterWithQuery } from '@c3-oss/foreach-agent'
const run = await executeHeadlessRun({
template: 'my-template.liquid',
entriesText: '[{"name":"world"}]',
providers: ['codex'],
})
const failedTasks = filterWithQuery(
run.tasks,
'status != "success"',
(task) => ({ status: task.status, provider: task.provider }),
(task) => task.id,
)
Templates screen:
j/k: navigaten: create templatee: edit templated: delete templater: open run setupu: open runs historyq: quitRun setup screen:
j/k: navigate fieldsspace: toggle provider/boolean/sourceenter: edit selected fieldenter on start run: start executionRun monitor screen:
j/k: navigate tasksenter: open pretty logss: status filterp: provider filter/: text filterx: export JSONX: export CSVMulti-line editor:
Ctrl+S: saveCtrl+L: clearEsc: cancelliquidjs103 attempts per task20s)codex model: gpt-5.3-codex
gpt-codex-5.3 was tested and did not work in this environmentFAQs
Terminal UI to run prompt templates across multiple AI coding agents
We found that @c3-oss/foreach-agent demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.