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---5
6# GLAM Protocol Skill
7
8GLAM provides programmable investment infrastructure on Solana: vaults with access control, DeFi integrations, and tokenization.
9
10## Quick Start
11
12```bash
13# Install CLI
14npm install -g @glamsystems/glam-cli
15
16# 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}
22EOF
23
24# Create vault, set active, enable integrations, verify
25glam-cli vault create ./vault-template.json
26glam-cli vault set <VAULT_STATE_PUBKEY>
27glam-cli integration enable JupiterSwap KaminoLend
28glam-cli vault view
29```
30
31## Critical: Integration Enablement
32
33**You MUST enable integrations BEFORE using them.** This is the most common error.
34
35Available: `JupiterSwap`, `DriftProtocol`, `KaminoLend`, `KaminoVaults`, `KaminoFarms`, `DriftVaults`, `SplToken`, `CCTP`, `GlamMint`, `Marinade` (staging), `StakePool` (staging), `SanctumSingle` (staging), `SanctumMulti` (staging), `StakeProgram` (staging).
36
37Staging integrations require `--bypass-warning`.
38
39---
40
41## Workflows
42
43### Tokenized Vault Setup
44
45```bash
46glam-cli vault create ./tokenized-vault-template.json
47glam-cli vault set <VAULT_STATE_PUBKEY>
48glam-cli integration enable JupiterSwap DriftProtocol KaminoLend
49glam-cli manage price # Set initial NAV price
50glam-cli jupiter set-max-slippage 100 # Configure swap policy
51
52# Optional: delegate trading permissions (protocol-scoped)
53glam-cli delegate grant <TRADER_PUBKEY> SwapAny --protocol JupiterSwap
54glam-cli delegate grant <TRADER_PUBKEY> Deposit Withdraw CreateModifyOrders CancelOrders --protocol DriftProtocol
55
56# Optional: set timelock (24 hours)
57glam-cli timelock set 86400
58```
59
60### Drift Trading
61
62```bash
63glam-cli integration enable DriftProtocol
64glam-cli drift-protocol init-user # Required once
65glam-cli drift-protocol deposit 0 1000 # Deposit USDC collateral
66glam-cli drift-protocol perp long 0 1 0 # Open position
67```
68
69### Kamino Lending
70
71```bash
72glam-cli integration enable KaminoLend
73glam-cli kamino-lend init # Required once
74glam-cli kamino-lend deposit \
75 7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF \
76 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
77 1000
78```
79
80---
81
82## Decision Tree
83
84| 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>` |
99
100---
101
102## Common Errors
103
104| 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 |
115
116> See [troubleshooting](./docs/troubleshooting.md) for detailed solutions.
117
118---
119
120## Common Mints
121
122| Token | Address |
123| ------- | ---------------------------------------------- |
124| SOL | `So11111111111111111111111111111111111111112` |
125| USDC | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` |
126| USDT | `Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB` |
127| mSOL | `mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So` |
128| jitoSOL | `J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn` |
129
130---
131
132## SDK Quick Start
133
134```typescript
135import {
136 GlamClient,
137 WSOL,
138 USDC,
139 getProgramAndBitflagByProtocolName,
140} from "@glamsystems/glam-sdk";
141import { BN } from "@coral-xyz/anchor";
142
143const client = new GlamClient({ wallet });
144
145// Create vault
146const { vaultPda } = await client.vault.create({
147 name: "My Vault",
148 assets: [WSOL, USDC],
149});
150
151// Enable Jupiter integration
152const perms = getProgramAndBitflagByProtocolName();
153const [program, bitflag] = perms["JupiterSwap"];
154await client.access.enableProtocols(vaultPda, program, parseInt(bitflag, 2));
155
156// Swap
157await client.jupiterSwap.swap(vaultPda, {
158 inputMint: USDC,
159 outputMint: WSOL,
160 amount: new BN(100_000_000),
161 slippageBps: 50,
162});
163```
164
165---
166
167## Reference
168
169- **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/