Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Debug schema generation exceeds the platform's 2 MiB thread stack.
# Release builds are unaffected.
[env]
RUST_MIN_STACK = "16777216"
4 changes: 2 additions & 2 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "kraken-cli",
"version": "0.3.2",
"version": "0.4.0",
"description": "Agent-first CLI for trading crypto, stocks, forex, and derivatives on Kraken. Paper trading by default; live trading opt-in via API keys.",
"author": {
"name": "Kraken",
Expand Down Expand Up @@ -38,7 +38,7 @@
"mcpServers": {
"kraken": {
"command": "kraken",
"args": ["mcp", "-s", "market,paper"],
"args": ["mcp", "-s", "market,paper,feedback"],
"env": {
"KRAKEN_API_KEY": "${user_config.api_key}",
"KRAKEN_API_SECRET": "${user_config.api_secret}"
Expand Down
6 changes: 3 additions & 3 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "kraken-cli",
"version": "0.3.2",
"version": "0.4.0",
"description": "Agent-first CLI for trading crypto, stocks, forex, and derivatives on Kraken.",
"author": {
"name": "Kraken",
Expand All @@ -24,13 +24,13 @@
"mcpServers": {
"kraken": {
"command": "kraken",
"args": ["mcp", "-s", "market,paper"]
"args": ["mcp", "-s", "market,paper,feedback"]
}
},
"interface": {
"displayName": "Kraken CLI",
"shortDescription": "Trade crypto, stocks, forex, and derivatives from your AI agent.",
"longDescription": "Agent-first CLI with a built-in MCP server. 151 commands covering spot, futures, xStocks, forex, staking, and paper trading. Ships with 50 goal-oriented skills for strategies like DCA, grid trading, basis trades, and portfolio rebalancing. Paper trading works out of the box with no API keys; live trading is an explicit opt-in via expanded MCP service flags.",
"longDescription": "Agent-first CLI with a built-in MCP server. 173 commands covering spot, futures, xStocks, forex, staking, workspaces, recorded sessions, and paper trading. Ships with 59 goal-oriented skills for strategies like DCA, grid trading, basis trades, and portfolio rebalancing. Paper trading works out of the box with no API keys; live trading is an explicit opt-in via expanded MCP service flags.",
"developerName": "Kraken",
"category": "Finance",
"capabilities": ["Read"],
Expand Down
3 changes: 3 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Emits JUnit for GitLab's MR test widget (wired up in .gitlab-ci.yml).
[profile.ci.junit]
path = "junit.xml"
4 changes: 2 additions & 2 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "kraken-cli",
"version": "0.3.2",
"version": "0.4.0",
"description": "Agent-first CLI for trading crypto, stocks, forex, and derivatives on Kraken. Paper trading by default; live trading opt-in via API keys.",
"author": {
"name": "Kraken",
Expand All @@ -25,7 +25,7 @@
"mcpServers": {
"kraken": {
"command": "kraken",
"args": ["mcp", "-s", "market,paper"]
"args": ["mcp", "-s", "market,paper,feedback"]
}
}
}
25 changes: 25 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# EditorConfig is awesome: https://EditorConfig.org

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space

# Rust uses 4-space indentation (rustfmt default).
[*.rs]
indent_size = 4

[*.{json,yml,yaml,toml}]
indent_size = 2

[*.{md,mdx}]
indent_size = 2
max_line_length = off
trim_trailing_whitespace = false

[Makefile]
indent_style = tab
17 changes: 17 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
# Machine-readable catalogs: collapse in diffs, exclude from language stats.
agents/tool-catalog.json linguist-generated
agents/error-catalog.json linguist-generated

.internal/ export-ignore
.internal/** export-ignore
.agents/ export-ignore
.agents/** export-ignore
.codex/ export-ignore
.codex/** export-ignore
.gitlab-ci.yml export-ignore
ci/ export-ignore
ci/** export-ignore
docs/ export-ignore
docs/** export-ignore
scripts/ci/ export-ignore
scripts/ci/** export-ignore
scripts/release/ export-ignore
scripts/release/** export-ignore
renovate.json5 export-ignore
48 changes: 24 additions & 24 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ on:
jobs:
# Run 'dist plan' (or host) to determine what tasks we need to do
plan:
runs-on: "ubuntu-22.04"
runs-on: "ubuntu-24.04"
outputs:
val: ${{ steps.plan.outputs.manifest }}
tag: ${{ !github.event.pull_request && github.ref_name || '' }}
Expand All @@ -56,7 +56,7 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
submodules: recursive
Expand All @@ -66,7 +66,7 @@ jobs:
shell: bash
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh | sh"
- name: Cache dist
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: cargo-dist-cache
path: ~/.cargo/bin/dist
Expand All @@ -82,7 +82,7 @@ jobs:
cat plan-dist-manifest.json
echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT"
- name: "Upload dist-manifest.json"
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: artifacts-plan-dist-manifest
path: plan-dist-manifest.json
Expand Down Expand Up @@ -120,7 +120,7 @@ jobs:
- name: enable windows longpaths
run: |
git config --global core.longpaths true
- uses: actions/checkout@v6
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
submodules: recursive
Expand All @@ -135,7 +135,7 @@ jobs:
run: ${{ matrix.install_dist.run }}
# Get the dist-manifest
- name: Fetch local artifacts
uses: actions/download-artifact@v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: artifacts-*
path: target/distrib/
Expand All @@ -149,7 +149,7 @@ jobs:
dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json
echo "dist ran successfully"
- name: Attest
uses: actions/attest-build-provenance@v3
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4
with:
subject-path: "target/distrib/*${{ join(matrix.targets, ', ') }}*"
- id: cargo-dist
Expand All @@ -166,7 +166,7 @@ jobs:

cp dist-manifest.json "$BUILD_MANIFEST_NAME"
- name: "Upload artifacts"
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: artifacts-build-local-${{ join(matrix.targets, '_') }}
path: |
Expand All @@ -178,24 +178,24 @@ jobs:
needs:
- plan
- build-local-artifacts
runs-on: "ubuntu-22.04"
runs-on: "ubuntu-24.04"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
submodules: recursive
- name: Install cached dist
uses: actions/download-artifact@v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: cargo-dist-cache
path: ~/.cargo/bin/
- run: chmod +x ~/.cargo/bin/dist
# Get all the local artifacts for the global tasks to use (for e.g. checksums)
- name: Fetch local artifacts
uses: actions/download-artifact@v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: artifacts-*
path: target/distrib/
Expand All @@ -213,7 +213,7 @@ jobs:

cp dist-manifest.json "$BUILD_MANIFEST_NAME"
- name: "Upload artifacts"
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: artifacts-build-global
path: |
Expand All @@ -226,7 +226,7 @@ jobs:
- build-local-artifacts
- build-global-artifacts
if: ${{ always() && needs.plan.result == 'success' && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }}
runs-on: "ubuntu-22.04"
runs-on: "ubuntu-24.04"
steps:
- name: Install minisign
env:
Expand All @@ -241,7 +241,7 @@ jobs:
rm -rf /tmp/minisign.tar.gz /tmp/minisign-linux
minisign -v
- name: Fetch artifacts
uses: actions/download-artifact@v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: artifacts-*
path: artifacts/
Expand Down Expand Up @@ -286,7 +286,7 @@ jobs:
echo "All artifacts signed successfully"
ls -la *.minisig SHA256SUMS.txt
- name: Upload signed artifacts
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: artifacts-signed
path: |
Expand All @@ -305,23 +305,23 @@ jobs:
if: ${{ always() && needs.plan.result == 'success' && needs.plan.outputs.publishing == 'true' && needs.sign-artifacts.result == 'success' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
runs-on: "ubuntu-22.04"
runs-on: "ubuntu-24.04"
outputs:
val: ${{ steps.host.outputs.manifest }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
submodules: recursive
- name: Install cached dist
uses: actions/download-artifact@v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: cargo-dist-cache
path: ~/.cargo/bin/
- run: chmod +x ~/.cargo/bin/dist
# Fetch artifacts from scratch-storage
- name: Fetch artifacts
uses: actions/download-artifact@v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: artifacts-*
path: target/distrib/
Expand All @@ -334,14 +334,14 @@ jobs:
cat dist-manifest.json
echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT"
- name: "Upload dist-manifest.json"
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
# Overwrite the previous copy
name: artifacts-dist-manifest
path: dist-manifest.json
# Create a GitHub Release while uploading all files to it
- name: "Download GitHub Artifacts"
uses: actions/download-artifact@v7
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: artifacts-*
path: artifacts
Expand Down Expand Up @@ -370,11 +370,11 @@ jobs:
# still allowing individual publish jobs to skip themselves (for prereleases).
# "host" however must run to completion, no skipping allowed!
if: ${{ always() && needs.host.result == 'success' }}
runs-on: "ubuntu-22.04"
runs-on: "ubuntu-24.04"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
submodules: recursive
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@
dist/
task.md
.kai/
.agents/
.codex/
.cursor/
.idea/
.vscode/
docs/changelog/
changelog/

Expand All @@ -12,11 +15,23 @@ changelog/
.env.*
.env.local
config.toml
# Keep the committed cargo build config (sets RUST_MIN_STACK for tests/CI)
!.cargo/config.toml
*.pem
*.key
*.crt
*.p12
*.pfx

# Claude Code (dev-only, not shared with the team)
.claude/skills/
.claude/hooks/
.claude/settings.local.json

# Codex MR review local output
.codex-home/
.codex-review/
codex-review/

# OS
.DS_Store
2 changes: 1 addition & 1 deletion .mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"mcpServers": {
"kraken": {
"command": "kraken",
"args": ["mcp", "-s", "market,paper"]
"args": ["mcp", "-s", "market,paper,feedback"]
}
}
}
Loading
Loading