finaegis / cli
Zelta CLI — manage payments, SMS, wallets, and AI agents from the terminal
Package info
Type:project
pkg:composer/finaegis/cli
Requires
- php: ^8.4
- finaegis/payment-sdk: ^1.0
- guzzlehttp/guzzle: ^7.0
- symfony/console: ^7.0
Requires (Dev)
- phpunit/phpunit: ^11.0
README
Manage payments, SMS, wallets, and API monetization from the terminal. Built for humans and AI agents.
Mirror repo notice — if you're viewing this at
github.com/FinAegis/cli, that repo is a read-only split ofpackages/zelta-cli/from the FinAegis core banking monorepo. Please file issues and PRs against the monorepo.
Install
# npm (recommended, requires PHP 8.4+ on PATH) npm install -g @finaegis/cli # Composer composer global require finaegis/cli
Authentication
The CLI authenticates with a Sanctum personal access token:
- Sign in to the Zelta dashboard and open Profile → API Tokens (
/user/api-tokens). - Create a token with the abilities you need (
read,write,delete). - Log in — the token is verified against the API before being stored in
~/.zelta/credentials.json:
zelta auth:login --key <api-token>
A rejected token fails at login time (exit code 2), not on first use. zelta auth:status and zelta whoami re-verify the stored token server-side.
Quick Start
zelta auth:login --key <api-token> zelta pay:list --status settled zelta sms:send --to +37060012345 --message "Your code: 847291" zelta wallet:transactions --limit 10 zelta endpoints:list
Commands
| Group | Commands |
|---|---|
auth |
login, logout, status, token |
pay |
send, status, list, stats |
sms |
send, status, rates |
wallet |
balance, transactions, intent, tokens |
ramp |
status, kyc-link |
subscription |
status |
limits |
list, set, remove |
endpoints |
list |
agents |
register, discover |
sdk |
generate |
Note on wallet sends — Zelta wallets are non-custodial: every transaction is signed on-device (Privy passkey / device key), so the CLI cannot send funds.
wallet:transactionsandwallet:intentgive read-only visibility into wallet activity and send intents.
Note on ramp & subscription —
ramp:status/ramp:kyc-linkcover bank-rail deposit setup (KYC + virtual account);subscription:statusshows your tier and period end. All three are read/setup surfaces — money movement and plan changes happen in the app.
AI Agent Support
# JSON output for pipes zelta pay:list --json | jq '.[] | select(.status == "settled")' # Structured exit codes: 0=success, 1=error, 2=auth, 3=payment, 4=validation zelta pay:stats --json --period day | jq -e '.failed == 0'
Documentation
License
Apache-2.0