Alpaca Trading
gauss314/skills
Trading API de Alpaca: órdenes, posiciones, cuenta. An agent skill from gauss314/skills.
Preview, submit, inspect, and manage Alpaca paper-trading orders using the Alpaca CLI.
$ npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install alpacahq/alpaca-skills alpaca-trading-paper-trading-cli --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/alpacahq/alpaca-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/trading-api/paper-trading-cli .claude/skills/alpaca-trading-paper-trading-cli && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "alpaca-trading-paper-trading-cli" agent skill from https://github.com/alpacahq/alpaca-skills/tree/main/skills/trading-api/paper-trading-cli into .claude/skills/alpaca-trading-paper-trading-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alpaca-trading-paper-trading-cli", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/alpacahq/alpaca-skills/tree/main/skills/trading-api/paper-trading-cliType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install alpacahq/alpaca-skills alpaca-trading-paper-trading-cli --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alpacahq/alpaca-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/trading-api/paper-trading-cli .agents/skills/alpaca-trading-paper-trading-cli && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "alpaca-trading-paper-trading-cli" agent skill from https://github.com/alpacahq/alpaca-skills/tree/main/skills/trading-api/paper-trading-cli into .agents/skills/alpaca-trading-paper-trading-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alpaca-trading-paper-trading-cli", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install alpacahq/alpaca-skills alpaca-trading-paper-trading-cli --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alpacahq/alpaca-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/trading-api/paper-trading-cli .cursor/skills/alpaca-trading-paper-trading-cli && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "alpaca-trading-paper-trading-cli" agent skill from https://github.com/alpacahq/alpaca-skills/tree/main/skills/trading-api/paper-trading-cli into .cursor/skills/alpaca-trading-paper-trading-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alpaca-trading-paper-trading-cli", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/alpacahq/alpaca-skills.git --path skills/trading-api/paper-trading-cli--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install alpacahq/alpaca-skills alpaca-trading-paper-trading-cli --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alpacahq/alpaca-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/trading-api/paper-trading-cli .gemini/skills/alpaca-trading-paper-trading-cli && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "alpaca-trading-paper-trading-cli" agent skill from https://github.com/alpacahq/alpaca-skills/tree/main/skills/trading-api/paper-trading-cli into .gemini/skills/alpaca-trading-paper-trading-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alpaca-trading-paper-trading-cli", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install alpacahq/alpaca-skills alpaca-trading-paper-trading-cliInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/alpacahq/alpaca-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/trading-api/paper-trading-cli .github/skills/alpaca-trading-paper-trading-cli && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "alpaca-trading-paper-trading-cli" agent skill from https://github.com/alpacahq/alpaca-skills/tree/main/skills/trading-api/paper-trading-cli into .github/skills/alpaca-trading-paper-trading-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alpaca-trading-paper-trading-cli", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install alpacahq/alpaca-skills alpaca-trading-paper-trading-cli --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alpacahq/alpaca-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/trading-api/paper-trading-cli .opencode/skills/alpaca-trading-paper-trading-cli && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "alpaca-trading-paper-trading-cli" agent skill from https://github.com/alpacahq/alpaca-skills/tree/main/skills/trading-api/paper-trading-cli into .opencode/skills/alpaca-trading-paper-trading-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "alpaca-trading-paper-trading-cli", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
alpaca-trading-paper-trading-cliPreview, submit, inspect, and manage Alpaca paper-trading orders using the Alpaca CLI.
Alpaca Trading Paper Trading CLI is an agent skill from alpacahq/alpaca-skills. Preview, submit, inspect, and manage Alpaca paper-trading orders using the Alpaca CLI. Supports US equities, options, and crypto. Use this skill when you want your AI agent to take a strategy signal and execute it as a paper trade through the Alpaca command-line interface.
Its SKILL.md is about 9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `reference.md`).
It sits in Business, Finance & HR, covering Trading and backtesting. It works with Alpaca. The repository describes itself as: Agent skills for Alpaca's Trading API and Broker API: drop-in SKILL.md files for AI coding assistants. The licence is Apache-2.0.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 39111ab. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gobrewbashFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
paper-api.alpaca.marketsapi.alpaca.marketsAlso links to:
docs.alpaca.marketsalpaca.marketsFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
ALPACA_API_KEYALPACA_PAPER_API_KEYALPACA_SECRET_KEYALPACA_PAPER_SECRET_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Alpaca Trading Paper Trading CLI loads about 9k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 3,850 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from alpacahq/alpaca-skills at commit 39111ab, republished under its Apache-2.0 licence (© alpacahq). 3,850 words, ~8,983 tokens.
.claude/skills/alpaca-trading-paper-trading-cli/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Use this skill when you want your AI agent to preview, submit, inspect, and manage paper-trading orders using the Alpaca CLI.
This skill is written for you, a Trading API user working with your own Alpaca paper-trading account, CLI profile, and local workspace. Your agent executes all operations through the alpaca command-line tool, giving you full visibility into every command and its output.
This is the CLI-specific version. A generic (implementation-agnostic) version and an MCP-server version are also available as companion skills.
alpaca doctor and require its Trading: line to read https://paper-api.alpaca.markets. If it shows the live endpoint, STOP immediately and alert you.alpaca order submit with the paper profile.alpaca order get. Report fills, rejections, cancellations with portfolio impact.alpaca versionInstall if needed:
# Homebrew (macOS / Linux)
brew install alpacahq/tap/cli
# Or with Go — requires $GOPATH/bin (typically ~/go/bin) on your PATH
go install github.com/alpacahq/cli/cmd/alpaca@latestThe CLI is in Alpha Preview. Commands, flags, and output formats may change between releases, which is why your agent discovers flags at runtime rather than trusting any list in this file.
alpaca profile login
# or with API key
alpaca profile login --api-keyDiscover login options:
alpaca profile login --helpalpaca doctorYour agent runs this before every trading session. If it fails, no orders are submitted.
| Asset class | Requirement |
|---|---|
| US equities | Paper account active |
| Options | Options trading enabled on paper account |
| Crypto | Crypto trading enabled on paper account |
go install; the Homebrew formula ships a prebuilt binary and needs no Gouuidgen or equivalent (for client order IDs)External jq is not required. The CLI ships a built-in --jq flag that filters its own JSON output.
Your agent collects the following before proceeding to order construction:
| Parameter | Description | Default | Required |
|---|---|---|---|
signal_source | Origin of trade idea (backtest, manual, scheduled, strategy) | — | Yes |
symbol | Ticker symbol (e.g., AAPL, BTC/USD, AAPL250718C00200000) | — | Yes |
asset_class | us_equity, us_option, crypto | us_equity | Yes |
side | buy or sell | — | Yes |
qty | Number of shares/contracts/coins | — | Yes (or notional) |
notional | Dollar amount (fractional shares). Market orders with day TIF only; cannot combine with qty | — | Yes (or qty) |
order_type | market, limit, stop, stop_limit, trailing_stop — supported values vary by asset class | market | Yes |
time_in_force | day, gtc, ioc, fok, opg, cls — supported values vary by asset class | day for equities and options; gtc for crypto | Yes |
order_class | simple, bracket, oco, oto (equities); simple, mleg (options); simple (crypto) | simple | No |
limit_price | Required for limit/stop_limit | — | Conditional |
stop_price | Required for stop/stop_limit | — | Conditional |
trail_percent | For trailing_stop | — | Conditional |
trail_price | For trailing_stop | — | Conditional |
extended_hours | Allow pre/post-market fills | false | No |
client_order_id | Idempotency key, max 128 characters | Auto-generated by Alpaca if omitted | No |
profile | Alpaca CLI profile name. Set it via the ALPACA_PROFILE environment variable for the whole session — never with the -p/--profile flag. See the warning in Step 10 | Currently active paper profile | No |
output_format | JSON is the default; --csv for CSV, --jq '<expr>' to filter | JSON | No |
confirmation_mode | Require explicit yes before each order | ON | No |
max_position_pct | Max % of portfolio in single position | None | No |
max_order_value | Hard cap on single order notional | None | No |
Before building the order, your agent confirms:
Your agent uses these authoritative sources for validation:
| Source | URL | Used for |
|---|---|---|
| Create an order | https://docs.alpaca.markets/us/reference/postorder | Order parameters, per-asset-class constraints, status codes |
| Alpaca CLI docs | https://docs.alpaca.markets/us/docs/alpacas-cli | CLI commands, flags, syntax |
| Order types | https://docs.alpaca.markets/us/docs/orders-at-alpaca | Order type behavior and requirements |
| Paper trading | https://docs.alpaca.markets/us/docs/paper-trading | Paper environment specifics |
| Options trading | https://docs.alpaca.markets/us/docs/options-trading | Options order requirements and approval levels |
| Crypto trading | https://docs.alpaca.markets/us/docs/crypto-trading | Crypto order specifics |
| Alpaca disclosures | https://alpaca.markets/disclosures | Disclosure language |
Your agent verifies flags at runtime rather than trusting this file:
alpaca --help-all # full command tree with every flag
alpaca order submit --help # flags for one command
alpaca order submit --schema # response shape, without calling the APIThe CLI is in Alpha Preview, so flags and output shapes can change between releases. Anything in this skill that contradicts --help output is stale; trust the CLI.
Step 1 — Identify the signal source.
Your agent asks: "Where does this trade idea come from?" Options include:
Step 2 — Reiterate the strategy logic.
Your agent summarizes:
Step 3 — Confirm interpretation.
Your agent asks: "Is this interpretation correct? Should I proceed to configure the order?"
Step 4 — Confirm asset class and symbol.
Your agent validates the symbol format:
AAPL, MSFTAAPL250718C00200000BTC/USD, ETH/USDFormat is necessary but not sufficient — a well-formed symbol can still be untradable or delisted. Your agent confirms it against the asset record:
alpaca asset get --symbol-or-asset-id AAPLIt requires status = active and tradable = true, and checks fractionable before proposing a notional or fractional-quantity order. For options, it resolves real contracts with alpaca option contracts --underlying-symbols AAPL rather than hand-assembling an OCC string.
Step 5 — Confirm side, quantity, and order type.
Step 6 — Confirm time-in-force and pricing parameters.
Time-in-force is not uniform across asset classes. Your agent validates the combination before building the command, because the API rejects the invalid ones:
| Asset class | Order types | Time-in-force | Order classes |
|---|---|---|---|
| US equities | market, limit, stop, stop_limit, trailing_stop | day, gtc, opg, cls, ioc, fok | simple, bracket, oco, oto |
| US options | market, limit, stop, stop_limit (stop types single-leg only) | day, gtc | simple, mleg |
| Crypto | market, limit, stop_limit | gtc, ioc — but stop_limit is gtc-only, and ioc applies only to market and limit | simple |
The CLI supplies the time-in-force default itself based on symbol shape: a symbol containing / (i.e. a crypto pair) defaults to gtc, everything else to day. Submitting a crypto order without --time-in-force therefore sends gtc, not day.
Alpaca's own sources disagree on the options row, so treat it as guidance rather than a hard gate. The OpenAPI spec's TimeInForce/OrderType descriptions say options are market/limit with day only; the Options Trading page and the Placing Orders matrix both allow gtc and both allow stop/stop_limit on single-leg orders. The two product pages agree with each other against the spec blob, so this table follows them. Your agent still defaults to day as the conservative choice and lets Alpaca reject rather than pre-blocking an order that the matrix permits.
Additional constraints that cut across order type:
limit type with day or gtc TIF. Every other type and TIF is rejected outright.day and gtc.day TIF only, cannot be combined with qty, and cannot be replaced — cancel and resubmit instead.day or gtc, do not support extended hours, and are equities-only.mleg order class with up to 4 legs, and stop/stop_limit types are single-leg only.Step 7 — Confirm extended hours and client order ID preferences.
Alpaca supports three sessions outside regular hours, all of which require extended_hours: true on a limit order:
| Session | Window (ET) | Days |
|---|---|---|
| Overnight | 8:00pm – 4:00am | Sunday to Friday |
| Pre-market | 4:00am – 9:30am | Monday to Friday |
| After-hours | 4:00pm – 8:00pm | Monday to Friday |
Not every asset trades overnight; your agent confirms eligibility on the asset record rather than assuming.
Step 8 — Review risk controls.
Your agent presents any position-sizing or max-value constraints and validates:
Step 9 — Final configuration summary.
Your agent displays a complete parameter table and asks: "All parameters confirmed?"
Step 10 — Confirm the CLI resolves to the paper endpoint:
alpaca doctoralpaca doctor prints the fully-resolved trading endpoint under Connectivity::
Connectivity:
Trading: https://paper-api.alpaca.marketsYour agent requires that line to read https://paper-api.alpaca.markets. The profile name is not a substitute. The CLI resolves paper vs. live in a fixed order — ALPACA_LIVE_TRADE first, then the active profile's live_trade field, then a paper default — so an exported ALPACA_LIVE_TRADE=true sends a profile named "paper" straight to the live endpoint. alpaca doctor reports the result of that whole chain.
⚠️
alpaca doctorignores the-p/--profileflag. It accepts the flag and silently discards the value, always reporting the default profile. Every other command honors-p. Soalpaca doctor -p livereports the paper endpoint whilealpaca order submit -p livetrades against the live one, and the guard passes while the order goes out live.Your agent therefore never passes
-p/--profileto any command. To target a non-default profile it setsALPACA_PROFILEonce for the whole session, whichdoctordoes honor, so the check and the order resolve identically. If any command in the session is about to receive-p, your agent stops instead.
If the Trading: line shows https://api.alpaca.markets, your agent STOPS immediately:
⚠️ LIVE ENDPOINT DETECTED. Your agent will not proceed. Unset
ALPACA_LIVE_TRADE(or set it tofalse, which forces paper even on a live profile), select a paper profile withalpaca profile switch <paper-profile-name>, and restart.
Step 11 — Confirm connectivity from the same alpaca doctor output.
Your agent confirms all checks pass. If any fail, it reports the failure and does not proceed. It does not re-run alpaca doctor; one invocation covers both this step and Step 10. alpaca doctor exits 0 when every check passes and 1 when any check fails.
Step 12 — Fetch account status:
alpaca account getYour agent parses and verifies:
status = ACTIVEaccount_blocked = falsetrading_blocked = falsetrade_suspended_by_user = falsemultiplier — margin classification, and the only PDT signal the account object carries: 1 is a limited-margin cash-style account, 2 is a Reg T margin account, 4 is a PDT account with 4x intraday buying powerThe Trading API account object has no pattern_day_trader or daytrade_count field. Your agent must not read them; infer PDT status from multiplier instead.
Step 13 — Check buying power:
alpaca account get --jq '.buying_power'Your agent compares estimated order value against available buying power. If insufficient, it warns you before proceeding.
Step 14 — For options orders, check approval level:
alpaca account get --jq '{options_approved_level, options_trading_level, options_buying_power}'Your agent gates on options_trading_level, which is the effective level — the minimum of options_approved_level and the max_options_trading_level in account configuration. Approval alone does not authorize trading if configuration caps it lower.
| Level | Permits |
|---|---|
0 | Options trading disabled |
1 | Covered calls, cash-secured puts |
2 | Long calls and puts (adds to level 1) |
3 | Spreads and straddles (adds to level 2) |
Spreads require level 3, not level 2.
Step 15 — Show account summary.
Your agent presents:
┌─────────────────────────────────────┐
│ Paper Account Summary │
├─────────────────────────────────────┤
│ Endpoint: paper-api (PAPER) │
│ Profile: my-paper │
│ Status: ACTIVE │
│ Equity: $50,000.00 │
│ Buying Power: $100,000.00 │
│ Multiplier: 2 (Reg T margin) │
│ Options Level: 2 (effective) │
│ Crypto: ACTIVE │
└─────────────────────────────────────┘Step 16 — Build the CLI command but DO NOT execute yet.
Your agent constructs the full command and displays it, then validates it with --dry-run, which prints the request body the CLI would send without submitting anything:
alpaca order submit \
--symbol AAPL \
--side buy \
--qty 10 \
--type limit \
--limit-price 185.50 \
--time-in-force day \
--client-order-id a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
--dry-runThe command your agent shows you in the preview must be byte-identical to the one it later executes, minus --dry-run.
Step 17 — Display formatted order preview table:
┌─────────────────────────────────────────────┐
│ ORDER PREVIEW — NOT YET SUBMITTED │
├─────────────────────────────────────────────┤
│ Symbol: AAPL │
│ Side: BUY │
│ Quantity: 10 shares │
│ Order Type: LIMIT │
│ Limit Price: $185.50 │
│ Time in Force: DAY │
│ Extended Hours: No │
│ Est. Value: $1,855.00 │
│ Buying Power: $100,000.00 → $98,145.00 │
│ Client ID: a1b2c3d4-... │
│ Endpoint: paper-api (PAPER) │
├─────────────────────────────────────────────┤
│ ⚠️ This is a PAPER trade — no real money │
└─────────────────────────────────────────────┘Step 18 — If confirmation is ON: wait for explicit "yes" before proceeding.
Step 19 — If confirmation is OFF: show the preview, then submit automatically.
Step 20 — Execute the CLI command:
CLIENT_ORDER_ID="$(uuidgen)"
alpaca order submit \
--symbol AAPL \
--side buy \
--qty 10 \
--type limit \
--limit-price 185.50 \
--time-in-force day \
--client-order-id "$CLIENT_ORDER_ID"Your agent captures CLIENT_ORDER_ID before submitting, so the order stays recoverable if the command dies before printing a response.
Step 21 — Save raw CLI output to the run folder:
# Output saved to runs/<timestamp>-paper-trading-cli/raw/order_submit_response.jsonStep 22 — Parse response for key fields:
id (order ID)status (expected: new or accepted)created_atfilled_at (null for pending)filled_qtyfilled_avg_priceStep 23 — On failure:
0 success, 1 error, 2 auth failureruns/<timestamp>/raw/error.jsonIf the failure is ambiguous — a timeout, a killed process, any case where your agent cannot tell whether the order reached Alpaca — it must not resubmit. It looks the order up by the client order ID it generated in Step 20:
alpaca order get-by-client-id --client-order-id "$CLIENT_ORDER_ID"A hit means the order exists and resubmitting would duplicate it. Only a confirmed miss justifies a retry.
Step 24 — Check order status:
alpaca order get --order-id {order_id}Your agent reports:
Step 25 — List recent orders for context:
alpaca order list --status openStep 26 — Return order summary to you:
┌─────────────────────────────────────────────┐
│ ORDER SUBMITTED ✓ │
├─────────────────────────────────────────────┤
│ Order ID: abc-123-def-456 │
│ Status: NEW │
│ Symbol: AAPL │
│ Side/Qty: BUY 10 │
│ Type: LIMIT @ $185.50 │
│ Submitted: 2026-07-26T14:30:00Z │
├─────────────────────────────────────────────┤
│ Next commands: │
│ alpaca order get --order-id abc-123 │
│ alpaca order cancel --order-id abc-123 │
│ alpaca position list │
└─────────────────────────────────────────────┘Step 27 — Order lifecycle updates:
| Event | Agent action |
|---|---|
filled | Report fill price, calculate slippage vs. limit, show position impact |
partially_filled | Report filled qty, remaining qty, average price |
rejected | Surface rejection reason, suggest fix |
canceled | Confirm cancellation, show final state |
expired | Report expiration (TIF elapsed), suggest re-entry |
replaced | Confirm replacement parameters, show new order ID |
Step 28 — Fetch positions:
alpaca position listOr for a specific symbol:
alpaca position get --symbol-or-asset-id AAPLStep 29 — Fetch updated account:
alpaca account getStep 30 — Show portfolio risk summary:
┌─────────────────────────────────────────────┐
│ PORTFOLIO IMPACT │
├─────────────────────────────────────────────┤
│ New Position: AAPL — 10 shares @ $185.30 │
│ Position Value: $1,853.00 │
│ Portfolio %: 0.74% │
│ Buying Power: $98,147.00 (was $100,000) │
│ Total Equity: $250,000.00 │
│ Open Orders: 1 │
└─────────────────────────────────────────────┘Step 31 — Cancel a specific order:
alpaca order cancel --order-id {order_id}Your agent confirms cancellation and reports final order state.
Step 32 — Cancel all open orders.
cancel-all is unscoped: it cancels every open order on the account, including orders this session never created. The CLI executes it immediately with no confirmation prompt of its own, so your agent supplies the gate. It first shows exactly what will be destroyed:
alpaca order list --status open --jq '[.[] | {id, symbol, side, qty, type, limit_price}]'Your agent lists those orders, states the count, and requires an explicit "yes" — even when confirmation_mode is OFF, since that setting governs order entry rather than mass cancellation. Only then:
alpaca order cancel-allYour agent confirms total canceled and lists affected orders. The same gate applies to alpaca position close-all, which liquidates the entire portfolio.
Step 33 — Replace an order (modify price/qty):
Discover available flags first:
alpaca order replace --helpThen execute:
alpaca order replace --order-id {order_id} --qty 5 --limit-price 186.00Your agent reports the new order ID and updated parameters.
When you ask about automation, your agent provides guidance for:
Bash script wrapper. Unattended submission goes through a wrapper that proves the paper endpoint before it orders. Nothing scheduled calls alpaca order submit directly, so the guard cannot be bypassed by whichever scheduler invokes it:
#!/bin/bash
# /usr/local/bin/paper-trade.sh
set -euo pipefail
SYMBOL="${1:?usage: $0 SYMBOL SIDE QTY}"
SIDE="${2:?usage: $0 SYMBOL SIDE QTY}"
QTY="${3:?usage: $0 SYMBOL SIDE QTY}"
# Verify the CLI resolves to the paper endpoint
if ! alpaca doctor | grep -q 'Trading:.*https://paper-api\.alpaca\.markets'; then
echo "ERROR: CLI is not pointed at the paper endpoint. Exiting." >&2
exit 1
fi
alpaca order submit \
--symbol "$SYMBOL" \
--side "$SIDE" \
--qty "$QTY" \
--type market \
--time-in-force day \
--client-order-id "$(uuidgen)"Cron job. Cron calls the wrapper, never the raw CLI:
# /etc/cron.d/paper-trade
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
ALPACA_PROFILE=paper
0 9 * * 1-5 root /usr/local/bin/paper-trade.sh AAPL buy 1 >> /var/log/paper-trades.log 2>&1Cron runs with a near-empty environment and does not source your shell profile, so PATH, ALPACA_PROFILE, and credentials must be set explicitly — in the crontab as above, or sourced inside the wrapper from a file readable only by the job's user. A scheduled job that inherits nothing is the case where an unguarded submit is most dangerous: there is no operator watching and no prompt, which is why the endpoint check belongs in the script rather than in the schedule.
systemd timer / launchd plist: Your agent generates the appropriate service file for your OS, pointing it at the same wrapper.
CI/CD pipeline. Install the CLI, authenticate from the runner's secret store, and invoke the same wrapper — never alpaca order submit as a bare step:
- name: Submit paper order
env:
ALPACA_API_KEY: ${{ secrets.ALPACA_PAPER_API_KEY }}
ALPACA_SECRET_KEY: ${{ secrets.ALPACA_PAPER_SECRET_KEY }}
ALPACA_PROFILE: paper
run: ./scripts/paper-trade.sh AAPL buy 1CI is the easiest place to end up live by accident: the runner has no profile of yours, the keys come from whichever secret someone wired up, and a live key in a secret named for paper looks identical to a correct one at the call site. Naming the secret PAPER proves nothing, which is why the wrapper's alpaca doctor check — not the variable names — is what establishes the endpoint.
Key automation notes:
--quiet suppresses warnings, hints, and color. It is not what makes output machine-readable; JSON is the default with or without it. Use it in cron and CI to keep logs clean.ALPACA_OUTPUT=json|csv sets the default output format for a whole script.alpaca order submit directly, so the endpoint check cannot be skipped by adding a new trigger.--client-order-id for idempotency in retry scenarios.--client-order-id to prevent duplicate submissions on retry.-p/--profile to any command. alpaca doctor ignores it, so the paper check and the order can resolve to different profiles. Use ALPACA_PROFILE for the session instead.--jq '<expr>' to filter it and --csv only for human-facing tables. --quiet suppresses warnings, hints, and color; it does not change the data format.jq. The built-in --jq flag does the same job with one less dependency.--help, --help-all, and --schema before assuming syntax. The CLI is in Alpha Preview and may change between versions.raw/.alpaca doctor fails, do not proceed. Report the failure and stop.0 success, 1 error, 2 auth failure. Capture stderr and surface it.Retry-After. A second backoff layer on top of it turns one rate-limited call into a much longer stall. If a command still fails after the CLI's retries, surface the error and stop.--dry-run before submitting. It prints the exact request body without sending an order.order cancel-all and position close-all affect the whole account. Require explicit confirmation regardless of confirmation_mode.Every paper-trading session produces a run folder:
runs/<YYYYMMDD-HHMMSS>-paper-trading-cli/
notes.md # Session narrative: strategy, decisions, outcomes
raw/ # Saved raw CLI outputs
account.json # Account state at session start
order_submit_response.json # Raw submission response
order_status.json # Order status checks
positions.json # Position state after fills
clock.json # Market clock at submission time
error.json # Error output (if any)
orders.json # Structured order records
order_log.csv # Tabular log: timestamp, action, order_id, status, details
positions_snapshot.json # Position state post-trade
portfolio_summary.md # Human-readable portfolio impact
review.md # Session review: what worked, issues, next steps# Paper Trading Session — <timestamp>
## Signal Source
<origin of trade idea>
## Strategy
<strategy logic as confirmed>
## Orders Submitted
| # | Symbol | Side | Qty | Type | Status | Fill Price |
|---|--------|------|-----|------|--------|-----------|
## Portfolio Impact
<post-trade portfolio state>
## Issues / Notes
<any errors, warnings, or observations>timestamp,action,order_id,symbol,side,qty,type,limit_price,stop_price,tif,status,fill_price,fill_qty,errorYour agent runs these checks during execution.
| Check | Command | Pass condition |
|---|---|---|
| CLI installed | alpaca version | Exit code 0 |
| Connectivity | alpaca doctor | All checks pass |
| Paper endpoint | alpaca doctor | Trading: line reads https://paper-api.alpaca.markets |
| Account active | alpaca account get | status=ACTIVE, not blocked |
| Buying power | alpaca account get --jq '.buying_power' | Sufficient for order |
| Market open | alpaca clock | is_open=true (unless extended hours or GTC) |
| Symbol valid and tradable | alpaca asset get --symbol-or-asset-id X | status=active, tradable=true |
| Check | Command | Pass condition |
|---|---|---|
| Order accepted | alpaca order get --order-id X | Status != rejected |
| Fill received | Same | filled_qty > 0 |
| Position updated | alpaca position get --symbol-or-asset-id X | Reflects new position |
Important disclosure: This material is for informational, educational, and research purposes only. It is not investment advice, a recommendation, an offer, or a solicitation to buy or sell securities, options, cryptocurrencies, or any other financial product. All investing and trading involve risk, including possible loss of principal. Paper trading is simulated and may differ from live trading in fills, market impact, liquidity, fees, latency, and other factors. Review Alpaca's disclosures at https://alpaca.markets/disclosures.
| Control | Implementation |
|---|---|
| Live-trade prevention | Resolved-endpoint check before every submission |
| Confirmation gate | Default ON — explicit yes required |
| Buying-power check | Pre-submission validation |
| Connectivity verification | alpaca doctor at session start |
| Error isolation | Failures logged, do not cascade |
| Idempotency | --client-order-id prevents duplicates |
runs/.raw/ for your review.Your agent must NEVER:
| Anti-pattern | Why | Correct approach |
|---|---|---|
| Submit against the live endpoint | Real money at risk | Always confirm alpaca doctor reports the paper endpoint first |
| Skip confirmation when mode is ON | You lose control | Always honor confirmation preference |
| Modify order params silently | Violates your intent | Re-confirm any parameter changes |
| Give trading advice | Liability, not agent's role | Execute instructions, don't recommend |
| Hard-code CLI flags | Alpha Preview — flags may change between versions | Discover with --help, --help-all, and --schema |
Pipe output to external jq | Adds a dependency the CLI already provides | Use the built-in --jq flag |
Treat --quiet as the JSON switch | JSON is the default; --quiet only drops warnings, hints, and color | Parse the default output directly |
Read pattern_day_trader or daytrade_count | Neither field exists on the Trading API account object | Infer PDT from multiplier = 4 |
| Add a retry loop for 429s | The CLI already retries 3x and honors Retry-After | Surface the error after its retries fail |
Run cancel-all or close-all unprompted | Unscoped — hits orders and positions this session never created | List what will be affected, require explicit confirmation |
| Bypass Alpaca CLI with direct HTTP calls | This is the CLI version | Use alpaca commands exclusively |
| Ignore CLI exit codes | Missed errors | Check exit code, capture stderr |
Proceed after alpaca doctor fails | Connectivity not verified | Stop and report the failure |
| Store API keys in run folders | Security risk | Redact all credentials |
| Assume market hours | May be extended/crypto 24/7 | Check alpaca clock |
| Submit without buying-power check | Order will be rejected | Validate buying power first |
Use --csv output for programmatic parsing | Less structured than JSON | Parse the default JSON, filtered with --jq |
| File | Purpose |
|---|---|
reference.md | Detailed reference: order types, TIF, lifecycle, asset classes, errors |
| Skill | Description |
|---|---|
alpaca-trading-backtest | Historical backtesting via Alpaca CLI — produces signals this skill can execute |
alpaca-trading-paper-trading | Generic implementation-agnostic paper-trading skill |
alpaca-trading-paper-trading-mcp | MCP-server version of this skill |
© alpacahq, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/trading-api/paper-trading-cli of alpacahq/alpaca-skills.
Open the folder on GitHubat commit 39111ab
Alpaca Trading Paper Trading CLI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Alpaca Trading Paper Trading CLI this skillalpacahq/alpaca-skills | 154 | — | ~9k | Automated safety check: Pass | Apache-2.0 | |
| Alpaca Tradinggauss314/skills | 248 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Tushare Datazillionare/zillionare | 322 | 2 repos | ~2.3k | Automated safety check: Pass | None | |
| Tradingview MCPatilaahmettaner/tradingview-mcp | 5k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Digital Oraclekomako-workshop/digital-oracle | 878 | — | ~5.9k | Automated safety check: Pass | MIT | |
| Polyclawchainstacklabs/polyclaw | 359 | 1 repos | ~2k | Automated safety check: Pass | Apache-2.0 |
gauss314/skills
Trading API de Alpaca: órdenes, posiciones, cuenta. An agent skill from gauss314/skills.
zillionare/zillionare
面向中文自然语言的 Tushare 数据研究技能。用于把“看看这只股票最近怎么样”“帮我查财报趋势”“最近哪个板块最强”“北向资金在买什么”“给我导出一份行情数据”这类请求,转成可执行的数据获取、清洗、对比、筛选、导出与简要分析流程。适用于 A 股、指数、ETF/基金、财务、估值、资金流、公告新闻、板块概念与宏观数据等研究场景。
atilaahmettaner/tradingview-mcp
AI Trading Intelligence — live prices, 30+ technical indicators, backtesting (6 strategies), walk-forward overfitting detection, trade logs, equity curves, licensed news sentiment (Marketaux), and…
komako-workshop/digital-oracle
Answer prediction questions using market trading data, not opinions.
chainstacklabs/polyclaw
Trade on Polymarket via split + CLOB execution. An agent skill from chainstacklabs/polyclaw.
facioquo/stock-indicators-dotnet
Format and lint Markdown in this repository against GitHub Flavored Markdown and its markdownlint-cli2 configuration — headers, lists, code fences, callouts (VitePress containers on docs-site pages…
alpacahq/alpaca-skills
Open and manage brokerage accounts via the Alpaca Broker API — account creation, KYC/CIP, identity & disclosures, agreements, document upload (incl.
alpacahq/alpaca-skills
Move money between an Alpaca brokerage account and the EXTERNAL banking world via the Broker API — ACH relationships, wire recipient banks, classic transfers (deposits/withdrawals), the v1beta…
alpacahq/alpaca-skills
Entry point for integrating with the Alpaca Broker API (plus Market Data and Trading APIs) in any programming language.
alpacahq/alpaca-skills
Move cash (JNLC) and securities (JNLS) BETWEEN accounts inside your own Alpaca omnibus via the Broker API — single, batch, and reverse-batch journals, the Idempotency-Key header, journal status…
alpacahq/alpaca-skills
Handle money and numeric precision correctly with the Alpaca API — numbers-as-strings on the wire, decimals vs floats, rounding/truncation before sending amounts, fractional-share precision, and…
alpacahq/alpaca-skills
Make Alpaca API clients resilient — rate-limit header handling, HTTP 429 backoff, exponential retry, bounded concurrency/worker pools, pagination loops, batch sizing, and timeouts.
Works with
Categories
Preview, submit, inspect, and manage Alpaca paper-trading orders using the Alpaca CLI. Alpaca Trading Paper Trading CLI is an agent skill from alpacahq/alpaca-skills. Preview, submit, inspect, and manage Alpaca paper-trading orders using the Alpaca CLI.
Alpaca Trading Paper Trading CLI fits situations like: you want your AI agent to take a strategy signal and execute it as a paper trade through the Alpaca command-line interface; tasks that involve Trading and backtesting.
Run `npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a claude-code`. Or copy the skill folder (skills/trading-api/paper-trading-cli in alpacahq/alpaca-skills) into .claude/skills/alpaca-trading-paper-trading-cli in your project. Claude Code loads it when a task matches its description.
Run `npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a codex`. Or copy the skill folder (skills/trading-api/paper-trading-cli in alpacahq/alpaca-skills) into .agents/skills/alpaca-trading-paper-trading-cli in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add alpacahq/alpaca-skills --skill alpaca-trading-paper-trading-cli -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/alpaca-trading-paper-trading-cli, .gemini/skills/alpaca-trading-paper-trading-cli, .github/skills/alpaca-trading-paper-trading-cli and .opencode/skills/alpaca-trading-paper-trading-cli in your project.
Going by SKILL.md and its folder, Alpaca Trading Paper Trading CLI needs the command-line tools its instructions call (go, brew and bash) and credentials named ALPACA_API_KEY, ALPACA_PAPER_API_KEY, ALPACA_SECRET_KEY and ALPACA_PAPER_SECRET_KEY.
SKILL.md names 4 domains. In commands or code: paper-api.alpaca.markets and api.alpaca.markets; the agent is likely to contact these when it follows the instructions. As links in the text: docs.alpaca.markets and alpaca.markets. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Alpaca Trading Paper Trading CLI is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 9k tokens (SKILL.md is roughly 36k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Alpaca Trading Paper Trading CLI: Alpaca Trading (gauss314/skills, 248 stars), Tushare Data (zillionare/zillionare, 322 stars), Tradingview MCP (atilaahmettaner/tradingview-mcp, 5k stars) and Digital Oracle (komako-workshop/digital-oracle, 878 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
alpacahq (a GitHub organization) maintains it in alpacahq/alpaca-skills, which has 154 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on September 8, 2026.
Source: alpacahq/alpaca-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.