ergo-agent-sdk 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. ergo_agent_sdk-0.2.0/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  2. ergo_agent_sdk-0.2.0/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  3. ergo_agent_sdk-0.2.0/.github/pull_request_template.md +15 -0
  4. ergo_agent_sdk-0.2.0/.github/workflows/ci.yml +59 -0
  5. ergo_agent_sdk-0.2.0/CONTRIBUTING.md +61 -0
  6. ergo_agent_sdk-0.2.0/PKG-INFO +194 -0
  7. ergo_agent_sdk-0.2.0/README.md +150 -0
  8. ergo_agent_sdk-0.2.0/docs/api-reference.md +132 -0
  9. ergo_agent_sdk-0.2.0/docs/architecture.md +136 -0
  10. ergo_agent_sdk-0.2.0/docs/getting-started.md +144 -0
  11. ergo_agent_sdk-0.2.0/docs/index.md +49 -0
  12. ergo_agent_sdk-0.2.0/docs/tutorial.md +158 -0
  13. ergo_agent_sdk-0.2.0/examples/01_check_balance.py +48 -0
  14. ergo_agent_sdk-0.2.0/examples/02_read_oracle_price.py +44 -0
  15. ergo_agent_sdk-0.2.0/examples/03_swap_quote.py +42 -0
  16. ergo_agent_sdk-0.2.0/examples/04_openai_agent.py +100 -0
  17. ergo_agent_sdk-0.2.0/examples/05_address_info.py +48 -0
  18. ergo_agent_sdk-0.2.0/examples/06_portfolio_tracker.py +53 -0
  19. ergo_agent_sdk-0.2.0/examples/07_mempool_monitor.py +54 -0
  20. ergo_agent_sdk-0.2.0/examples/08_safety_demo.py +70 -0
  21. ergo_agent_sdk-0.2.0/examples/09_dex_scanner.py +48 -0
  22. ergo_agent_sdk-0.2.0/examples/10_cli_tool_runner.py +57 -0
  23. ergo_agent_sdk-0.2.0/mkdocs.yml +82 -0
  24. ergo_agent_sdk-0.2.0/pyproject.toml +83 -0
  25. ergo_agent_sdk-0.2.0/site/404.html +584 -0
  26. ergo_agent_sdk-0.2.0/site/api-reference/index.html +6126 -0
  27. ergo_agent_sdk-0.2.0/site/architecture/index.html +1104 -0
  28. ergo_agent_sdk-0.2.0/site/assets/_mkdocstrings.css +237 -0
  29. ergo_agent_sdk-0.2.0/site/assets/images/favicon.png +0 -0
  30. ergo_agent_sdk-0.2.0/site/assets/javascripts/bundle.79ae519e.min.js +16 -0
  31. ergo_agent_sdk-0.2.0/site/assets/javascripts/bundle.79ae519e.min.js.map +7 -0
  32. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
  33. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
  34. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
  35. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
  36. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
  37. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
  38. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
  39. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
  40. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
  41. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
  42. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
  43. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
  44. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
  45. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
  46. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
  47. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
  48. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
  49. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
  50. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
  51. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
  52. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
  53. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
  54. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
  55. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
  56. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
  57. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
  58. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
  59. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
  60. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
  61. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
  62. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
  63. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
  64. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/tinyseg.js +206 -0
  65. ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/wordcut.js +6708 -0
  66. ergo_agent_sdk-0.2.0/site/assets/javascripts/workers/search.2c215733.min.js +42 -0
  67. ergo_agent_sdk-0.2.0/site/assets/javascripts/workers/search.2c215733.min.js.map +7 -0
  68. ergo_agent_sdk-0.2.0/site/assets/stylesheets/main.484c7ddc.min.css +1 -0
  69. ergo_agent_sdk-0.2.0/site/assets/stylesheets/main.484c7ddc.min.css.map +1 -0
  70. ergo_agent_sdk-0.2.0/site/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
  71. ergo_agent_sdk-0.2.0/site/assets/stylesheets/palette.ab4e12ef.min.css.map +1 -0
  72. ergo_agent_sdk-0.2.0/site/getting-started/index.html +899 -0
  73. ergo_agent_sdk-0.2.0/site/index.html +844 -0
  74. ergo_agent_sdk-0.2.0/site/objects.inv +0 -0
  75. ergo_agent_sdk-0.2.0/site/search/search_index.json +1 -0
  76. ergo_agent_sdk-0.2.0/site/sitemap.xml +23 -0
  77. ergo_agent_sdk-0.2.0/site/sitemap.xml.gz +0 -0
  78. ergo_agent_sdk-0.2.0/site/tutorial/index.html +964 -0
  79. ergo_agent_sdk-0.2.0/src/ergo_agent/__init__.py +22 -0
  80. ergo_agent_sdk-0.2.0/src/ergo_agent/core/__init__.py +48 -0
  81. ergo_agent_sdk-0.2.0/src/ergo_agent/core/address.py +247 -0
  82. ergo_agent_sdk-0.2.0/src/ergo_agent/core/builder.py +304 -0
  83. ergo_agent_sdk-0.2.0/src/ergo_agent/core/models.py +92 -0
  84. ergo_agent_sdk-0.2.0/src/ergo_agent/core/node.py +279 -0
  85. ergo_agent_sdk-0.2.0/src/ergo_agent/core/privacy.py +245 -0
  86. ergo_agent_sdk-0.2.0/src/ergo_agent/core/wallet.py +160 -0
  87. ergo_agent_sdk-0.2.0/src/ergo_agent/defi/__init__.py +5 -0
  88. ergo_agent_sdk-0.2.0/src/ergo_agent/defi/oracle.py +159 -0
  89. ergo_agent_sdk-0.2.0/src/ergo_agent/defi/spectrum.py +425 -0
  90. ergo_agent_sdk-0.2.0/src/ergo_agent/tools/__init__.py +5 -0
  91. ergo_agent_sdk-0.2.0/src/ergo_agent/tools/anthropic_tools.py +79 -0
  92. ergo_agent_sdk-0.2.0/src/ergo_agent/tools/langchain_tools.py +95 -0
  93. ergo_agent_sdk-0.2.0/src/ergo_agent/tools/openai_tools.py +138 -0
  94. ergo_agent_sdk-0.2.0/src/ergo_agent/tools/safety.py +116 -0
  95. ergo_agent_sdk-0.2.0/src/ergo_agent/tools/toolkit.py +330 -0
  96. ergo_agent_sdk-0.2.0/tests/integration/__init__.py +1 -0
  97. ergo_agent_sdk-0.2.0/tests/integration/test_address.py +148 -0
  98. ergo_agent_sdk-0.2.0/tests/integration/test_defi.py +148 -0
  99. ergo_agent_sdk-0.2.0/tests/integration/test_node.py +101 -0
  100. ergo_agent_sdk-0.2.0/tests/live_check.py +60 -0
  101. ergo_agent_sdk-0.2.0/tests/unit/test_builder_extensions.py +299 -0
  102. ergo_agent_sdk-0.2.0/tests/unit/test_models.py +54 -0
  103. ergo_agent_sdk-0.2.0/tests/unit/test_safety.py +75 -0
  104. ergo_agent_sdk-0.2.0/tests/unit/test_tools_schema.py +62 -0
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a bug in the ergo-agent SDK
4
+ title: "[BUG] "
5
+ labels: bug
6
+ assignees: ""
7
+ ---
8
+
9
+ ## Describe the Bug
10
+
11
+ A clear description of what the bug is.
12
+
13
+ ## To Reproduce
14
+
15
+ ```python
16
+ # Minimal code to reproduce:
17
+ from ergo_agent import ErgoNode
18
+
19
+ node = ErgoNode()
20
+ # ...
21
+ ```
22
+
23
+ ## Expected Behavior
24
+
25
+ What you expected to happen.
26
+
27
+ ## Actual Behavior
28
+
29
+ What actually happened. Include the full error traceback if applicable.
30
+
31
+ ## Environment
32
+
33
+ - OS: [e.g. Windows 11, Ubuntu 22.04]
34
+ - Python version: [e.g. 3.12]
35
+ - ergo-agent version: [e.g. 0.1.0]
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest a new feature for the ergo-agent SDK
4
+ title: "[FEATURE] "
5
+ labels: enhancement
6
+ assignees: ""
7
+ ---
8
+
9
+ ## Problem
10
+
11
+ What problem does this feature solve?
12
+
13
+ ## Proposed Solution
14
+
15
+ How should this feature work?
16
+
17
+ ## Alternatives Considered
18
+
19
+ Any alternative approaches you've thought about.
20
+
21
+ ## Additional Context
22
+
23
+ Links to relevant Ergo docs, protocols, or examples.
@@ -0,0 +1,15 @@
1
+ ## Description
2
+
3
+ Brief description of what this PR does.
4
+
5
+ ## Changes
6
+
7
+ -
8
+
9
+ ## Checklist
10
+
11
+ - [ ] Tests added/updated
12
+ - [ ] `pytest tests/ -v` passes
13
+ - [ ] `ruff check src/` passes
14
+ - [ ] Documentation updated (if public API changed)
15
+ - [ ] No sensitive data (keys, mnemonics) in the diff
@@ -0,0 +1,59 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.10", "3.11", "3.12"]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Set up Python ${{ matrix.python-version }}
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
23
+
24
+ - name: Install uv
25
+ run: pip install uv
26
+
27
+ - name: Install dependencies
28
+ run: uv pip install -e ".[dev]" --system
29
+
30
+ - name: Lint with ruff
31
+ run: ruff check src/ tests/
32
+
33
+ - name: Run unit tests (no network)
34
+ run: pytest tests/unit/ -v --tb=short
35
+
36
+ integration:
37
+ runs-on: ubuntu-latest
38
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
39
+ needs: test
40
+
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+
44
+ - name: Set up Python
45
+ uses: actions/setup-python@v5
46
+ with:
47
+ python-version: "3.11"
48
+
49
+ - name: Install uv
50
+ run: pip install uv
51
+
52
+ - name: Install dependencies
53
+ run: uv pip install -e ".[dev]" --system
54
+
55
+ - name: Run integration tests (live testnet API)
56
+ run: pytest tests/integration/ -v --tb=short
57
+ env:
58
+ ERGO_API_URL: https://api.ergoplatform.com
59
+ ERGO_TEST_ADDRESS: ${{ secrets.ERGO_TEST_ADDRESS }}
@@ -0,0 +1,61 @@
1
+ # Contributing to ergo-agent SDK
2
+
3
+ Thanks for your interest in contributing! This guide covers setup, testing, and PR workflow.
4
+
5
+ ## Development Setup
6
+
7
+ ```bash
8
+ # Clone the repo
9
+ git clone https://github.com/ergoplatform/ergo-agent-sdk.git
10
+ cd ergo-agent-sdk
11
+
12
+ # Create a virtual environment
13
+ python -m venv .venv
14
+ .venv\Scripts\activate # Windows
15
+ # source .venv/bin/activate # macOS/Linux
16
+
17
+ # Install in editable mode with all dev dependencies
18
+ pip install -e ".[all,dev]"
19
+ ```
20
+
21
+ ## Running Tests
22
+
23
+ ```bash
24
+ # Unit tests only (fast, no network)
25
+ pytest tests/unit/ -v
26
+
27
+ # Integration tests (requires internet — hits live APIs)
28
+ pytest tests/integration/ -v
29
+
30
+ # All tests
31
+ pytest tests/ -v
32
+ ```
33
+
34
+ ## Code Style
35
+
36
+ We use [Ruff](https://docs.astral.sh/ruff/) for linting and formatting:
37
+
38
+ ```bash
39
+ ruff check src/ tests/
40
+ ruff format src/ tests/
41
+ ```
42
+
43
+ ## Documentation
44
+
45
+ ```bash
46
+ pip install mkdocs-material mkdocstrings[python]
47
+ mkdocs serve # preview at http://localhost:8000
48
+ ```
49
+
50
+ ## Pull Request Process
51
+
52
+ 1. Fork the repo and create a branch from `main`
53
+ 2. Make your changes
54
+ 3. Add tests for new functionality
55
+ 4. Run `pytest tests/ -v` and `ruff check src/`
56
+ 5. Update docs if you changed public APIs
57
+ 6. Submit a PR with a clear description
58
+
59
+ ## Architecture
60
+
61
+ See the [Architecture docs](https://ergo-agent.readthedocs.io/architecture/) for how the codebase is structured. Key rule: each layer only depends on the one below it (tools → defi → core).
@@ -0,0 +1,194 @@
1
+ Metadata-Version: 2.4
2
+ Name: ergo-agent-sdk
3
+ Version: 0.2.0
4
+ Summary: Open-source Python SDK for AI agents to interact with the Ergo blockchain
5
+ Project-URL: Homepage, https://github.com/ergoplatform/ergo-agent-sdk
6
+ Project-URL: Documentation, https://ergo-agent.readthedocs.io
7
+ Project-URL: Repository, https://github.com/ergoplatform/ergo-agent-sdk
8
+ Project-URL: Issues, https://github.com/ergoplatform/ergo-agent-sdk/issues
9
+ License: MIT
10
+ Keywords: agent,ai,blockchain,defi,ergo,llm
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Software Development :: Libraries
19
+ Requires-Python: >=3.10
20
+ Requires-Dist: httpx>=0.27.0
21
+ Requires-Dist: pydantic>=2.0.0
22
+ Requires-Dist: typing-extensions>=4.8.0
23
+ Provides-Extra: all
24
+ Requires-Dist: anthropic>=0.30.0; extra == 'all'
25
+ Requires-Dist: langchain-core>=0.2.0; extra == 'all'
26
+ Requires-Dist: openai>=1.0.0; extra == 'all'
27
+ Provides-Extra: anthropic
28
+ Requires-Dist: anthropic>=0.30.0; extra == 'anthropic'
29
+ Provides-Extra: dev
30
+ Requires-Dist: ipykernel>=6.0.0; extra == 'dev'
31
+ Requires-Dist: mypy>=1.10.0; extra == 'dev'
32
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
33
+ Requires-Dist: pytest-httpx>=0.30.0; extra == 'dev'
34
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
35
+ Requires-Dist: ruff>=0.4.0; extra == 'dev'
36
+ Provides-Extra: docs
37
+ Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
38
+ Requires-Dist: mkdocstrings[python]>=0.25.0; extra == 'docs'
39
+ Provides-Extra: langchain
40
+ Requires-Dist: langchain-core>=0.2.0; extra == 'langchain'
41
+ Provides-Extra: openai
42
+ Requires-Dist: openai>=1.0.0; extra == 'openai'
43
+ Description-Content-Type: text/markdown
44
+
45
+ # ergo-agent 🤖⛓️
46
+
47
+ > **Open-source Python SDK for AI agents on the Ergo blockchain.**
48
+
49
+ Give any LLM agent (Claude, GPT-4, LangChain, CrewAI...) the ability to read wallet balances, fetch live prices, swap tokens on Spectrum DEX — all autonomously, with built-in safety guardrails.
50
+
51
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://python.org)
52
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
53
+
54
+ ---
55
+
56
+ ## Why?
57
+
58
+ Existing Ergo SDKs (ergpy, fleet-sdk, AppKit) are built for **human developers**. This SDK is built for **AI agents** — it speaks the language of function calling, returns structured JSON, and has a safety layer so the agent can't accidentally drain a wallet.
59
+
60
+ ---
61
+
62
+ ## Quickstart
63
+
64
+ ```bash
65
+ pip install ergo-agent
66
+ ```
67
+
68
+ ### Read-only (no wallet needed)
69
+
70
+ ```python
71
+ from ergo_agent import ErgoNode, Wallet
72
+ from ergo_agent.tools import ErgoToolkit, SafetyConfig
73
+
74
+ node = ErgoNode()
75
+ wallet = Wallet.read_only("9f...") # any address to monitor
76
+ toolkit = ErgoToolkit(node=node, wallet=wallet)
77
+
78
+ # Check address balance
79
+ result = toolkit.get_wallet_balance()
80
+
81
+ # Get live ERG/USD price from Oracle Pool v2
82
+ price = toolkit.get_erg_price()
83
+
84
+ # Get a swap quote from Spectrum DEX
85
+ quote = toolkit.get_swap_quote(token_in="ERG", token_out="SigUSD", amount_erg=1.0)
86
+ ```
87
+
88
+ ### With a wallet (transactions enabled)
89
+
90
+ ```python
91
+ from ergo_agent import ErgoNode, Wallet
92
+ from ergo_agent.tools import ErgoToolkit, SafetyConfig
93
+
94
+ node = ErgoNode(node_url="http://your-node:9053", api_key="your-key")
95
+ wallet = Wallet.from_node_wallet("9f...")
96
+
97
+ toolkit = ErgoToolkit(
98
+ node=node,
99
+ wallet=wallet,
100
+ safety=SafetyConfig(
101
+ max_erg_per_tx=5.0,
102
+ max_erg_per_day=50.0,
103
+ allowed_contracts=["spectrum"],
104
+ rate_limit_per_hour=20,
105
+ )
106
+ )
107
+
108
+ # Send ERG
109
+ toolkit.send_erg(to="9f...", amount_erg=1.5)
110
+
111
+ # Swap ERG for a token on Spectrum DEX
112
+ toolkit.swap_erg_for_token(token_out="SigUSD", amount_erg=1.0)
113
+ ```
114
+
115
+ ### Use with LLM frameworks
116
+
117
+ ```python
118
+ # OpenAI function calling
119
+ tools = toolkit.to_openai_tools()
120
+
121
+ # Anthropic tool use
122
+ tools = toolkit.to_anthropic_tools()
123
+
124
+ # LangChain
125
+ lc_tools = toolkit.to_langchain_tools()
126
+ ```
127
+
128
+ ---
129
+
130
+ ## Available Tools
131
+
132
+ | Tool | Description | Requires Wallet |
133
+ |---|---|---|
134
+ | `get_wallet_balance` | ERG + token balances | No |
135
+ | `get_erg_price` | Live ERG/USD from Oracle Pool v2 | No |
136
+ | `get_swap_quote` | Spectrum DEX swap quote | No |
137
+ | `get_mempool_status` | Pending transactions | No |
138
+ | `get_safety_status` | Current spending limits & usage | No |
139
+ | `send_erg` | Send ERG to an address | Yes |
140
+ | `swap_erg_for_token` | Execute a swap on Spectrum DEX | Yes |
141
+
142
+ ---
143
+
144
+ ## Architecture
145
+
146
+ ```
147
+ ergo_agent/
148
+ ├── core/ # ErgoNode client, Wallet, TransactionBuilder, Address utilities
149
+ ├── defi/ # Oracle Pool v2, Spectrum DEX adapters
150
+ └── tools/ # LLM tool schemas (OpenAI / Anthropic / LangChain) + safety layer
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Safety Layer
156
+
157
+ Every state-changing action passes through `SafetyConfig` before execution:
158
+
159
+ ```python
160
+ SafetyConfig(
161
+ max_erg_per_tx=10.0, # hard cap per transaction
162
+ max_erg_per_day=50.0, # daily rolling limit
163
+ allowed_contracts=["spectrum"], # contract whitelist
164
+ rate_limit_per_hour=20, # max 20 actions/hour
165
+ dry_run=False, # set True for dry-run mode
166
+ )
167
+ ```
168
+
169
+ ---
170
+
171
+ ## Network
172
+
173
+ By default the SDK connects to the **Ergo public API** (`https://api.ergoplatform.com`). For production use or transaction signing, point it at your own node:
174
+
175
+ ```python
176
+ node = ErgoNode(node_url="http://your-node:9053", api_key="your-key")
177
+ ```
178
+
179
+ ---
180
+
181
+ ## Contributing
182
+
183
+ This is an open-source project for the Ergo ecosystem. PRs welcome.
184
+
185
+ **Roadmap:**
186
+ - v0.1.0 — Core + Oracle + Spectrum + Tool schemas + Safety layer *(current)*
187
+ - v0.2.0 — SigmaUSD + Rosen Bridge adapters
188
+ - v0.3.0 — Treasury contract (ErgoScript on-chain spending limits)
189
+
190
+ ---
191
+
192
+ ## License
193
+
194
+ MIT
@@ -0,0 +1,150 @@
1
+ # ergo-agent 🤖⛓️
2
+
3
+ > **Open-source Python SDK for AI agents on the Ergo blockchain.**
4
+
5
+ Give any LLM agent (Claude, GPT-4, LangChain, CrewAI...) the ability to read wallet balances, fetch live prices, swap tokens on Spectrum DEX — all autonomously, with built-in safety guardrails.
6
+
7
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://python.org)
8
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
9
+
10
+ ---
11
+
12
+ ## Why?
13
+
14
+ Existing Ergo SDKs (ergpy, fleet-sdk, AppKit) are built for **human developers**. This SDK is built for **AI agents** — it speaks the language of function calling, returns structured JSON, and has a safety layer so the agent can't accidentally drain a wallet.
15
+
16
+ ---
17
+
18
+ ## Quickstart
19
+
20
+ ```bash
21
+ pip install ergo-agent
22
+ ```
23
+
24
+ ### Read-only (no wallet needed)
25
+
26
+ ```python
27
+ from ergo_agent import ErgoNode, Wallet
28
+ from ergo_agent.tools import ErgoToolkit, SafetyConfig
29
+
30
+ node = ErgoNode()
31
+ wallet = Wallet.read_only("9f...") # any address to monitor
32
+ toolkit = ErgoToolkit(node=node, wallet=wallet)
33
+
34
+ # Check address balance
35
+ result = toolkit.get_wallet_balance()
36
+
37
+ # Get live ERG/USD price from Oracle Pool v2
38
+ price = toolkit.get_erg_price()
39
+
40
+ # Get a swap quote from Spectrum DEX
41
+ quote = toolkit.get_swap_quote(token_in="ERG", token_out="SigUSD", amount_erg=1.0)
42
+ ```
43
+
44
+ ### With a wallet (transactions enabled)
45
+
46
+ ```python
47
+ from ergo_agent import ErgoNode, Wallet
48
+ from ergo_agent.tools import ErgoToolkit, SafetyConfig
49
+
50
+ node = ErgoNode(node_url="http://your-node:9053", api_key="your-key")
51
+ wallet = Wallet.from_node_wallet("9f...")
52
+
53
+ toolkit = ErgoToolkit(
54
+ node=node,
55
+ wallet=wallet,
56
+ safety=SafetyConfig(
57
+ max_erg_per_tx=5.0,
58
+ max_erg_per_day=50.0,
59
+ allowed_contracts=["spectrum"],
60
+ rate_limit_per_hour=20,
61
+ )
62
+ )
63
+
64
+ # Send ERG
65
+ toolkit.send_erg(to="9f...", amount_erg=1.5)
66
+
67
+ # Swap ERG for a token on Spectrum DEX
68
+ toolkit.swap_erg_for_token(token_out="SigUSD", amount_erg=1.0)
69
+ ```
70
+
71
+ ### Use with LLM frameworks
72
+
73
+ ```python
74
+ # OpenAI function calling
75
+ tools = toolkit.to_openai_tools()
76
+
77
+ # Anthropic tool use
78
+ tools = toolkit.to_anthropic_tools()
79
+
80
+ # LangChain
81
+ lc_tools = toolkit.to_langchain_tools()
82
+ ```
83
+
84
+ ---
85
+
86
+ ## Available Tools
87
+
88
+ | Tool | Description | Requires Wallet |
89
+ |---|---|---|
90
+ | `get_wallet_balance` | ERG + token balances | No |
91
+ | `get_erg_price` | Live ERG/USD from Oracle Pool v2 | No |
92
+ | `get_swap_quote` | Spectrum DEX swap quote | No |
93
+ | `get_mempool_status` | Pending transactions | No |
94
+ | `get_safety_status` | Current spending limits & usage | No |
95
+ | `send_erg` | Send ERG to an address | Yes |
96
+ | `swap_erg_for_token` | Execute a swap on Spectrum DEX | Yes |
97
+
98
+ ---
99
+
100
+ ## Architecture
101
+
102
+ ```
103
+ ergo_agent/
104
+ ├── core/ # ErgoNode client, Wallet, TransactionBuilder, Address utilities
105
+ ├── defi/ # Oracle Pool v2, Spectrum DEX adapters
106
+ └── tools/ # LLM tool schemas (OpenAI / Anthropic / LangChain) + safety layer
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Safety Layer
112
+
113
+ Every state-changing action passes through `SafetyConfig` before execution:
114
+
115
+ ```python
116
+ SafetyConfig(
117
+ max_erg_per_tx=10.0, # hard cap per transaction
118
+ max_erg_per_day=50.0, # daily rolling limit
119
+ allowed_contracts=["spectrum"], # contract whitelist
120
+ rate_limit_per_hour=20, # max 20 actions/hour
121
+ dry_run=False, # set True for dry-run mode
122
+ )
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Network
128
+
129
+ By default the SDK connects to the **Ergo public API** (`https://api.ergoplatform.com`). For production use or transaction signing, point it at your own node:
130
+
131
+ ```python
132
+ node = ErgoNode(node_url="http://your-node:9053", api_key="your-key")
133
+ ```
134
+
135
+ ---
136
+
137
+ ## Contributing
138
+
139
+ This is an open-source project for the Ergo ecosystem. PRs welcome.
140
+
141
+ **Roadmap:**
142
+ - v0.1.0 — Core + Oracle + Spectrum + Tool schemas + Safety layer *(current)*
143
+ - v0.2.0 — SigmaUSD + Rosen Bridge adapters
144
+ - v0.3.0 — Treasury contract (ErgoScript on-chain spending limits)
145
+
146
+ ---
147
+
148
+ ## License
149
+
150
+ MIT
@@ -0,0 +1,132 @@
1
+ # API Reference
2
+
3
+ Complete reference for all public classes and methods.
4
+
5
+ ---
6
+
7
+ ## Core
8
+
9
+ ### ErgoNode
10
+
11
+ ::: ergo_agent.core.node.ErgoNode
12
+ options:
13
+ members:
14
+ - __init__
15
+ - get_height
16
+ - get_network_info
17
+ - get_balance
18
+ - get_unspent_boxes
19
+ - get_transaction_history
20
+ - get_mempool_transactions
21
+ - get_oracle_pool_box
22
+ - submit_transaction
23
+ - close
24
+
25
+ ### Wallet
26
+
27
+ ::: ergo_agent.core.wallet.Wallet
28
+ options:
29
+ members:
30
+ - read_only
31
+ - from_node_wallet
32
+ - from_mnemonic
33
+ - address
34
+ - sign_transaction
35
+
36
+ ### TransactionBuilder
37
+
38
+ ::: ergo_agent.core.builder.TransactionBuilder
39
+ options:
40
+ members:
41
+ - __init__
42
+ - send
43
+ - send_token
44
+ - add_output_raw
45
+ - with_input
46
+ - build
47
+
48
+ ### Address Utilities
49
+
50
+ ::: ergo_agent.core.address
51
+ options:
52
+ members:
53
+ - is_valid_address
54
+ - validate_address
55
+ - is_mainnet_address
56
+ - is_p2pk_address
57
+ - get_address_type
58
+ - address_to_ergo_tree
59
+ - AddressError
60
+
61
+ ### Data Models
62
+
63
+ ::: ergo_agent.core.models.Box
64
+
65
+ ::: ergo_agent.core.models.Balance
66
+
67
+ ::: ergo_agent.core.models.Token
68
+
69
+ ::: ergo_agent.core.models.SwapQuote
70
+
71
+ ::: ergo_agent.core.models.Transaction
72
+
73
+ ---
74
+
75
+ ## DeFi
76
+
77
+ ### OracleReader
78
+
79
+ ::: ergo_agent.defi.oracle.OracleReader
80
+ options:
81
+ members:
82
+ - __init__
83
+ - get_erg_usd_price
84
+ - get_erg_usd_nanoerg_per_usd
85
+ - get_oracle_box_id
86
+ - get_price_history
87
+
88
+ ### SpectrumDEX
89
+
90
+ ::: ergo_agent.defi.spectrum.SpectrumDEX
91
+ options:
92
+ members:
93
+ - __init__
94
+ - get_pools
95
+ - get_erg_price_in_sigusd
96
+ - get_quote
97
+ - build_swap_order
98
+ - close
99
+
100
+ ---
101
+
102
+ ## Tools
103
+
104
+ ### ErgoToolkit
105
+
106
+ ::: ergo_agent.tools.toolkit.ErgoToolkit
107
+ options:
108
+ members:
109
+ - __init__
110
+ - get_wallet_balance
111
+ - get_erg_price
112
+ - get_swap_quote
113
+ - get_mempool_status
114
+ - get_safety_status
115
+ - send_erg
116
+ - swap_erg_for_token
117
+ - execute_tool
118
+ - to_openai_tools
119
+ - to_anthropic_tools
120
+ - to_langchain_tools
121
+
122
+ ### SafetyConfig
123
+
124
+ ::: ergo_agent.tools.safety.SafetyConfig
125
+ options:
126
+ members:
127
+ - validate_send
128
+ - validate_rate_limit
129
+ - record_action
130
+ - get_status
131
+
132
+ ::: ergo_agent.tools.safety.SafetyViolation