ibmi-agent-kit@r1
CAUTION· install onlyPublisher claims: "Enables AI agents to drive 5250 screens, read, search, edit, and compile IBM i source members over SSH, and learn enterprise data structures and workflows from knowledge packs." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
IBMI_PASSWORDIBMI_PASSWORD_COMMANDIBMI_PASSWORD_STOREConfiguration, not credentials: IBMI_5250_CCSID, IBMI_5250_CURLIB, IBMI_5250_DEVICE, IBMI_5250_MENU, IBMI_5250_PORT, IBMI_5250_PROGRAM, IBMI_5250_REPORT_DIR, IBMI_5250_TERMINAL, IBMI_5250_TLS_INSECURE, IBMI_5250_VIEWER, IBMI_5250_VIEWER_PORT, IBMI_ALLOWED_CL, IBMI_BLOCKED_CL, IBMI_BLOCKED_TABLES, IBMI_HOST, IBMI_KIT_CONFIG_DIR, IBMI_KIT_POLICY, IBMI_KIT_PROFILE_FILE, IBMI_KIT_VERBS, IBMI_LOCAL_DIR, IBMI_MAPEPIRE_CA, IBMI_MAPEPIRE_JAR, IBMI_MAPEPIRE_PORT, IBMI_MCP_CONFIG_DIR, IBMI_READ_ONLY, IBMI_RESTRICTED, IBMI_SOURCE_FILE_CCSID, IBMI_SQL_TRANSPORT, IBMI_SSH_PORT, IBMI_USER, NODE_TEST_CONTEXT- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it with a scoped credential, under the guard. It asks for IBMI_PASSWORD, IBMI_PASSWORD_COMMAND, IBMI_PASSWORD_STORE and talks to its vendor. Give the credential to the guard, not the server: the value never enters the server's environment and only travels to the host you bind. What the tools do with a real credential was not observed.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is ibmi-agent-kit@r1 safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-11 and scored it 62/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Destructive file system command detected; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
{ name: "SQL CALL of a shell program", script: "CALL QSYS.QP2SHELL('/QOpenSys/usr/bin/sh', '-c', 'rm -rf /home')", danger: /QP2SHELL/ },Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."List the configured IBM i servers, named by the .env.<name> files on disk, plus the keys screen_do accepts.",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose..describe("which IBM i to use, named by a .env.<name> file. Omit for the default .env server");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.".env.example",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.(servers.length ? "" : `\nNo profiles found. Copy .env.example as .env or .env.<name> into one of the folders above.\n`) +Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.put(shared(), ".env.pub400", "IBMI_HOST=shared\n");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- Do NOT copy `<context>`, `<rules>`, `<project_context>` blocks into the artifactFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.4. `profiles/.env.<partition>`, one per partition:Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// (the default is `.env`, and one name must mean one file); `.env.` with no name; editor andFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.put(a, ".env.x", "IBMI_HOST=a\n");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.put(kit(), ".env.pub400", "IBMI_HOST=kit\n");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.put(shared(), ".env.pub400", "IBMI_HOST=a\n");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.{ name: "classifyCl of a danger command", command: "STRQSH CMD('rm -rf /')", danger: /Qshell/ },Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.{ name: "classifyCl of a danger command", command: "STRQSH CMD('rm -rf /')", danger: /Qshell/ },Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Modified by ibmi-agent-kit (2026): rewritten for the kit (install, profile folders, protected settings, mounting, the kit's execution guard hook, the run reportFix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.put(b, ".env.x", "IBMI_HOST=b\n");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.profiles/.env.<partition>Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.`.env*` file outside this repo. Profile skeletons carry a comment saying each person picks the OS store or a helper at setup.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const text = Buffer.concat(chunks).toString("utf8").replace(/^/, "").replace(/\r?\n$/, "");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// `.env` is "default", `.env.<name>` is "<name>". Never a server: `.env.example`; `.env.default`Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const serverArg = z.string().optional().describe("which IBM i to use, named by a .env.<name> file. Omit for the default .env server (see list_servers)");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…ngling a table in transit. const TABLES: Record<number, string> = { 37: " \u00a0\u00e2\u00e4\u00e0\u00e1\u00e3\u00e5\u00e7\u00f1\u00a2.<(+|&\u00e9\u00ea\u00eb\u00e8\u00ed\u00ee\u00ef\u00ec\u00df!$*);\u00ac-/\u00c2\…Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.reporter.log("info", `uploaded ${lines.length} lines to ${lib}/${srcf}(${mbr})${warnings.length ? ` (${warnings.length} truncated line(s))` : ""}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."List the configured IBM i servers you can target with the `server` parameter. The default server is `.env`, and each additional `.env.<name>` file adds a server named <name>.",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.".env.example",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.(servers.length ? "" : `\nNo profiles found. Copy .env.example as .env or .env.<name> into one of the folders above.\n`) +Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.export const serverArg = z.string().optional().describe("which IBM i to use, named by a .env.<name> file. Omit for the default .env server (see list_servers)");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…ied by ibmi-agent-kit (2026): profiles resolve through @ibmi-agent-kit/core, no .env is loaded into process.env; adds IBMI_SQL_TRANSPORT, IBMI_MAPEPIRE_PORT and IBM…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.? `Configured servers:\n${servers.map((s) => `- ${s}${s === "default" ? " (.env)" : ` (.env.${s})`}`).join("\n")}`Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."List the configured IBM i servers, named by the .env.<name> files on disk, and the open 5250 sessions on each. Pass a name as `server` to any tool.",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- Do NOT copy `<context>`, `<rules>`, `<project_context>` blocks into the artifactFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
18 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Destructive command against a filesystem root or device≈ +9 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Unclaimed publisher≈ +8 on the totalClaim klintravis: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Hidden instructions≈ +6 on the totalRemove HTML comments, zero-width characters and white-on-white text that carry instructions. Everything the agent is meant to read should be visible to the person reading the file.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Hidden zero-width characters detected≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.