bx-ftp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bx-ftp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
# OS runtime
install-bx-module bx-ftp
# CommandBox web server
box install bx-ftpbx:ftp Actions| Action | Description |
|---|---|
open | Open a connection (creates named connection) |
close | Close a named connection |
putFile | Upload a local file to the server |
getFile | Download a file from the server |
listDir | List directory contents |
createDir | Create a remote directory |
deleteDir | Delete a remote directory |
remove | Delete a remote file |
rename | Rename/move a remote file or directory |
changeDir | Change the current remote directory |
getCurrentDir | Get the current remote working directory |
existsDir | Check if a remote directory exists |
existsFile | Check if a remote file exists |
// Open a named FTP connection
bx:ftp
action="open"
connection="myFTP"
server="ftp.example.com"
port=21
username="user"
password="secret"
passive=true
// Upload a file
bx:ftp
action="putFile"
connection="myFTP"
localFile="/local/path/report.pdf"
remoteFile="/uploads/report.pdf"
result="ftpResult"
if ( ftpResult.succeeded ) {
println( "Uploaded successfully" )
}
// Download a file
bx:ftp
action="getFile"
connection="myFTP"
remoteFile="/uploads/report.pdf"
localFile="/local/downloads/report.pdf"
// List directory
bx:ftp
action="listDir"
connection="myFTP"
directory="/uploads"
result="dirList"
returnType="query" // "query" (default) or "array"
for ( row in dirList ) {
println( "#row.name# (#row.type#) - #row.size# bytes" )
}
// Close connection
bx:ftp
action="close"
connection="myFTP"bx:ftp
action="open"
connection="mySFTP"
server="sftp.example.com"
port=22
username="sftpuser"
password="secret"
protocol="sftp"bx:ftp
action="open"
connection="secureSFTP"
server="sftp.example.com"
port=22
username="deployuser"
privateKeyFile="/home/app/.ssh/id_rsa"
privateKeyPassphrase="" // Optional — leave empty if key has no passphrase
protocol="sftp"bx:ftp
action="open"
connection="secureFTP"
server="ftp.example.com"
port=990
username="user"
password="secret"
secure=true // Enable FTPS
passive=true// Create a directory
bx:ftp action="createDir" connection="myFTP" directory="/uploads/2026"
// Check if directory exists
bx:ftp action="existsDir" connection="myFTP" directory="/uploads/2026" result="exists"
if ( !exists.value ) {
bx:ftp action="createDir" connection="myFTP" directory="/uploads/2026"
}
// Delete a directory
bx:ftp action="deleteDir" connection="myFTP" directory="/uploads/old"Every action populates a result struct with:
| Key | Description |
|---|---|
succeeded | Boolean — operation succeeded |
errorCode | FTP error code on failure |
errorText | Error message on failure |
returnValue | Action-specific return (e.g., current directory) |
action="close" in a finally blockpassive=true only applies to FTP, not SFTPconnection="myFTP") across multiple operations for efficiencyresult.succeeded before assuming an operation worked~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.