@namera-ai/cli 0.1.4 → 1.0.0

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 (148) hide show
  1. package/README.md +91 -221
  2. package/dist/index.js +1660 -0
  3. package/dist/index.js.map +1 -0
  4. package/package.json +57 -50
  5. package/LICENSE +0 -201
  6. package/dist/commands/index.mjs +0 -21
  7. package/dist/commands/index.mjs.map +0 -1
  8. package/dist/commands/keystore/create.mjs +0 -74
  9. package/dist/commands/keystore/create.mjs.map +0 -1
  10. package/dist/commands/keystore/decrypt.mjs +0 -71
  11. package/dist/commands/keystore/decrypt.mjs.map +0 -1
  12. package/dist/commands/keystore/import.mjs +0 -84
  13. package/dist/commands/keystore/import.mjs.map +0 -1
  14. package/dist/commands/keystore/index.mjs +0 -28
  15. package/dist/commands/keystore/index.mjs.map +0 -1
  16. package/dist/commands/keystore/info.mjs +0 -62
  17. package/dist/commands/keystore/info.mjs.map +0 -1
  18. package/dist/commands/keystore/list.mjs +0 -46
  19. package/dist/commands/keystore/list.mjs.map +0 -1
  20. package/dist/commands/keystore/remove.mjs +0 -51
  21. package/dist/commands/keystore/remove.mjs.map +0 -1
  22. package/dist/commands/mcp/index.mjs +0 -13
  23. package/dist/commands/mcp/index.mjs.map +0 -1
  24. package/dist/commands/mcp/start.mjs +0 -82
  25. package/dist/commands/mcp/start.mjs.map +0 -1
  26. package/dist/commands/schema/index.mjs +0 -53
  27. package/dist/commands/schema/index.mjs.map +0 -1
  28. package/dist/commands/session-key/create/index.mjs +0 -87
  29. package/dist/commands/session-key/create/index.mjs.map +0 -1
  30. package/dist/commands/session-key/create/prompts/base.mjs +0 -52
  31. package/dist/commands/session-key/create/prompts/base.mjs.map +0 -1
  32. package/dist/commands/session-key/create/prompts/call.mjs +0 -85
  33. package/dist/commands/session-key/create/prompts/call.mjs.map +0 -1
  34. package/dist/commands/session-key/create/prompts/common.mjs +0 -27
  35. package/dist/commands/session-key/create/prompts/common.mjs.map +0 -1
  36. package/dist/commands/session-key/create/prompts/gas.mjs +0 -19
  37. package/dist/commands/session-key/create/prompts/gas.mjs.map +0 -1
  38. package/dist/commands/session-key/create/prompts/index.mjs +0 -44
  39. package/dist/commands/session-key/create/prompts/index.mjs.map +0 -1
  40. package/dist/commands/session-key/create/prompts/rate-limit.mjs +0 -40
  41. package/dist/commands/session-key/create/prompts/rate-limit.mjs.map +0 -1
  42. package/dist/commands/session-key/create/prompts/signature-caller.mjs +0 -26
  43. package/dist/commands/session-key/create/prompts/signature-caller.mjs.map +0 -1
  44. package/dist/commands/session-key/create/prompts/timestamp.mjs +0 -32
  45. package/dist/commands/session-key/create/prompts/timestamp.mjs.map +0 -1
  46. package/dist/commands/session-key/index.mjs +0 -26
  47. package/dist/commands/session-key/index.mjs.map +0 -1
  48. package/dist/commands/session-key/info.mjs +0 -64
  49. package/dist/commands/session-key/info.mjs.map +0 -1
  50. package/dist/commands/session-key/list.mjs +0 -54
  51. package/dist/commands/session-key/list.mjs.map +0 -1
  52. package/dist/commands/session-key/remove.mjs +0 -51
  53. package/dist/commands/session-key/remove.mjs.map +0 -1
  54. package/dist/commands/session-key/status.mjs +0 -64
  55. package/dist/commands/session-key/status.mjs.map +0 -1
  56. package/dist/commands/smart-account/create.mjs +0 -94
  57. package/dist/commands/smart-account/create.mjs.map +0 -1
  58. package/dist/commands/smart-account/import.mjs +0 -45
  59. package/dist/commands/smart-account/import.mjs.map +0 -1
  60. package/dist/commands/smart-account/index.mjs +0 -30
  61. package/dist/commands/smart-account/index.mjs.map +0 -1
  62. package/dist/commands/smart-account/info.mjs +0 -66
  63. package/dist/commands/smart-account/info.mjs.map +0 -1
  64. package/dist/commands/smart-account/list.mjs +0 -48
  65. package/dist/commands/smart-account/list.mjs.map +0 -1
  66. package/dist/commands/smart-account/remove.mjs +0 -54
  67. package/dist/commands/smart-account/remove.mjs.map +0 -1
  68. package/dist/commands/smart-account/status.mjs +0 -63
  69. package/dist/commands/smart-account/status.mjs.map +0 -1
  70. package/dist/dto/index.mjs +0 -6
  71. package/dist/dto/keystore.mjs +0 -44
  72. package/dist/dto/keystore.mjs.map +0 -1
  73. package/dist/dto/mcp.mjs +0 -13
  74. package/dist/dto/mcp.mjs.map +0 -1
  75. package/dist/dto/session-key.mjs +0 -54
  76. package/dist/dto/session-key.mjs.map +0 -1
  77. package/dist/dto/smart-account.mjs +0 -45
  78. package/dist/dto/smart-account.mjs.map +0 -1
  79. package/dist/flags/global.mjs +0 -29
  80. package/dist/flags/global.mjs.map +0 -1
  81. package/dist/flags/shared.mjs +0 -11
  82. package/dist/flags/shared.mjs.map +0 -1
  83. package/dist/helpers/humanize.mjs +0 -153
  84. package/dist/helpers/humanize.mjs.map +0 -1
  85. package/dist/helpers/paths.mjs +0 -31
  86. package/dist/helpers/paths.mjs.map +0 -1
  87. package/dist/helpers/policy.mjs +0 -89
  88. package/dist/helpers/policy.mjs.map +0 -1
  89. package/dist/helpers/pretty.mjs +0 -71
  90. package/dist/helpers/pretty.mjs.map +0 -1
  91. package/dist/index.d.mts +0 -2
  92. package/dist/index.mjs +0 -36
  93. package/dist/index.mjs.map +0 -1
  94. package/dist/layers/config.mjs +0 -124
  95. package/dist/layers/config.mjs.map +0 -1
  96. package/dist/layers/index.mjs +0 -11
  97. package/dist/layers/keystore.mjs +0 -225
  98. package/dist/layers/keystore.mjs.map +0 -1
  99. package/dist/layers/mcp-context.mjs +0 -8
  100. package/dist/layers/mcp-context.mjs.map +0 -1
  101. package/dist/layers/mcp.mjs +0 -31
  102. package/dist/layers/mcp.mjs.map +0 -1
  103. package/dist/layers/output.mjs +0 -21
  104. package/dist/layers/output.mjs.map +0 -1
  105. package/dist/layers/prompt.mjs +0 -78
  106. package/dist/layers/prompt.mjs.map +0 -1
  107. package/dist/layers/session-key.mjs +0 -218
  108. package/dist/layers/session-key.mjs.map +0 -1
  109. package/dist/layers/smart-account.mjs +0 -175
  110. package/dist/layers/smart-account.mjs.map +0 -1
  111. package/dist/layers/web3.mjs +0 -83
  112. package/dist/layers/web3.mjs.map +0 -1
  113. package/dist/mcp/helpers/common.mjs +0 -9
  114. package/dist/mcp/helpers/common.mjs.map +0 -1
  115. package/dist/mcp/helpers/index.mjs +0 -4
  116. package/dist/mcp/helpers/session-key.mjs +0 -129
  117. package/dist/mcp/helpers/session-key.mjs.map +0 -1
  118. package/dist/mcp/index.mjs +0 -43
  119. package/dist/mcp/index.mjs.map +0 -1
  120. package/dist/mcp/mcp.mjs +0 -15
  121. package/dist/mcp/mcp.mjs.map +0 -1
  122. package/dist/mcp/tools/account/address.mjs +0 -20
  123. package/dist/mcp/tools/account/address.mjs.map +0 -1
  124. package/dist/mcp/tools/account/get-balance.mjs +0 -54
  125. package/dist/mcp/tools/account/get-balance.mjs.map +0 -1
  126. package/dist/mcp/tools/account/index.mjs +0 -15
  127. package/dist/mcp/tools/account/index.mjs.map +0 -1
  128. package/dist/mcp/tools/read/index.mjs +0 -11
  129. package/dist/mcp/tools/read/index.mjs.map +0 -1
  130. package/dist/mcp/tools/read/read-contract.mjs +0 -49
  131. package/dist/mcp/tools/read/read-contract.mjs.map +0 -1
  132. package/dist/mcp/tools/transaction/execute-transaction.mjs +0 -38
  133. package/dist/mcp/tools/transaction/execute-transaction.mjs.map +0 -1
  134. package/dist/mcp/tools/transaction/index.mjs +0 -15
  135. package/dist/mcp/tools/transaction/index.mjs.map +0 -1
  136. package/dist/mcp/tools/transaction/native-transfer.mjs +0 -59
  137. package/dist/mcp/tools/transaction/native-transfer.mjs.map +0 -1
  138. package/dist/schema/chain.mjs +0 -124
  139. package/dist/schema/chain.mjs.map +0 -1
  140. package/dist/schema/common.mjs +0 -29
  141. package/dist/schema/common.mjs.map +0 -1
  142. package/dist/schema/index.mjs +0 -5
  143. package/dist/schema/policy.mjs +0 -114
  144. package/dist/schema/policy.mjs.map +0 -1
  145. package/dist/schema/tx.mjs +0 -19
  146. package/dist/schema/tx.mjs.map +0 -1
  147. package/dist/types/index.mjs +0 -11
  148. package/dist/types/index.mjs.map +0 -1
package/README.md CHANGED
@@ -1,267 +1,137 @@
1
- # Namera CLI
2
-
3
- Namera CLI gives agents controlled access to smart accounts with session keys and scoped permissions, running fully local and agent-first across chains.
4
-
5
- <p>
6
- <a href="https://www.npmjs.com/package/@namera-ai/cli"><img src="https://img.shields.io/npm/v/@namera-ai/cli" alt="npm version"></a>
7
- <a href="https://www.npmjs.com/package/@namera-ai/cli"><img src="https://img.shields.io/npm/dm/@namera-ai/cli" alt="npm downloads"></a>
8
- <a href="https://github.com/thenamespace/namera/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/@namera-ai/cli" alt="license"></a>
9
- </p>
10
-
11
- ## Contents
12
-
13
- - [Namera CLI](#namera-cli)
14
- - [Contents](#contents)
15
- - [Prerequisites](#prerequisites)
16
- - [Installation](#installation)
17
- - [Quick Start](#quick-start)
18
- - [Why Namera CLI?](#why-namera-cli)
19
- - [Command Groups](#command-groups)
20
- - [Params Mode and Schema](#params-mode-and-schema)
21
- - [Output Formats](#output-formats)
22
- - [Session Key Policies](#session-key-policies)
23
- - [MCP Server](#mcp-server)
24
- - [MCP Params Mode](#mcp-params-mode)
25
- - [Supported Chains](#supported-chains)
26
- - [Environment Variables](#environment-variables)
27
- - [Examples](#examples)
28
- - [Documentation](#documentation)
29
- - [Security](#security)
30
- - [License](#license)
31
-
32
- ## Prerequisites
33
-
34
- - **Node.js 18+** for running the CLI via npm/pnpm/bun
1
+ # @namera-ai/cli
2
+
3
+ Use Namera from your terminal, Codex, or Claude Code. Import encrypted session
4
+ keys and execute within the permissions you approved. The CLI includes a local
5
+ **stdio MCP server** that your agent client starts automatically.
35
6
 
36
7
  ## Installation
37
8
 
38
- Install globally with your package manager:
9
+ Requires **Node.js 24.14+** and an available operating-system keyring.
39
10
 
40
- ```bash
41
- npm i -g @namera-ai/cli
42
- #or
43
- pnpm i -g @namera-ai/cli
44
- #or
45
- bun i -g @namera-ai/cli
46
- #or
11
+ ```sh
12
+ npm install -g @namera-ai/cli
13
+ pnpm add -g @namera-ai/cli
47
14
  yarn global add @namera-ai/cli
48
- ```
49
- Build from source:
50
-
51
- ```bash
52
- gh repo clone thenamespace/namera
53
- cd namera
54
- pnpm install
55
- cd apps/cli
56
- pnpm run build
57
- pnpm run start -- --help
58
- # or link to global install
59
- pnpm link
60
- ```
61
-
62
- ## Quick Start
63
-
64
- Create a keystore, smart account, and session key (interactive prompts):
65
-
66
- ```bash
67
- namera keystore create --alias my-owner
68
- ```
69
- ```bash
70
- namera smart-account create --alias my-smart --owner-alias my-owner
71
- ```
72
- ```bash
73
- namera session-key create --alias my-session-key --smart-account my-smart
74
- ```
75
-
76
- Start the MCP server:
77
-
78
- ```bash
79
- namera mcp start --smart-account my-smart --session-key my-session-key=my-password --transport http --port 8080
80
- ```
81
-
82
- ## Why Namera CLI?
83
-
84
- **For humans**: clear prompts, consistent flags, and readable output.
85
-
86
- **For agents**: every command has a JSON schema, supports deterministic `--params`, and returns structured output that is easy to parse.
87
-
88
- ```bash
89
- # Schema discovery
90
- namera schema session-key.create
91
- ```
92
-
93
- ```bash
94
- # Deterministic params mode
95
- namera session-key create --params '{"alias":"my-session-key","smartAccountAlias":"my-smart","chains":["eth-mainnet"],"sessionKeyPassword":"session-password","ownerKeystorePassword":"owner-password","policyParams":[{"type":"sudo"}]}'
15
+ bun add -g @namera-ai/cli
96
16
  ```
97
17
 
98
- ## Command Groups
18
+ Choose one command. `yarn global` requires Yarn Classic; with modern Yarn use
19
+ `yarn dlx @namera-ai/cli --help` or install globally with npm/pnpm.
20
+ Bun can install the package, but the executable runs on Node.js.
99
21
 
100
- - `keystore` (`k`): Create, import, list, inspect, decrypt, and remove keystores
101
- - `smart-account` (`sa`): Create, import, list, inspect, status, and remove smart accounts
102
- - `session-key` (`sk`): Create, list, inspect, status, and remove session keys
103
- - `schema`: Print JSON schema for command parameters
104
- - `mcp`: Start the local MCP server
105
-
106
- Explore help:
107
-
108
- ```bash
22
+ ```sh
109
23
  namera --help
110
- namera keystore --help
111
- namera smart-account --help
112
- namera session-key --help
113
- namera mcp --help
114
- ```
115
-
116
- ## Params Mode and Schema
117
-
118
- Agents should use `--params` with the schema command to discover the exact input shape.
119
-
120
- ```bash
121
- namera schema keystore.create
122
- namera schema smart-account.create
123
- namera schema session-key.create
124
- namera schema mcp.start
24
+ namera --version
125
25
  ```
126
26
 
127
- Example params mode calls:
27
+ ## Sign in and inspect wallets
128
28
 
129
- ```bash
130
- namera keystore create --params '{"alias":"my-owner","password":"my-password"}'
29
+ ```sh
30
+ namera login
31
+ namera wallet list
32
+ namera session-key list
33
+ namera wallet get <wallet-id>
34
+ namera session-key get <session-key-id>
131
35
  ```
132
36
 
133
- ```bash
134
- namera smart-account create --params '{"alias":"my-smart","ownerAlias":"my-owner","ownerPassword":"my-password","index":0}'
135
- ```
136
-
137
- ```bash
138
- namera session-key create --params '{"alias":"my-session-key","smartAccountAlias":"my-smart","chains":["eth-mainnet"],"sessionKeyPassword":"session-password","ownerKeystorePassword":"owner-password","policyParams":[{"type":"sudo"}]}'
139
- ```
37
+ Login opens browser consent to choose access. Credentials persist in the OS
38
+ keyring, so you do not sign in for every command. The default API is
39
+ `https://api.namera.ai`.
140
40
 
141
- ## Output Formats
41
+ For local development:
142
42
 
143
- All commands support global output flags:
144
-
145
- - `--output`, `-o`: `pretty` (default), `json`, or `ndjson`
146
- - `--quiet`, `-q`: Suppress output entirely
147
-
148
- ```bash
149
- namera smart-account list --output json
150
- namera session-key list --output ndjson
43
+ ```sh
44
+ namera login --profile dev --host http://localhost:8080
45
+ namera wallet list --profile dev
151
46
  ```
152
47
 
153
- ## Session Key Policies
154
-
155
- Session keys are scoped by one or more policies:
48
+ ## Import a session key
156
49
 
157
- - `sudo`: Full permission, no restrictions
158
- - `call`: Restrict targets, functions, and value limits
159
- - `timestamp`: Limit validity by time range
160
- - `gas`: Limit total gas spend and optionally require a paymaster
161
- - `rate-limit`: Limit number of requests per interval
162
- - `signature-caller`: Restrict who can validate signatures
50
+ Create a key in the dashboard, approve its networks, and encrypt its export.
51
+ Run the command shown in the dashboard:
163
52
 
164
- Example policy payload:
165
-
166
- ```json
167
- { "type": "timestamp", "validAfter": 1719916800, "validUntil": 1722604800 }
53
+ ```sh
54
+ namera session-key import <encrypted-export>
168
55
  ```
169
56
 
170
- ## MCP Server
57
+ The export passphrase is entered privately. The CLI re-encrypts the key with an
58
+ independent OS-keyring secret and stores an encrypted local file. It never falls
59
+ back to plaintext storage. Keep your encrypted backup and passphrase safe.
60
+ Importing does not install the key onchain or grant a client access to it.
171
61
 
172
- Start MCP over stdio (default):
62
+ ## Connect an agent
173
63
 
174
- ```bash
175
- namera mcp start --smart-account my-smart --session-key my-session-key=my-password
176
- ```
64
+ Register once with your chosen client:
177
65
 
178
- Start MCP over HTTP:
66
+ ```sh
67
+ # Codex
68
+ codex mcp add namera -- namera mcp serve --profile codex
179
69
 
180
- ```bash
181
- namera mcp start --smart-account my-smart --session-key my-session-key=my-password --transport http --port 8080
70
+ # Claude Code
71
+ claude mcp add --transport stdio --scope user namera -- namera mcp serve --profile claude
182
72
  ```
183
73
 
184
- HTTP endpoint: `http://localhost:8080/mcp`
185
-
186
- Tools exposed:
74
+ Other MCP clients use command `namera` and arguments
75
+ `["mcp", "serve", "--profile", "agent"]`.
187
76
 
188
- - `get_wallet_address`
189
- - `get_balance`
190
- - `read_contract`
191
- - `native_transfer`
192
- - `execute_transaction`
77
+ Your client starts the process: no manual daemon or HTTP MCP endpoint is needed.
78
+ First tool use opens browser authorization. Approve access to installed session
79
+ keys and retry the tool after consent. If the browser cannot open:
193
80
 
194
- ### MCP Params Mode
195
-
196
- ```bash
197
- namera mcp start --params '{"smartAccountAlias":"my-smart","transport":"http","port":8080,"sessionKeys":{"my-session-key":"my-password"}}'
81
+ ```sh
82
+ namera mcp login --profile codex
83
+ namera mcp status --profile codex
198
84
  ```
199
85
 
200
- ## Supported Chains
201
-
202
- See the supported chain keys and IDs on [Namera Documentation](https://namera.ai/docs/cli/supported-chains).
203
-
204
- ## Environment Variables
86
+ MCP authorization is separate from ordinary CLI login. Use the same profile and
87
+ `--host` for serve/login/status/logout. Import signing keys on this machine
88
+ before executing or signing. Credentials survive restarts. The CLI does not
89
+ automatically export telemetry from your machine.
205
90
 
206
- You can pass chain-specific environment variables when starting MCP:
91
+ ## Simulate, execute, and sign
207
92
 
208
- ```bash
209
- # Ethereum Mainnet
210
- export ETH_MAINNET_RPC_URL="https://mainnet.infura.io/v3/YOUR-PROJECT-ID"
211
- export ETH_MAINNET_BUNDLER_URL="https://rpc.zerodev.app/api/v3/<api-token>/chain/1"
212
- export ETH_MAINNET_PAYMASTER_URL="https://rpc.zerodev.app/api/v3/<api-token>/chain/1"
213
-
214
- # Polygon Mainnet
215
- export POLYGON_MAINNET_RPC_URL="https://polygon-rpc.com"
216
- export POLYGON_MAINNET_BUNDLER_URL="https://rpc.zerodev.app/api/v3/<api-token>/chain/137"
217
- export POLYGON_MAINNET_PAYMASTER_URL="https://rpc.zerodev.app/api/v3/<api-token>/chain/137"
218
-
219
- # ... and more
93
+ ```sh
94
+ namera execution simulate
95
+ namera execution execute
96
+ namera execution status <submission-id>
97
+ namera execution list
98
+ namera sign
99
+ namera verify-signature
220
100
  ```
221
101
 
222
- By default, MCP uses the public RPC and public Pimlico Bundler RPC: `https://public.pimlico.io/v2/{chain_id}/rpc`.
223
-
224
- ## Examples
102
+ Commands prompt for inputs. For automation, pass `--params '<json>'` using the
103
+ public request shape. Execution/signing requires an imported key, active grant,
104
+ and appropriate authority. Gas is sponsored by default. Self-funded operations
105
+ also require `--max-gas-cost-wei <amount>`; MCP tools cannot raise that ceiling.
225
106
 
226
- Create a keystore and smart account:
107
+ ## Script-friendly output
227
108
 
228
- ```bash
229
- # Create a keystore
230
- namera keystore create -a my-owner -p my-password
109
+ ```sh
110
+ namera --output json wallet list
111
+ namera --output ndjson session-key list
112
+ namera --quiet auth status
231
113
  ```
232
114
 
233
- ```bash
234
- # Create a smart account
235
- namera smart-account create -a my-smart -oa my-owner -op my-password -i 0
236
- ```
237
-
238
- Create a session key (interactive policy selection):
239
-
240
- ```bash
241
- namera session-key create -a my-session-key -sa my-smart
242
- ```
115
+ Human-readable summaries are the default. JSON includes complete response fields;
116
+ NDJSON emits one document per top-level list item. `NO_COLOR` disables styling.
117
+ MCP reserves stdout for the protocol and writes diagnostics to stderr.
243
118
 
244
- Check deployment status:
119
+ For headless API-key use, supply `NAMERA_API_KEY` through the environment;
120
+ `NAMERA_API_URL` overrides the default host. API keys take precedence over
121
+ ordinary CLI profile credentials, but do not authorize MCP.
245
122
 
246
- ```bash
247
- # Check smart account deployment status on Ethereum Mainnet
248
- namera smart-account status --alias my-smart --chain eth-mainnet
249
- ```
123
+ ## Sign out
250
124
 
251
- ```bash
252
- # Check session key installation status on Ethereum Mainnet
253
- namera session-key status --alias my-session-key --chain eth-mainnet
125
+ ```sh
126
+ namera logout
127
+ namera mcp logout --profile codex
254
128
  ```
255
129
 
256
- ## Documentation
257
-
258
- - CLI Docs: [https://namera.ai/docs/cli](https://namera.ai/docs/cli)
259
- - CLI Docs Source: [apps/docs/content/docs/cli](https://github.com/thenamespace/namera/tree/main/apps/docs/content/docs/cli)
260
-
261
- ## Security
262
-
263
- Please report security issues via GitHub: https://github.com/thenamespace/namera/security
264
-
265
- ## License
130
+ Logout revokes that authorization, not other profiles or signing keys. macOS
131
+ Keychain integration is tested; Windows/Linux still need platform verification.
132
+ Headless Linux needs an accessible Secret Service/keyring. There is no plaintext
133
+ or in-memory fallback.
266
134
 
267
- Apache 2.0. See [LICENSE](https://github.com/thenamespace/namera/blob/main/LICENSE).
135
+ See [local MCP](https://github.com/thenamespace/namera-core/blob/main/architecture/clients/local-mcp.md)
136
+ and [key storage](https://github.com/thenamespace/namera-core/blob/main/architecture/clients/local-keystore.md).
137
+ The four public packages share a release version starting with 1.0.0.