SkillsSOL Skills

GLAM Protocol

vaultstreasuryasset-managementclisdk
npx skills add https://raw.githubusercontent.com/glamsystems/glam-skill/refs/heads/main/SKILL.md

Purpose

Solana vault management via GLAM Protocol.

Trusted sources

Execution flow

Quick Start

Landing guidance

Operational guidance

  • Confirm network, fee, and endpoint assumptions before sending transactions or requests.
  • Prefer the protocol's documented production defaults over generic Solana defaults.
  • Re-fetch official docs if live behavior diverges from the embedded guide.

Failure handling

Fallback handling

  • Validate signer assumptions, addresses, and environment variables before retrying.
  • Simulate or use read-only verification paths before broadcasting changed transactions.
  • Escalate to the protocol's troubleshooting docs when behavior differs from the expected flow.

Full guide

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-userdepositperp | | Trade spot | DriftProtocol | drift-protocol init-userdepositspot | | Tokenized vault | — | vault createmanage 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