GLAM Protocol Skill
GLAM provides programmable investment infrastructure on Solana: vaults with access control, DeFi integrations, and tokenization.
Quick Start
# Install CLI
npm install -g @glamsystems/glam-cli
# Configure (~/.config/glam/config.json)
cat > ~/.config/glam/config.json << 'EOF'
{
"keypair_path": "~/.config/solana/id.json",
"json_rpc_url": "https://api.mainnet-beta.solana.com"
}
EOF
# Create vault, set active, enable integrations, verify
glam-cli vault create ./vault-template.json
glam-cli vault set <VAULT_STATE_PUBKEY>
glam-cli integration enable JupiterSwap KaminoLend
glam-cli vault view
Critical: Integration Enablement
You MUST enable integrations BEFORE using them. This is the most common error.
Available: JupiterSwap, DriftProtocol, KaminoLend, KaminoVaults, KaminoFarms, DriftVaults, SplToken, CCTP, GlamMint, Marinade (staging), StakePool (staging), SanctumSingle (staging), SanctumMulti (staging), StakeProgram (staging).
Staging integrations require --bypass-warning.
Workflows
Tokenized Vault Setup
glam-cli vault create ./tokenized-vault-template.json
glam-cli vault set <VAULT_STATE_PUBKEY>
glam-cli integration enable JupiterSwap DriftProtocol KaminoLend
glam-cli manage price # Set initial NAV price
glam-cli jupiter set-max-slippage 100 # Configure swap policy
# Optional: delegate trading permissions (protocol-scoped)
glam-cli delegate grant <TRADER_PUBKEY> SwapAny --protocol JupiterSwap
glam-cli delegate grant <TRADER_PUBKEY> Deposit Withdraw CreateModifyOrders CancelOrders --protocol DriftProtocol
# Optional: set timelock (24 hours)
glam-cli timelock set 86400
Drift Trading
glam-cli integration enable DriftProtocol
glam-cli drift-protocol init-user # Required once
glam-cli drift-protocol deposit 0 1000 # Deposit USDC collateral
glam-cli drift-protocol perp long 0 1 0 # Open position
Kamino Lending
glam-cli integration enable KaminoLend
glam-cli kamino-lend init # Required once
glam-cli kamino-lend deposit \
7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF \
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
1000
Decision Tree
| Goal |
Integration |
Command |
| Swap tokens |
JupiterSwap |
jupiter swap |
| Lend for yield |
KaminoLend |
kamino-lend deposit |
| Stake SOL (liquid) |
Marinade (staging) |
marinade --bypass-warning stake |
| Stake SOL (LST) |
StakePool / SanctumSingle / SanctumMulti (staging) |
lst --bypass-warning stake <pool> <amount> |
| Stake SOL (native) |
StakeProgram (staging) |
stake --bypass-warning list / deactivate / withdraw |
| Kamino vaults |
KaminoVaults |
kamino-vaults deposit |
| Drift vaults |
DriftVaults |
drift-vaults deposit |
| Trade perps |
DriftProtocol |
drift-protocol init-user → deposit → perp |
| Trade spot |
DriftProtocol |
drift-protocol init-user → deposit → spot |
| Tokenized vault |
— |
vault create → manage price → investors invest subscribe |
| Manage share tokens |
— |
SDK only: client.mint.* (freeze, issue, burn, forceTransfer) |
| Bridge USDC |
CCTP |
cctp bridge-usdc <amount> <domain> <dest> (0=ETH, 1=AVAX, 2=OP, 3=ARB, 6=BASE, 7=POLYGON) |
| Timelock |
— |
timelock set <seconds> |
Common Errors
| Error |
Solution |
| "Signer is not authorized" |
Check vault view for owner; grant delegate if needed |
| "Integration not enabled" |
integration enable <NAME> |
| "Asset not in allowlist" |
vault allowlist-asset <MINT> |
| "User not initialized" |
drift-protocol init-user or kamino-lend init |
| "No route found" |
Try smaller amount; check token liquidity |
| "Slippage exceeded" |
Increase --slippage-bps or reduce amount |
| "Insufficient collateral" |
drift-protocol deposit more |
| "Account is frozen" |
SDK: client.mint.setTokenAccountsStates() |
| "Missing jupiter_api_key" |
Add jupiter_api_key to config.json |
See troubleshooting for detailed solutions.
Common Mints
| Token |
Address |
| SOL |
So11111111111111111111111111111111111111112 |
| USDC |
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
| USDT |
Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB |
| mSOL |
mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So |
| jitoSOL |
J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn |
SDK Quick Start
import {
GlamClient,
WSOL,
USDC,
getProgramAndBitflagByProtocolName,
} from "@glamsystems/glam-sdk";
import { BN } from "@coral-xyz/anchor";
const client = new GlamClient({ wallet });
// Create vault
const { vaultPda } = await client.vault.create({
name: "My Vault",
assets: [WSOL, USDC],
});
// Enable Jupiter integration
const perms = getProgramAndBitflagByProtocolName();
const [program, bitflag] = perms["JupiterSwap"];
await client.access.enableProtocols(vaultPda, program, parseInt(bitflag, 2));
// Swap
await client.jupiterSwap.swap(vaultPda, {
inputMint: USDC,
outputMint: WSOL,
amount: new BN(100_000_000),
slippageBps: 50,
});
Reference
- CLI: vault, delegate, jupiter, drift-protocol, kamino-lend, kamino-vaults, kamino-farms, drift-vaults, staking, lst, invest, manage, transfer, advanced, alt
- SDK: client, integrations, mint, multisig
- Other: concepts, examples, troubleshooting
- Docs: https://docs.glam.systems/
1---2name: glam3description: Solana vault management via GLAM Protocol. Triggers: glam, glam-cli, glam-sdk, vault create/manage, tokenized vault, share class, DeFi vault, treasury, asset management, access control, delegate permissions, Jupiter swap, Drift perpetuals/spot/vaults, Kamino lending/borrow/vaults/farms, staking (Marinade/native/SPL/Sanctum/LST), cross-chain USDC (CCTP), timelock, subscription/redemption, NAV pricing, token transfer. Supports CLI and TypeScript SDK.4---56# GLAM Protocol Skill78GLAM provides programmable investment infrastructure on Solana: vaults with access control, DeFi integrations, and tokenization.910## Quick Start1112```bash13# Install CLI14npm install -g @glamsystems/glam-cli1516# Configure (~/.config/glam/config.json)17cat > ~/.config/glam/config.json << 'EOF'18{19 "keypair_path": "~/.config/solana/id.json",20 "json_rpc_url": "https://api.mainnet-beta.solana.com"21}22EOF2324# Create vault, set active, enable integrations, verify25glam-cli vault create ./vault-template.json26glam-cli vault set <VAULT_STATE_PUBKEY>27glam-cli integration enable JupiterSwap KaminoLend28glam-cli vault view29```3031## Critical: Integration Enablement3233**You MUST enable integrations BEFORE using them.** This is the most common error.3435Available: `JupiterSwap`, `DriftProtocol`, `KaminoLend`, `KaminoVaults`, `KaminoFarms`, `DriftVaults`, `SplToken`, `CCTP`, `GlamMint`, `Marinade` (staging), `StakePool` (staging), `SanctumSingle` (staging), `SanctumMulti` (staging), `StakeProgram` (staging).3637Staging integrations require `--bypass-warning`.3839---4041## Workflows4243### Tokenized Vault Setup4445```bash46glam-cli vault create ./tokenized-vault-template.json47glam-cli vault set <VAULT_STATE_PUBKEY>48glam-cli integration enable JupiterSwap DriftProtocol KaminoLend49glam-cli manage price # Set initial NAV price50glam-cli jupiter set-max-slippage 100 # Configure swap policy5152# Optional: delegate trading permissions (protocol-scoped)53glam-cli delegate grant <TRADER_PUBKEY> SwapAny --protocol JupiterSwap54glam-cli delegate grant <TRADER_PUBKEY> Deposit Withdraw CreateModifyOrders CancelOrders --protocol DriftProtocol5556# Optional: set timelock (24 hours)57glam-cli timelock set 8640058```5960### Drift Trading6162```bash63glam-cli integration enable DriftProtocol64glam-cli drift-protocol init-user # Required once65glam-cli drift-protocol deposit 0 1000 # Deposit USDC collateral66glam-cli drift-protocol perp long 0 1 0 # Open position67```6869### Kamino Lending7071```bash72glam-cli integration enable KaminoLend73glam-cli kamino-lend init # Required once74glam-cli kamino-lend deposit \75 7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF \76 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \77 100078```7980---8182## Decision Tree8384| Goal | Integration | Command |85|---------------------| -------------------- | ------------------------------------------------------------------------------------------- |86| Swap tokens | `JupiterSwap` | `jupiter swap` |87| Lend for yield | `KaminoLend` | `kamino-lend deposit` |88| Stake SOL (liquid) | `Marinade` (staging) | `marinade --bypass-warning stake` |89| Stake SOL (LST) | `StakePool` / `SanctumSingle` / `SanctumMulti` (staging) | `lst --bypass-warning stake <pool> <amount>` |90| Stake SOL (native) | `StakeProgram` (staging) | `stake --bypass-warning list / deactivate / withdraw` |91| Kamino vaults | `KaminoVaults` | `kamino-vaults deposit` |92| Drift vaults | `DriftVaults` | `drift-vaults deposit` |93| Trade perps | `DriftProtocol` | `drift-protocol init-user` → `deposit` → `perp` |94| Trade spot | `DriftProtocol` | `drift-protocol init-user` → `deposit` → `spot` |95| Tokenized vault | — | `vault create` → `manage price` → investors `invest subscribe` |96| Manage share tokens | — | SDK only: `client.mint.*` (freeze, issue, burn, forceTransfer) |97| Bridge USDC | `CCTP` | `cctp bridge-usdc <amount> <domain> <dest>` (0=ETH, 1=AVAX, 2=OP, 3=ARB, 6=BASE, 7=POLYGON) |98| Timelock | — | `timelock set <seconds>` |99100---101102## Common Errors103104| Error | Solution |105| -------------------------- | ------------------------------------------------------ |106| "Signer is not authorized" | Check `vault view` for owner; grant delegate if needed |107| "Integration not enabled" | `integration enable <NAME>` |108| "Asset not in allowlist" | `vault allowlist-asset <MINT>` |109| "User not initialized" | `drift-protocol init-user` or `kamino-lend init` |110| "No route found" | Try smaller amount; check token liquidity |111| "Slippage exceeded" | Increase `--slippage-bps` or reduce amount |112| "Insufficient collateral" | `drift-protocol deposit` more |113| "Account is frozen" | SDK: `client.mint.setTokenAccountsStates()` |114| "Missing jupiter_api_key" | Add `jupiter_api_key` to config.json |115116> See [troubleshooting](./docs/troubleshooting.md) for detailed solutions.117118---119120## Common Mints121122| Token | Address |123| ------- | ---------------------------------------------- |124| SOL | `So11111111111111111111111111111111111111112` |125| USDC | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` |126| USDT | `Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB` |127| mSOL | `mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So` |128| jitoSOL | `J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn` |129130---131132## SDK Quick Start133134```typescript135import {136 GlamClient,137 WSOL,138 USDC,139 getProgramAndBitflagByProtocolName,140} from "@glamsystems/glam-sdk";141import { BN } from "@coral-xyz/anchor";142143const client = new GlamClient({ wallet });144145// Create vault146const { vaultPda } = await client.vault.create({147 name: "My Vault",148 assets: [WSOL, USDC],149});150151// Enable Jupiter integration152const perms = getProgramAndBitflagByProtocolName();153const [program, bitflag] = perms["JupiterSwap"];154await client.access.enableProtocols(vaultPda, program, parseInt(bitflag, 2));155156// Swap157await client.jupiterSwap.swap(vaultPda, {158 inputMint: USDC,159 outputMint: WSOL,160 amount: new BN(100_000_000),161 slippageBps: 50,162});163```164165---166167## Reference168169- **CLI**: [vault](./resources/cli/vault.md), [delegate](./resources/cli/delegate.md), [jupiter](./resources/cli/jupiter.md), [drift-protocol](./resources/cli/drift-protocol.md), [kamino-lend](./resources/cli/kamino-lend.md), [kamino-vaults](./resources/cli/kamino-vaults.md), [kamino-farms](./resources/cli/kamino-farms.md), [drift-vaults](./resources/cli/drift-vaults.md), [staking](./resources/cli/staking.md), [lst](./resources/cli/lst.md), [invest](./resources/cli/invest.md), [manage](./resources/cli/manage.md), [transfer](./resources/cli/transfer.md), [advanced](./resources/cli/advanced.md), [alt](./resources/cli/alt.md)170- **SDK**: [client](./resources/sdk/client.md), [integrations](./resources/sdk/integrations.md), [mint](./resources/sdk/mint.md), [multisig](./resources/sdk/multisig.md)171- **Other**: [concepts](./resources/concepts.md), [examples](./examples/EXAMPLES.md), [troubleshooting](./docs/troubleshooting.md)172- **Docs**: https://docs.glam.systems/