feat: add skills

This commit is contained in:
Shotaro Nakamura
2026-06-24 22:01:39 +09:00
parent e08920bc47
commit df40c591a5
4 changed files with 534 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
---
name: mnie-cli
description: 'Use when an AI agent should operate the installed `mnie` command for a user: managing Mnie profiles, logging in, listing RPC methods, calling finance/account/market/order methods, handling passkey IDs, or explaining safe `mnie` usage in an environment where the CLI is already installed.'
---
# Mnie CLI
Use the installed `mnie` command. Do not assume access to the CLI source repository, build artifacts, or project-local scripts.
## Basics
- Confirm `mnie --help` if command syntax is uncertain.
- Use `mnie profile list` to inspect configured profiles when profile context is unclear.
- Use `--profile <name>` when the user specifies a profile; otherwise rely on the configured default profile.
- Use `--passkey-id <id>` when the target RPC method requires an SBI session connection.
- Pass method parameters as a single JSON string to `rpc call`.
- Preserve identifiers such as issue codes, order numbers, and passkey IDs as strings.
## Commands
Read `references/cli-commands.md` for concrete command examples.
Read `references/rpc-methods.md` when choosing an RPC method or forming params for `mnie rpc call`.
## Safety
- Do not invent direct commands such as `mnie account profile` unless `mnie --help` shows that syntax.
- Prefer read-only calls unless the user explicitly asks for a trade/order action.
- For live trading RPC methods, require explicit user confirmation and include `allowTrading: true` only when the user clearly requested submission.
- Do not fabricate API keys, profile names, passkey IDs, trade passwords, or server origins.
- Store profile origins as origins only. Do not include real endpoint paths in profile origins.
## Output
Return concise command results and the exact command shape used, but do not expose secrets such as API keys or access tokens.
+4
View File
@@ -0,0 +1,4 @@
interface:
display_name: 'Mnie CLI'
short_description: 'Operate installed mnie safely'
default_prompt: 'Use $mnie-cli to run the installed mnie command for a Mnie task.'
+175
View File
@@ -0,0 +1,175 @@
# Mnie CLI Commands
## Help
```bash
mnie --help
```
## Profiles
Add a profile:
```bash
mnie profile add local \
--origin http://127.0.0.1:8787 \
--api-key mnie_xxx
```
List profiles:
```bash
mnie profile list
```
Use a profile as default:
```bash
mnie profile use local
```
`--origin` should be an origin only, such as `https://example.com` or `http://127.0.0.1:8787`.
## OAuth Login
```bash
mnie login \
--origin http://127.0.0.1:8787 \
--profile local
```
Optional flags:
- `--scopes "mcp read write trade"`
- `--storage file`
- `--storage keyring`
## RPC
List available RPC methods:
```bash
mnie rpc methods --profile local
```
All known RPC method paths:
```text
session.profile
account.profile
account.assets.current
account.power.buyingPower
account.power.collateralRatio
account.positions.cash
account.positions.cashDetail
account.positions.cashForIssue
account.positions.margin
account.positions.marginDetail
account.positions.marginForIssue
account.positions.marginSummaryForIssue
account.positions.marginDetailsForIssue
account.positions.closeableMargin
account.positions.deliverableMargin
account.profitLoss.unrealized
market.issue.search
market.issue.suggest
market.issue.allowedPrices
market.issue.board
market.issue.pollBoard
market.issue.chart
market.issue.openOrders
market.issue.tradingInfo
market.index.major
market.overview
market.ranking.market
market.ranking.sector
market.ranking.sbi
news.list
watchlist.list
orders.inquiry.executionsToday
orders.inquiry.open
orders.inquiry.detail
orders.inquiry.tradeRecords
orders.cash.preOrder
orders.cash.estimate
orders.cash.place
orders.cash.estimateCorrection
orders.cash.estimateCorrectionConfirm
orders.cash.placeCorrection
orders.cash.estimateCancel
orders.cash.placeCancel
orders.margin.preOrderOpen
orders.margin.estimateOpen
orders.margin.open
orders.margin.preOrderClose
orders.margin.estimateClose
orders.margin.close
orders.margin.estimateCloseSummary
orders.margin.closeSummary
orders.margin.estimateSummary
orders.margin.placeSummary
orders.margin.preOrderActualDelivery
orders.margin.estimateActualDelivery
orders.margin.actualDelivery
orders.ifd.estimate
orders.ifd.place
orders.ifd.estimateCorrection
orders.ifd.placeCorrection
orders.ifd.estimateCancel
orders.ifd.placeCancel
orders.themeInvestment.list
orders.themeInvestment.estimate
orders.themeInvestment.place
orders.exchange.rate
orders.exchange.estimate
orders.exchange.place
```
For per-method params and examples, see `rpc-methods.md`.
Call a method without params:
```bash
mnie rpc call account.profile \
--profile local \
--passkey-id sbi_xxx
```
Call a method with params:
```bash
mnie rpc call market.issue.board \
'{"issueCode":"7203","market":"T"}' \
--profile local \
--passkey-id sbi_xxx
```
## Common Read-Only Calls
Account profile:
```bash
mnie rpc call account.profile --profile local --passkey-id sbi_xxx
```
Market board:
```bash
mnie rpc call market.issue.board \
'{"issueCode":"7203","market":"T"}' \
--profile local \
--passkey-id sbi_xxx
```
Open orders:
```bash
mnie rpc call orders.inquiry.open \
'{"market":"T"}' \
--profile local \
--passkey-id sbi_xxx
```
## Trading Calls
Only use live placement/cancellation/correction methods after explicit user confirmation. Include `allowTrading: true` only for confirmed live submission.
+321
View File
@@ -0,0 +1,321 @@
# RPC Method Usage
Use this shape:
```bash
mnie rpc call <method> '<json-params>' --profile <profile> --passkey-id <passkey-id>
```
Omit `'<json-params>'` for methods with no params. Keep identifiers such as `issueCode`, `orderNumber`, `orderId`, and `passkey-id` as strings.
## Input And Output Types
`none` means omit the JSON params argument. A trailing `?` means the params object is optional.
| Method | Input | Output |
| ----------------------------------------- | ------------------------------------- | ------------------------------ |
| `session.profile` | none | `AccountProfile` |
| `account.profile` | none | `AccountProfile` |
| `account.assets.current` | none | `AccountAssetsValuations` |
| `account.power.buyingPower` | `AccountPowerOptions?` | `BuyingPower` |
| `account.power.collateralRatio` | `AccountPowerOptions?` | `BuyingPower` |
| `account.positions.cash` | `CashPositionOptions?` | `CashPositionList` |
| `account.positions.cashDetail` | `CashPositionOptions?` | `CashPositionList` |
| `account.positions.cashForIssue` | `IssueOptions` | `CashPositionList` |
| `account.positions.margin` | `MarginPositionOptions?` | `MarginPositionList` |
| `account.positions.marginDetail` | `MarginPositionOptions?` | `MarginPositionList` |
| `account.positions.marginForIssue` | `IssueOptions` | `MarginPositionList` |
| `account.positions.marginSummaryForIssue` | `IssueOptions` | `MarginPositionList` |
| `account.positions.marginDetailsForIssue` | `IssueOptions` | `MarginPositionList` |
| `account.positions.closeableMargin` | `MarginPositionOptions` | `MarginPositionList` |
| `account.positions.deliverableMargin` | `MarginPositionOptions` | `MarginPositionList` |
| `account.profitLoss.unrealized` | `ProfitLossOptions?` | `ProfitLossSummary` |
| `market.issue.search` | `IssueSearchOptions` | `IssueSearchResult` |
| `market.issue.suggest` | `IssueSearchOptions` | `IssueSearchResult` |
| `market.issue.allowedPrices` | `IssueOptions` | `Quote` |
| `market.issue.board` | `IssueOptions` | `Board` |
| `market.issue.pollBoard` | `MarketIssueBoardPollingOptions` | `AsyncIterableIterator<Board>` |
| `market.issue.chart` | `IssueChartOptions` | `IssueChart` |
| `market.issue.openOrders` | `IssueOptions` | `OrderList` |
| `market.issue.tradingInfo` | `BoardOptions` | `Board` |
| `market.index.major` | none | `MarketIndex[]` |
| `market.overview` | none | `DomesticMarket` |
| `market.ranking.market` | none | `Ranking` |
| `market.ranking.sector` | none | `Ranking` |
| `market.ranking.sbi` | none | `Ranking` |
| `news.list` | none | `NewsList` |
| `watchlist.list` | none | `Watchlist[]` |
| `orders.inquiry.executionsToday` | `OrderInquiryOptions?` | `OrderList` |
| `orders.inquiry.open` | `OrderInquiryOptions?` | `OrderList` |
| `orders.inquiry.detail` | `OrderDetailOptions` | `Order` |
| `orders.inquiry.tradeRecords` | `TradeRecordInquiryOptions` | `TradeRecordList` |
| `orders.cash.preOrder` | `CashOrderPreOrderOptions` | `StockOrderPreOrder` |
| `orders.cash.estimate` | `CashOrderOptions` | `OrderPreview` |
| `orders.cash.place` | `PlaceCashOrderOptions` | `OrderReceipt` |
| `orders.cash.estimateCorrection` | `OrderCorrectionOptions` | `OrderPreview` |
| `orders.cash.estimateCorrectionConfirm` | `OrderCorrectionOptions` | `OrderPreview` |
| `orders.cash.placeCorrection` | `PlaceOrderCorrectionOptions` | `OrderReceipt` |
| `orders.cash.estimateCancel` | `OrderCancelOptions` | `OrderPreview` |
| `orders.cash.placeCancel` | `PlaceOrderCancelOptions` | `OrderReceipt` |
| `orders.margin.preOrderOpen` | `MarginOpenOrderPreOrderOptions` | `StockOrderPreOrder` |
| `orders.margin.estimateOpen` | `MarginOpenOrderOptions` | `OrderPreview` |
| `orders.margin.open` | `PlaceMarginOpenOrderOptions` | `OrderReceipt` |
| `orders.margin.preOrderClose` | `MarginCloseOrderPreOrderOptions` | `StockOrderPreOrder` |
| `orders.margin.estimateClose` | `MarginCloseOrderOptions` | `OrderPreview` |
| `orders.margin.close` | `PlaceMarginCloseOrderOptions` | `OrderReceipt` |
| `orders.margin.estimateCloseSummary` | `MarginCloseOrderOptions` | `OrderPreview` |
| `orders.margin.closeSummary` | `PlaceMarginCloseOrderOptions` | `OrderReceipt` |
| `orders.margin.estimateSummary` | `MarginCloseSummaryOrderOptions` | `OrderPreview` |
| `orders.margin.placeSummary` | `PlaceMarginCloseSummaryOrderOptions` | `OrderReceipt` |
| `orders.margin.preOrderActualDelivery` | `ActualDeliveryOrderPreOrderOptions` | `StockOrderPreOrder` |
| `orders.margin.estimateActualDelivery` | `ActualDeliveryOrderOptions` | `OrderPreview` |
| `orders.margin.actualDelivery` | `PlaceActualDeliveryOrderOptions` | `OrderReceipt` |
| `orders.ifd.estimate` | `IfdOrderOptions` | `OrderPreview` |
| `orders.ifd.place` | `PlaceIfdOrderOptions` | `OrderReceipt` |
| `orders.ifd.estimateCorrection` | `OrderCorrectionOptions` | `OrderPreview` |
| `orders.ifd.placeCorrection` | `PlaceOrderCorrectionOptions` | `OrderReceipt` |
| `orders.ifd.estimateCancel` | `OrderCancelOptions` | `OrderPreview` |
| `orders.ifd.placeCancel` | `PlaceOrderCancelOptions` | `OrderReceipt` |
| `orders.themeInvestment.list` | `ThemeInvestmentPreOrderOptions` | `ThemeInvestmentList` |
| `orders.themeInvestment.estimate` | `ThemeInvestmentOrderOptions` | `OrderPreview` |
| `orders.themeInvestment.place` | `PlaceThemeInvestmentOrderOptions` | `OrderReceipt` |
| `orders.exchange.rate` | `ExchangeRateOptions` | `ExchangeRateInfo` |
| `orders.exchange.estimate` | `ExchangeOrderOptions` | `ExchangeOrderPreview` |
| `orders.exchange.place` | `PlaceExchangeOrderOptions` | `ExchangeOrderReceipt` |
## Common Input Shapes
These are the most common params objects agents need to construct. For exact field definitions, inspect the SDK/type reference that ships with the target environment.
```ts
type PagingOptions = { index?: number; limit?: number }
type DateRangeOptions = { from?: string; to?: string }
type IssueOptions = { issueCode: string; market: MarketCode }
type IssueSearchOptions = { query: string; market: MarketCode; limit?: number }
type AccountPowerOptions = { includeMarginAccount?: boolean }
type ProfitLossOptions = { market?: MarketCode }
type CashPositionOptions = PagingOptions & {
issueCode?: string
market?: MarketCode
accountType?: AccountType
}
type MarginPositionOptions = PagingOptions & {
issueCode?: string
market?: MarketCode
side?: MarginTradeSide
accountType?: AccountType
}
type OrderInquiryOptions = PagingOptions &
DateRangeOptions & {
issueCode?: string
market?: MarketCode
status?: OrderStatus
}
type OrderDetailOptions = {
orderNumber?: string
orderId?: string
issueCode?: string
market: MarketCode
}
type TradeRecordInquiryOptions = OrderInquiryOptions & {
accountType?: AccountType
}
```
Order option types are intentionally broad. Prefer pre-order and estimate methods first; use the resulting constraints to fill live order payloads.
## Session
```bash
mnie rpc call session.profile --profile local --passkey-id sbi_xxx
```
## Account
```bash
mnie rpc call account.profile --profile local --passkey-id sbi_xxx
mnie rpc call account.assets.current --profile local --passkey-id sbi_xxx
mnie rpc call account.power.buyingPower '{}' --profile local --passkey-id sbi_xxx
mnie rpc call account.power.collateralRatio '{"includeMarginAccount":true}' --profile local --passkey-id sbi_xxx
```
Positions:
```bash
mnie rpc call account.positions.cash '{}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.cashDetail '{}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.cashForIssue '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.margin '{}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.marginDetail '{}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.marginForIssue '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.marginSummaryForIssue '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.marginDetailsForIssue '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.closeableMargin '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
mnie rpc call account.positions.deliverableMargin '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
```
Profit and loss:
```bash
mnie rpc call account.profitLoss.unrealized '{}' --profile local --passkey-id sbi_xxx
mnie rpc call account.profitLoss.unrealized '{"market":"T"}' --profile local --passkey-id sbi_xxx
```
Common optional filters for list-style account calls:
```json
{ "index": 0, "limit": 100, "issueCode": "7203", "market": "T", "accountType": "specific" }
```
## Market
Issue search and quotes:
```bash
mnie rpc call market.issue.search '{"query":"7203","market":"T","limit":10}' --profile local --passkey-id sbi_xxx
mnie rpc call market.issue.suggest '{"query":"トヨタ","market":"T","limit":10}' --profile local --passkey-id sbi_xxx
mnie rpc call market.issue.allowedPrices '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
mnie rpc call market.issue.board '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
mnie rpc call market.issue.chart '{"issueCode":"7203","market":"T","period":"day","count":120}' --profile local --passkey-id sbi_xxx
mnie rpc call market.issue.openOrders '{"issueCode":"7203","market":"T"}' --profile local --passkey-id sbi_xxx
mnie rpc call market.issue.tradingInfo '{"issueCode":"7203","market":"T","side":"cashBuy"}' --profile local --passkey-id sbi_xxx
```
`market.issue.pollBoard` is a polling/iterator method. Prefer `market.issue.board` for one-shot CLI output unless `mnie rpc call market.issue.pollBoard ...` is known to serialize streaming results in the target environment.
Indexes, overview, rankings:
```bash
mnie rpc call market.index.major --profile local --passkey-id sbi_xxx
mnie rpc call market.overview --profile local --passkey-id sbi_xxx
mnie rpc call market.ranking.market --profile local --passkey-id sbi_xxx
mnie rpc call market.ranking.sector --profile local --passkey-id sbi_xxx
mnie rpc call market.ranking.sbi --profile local --passkey-id sbi_xxx
```
## News And Watchlist
```bash
mnie rpc call news.list --profile local --passkey-id sbi_xxx
mnie rpc call watchlist.list --profile local --passkey-id sbi_xxx
```
## Order Inquiry
```bash
mnie rpc call orders.inquiry.executionsToday '{}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.inquiry.open '{}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.inquiry.detail '{"orderNumber":"123456","orderId":"abcdef","issueCode":"AAPL","market":"NASDAQ"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.inquiry.tradeRecords '{"from":"2026-01-01","to":"2026-01-31","market":"NASDAQ","accountType":"specific"}' --profile local --passkey-id sbi_xxx
```
Common inquiry filters:
```json
{
"index": 0,
"limit": 100,
"from": "2026-01-01",
"to": "2026-01-31",
"issueCode": "7203",
"market": "T",
"status": "open"
}
```
## Cash Orders
Pre-order and estimate are non-submitting:
```bash
mnie rpc call orders.cash.preOrder '{"issueCode":"7203","market":"T","side":"buy","accountType":"specific"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.cash.estimate '{"issueCode":"7203","market":"T","side":"buy","quantity":100,"accountType":"specific","kind":"market"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.cash.estimateCorrection '{"orderNumber":"123456","orderId":"abcdef","market":"T","quantity":100,"price":2500}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.cash.estimateCorrectionConfirm '{"orderNumber":"123456","orderId":"abcdef","market":"T","quantity":100,"price":2500}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.cash.estimateCancel '{"orderNumber":"123456","orderId":"abcdef"}' --profile local --passkey-id sbi_xxx
```
Live cash order actions require explicit user confirmation and `allowTrading:true`:
```bash
mnie rpc call orders.cash.place '{"issueCode":"7203","market":"T","side":"buy","quantity":100,"accountType":"specific","kind":"market","allowTrading":true}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.cash.placeCorrection '{"orderNumber":"123456","orderId":"abcdef","market":"T","quantity":100,"price":2500,"allowTrading":true}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.cash.placeCancel '{"orderNumber":"123456","orderId":"abcdef","allowTrading":true}' --profile local --passkey-id sbi_xxx
```
## Margin Orders
Pre-order and estimate are non-submitting:
```bash
mnie rpc call orders.margin.preOrderOpen '{"issueCode":"7203","market":"T","side":"buy","accountType":"specific"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.estimateOpen '{"issueCode":"7203","market":"T","side":"buy","quantity":100,"accountType":"specific","kind":"market","marginTradeType":"standard"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.preOrderClose '{"issueCode":"7203","market":"T","side":"sell","accountType":"specific"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.estimateClose '{"issueCode":"7203","market":"T","side":"sell","quantity":100,"accountType":"specific","kind":"market","marginCloseTradeType":"standard"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.estimateCloseSummary '{"issueCode":"7203","market":"T","side":"sell","quantity":100,"accountType":"specific","kind":"market"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.estimateSummary '{"issueCode":"7203","market":"T","side":"sell","quantity":100,"accountType":"specific","kind":"market"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.preOrderActualDelivery '{"issueCode":"7203","market":"T","side":"sell","accountType":"specific"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.estimateActualDelivery '{"issueCode":"7203","market":"T","side":"sell","quantity":100,"accountType":"specific"}' --profile local --passkey-id sbi_xxx
```
Live margin actions require explicit user confirmation and `allowTrading:true`:
```bash
mnie rpc call orders.margin.open '{"issueCode":"7203","market":"T","side":"buy","quantity":100,"accountType":"specific","kind":"market","marginTradeType":"standard","allowTrading":true}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.close '{"issueCode":"7203","market":"T","side":"sell","quantity":100,"accountType":"specific","kind":"market","marginCloseTradeType":"standard","allowTrading":true}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.closeSummary '{"issueCode":"7203","market":"T","side":"sell","quantity":100,"accountType":"specific","kind":"market","allowTrading":true}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.placeSummary '{"issueCode":"7203","market":"T","side":"sell","quantity":100,"accountType":"specific","kind":"market","allowTrading":true}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.margin.actualDelivery '{"issueCode":"7203","market":"T","side":"sell","quantity":100,"accountType":"specific","allowTrading":true}' --profile local --passkey-id sbi_xxx
```
## IFD Orders
Estimate and cancellation estimate are non-submitting:
```bash
mnie rpc call orders.ifd.estimate '{"issueCode":"7203","market":"T","side":"buy","quantity":100,"accountType":"specific","kind":"market"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.ifd.estimateCorrection '{"orderNumber":"123456","orderId":"abcdef","market":"T","quantity":100,"price":2500}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.ifd.estimateCancel '{"orderNumber":"123456","orderId":"abcdef"}' --profile local --passkey-id sbi_xxx
```
Live IFD actions require explicit user confirmation and `allowTrading:true`:
```bash
mnie rpc call orders.ifd.place '{"issueCode":"7203","market":"T","side":"buy","quantity":100,"accountType":"specific","kind":"market","allowTrading":true}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.ifd.placeCorrection '{"orderNumber":"123456","orderId":"abcdef","market":"T","quantity":100,"price":2500,"allowTrading":true}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.ifd.placeCancel '{"orderNumber":"123456","orderId":"abcdef","allowTrading":true}' --profile local --passkey-id sbi_xxx
```
## Theme Investment Orders
```bash
mnie rpc call orders.themeInvestment.list '{"themeId":"theme_xxx"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.themeInvestment.estimate '{"themeId":"theme_xxx","side":"buy","accountType":"specific","orderAmount":10000}' --profile local --passkey-id sbi_xxx
```
Live theme investment placement requires explicit user confirmation and `allowTrading:true`:
```bash
mnie rpc call orders.themeInvestment.place '{"themeId":"theme_xxx","side":"buy","accountType":"specific","orderAmount":10000,"allowTrading":true}' --profile local --passkey-id sbi_xxx
```
## Exchange Orders
Rate and estimate are non-submitting:
```bash
mnie rpc call orders.exchange.rate '{"side":"buy","currency":"USD"}' --profile local --passkey-id sbi_xxx
mnie rpc call orders.exchange.estimate '{"side":"buy","currency":"USD","quantity":100,"accountKind":"GENERAL"}' --profile local --passkey-id sbi_xxx
```
Live exchange placement requires explicit user confirmation and `allowTrading:true`:
```bash
mnie rpc call orders.exchange.place '{"side":"buy","currency":"USD","quantity":100,"accountKind":"GENERAL","allowTrading":true}' --profile local --passkey-id sbi_xxx
```
## Notes For Agents
- Use `mnie rpc methods --profile <profile>` when the installed server may expose a different method set.
- Use the examples as shapes, not guaranteed complete order payloads. If an order method rejects params, inspect the error and ask for the missing order-specific fields rather than guessing.
- Prefer `estimate*` and `preOrder*` methods before any `place*`, `open`, `close`, `actualDelivery`, or `placeCancel` method.