@needmoretruth/nmts-cli 0.17.2 → 0.34.1

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 (419) hide show
  1. package/AGENTS.md +124 -516
  2. package/CHANGELOG.md +98 -0
  3. package/README.ko.md +374 -467
  4. package/README.md +384 -465
  5. package/dist/account-proof.d.ts +29 -0
  6. package/dist/account-proof.js +6 -6
  7. package/dist/account.d.ts +18 -0
  8. package/dist/account.js +5 -5
  9. package/dist/agent-host.d.ts +71 -0
  10. package/dist/agent-host.js +169 -0
  11. package/dist/api-advice.d.ts +2 -0
  12. package/dist/api-advice.js +210 -0
  13. package/dist/api-key.d.ts +79 -0
  14. package/dist/api-key.js +7 -7
  15. package/dist/api-refusal.d.ts +14 -0
  16. package/dist/api-refusal.js +8 -0
  17. package/dist/api.d.ts +114 -0
  18. package/dist/api.js +59 -162
  19. package/dist/args.d.ts +160 -0
  20. package/dist/args.js +118 -30
  21. package/dist/artifact-about.d.ts +49 -0
  22. package/dist/autonomy.d.ts +39 -0
  23. package/dist/autonomy.js +110 -32
  24. package/dist/code-access.d.ts +29 -0
  25. package/dist/code-access.js +3 -3
  26. package/dist/code-vault.d.ts +38 -0
  27. package/dist/code-vault.js +8 -8
  28. package/dist/collision.d.ts +67 -0
  29. package/dist/collision.js +1 -1
  30. package/dist/commands/accept-terms.d.ts +11 -0
  31. package/dist/commands/accept-terms.js +106 -0
  32. package/dist/commands/balance.d.ts +7 -0
  33. package/dist/commands/balance.js +54 -1
  34. package/dist/commands/create-code-file.d.ts +24 -0
  35. package/dist/commands/create-code-file.js +93 -0
  36. package/dist/commands/create-link.d.ts +10 -0
  37. package/dist/commands/create-link.js +232 -0
  38. package/dist/commands/create.d.ts +20 -0
  39. package/dist/commands/create.js +43 -102
  40. package/dist/commands/credits.d.ts +9 -0
  41. package/dist/commands/credits.js +110 -0
  42. package/dist/commands/delete-account.d.ts +11 -0
  43. package/dist/commands/delete-account.js +63 -0
  44. package/dist/commands/deposit.d.ts +7 -0
  45. package/dist/commands/deposit.js +85 -0
  46. package/dist/commands/devices.d.ts +12 -0
  47. package/dist/commands/devices.js +144 -0
  48. package/dist/commands/documents.d.ts +35 -0
  49. package/dist/commands/documents.js +212 -0
  50. package/dist/commands/env.d.ts +5 -0
  51. package/dist/commands/env.js +10 -2
  52. package/dist/commands/erase.d.ts +13 -0
  53. package/dist/commands/erase.js +193 -0
  54. package/dist/commands/expiring.d.ts +19 -0
  55. package/dist/commands/extend.d.ts +33 -0
  56. package/dist/commands/extend.js +54 -15
  57. package/dist/commands/get.d.ts +18 -0
  58. package/dist/commands/key-manage.d.ts +11 -0
  59. package/dist/commands/key-manage.js +162 -0
  60. package/dist/commands/key.d.ts +28 -0
  61. package/dist/commands/key.js +249 -0
  62. package/dist/commands/kit.d.ts +11 -0
  63. package/dist/commands/kit.js +7 -7
  64. package/dist/commands/listfile.d.ts +13 -0
  65. package/dist/commands/listfile.js +12 -5
  66. package/dist/commands/login.d.ts +18 -0
  67. package/dist/commands/login.js +19 -19
  68. package/dist/commands/logout.d.ts +1 -0
  69. package/dist/commands/logout.js +1 -1
  70. package/dist/commands/losses.d.ts +12 -0
  71. package/dist/commands/losses.js +180 -0
  72. package/dist/commands/ls.d.ts +23 -0
  73. package/dist/commands/marks-dispatch.d.ts +2 -0
  74. package/dist/commands/marks-dispatch.js +51 -0
  75. package/dist/commands/marks.d.ts +46 -0
  76. package/dist/commands/marks.js +80 -0
  77. package/dist/commands/mcp.d.ts +24 -0
  78. package/dist/commands/mcp.js +70 -5
  79. package/dist/commands/mode.d.ts +8 -0
  80. package/dist/commands/mode.js +60 -24
  81. package/dist/commands/on-collision.d.ts +6 -0
  82. package/dist/commands/organise.d.ts +46 -0
  83. package/dist/commands/padding.d.ts +7 -0
  84. package/dist/commands/padding.js +114 -0
  85. package/dist/commands/public-code.d.ts +9 -0
  86. package/dist/commands/public-code.js +8 -8
  87. package/dist/commands/pull.d.ts +27 -0
  88. package/dist/commands/push-wallet.d.ts +19 -0
  89. package/dist/commands/push-wallet.js +69 -0
  90. package/dist/commands/push.d.ts +47 -0
  91. package/dist/commands/push.js +37 -7
  92. package/dist/commands/put-wallet.d.ts +77 -0
  93. package/dist/commands/put-wallet.js +316 -0
  94. package/dist/commands/put.d.ts +56 -0
  95. package/dist/commands/put.js +53 -6
  96. package/dist/commands/rebuild.d.ts +18 -0
  97. package/dist/commands/rebuild.js +108 -10
  98. package/dist/commands/receive.d.ts +24 -0
  99. package/dist/commands/recovery-dispatch.d.ts +2 -0
  100. package/dist/commands/recovery-dispatch.js +34 -0
  101. package/dist/commands/recovery-list.d.ts +11 -0
  102. package/dist/commands/recovery-list.js +6 -6
  103. package/dist/commands/recovery.d.ts +25 -0
  104. package/dist/commands/recovery.js +2 -2
  105. package/dist/commands/rollback.d.ts +9 -0
  106. package/dist/commands/rollback.js +118 -0
  107. package/dist/commands/s3.d.ts +23 -0
  108. package/dist/commands/s3.js +6 -6
  109. package/dist/commands/settings.d.ts +5 -0
  110. package/dist/commands/settings.js +21 -6
  111. package/dist/commands/share-dispatch.d.ts +2 -0
  112. package/dist/commands/share-dispatch.js +46 -0
  113. package/dist/commands/share.d.ts +14 -0
  114. package/dist/commands/share.js +13 -3
  115. package/dist/commands/shares-sent.d.ts +18 -0
  116. package/dist/commands/shares-sent.js +95 -0
  117. package/dist/commands/support.d.ts +24 -0
  118. package/dist/commands/support.js +321 -0
  119. package/dist/commands/sweep.d.ts +11 -0
  120. package/dist/commands/tip.d.ts +11 -0
  121. package/dist/commands/tip.js +86 -0
  122. package/dist/commands/trash.d.ts +17 -0
  123. package/dist/commands/trash.js +1 -1
  124. package/dist/commands/trial.d.ts +7 -0
  125. package/dist/commands/trial.js +16 -18
  126. package/dist/commands/unlock.d.ts +16 -0
  127. package/dist/commands/unlock.js +159 -0
  128. package/dist/commands/update.d.ts +42 -0
  129. package/dist/commands/update.js +1 -1
  130. package/dist/commands/usage.d.ts +8 -0
  131. package/dist/commands/verify.d.ts +18 -0
  132. package/dist/commands/verify.js +10 -6
  133. package/dist/commands/wallet-activity.d.ts +26 -0
  134. package/dist/commands/wallet-activity.js +117 -0
  135. package/dist/commands/wallet-donate.d.ts +26 -0
  136. package/dist/commands/wallet-donate.js +163 -0
  137. package/dist/commands/wallet-hall.d.ts +35 -0
  138. package/dist/commands/wallet-hall.js +214 -0
  139. package/dist/commands/wallet-send.d.ts +22 -0
  140. package/dist/commands/wallet-send.js +153 -0
  141. package/dist/commands/wallet-storage-ops.d.ts +24 -0
  142. package/dist/commands/wallet-storage-ops.js +215 -0
  143. package/dist/commands/wallet-storage.d.ts +18 -0
  144. package/dist/commands/wallet-storage.js +95 -0
  145. package/dist/commands/wallet-swap.d.ts +32 -0
  146. package/dist/commands/wallet-swap.js +287 -0
  147. package/dist/commands/wallet.d.ts +36 -0
  148. package/dist/commands/wallet.js +57 -15
  149. package/dist/commands/whoami.d.ts +10 -0
  150. package/dist/commands/whoami.js +24 -6
  151. package/dist/consent.d.ts +140 -0
  152. package/dist/consent.js +89 -30
  153. package/dist/credentials.d.ts +146 -0
  154. package/dist/credentials.js +10 -10
  155. package/dist/crypto-surface.d.ts +197 -0
  156. package/dist/crypto.d.ts +81 -0
  157. package/dist/crypto.js +13 -0
  158. package/dist/deposit.d.ts +25 -0
  159. package/dist/deposit.js +78 -0
  160. package/dist/download-part.d.ts +40 -0
  161. package/dist/download-sink.d.ts +76 -0
  162. package/dist/download.d.ts +79 -0
  163. package/dist/download.js +3 -3
  164. package/dist/drive-paths.d.ts +73 -0
  165. package/dist/environment.d.ts +62 -0
  166. package/dist/environment.js +29 -9
  167. package/dist/errors.d.ts +22 -0
  168. package/dist/errors.js +3 -3
  169. package/dist/exit.d.ts +44 -0
  170. package/dist/expiry.d.ts +58 -0
  171. package/dist/extend-budget.d.ts +35 -0
  172. package/dist/extend-budget.js +81 -0
  173. package/dist/extend-chain.d.ts +43 -0
  174. package/dist/extend-chain.js +40 -3
  175. package/dist/extend-plan.d.ts +148 -0
  176. package/dist/extend-plan.js +1 -1
  177. package/dist/gate.d.ts +18 -0
  178. package/dist/gate.js +100 -0
  179. package/dist/guards.d.ts +2 -0
  180. package/dist/help.d.ts +20 -0
  181. package/dist/help.js +199 -33
  182. package/dist/human-check.d.ts +23 -0
  183. package/dist/index.d.ts +42 -0
  184. package/dist/index.js +49 -0
  185. package/dist/item-trash.d.ts +1 -0
  186. package/dist/kit-file.d.ts +56 -0
  187. package/dist/kit-file.js +10 -10
  188. package/dist/list-file.d.ts +88 -0
  189. package/dist/list-file.js +90 -7
  190. package/dist/list-view-find.d.ts +15 -0
  191. package/dist/list-view-order.d.ts +32 -0
  192. package/dist/main.d.ts +12 -0
  193. package/dist/main.js +112 -113
  194. package/dist/manifest-chunk-cache.d.ts +14 -0
  195. package/dist/manifest-chunk-cache.js +103 -0
  196. package/dist/manifest-chunk-flow.d.ts +81 -0
  197. package/dist/manifest-chunk-flow.js +307 -0
  198. package/dist/manifest-create.d.ts +23 -0
  199. package/dist/manifest-create.js +26 -30
  200. package/dist/manifest-write.d.ts +161 -0
  201. package/dist/manifest-write.js +42 -33
  202. package/dist/manifest.d.ts +82 -0
  203. package/dist/manifest.js +69 -21
  204. package/dist/mark-render.d.ts +26 -0
  205. package/dist/mcp-args.d.ts +17 -0
  206. package/dist/mcp-ask.d.ts +43 -0
  207. package/dist/mcp-ask.js +100 -0
  208. package/dist/mcp-tools/context.d.ts +46 -0
  209. package/dist/mcp-tools/credits.d.ts +3 -0
  210. package/dist/mcp-tools/credits.js +61 -0
  211. package/dist/mcp-tools/files.d.ts +3 -0
  212. package/dist/mcp-tools/files.js +34 -0
  213. package/dist/mcp-tools/organise.d.ts +3 -0
  214. package/dist/mcp-tools/organise.js +82 -2
  215. package/dist/mcp-tools/reads.d.ts +3 -0
  216. package/dist/mcp-tools/reads.js +132 -4
  217. package/dist/mcp-tools/share.d.ts +3 -0
  218. package/dist/mcp-tools/share.js +26 -7
  219. package/dist/mcp-tools/support.d.ts +3 -0
  220. package/dist/mcp-tools/support.js +140 -0
  221. package/dist/mcp-tools/tiers.d.ts +31 -0
  222. package/dist/mcp-tools/tiers.js +147 -0
  223. package/dist/mcp.d.ts +80 -0
  224. package/dist/mcp.js +110 -9
  225. package/dist/net-retry.d.ts +38 -0
  226. package/dist/network.d.ts +10 -0
  227. package/dist/notice.d.ts +7 -0
  228. package/dist/notice.js +7 -7
  229. package/dist/product.d.ts +29 -0
  230. package/dist/product.js +1 -1
  231. package/dist/progress.d.ts +37 -0
  232. package/dist/prompt.d.ts +31 -0
  233. package/dist/prompt.js +1 -1
  234. package/dist/rebuild-key-check.d.ts +26 -0
  235. package/dist/rebuild-key-check.js +90 -0
  236. package/dist/rebuild.d.ts +87 -0
  237. package/dist/rebuild.js +26 -4
  238. package/dist/recovery-assemble.d.ts +40 -0
  239. package/dist/recovery-assemble.js +1 -1
  240. package/dist/recovery-build.d.ts +40 -0
  241. package/dist/recovery-map-file.d.ts +53 -0
  242. package/dist/recovery-map-file.js +4 -4
  243. package/dist/recovery-map.d.ts +197 -0
  244. package/dist/recovery-release.d.ts +104 -0
  245. package/dist/recovery-seq.d.ts +10 -0
  246. package/dist/recovery-source.d.ts +50 -0
  247. package/dist/redact.d.ts +70 -0
  248. package/dist/redact.js +212 -0
  249. package/dist/registration.d.ts +30 -0
  250. package/dist/registration.js +5 -5
  251. package/dist/risk.d.ts +380 -0
  252. package/dist/risk.js +206 -0
  253. package/dist/run-log.d.ts +78 -0
  254. package/dist/run-log.js +301 -0
  255. package/dist/s3/listing.d.ts +47 -0
  256. package/dist/s3/multipart.d.ts +21 -0
  257. package/dist/s3/response-sink.d.ts +8 -0
  258. package/dist/s3/same-file.d.ts +54 -0
  259. package/dist/s3/server.d.ts +58 -0
  260. package/dist/s3/server.js +2 -2
  261. package/dist/s3/sigv4.d.ts +46 -0
  262. package/dist/s3/sigv4.js +1 -1
  263. package/dist/s3/staging.d.ts +10 -0
  264. package/dist/s3/xml.d.ts +28 -0
  265. package/dist/safe-path.d.ts +41 -0
  266. package/dist/seal.d.ts +120 -0
  267. package/dist/secret-reader.d.ts +28 -0
  268. package/dist/server.d.ts +9 -0
  269. package/dist/session.d.ts +32 -0
  270. package/dist/session.js +1 -1
  271. package/dist/setup-questions.d.ts +7 -0
  272. package/dist/share.d.ts +108 -0
  273. package/dist/share.js +1 -1
  274. package/dist/shared/lib/crypto/size-padding.d.ts +55 -0
  275. package/dist/shared/lib/crypto/size-padding.js +5 -0
  276. package/dist/shared/lib/drive/manifest-chunks.d.ts +95 -0
  277. package/dist/shared/lib/drive/manifest-chunks.js +252 -0
  278. package/dist/shared/lib/drive/manifest-codec.d.ts +214 -0
  279. package/dist/shared/lib/drive/manifest-codec.js +7 -7
  280. package/dist/shared/lib/drive/manifest-index.d.ts +98 -0
  281. package/dist/shared/lib/drive/manifest-ops.d.ts +167 -0
  282. package/dist/shared/lib/drive/manifest-ops.js +9 -4
  283. package/dist/shared/lib/drive/manifest-pack.d.ts +65 -0
  284. package/dist/shared/lib/drive/manifest-pack.js +287 -0
  285. package/dist/shared/lib/drive/manifest-settings.d.ts +113 -0
  286. package/dist/shared/lib/drive/manifest-settings.js +87 -6
  287. package/dist/shared/lib/drive/name-conflict.d.ts +76 -0
  288. package/dist/shared/lib/drive/rebuild-verify.d.ts +73 -0
  289. package/dist/shared/lib/drive/rebuild-verify.js +112 -0
  290. package/dist/shared/lib/drive/unique-name.d.ts +9 -0
  291. package/dist/shared/lib/drive/zstd.d.ts +27 -0
  292. package/dist/shared/lib/drive/zstd.js +74 -0
  293. package/dist/shared/lib/extend/epochs.d.ts +205 -0
  294. package/dist/shared/lib/net/retry-budget.d.ts +79 -0
  295. package/dist/shared/lib/share/shared-file-info.d.ts +21 -0
  296. package/dist/shared/lib/storage-control/chain.d.ts +57 -0
  297. package/dist/shared/lib/storage-control/chain.js +82 -0
  298. package/dist/shared/lib/storage-control/plan.d.ts +40 -0
  299. package/dist/shared/lib/storage-control/plan.js +72 -0
  300. package/dist/shared/lib/storage-control/reuse.d.ts +72 -0
  301. package/dist/shared/lib/storage-control/reuse.js +95 -0
  302. package/dist/shared/lib/storage-network.d.ts +25 -0
  303. package/dist/shared/lib/upload/part-plan.d.ts +24 -0
  304. package/dist/shared/lib/wallet/activity.d.ts +138 -0
  305. package/dist/shared/lib/wallet/activity.js +208 -0
  306. package/dist/shared/lib/wallet/send-rules.d.ts +68 -0
  307. package/dist/shared/lib/wallet/send-rules.js +116 -0
  308. package/dist/shared/lib/wallet/swap-rules.d.ts +115 -0
  309. package/dist/shared/lib/wallet/swap-rules.js +199 -0
  310. package/dist/shared/lib/wallet/tip.d.ts +14 -0
  311. package/dist/shared/lib/wallet/tip.js +34 -0
  312. package/dist/shared/lib/wallet/venue-ids.d.ts +23 -0
  313. package/dist/shared/lib/wallet/venue-ids.js +53 -0
  314. package/dist/standing-tip.d.ts +24 -0
  315. package/dist/standing-tip.js +52 -0
  316. package/dist/stdout.d.ts +38 -0
  317. package/dist/storage-control-chain.d.ts +38 -0
  318. package/dist/storage-control-chain.js +78 -0
  319. package/dist/sui-rpc.d.ts +15 -0
  320. package/dist/sui-rpc.js +59 -0
  321. package/dist/support-attach.d.ts +24 -0
  322. package/dist/support-attach.js +72 -0
  323. package/dist/support-copy.d.ts +42 -0
  324. package/dist/support-copy.js +109 -0
  325. package/dist/support-wire.d.ts +49 -0
  326. package/dist/support-wire.js +194 -0
  327. package/dist/trash-sweep.d.ts +55 -0
  328. package/dist/units.d.ts +2 -0
  329. package/dist/update-check.d.ts +50 -0
  330. package/dist/update-source.d.ts +63 -0
  331. package/dist/upload-api.d.ts +3 -0
  332. package/dist/upload-file.d.ts +97 -0
  333. package/dist/upload-file.js +3 -2
  334. package/dist/upload-price.d.ts +50 -0
  335. package/dist/upload-steps.d.ts +26 -0
  336. package/dist/upload-steps.js +29 -9
  337. package/dist/upload-store.d.ts +182 -0
  338. package/dist/upload-wallet-chain.d.ts +54 -0
  339. package/dist/upload-wallet-chain.js +203 -0
  340. package/dist/upload-wallet-plan.d.ts +128 -0
  341. package/dist/upload-wallet-plan.js +184 -0
  342. package/dist/upload-wallet.d.ts +24 -0
  343. package/dist/upload-wallet.js +208 -0
  344. package/dist/upload-wire.d.ts +244 -0
  345. package/dist/upload.d.ts +18 -0
  346. package/dist/upload.js +10 -0
  347. package/dist/usage-report.d.ts +35 -0
  348. package/dist/wallet-activity-chain.d.ts +5 -0
  349. package/dist/wallet-activity-chain.js +31 -0
  350. package/dist/wallet-chain.d.ts +19 -0
  351. package/dist/wallet-chain.js +2 -2
  352. package/dist/wallet-grant.d.ts +50 -0
  353. package/dist/wallet-grant.js +218 -0
  354. package/dist/wallet-send-chain.d.ts +24 -0
  355. package/dist/wallet-send-chain.js +49 -0
  356. package/dist/wallet-sign.d.ts +133 -0
  357. package/dist/wallet-sign.js +317 -0
  358. package/dist/wallet-storage-chain.d.ts +3 -0
  359. package/dist/wallet-storage-chain.js +20 -0
  360. package/dist/wallet-swap-chain.d.ts +52 -0
  361. package/dist/wallet-swap-chain.js +186 -0
  362. package/dist/wallet-swap-quote.d.ts +22 -0
  363. package/dist/wallet-swap-quote.js +126 -0
  364. package/dist/wallet.d.ts +135 -0
  365. package/dist/wallet.js +5 -5
  366. package/dist/walrus-write.d.ts +56 -0
  367. package/dist/walrus-write.js +5 -4
  368. package/dist/walrus.d.ts +86 -0
  369. package/dist/walrus.js +48 -10
  370. package/dist/zstd-node.d.ts +11 -0
  371. package/dist/zstd-node.js +71 -0
  372. package/docs/commands/accept-terms.md +15 -0
  373. package/docs/commands/create.md +17 -0
  374. package/docs/commands/credits.md +34 -0
  375. package/docs/commands/delete-account.md +14 -0
  376. package/docs/commands/deposit.md +27 -0
  377. package/docs/commands/devices.md +9 -0
  378. package/docs/commands/documents.md +10 -0
  379. package/docs/commands/env.md +21 -0
  380. package/docs/commands/extend.md +27 -0
  381. package/docs/commands/folders.md +10 -0
  382. package/docs/commands/get.md +14 -0
  383. package/docs/commands/key.md +14 -0
  384. package/docs/commands/login.md +23 -0
  385. package/docs/commands/logout.md +11 -0
  386. package/docs/commands/losses.md +13 -0
  387. package/docs/commands/ls.md +16 -0
  388. package/docs/commands/marks.md +9 -0
  389. package/docs/commands/mcp.md +33 -0
  390. package/docs/commands/mode.md +29 -0
  391. package/docs/commands/on-collision.md +13 -0
  392. package/docs/commands/padding.md +13 -0
  393. package/docs/commands/public-code.md +9 -0
  394. package/docs/commands/pull.md +9 -0
  395. package/docs/commands/push.md +12 -0
  396. package/docs/commands/put.md +36 -0
  397. package/docs/commands/rebuild.md +13 -0
  398. package/docs/commands/recovery.md +18 -0
  399. package/docs/commands/s3.md +17 -0
  400. package/docs/commands/share.md +15 -0
  401. package/docs/commands/support.md +16 -0
  402. package/docs/commands/tip.md +21 -0
  403. package/docs/commands/trash.md +25 -0
  404. package/docs/commands/trial.md +12 -0
  405. package/docs/commands/unlock.md +25 -0
  406. package/docs/commands/update.md +14 -0
  407. package/docs/commands/usage.md +14 -0
  408. package/docs/commands/verify.md +18 -0
  409. package/docs/commands/wallet.md +67 -0
  410. package/docs/commands/whoami.md +12 -0
  411. package/package.json +67 -8
  412. package/server.json +28 -0
  413. package/vendor/nmts-crypto/nmts_crypto_wasm.d.ts +23 -2
  414. package/vendor/nmts-crypto/nmts_crypto_wasm.js +44 -2
  415. package/vendor/nmts-crypto/nmts_crypto_wasm_bg.wasm +0 -0
  416. package/vendor/nmts-crypto/nmts_crypto_wasm_bg.wasm.d.ts +1 -0
  417. package/vendor/nmts-crypto/package.json +1 -1
  418. package/dist/commands/consent.js +0 -77
  419. package/dist/extend-sign.js +0 -130
package/README.ko.md CHANGED
@@ -2,196 +2,142 @@
2
2
 
3
3
  *[English](README.md)*
4
4
 
5
- [NMTS](https://nmts.me)를 터미널에서 쓰는 도구입니다 — 월러스 위의 종단 간 암호화 저장소를,
5
+ [NMTS](https://nmts.me)를 터미널에서 쓰는 도구입니다 — Walrus 네트워크 위의 종단 간 암호화 저장소를,
6
6
  터미널 앞의 사람과 그 사람이 돌리는 에이전트를 위해.
7
7
 
8
- > **AI 에이전트라면 [AGENTS.md](AGENTS.md) 대신 읽으십시오.** 같은 것을 프로그램이 필요로 하는
9
- > 순서로 적어 두었고, 사람이 이 도구를 가리켰을 때 따라갈 파일이 그것입니다. (영어로 되어 있습니다.)
10
-
11
- > **이야기를 나누는 곳: [디스코드](https://discord.gg/pcmRkVmVZk).** 질문도, 의견도, 무엇을
12
- > 만들고 계신지도. 영어와 한국어 둘 다 읽습니다.
13
-
14
- > **상태: 이릅니다.** 열어 놓고 만들고 있고, 1.0 전에 인터페이스가 더 바뀔 수 있습니다. 여기 적힌
15
- > 어떤 것도 「나올 기능」에 대한 약속이 아닙니다 — 지금 무엇이 있는지에 대한 정본은
8
+ > **이야기를 나누는 곳: [디스코드](https://discord.gg/pcmRkVmVZk).** 영어와 한국어 읽습니다.
9
+ >
10
+ > **AI 에이전트라면 [AGENTS.md](AGENTS.md)를 대신 읽으십시오.** 같은 내용을 프로그램이 필요로 하는
11
+ > 순서로 적어 두었습니다. (영어입니다.)
12
+ >
13
+ > **상태: 이릅니다.** 1.0 전에 인터페이스가 더 바뀔 수 있습니다. 지금 무엇이 있는지의 정본은
16
14
  > `nmts --help`입니다.
17
15
 
18
16
  ## NMTS가 무엇인가
19
17
 
20
- **암호화가 기계에서 일어나고 열쇠가 기기 밖으로 나가지 않는** 저장소입니다. 서버는 암호화된
21
- 바이트를 받을 뿐 그것을 방법이 없습니다. 파일 내용도, 이름도, 폴더 구조도 전부 계정 코드만이
22
- 여는 암호화된 목록 안에 있습니다.
18
+ **암호화가 기계에서 일어나고 열쇠가 기기 밖으로 나가지 않는** 저장소입니다. 서버는 암호화된
19
+ 바이트를 받을 뿐 열지 못합니다. 파일 내용도, 이름도, 폴더도 전부 NMTS 키만이 여는 암호화된
20
+ 목록 안에 있습니다.
23
21
 
24
- 바이트 자체는 공개 저장망인 **월러스**에 있고, 값은 **Sui** 체인에서 치릅니다. 시작하시기 전에
25
- 알아 두실 만한 결과가 있습니다.
22
+ 바이트는 공개 저장 네트워크인 **Walrus**에 있고, 값은 **Sui** 체인에서 치릅니다. 시작하기 전에
23
+ 알아 것이 있습니다.
26
24
 
27
- - **저장은 영원히가 아니라 기간을 사는 것입니다.** 파일에는 기한이 있습니다. 연장할 수 있고,
28
- 다 되기 전에 NMTS가 알려 드립니다.
29
- - **비밀번호 재설정 같은 것이 없습니다.** 계정 코드가 곧 계정입니다. 되찾을 수 없고, 파일을 그대로
30
- 둔 채 바꿀 수도 없습니다 — 그것은 NMTS를 포함해 누구도 그 파일을 못 열게 만드는 바로 그 성질
31
- 입니다.
25
+ - **저장은 영원히가 아니라 기간을 사는 것입니다.** 파일에는 기한이 있습니다. 연장할 수 있고, 끝나기
26
+ 전에 NMTS가 알려 줍니다.
27
+ - **비밀번호 재설정이 없습니다.** NMTS 키가 곧 계정입니다. 되찾을 수 없고, 파일을 그대로 둔 채
28
+ 바꿀 수도 없습니다. NMTS를 포함해 누구도 그 파일을 못 여는 것과 같은 성질입니다.
29
+ - **NMTS는 요금을 받지 않습니다.** 저장은 본인 지갑에서 Walrus 네트워크에 기간제로 사는 것이고, NMTS에
30
+ 내는 돈은 없습니다. 여기서 하는 업로드는 **크레딧**을 쓰는데, 크레딧은 후원 풀이 네트워크에 미리 내 둔
31
+ 저장(주마다 여는 무료 체험)이지 파는 것이 아닙니다. 명령 하나, `nmts extend`만 내 Sui 지갑에서 직접
32
+ 내고, 그 전에 별도의 동의를 받습니다. 공개 체인에서 서명해 산 것은 누구도 되돌릴 수 없기 때문입니다.
32
33
 
33
- 값을 치르는 길은 둘입니다. **크레딧** NMTS 금고가 저장을 사고 계정은 이미 갖고 있는 크레딧을
34
- 쓰는 또는 **직접 쓰시는 Sui 지갑**으로 공개 체인 위에서 직접 서명해 사는 것. 여기서 하는
35
- 업로드는 언제나 크레딧을 씁니다. 지갑을 쓰는 명령은 하나뿐이고(`nmts extend` — 이미 저장된 파일의
36
- 기간을 더 사는 것), 서명하기 전에 별도의 동의를 받습니다. 서명해 산 것은 NMTS가 되돌릴 수 없기
37
- 때문입니다.
34
+ NMTS는 사람이 만들고 운영합니다. 도구와 암호화 엔진, 복구 프로그램은 Apache-2.0으로 공개돼
35
+ 있고, 서버와 앱은 공개하지 않습니다.
38
36
 
39
37
  ## 설치
40
38
 
41
- Node 22 이상. 저장소에서 바로, 줄로:
39
+ Node 22.15.0 이상. 설치할 컴파일하는 것이 없고 네이티브 빌드 단계도 없습니다. 암호화 엔진은
40
+ 저장소에 실린 WebAssembly 모듈이라, Node가 도는 곳이면 어디서든 돕니다 — 리눅스, macOS, 윈도우,
41
+ 그리고 rootless 컨테이너 안에서도.
42
42
 
43
43
  ```sh
44
- npm install -g github:needmoretruth/nmts-cli
44
+ npm install -g @needmoretruth/nmts-cli
45
45
  nmts --help
46
46
  ```
47
47
 
48
- 그러면 기본 브랜치를 가져갑니다. 버전을 고정하시려면 태그를 적으십시오.
49
-
50
- ```sh
51
- npm install -g github:needmoretruth/nmts-cli#v0.17.2
52
- ```
53
-
54
- 또는 [최신 릴리스](https://github.com/needmoretruth/nmts-cli/releases)의 tarball에서. 같은
55
- 꾸러미이고 복제가 필요 없습니다.
48
+ 같은 패키지를 등록소 없이 저장소에서 바로 설치할 수도 있습니다 — 기본 브랜치, 고정한 버전,
49
+ 또는 [최신 릴리스](https://github.com/needmoretruth/nmts-cli/releases)에 붙은 tarball로:
56
50
 
57
51
  ```sh
52
+ npm install -g github:needmoretruth/nmts-cli # 기본 브랜치
53
+ npm install -g github:needmoretruth/nmts-cli#v0.34.1 # 버전을 고정할 때
58
54
  npm install -g https://github.com/needmoretruth/nmts-cli/releases/latest/download/nmts.tgz
59
55
  ```
60
56
 
61
- **꾸러미 저장소(npm registry)에 올라가 있지 않아서 `npm install -g nmts`로는 찾지 못합니다.**
62
- 짧은 이름은 쓸 수도 없습니다 — 저장소가 이미 올라간 이름들과 너무 비슷하다며 거절합니다. 설치에
63
- 대한 나머지는 바뀌지 않습니다 — 어느 쪽이든 정본은 이 저장소입니다.
64
-
65
- **설치할 때 컴파일하는 것이 없고**, `dist/`가 이 저장소에 들어 있는 이유가 그것입니다. 저장소에서
66
- 바로 설치하는 것은 빌드를 못 합니다 — npm이 컴파일러가 없는 임시 복제본에서 준비하기 때문입니다.
67
- 커밋된 빌드는 그것을 만든 소스와 어긋날 수 있으므로, 이 저장소의 검사가 푸시마다 다시 빌드해서 한
68
- 바이트라도 다르면 거절합니다.
69
-
70
- 설치가 아니라 손대 보시려면:
71
-
72
- ```sh
73
- git clone https://github.com/needmoretruth/nmts-cli
74
- cd nmts-cli
75
- npm install
76
- node src/main.ts --help
77
- ```
57
+ 등록소의 이름에는 스코프가 붙습니다. `npm install -g nmts`는 아무것도 찾지 못합니다 짧은
58
+ 이름은 이미 있는 이름과 너무 비슷하다며 등록소가 거절하기 때문입니다.
78
59
 
79
- `npm run compile`이 `dist/`를 새로 만들고, `node dist/main.js`로 돌립니다 — 설치된 명령이 돌리는
80
- 바로 그 파일입니다. 이름이 `build`가 아니라 `compile`인 데에는 이름을 바꾸시기 전에 알아 두실
81
- 이유가 있습니다. npm 11에서는 `build`라는 스크립트가 있는 꾸러미를 git 주소에서 설치하면 npm이
82
- 자기 임시 복제본을 링크해 놓고 그것을 지워 버려서, 깨진 명령이 남는데 **성공했다고 보고합니다.**
83
-
84
- **네이티브 빌드 단계도, C 컴파일러도 어디에도 없습니다.** 암호 엔진은 저장소에 실려 있는
85
- WebAssembly 모듈입니다. Node가 도는 곳이면 어디서든 돕니다 — 리눅스, 맥, 윈도우, 그리고 루트 없는
86
- 컨테이너 안에서도. 시작에 80밀리초쯤 들고, 명령은 자기가 필요한 것만 불러옵니다.
60
+ 소스를 직접 고치려면 [CONTRIBUTING.ko.md](CONTRIBUTING.ko.md)를 보십시오.
87
61
 
88
62
  ## 최신으로 유지하기
89
63
 
90
64
  ```sh
91
- nmts update
65
+ nmts update # 가장 새 릴리스를 지금 것 위에 설치합니다
66
+ nmts update --dry-run # 버전과 실행할 명령만 찍고 아무것도 바꾸지 않습니다
92
67
  ```
93
68
 
94
- 어느 릴리스가 가장 새것인지 읽어서, 지금 도는 버전과 공개된 버전을 찍고, 릴리스 자신의 주소
95
- 에서 `npm install --global`로 새것을 설치합니다. `--dry-run`은 명령만 찍고 멈춥니다. 설치된 사본이
96
- 아니라 소스 복제본에서 돌리면 거절합니다 설치하면 사본이 둘이 되고 어느 쪽이 도는지는 PATH가
97
- 정하게 됩니다.
98
-
99
- 그와 별개로 **하루에 한 번, 명령이 끝난 뒤에**
100
- `https://github.com/needmoretruth/nmts-cli/releases/latest`에 어느 릴리스가 최신인지 묻고 그 답을
101
- 적어 둡니다. 그것이 지금 도는 버전보다 새것이면, 다음 실행 때 그렇다고 stderr에 한 줄 찍습니다 —
102
- `--json`의 출력에 섞이지 않도록 stderr입니다.
103
-
104
- 그 요청에는 계정 코드도, API 키도, 명령 이름도 실리지 않습니다. 어떤 페이지 주소를 묻는 것이고,
105
- 그쪽이 볼 수 있는 것은 「누군가 그것을 물었다」입니다. 이 도구가 만드는 요청 중 **명령이 시키지
106
- 않은 것은 이것 하나뿐**입니다. 나머지는 전부 무언가가 필요로 해서 NMTS 서버나 저장망으로 갑니다.
107
-
108
- `NMTS_NO_UPDATE_CHECK`에 아무 값이나 넣으면 둘 다 멈춥니다 — 조회도, 알림도. `nmts env`가 그
109
- 확인이 마지막으로 무엇을 찾았는지, 또는 왜 답을 못 했는지 보여 줍니다.
69
+ 이와 별개로, 하루에 명령이 끝난 릴리스 페이지에 가장 버전이 무엇인지 묻고 답을 적어
70
+ 둡니다. 것이 있으면 다음 실행이 stderr에 줄을 찍습니다. 그 요청에는 NMTS 키도, API 키도,
71
+ 명령 이름도 실리지 않으며, 어떤 명령도 시키지 않았는데 도구가 하는 유일한 요청입니다.
72
+ `NMTS_NO_UPDATE_CHECK`에 아무 값이나 넣으면 둘 다 멈추고, `nmts env`가 마지막에 무엇을 알아냈는지 보여
73
+ 줍니다.
110
74
 
111
75
  ## 처음 돌릴 때
112
76
 
113
77
  ```sh
114
- nmts env
78
+ nmts env # 이 기계가 무엇이고 자격이 손에 닿는지. 아무 데도 접속하지 않습니다.
79
+ nmts login # NMTS 키를 여기에 잠가 두고, API 키를 받습니다
80
+ nmts ls # 파일 목록
81
+ nmts put x # 파일 하나 업로드 — 크레딧을 씁니다
82
+ nmts get x # 파일 하나 다운로드
115
83
  ```
116
84
 
117
- 아무 데도 접속하지 않고 자격도 필요 없습니다. 기계가 무엇인지, 여기 파일을 정말 남이 못 읽게
118
- 있는지, 브라우저를 열 수 있는지, 자격이 이미 보이는지를 알려 줍니다. 낯선 곳 — 컨테이너,
119
- CI 러너, 남의 노트북 — 에서는 이것부터 돌리십시오.
85
+ 모르는 기계 컨테이너, CI 러너, 남의 노트북 에서는 `nmts env`를 먼저 돌리십시오. 자격이 필요
86
+ 없고, 여기에 자격이 무엇에 노출되는지를 알려 줍니다.
120
87
 
121
88
  ## 자격은 둘입니다
122
89
 
123
90
  하는 일이 다르고, 서로 바꿔 쓸 수 없습니다.
124
91
 
125
- **계정 코드가 파일을 엽니다.** 계정의 모든 열쇠가 거기서 나옵니다 — 파일 열쇠도, 암호화된 목록도,
126
- 지갑도. 서버로는 가지 않습니다.
127
-
128
- ```sh
129
- export NMTS_ACCOUNT_CODE_FILE=/path # 코드가 든 파일을 가리킵니다 — 권합니다
130
- nmts login # …또는 암호 문구로 잠가 여기에 둡니다
131
- export NMTS_ACCOUNT_CODE="..." # …또는 그대로 건넵니다(한 번 묻습니다 · 아래 참고)
132
- ```
133
-
134
- **API 키가 서버를 답하게 합니다.** 평소의 로그인은 어떤 CLI도 지날 수 없는 사람 확인을 요구하는데,
135
- [nmts.me](https://nmts.me)의 계정 화면에서 만든 키가 그것만 면제해 줍니다. **파일은 열지 못합니다.**
136
-
137
- ```sh
138
- export NMTS_API_KEY_FILE=/path # 키가 든 파일을 가리킵니다 — 권합니다
139
- export NMTS_API_KEY="..." # …또는 그대로 건넵니다
140
- nmts login # …그리고 이것이 찾은 쪽을 적어 두거나 묻습니다
141
- ```
142
-
143
- `nmts ls`는 둘 다 필요합니다 — 서버가 답하게 하는 키와, 그 답을 열 수 있게 하는 코드.
144
-
145
- `nmts login`은 키를 적어 두기 전에 서버에 대고 확인하므로, 잘못된 키는 다음 명령이 아니라 붙여
146
- 넣으신 그 순간에 잘못된 것으로 드러납니다. 키의 공개된 손잡이만 찍고 키 자체는 절대 찍지 않습니다.
147
- 이미 저장된 키는 그렇게 하겠다고 말하지 않은 실행이 덮어쓰지 않습니다 — 터미널에서는 `login`이
148
- 묻고, 터미널이 없는 곳에서는 `nmts logout`으로 먼저 지우십시오.
149
-
150
- **어느 자격도 명령줄 인자로는 받지 않습니다.** 리눅스에서는 어떤 프로세스든 다른 프로세스의
151
- 명령줄을 읽을 수 있고, 셸은 그것을 기록에 남깁니다. 그래서 둘 다 그런 옵션이 **일부러** 없습니다.
152
-
153
- ## 코드를 둘 수 있는 자리
154
-
155
- 넷이고, 도구는 각각에 대해 의견이 있습니다. 못 쓰게 막는 것은 없습니다 — 달라지는 것은 그것이
156
- **실수로** 일어나느냐입니다.
157
-
158
- | | 하는 일 | 묻는 것 |
92
+ | | 하는 | 건네는 |
159
93
  |---|---|---|
160
- | `NMTS_ACCOUNT_CODE_FILE=/path` | 파일에서 코드를 읽고 복사하지 않습니다 | 없음 |
161
- | `nmts login` | `~/.nmts/credentials.json`에 암호 문구로 잠가 둡니다 | 없음 |
162
- | `nmts login --plain` | 그대로 적습니다(권한 600) | 한 번, `unsafe-code-storage` |
163
- | `NMTS_ACCOUNT_CODE`에 코드를 담기 | 환경변수에서 바로 씁니다 | 한 번, `plain-env` |
94
+ | **NMTS 키** | 파일을 엽니다. 계정의 모든 열쇠가 여기서 나옵니다. 서버로 가지 않습니다. | `NMTS_ACCOUNT_CODE_FILE=/path`(권장) · `nmts login` · `NMTS_ACCOUNT_CODE` |
95
+ | **API 키** | 서버가 답하게 합니다. nmts.me의 계정 화면에서 만듭니다. 파일은 열지 못합니다. | `NMTS_API_KEY_FILE=/path`(권장) · `NMTS_API_KEY` · `nmts login` |
164
96
 
165
- **`nmts login`은 기본이 잠그는 것입니다.** 디스크에 남는 것은 코드가 아닙니다 그것을 열려면 암호
166
- 문구가 필요하므로, 그 파일이 백업이나 동기화 폴더나 컨테이너 이미지나 도둑맞은 노트북에 있어도 그
167
- 자체로는 값이 없습니다. 코드가 필요한 모든 명령이 암호 문구를 묻거나 `NMTS_PASSPHRASE`에서
168
- 읽습니다. 그때마다 1초의 몇 분의 1과 64 MiB의 메모리가 드는데, 그것이 요점입니다 — 암호 문구를
169
- 추측하는 값을 비싸게 만드는 것이 그것입니다.
97
+ `nmts ls`는 필요합니다 서버가 답하게 하는 API 키와, 답을 열 수 있게 하는 NMTS 키.
170
98
 
171
- **암호 문구는 「나와 같은 권한으로 도는 것」으로부터 코드를 지켜 주지 않습니다.** 암호 문구를
172
- 건네주는 쪽도 같은 방법으로 읽힙니다. 에이전트가 사람 없이 도는 기계에서는 `NMTS_PASSPHRASE`가
173
- 에이전트가 닿을 있는 곳에 있어야 하고, 순간 자물쇠는 열쇠를 옆에 붙여 둔 자물쇠입니다.
174
- 그래서 파일 형태 — `NMTS_ACCOUNT_CODE_FILE` — 가 에이전트에게는 「덜 좋은 선택지」가 아니라
175
- **권하는 것**입니다. 코드가 어디로도 복사되지 않고, 권한은 그 기계 주인이 정합니다.
99
+ **NMTS 키는 예전에 「계정 코드」라고 부르던 것이고, 바뀐 것은 이름뿐입니다.** 옵션 이름, 환경
100
+ 변수(`NMTS_ACCOUNT_CODE`·`NMTS_ACCOUNT_CODE_FILE`), 설정 키, MCP 도구와 인자 이름, 오류 코드,
101
+ 파일 형식은 모두 쓰던 이름 그대로입니다. 이미 두신 스크립트는 그대로 돕니다.
176
102
 
177
- **환경변수는 비밀이 아니고, 그래서 쓰시겠다면 묻습니다.** `docker inspect`는 컨테이너의
178
- 환경 전체를 찍습니다. 나와 같은 권한으로 도는 것은 프로세스가 살아 있는 동안 `/proc/<pid>/environ`
179
- 읽을 수 있습니다. 자식 프로세스마다 물려받고, CI 시스템은 그것을 로그에 적는 일이 흔합니다.
180
- **파일을 가리키는** 변수에는 그런 것이 하나도 없고, 그래서 아무것도 묻지 않습니다.
103
+ `nmts login`은 API 키를 적어 두기 전에 서버에 확인하고, 키의 공개된 손잡이만 찍고 키 자체는
104
+ 찍지 않으며, 그렇게 하라고 하지 않은 실행은 이미 저장된 API 키를 덮어쓰지 않습니다. `nmts logout`이 저장된
105
+ 것을 지웁니다.
181
106
 
182
- **`nmts login --env`는 설정할 줄을 찍고 아무것도 쓰지 않습니다** 코드를 화면에 올리는 유일한
183
- 명령이고, 같은 동의 뒤에 있는 이유가 그것입니다.
107
+ `nmts whoami --reveal`은 NMTS 자체를 찍습니다. `nmts unlock reveal`로 열기 전에는 잠겨
108
+ 있고 실행마다 다시 묻습니다. 터미널을 기록하는 무엇이든 그때부터 NMTS 키를 갖게 됩니다.
184
109
 
185
- **이 도구 밖에서 코드를 어떻게 하실지는 그분의 몫입니다.** 메모에, 비밀번호 관리자에, 저장소에
186
- 두시는 것은 도구가 없고 막으려 하지도 않습니다. 도구가 할 수 있는 것은 **자기가** 쓰는
187
- 모양만큼은 누군가 일부러 내린 결정이 되게 하는 것입니다.
110
+ **어느 자격도 명령줄 인자로는 받지 않습니다.** 어떤 프로세스든 다른 프로세스의 명령줄을 읽을 수
111
+ 있고, 셸은 그것을 기록에 남깁니다. 그런 옵션이 없습니다.
188
112
 
189
- ## 에이전트에게 건네시기 전에
190
-
191
- 계정 코드는 한꺼번에 전부입니다. 그것을 가진 프로그램은 모든 파일을 읽고, 업로드하고, 지우고,
192
- 지갑으로 서명할 수 있습니다 — 그리고 그것으로 만든 요청은 그분 자신의 요청과 구별되지 않습니다.
193
- 계정을 유지한 채로 바꿀 수도 없습니다.
113
+ ### NMTS 키를 둘 수 있는 자리
194
114
 
115
+ | | 하는 일 | 묻는가 |
116
+ |---|---|---|
117
+ | `NMTS_ACCOUNT_CODE_FILE=/path` | 파일에서 NMTS 키를 읽고, 절대 복사하지 않습니다 | 안 묻습니다 |
118
+ | `nmts login` | 암호 문구로 잠가 `~/.nmts/credentials.json`에 둡니다 | 안 묻습니다 |
119
+ | `nmts login --plain` | 그대로 씁니다. 파일 모드 600 | 한 번, `unsafe-code-storage` |
120
+ | `NMTS_ACCOUNT_CODE`에 NMTS 키를 넣기 | 환경에서 바로 씁니다 | 한 번, `plain-env` |
121
+
122
+ 잠가 둔 NMTS 키는 명령마다 암호 문구가 필요합니다. 터미널에서 받거나 `NMTS_PASSPHRASE`에서 읽습니다.
123
+ 여는 데 1초 못 되는 시간과 64 MiB 메모리가 들고, 그것이 암호 문구 추측을 비싸게 만듭니다. 다만
124
+ 암호 문구는 나와 같은 사용자로 도는 것에서는 NMTS 키를 지켜 주지 못합니다. 에이전트가 지켜보는 사람
125
+ 없이 도는 기계에서는 암호 문구도 손에 닿는 곳에 있어야 하기 때문입니다. 그래서 에이전트에게는
126
+ 파일 형태를 권합니다 — NMTS 키가 어디에도 복사되지 않고, 권한은 호스트가 정합니다.
127
+
128
+ 환경 변수는 비밀이 아닙니다. `docker inspect`가 통째로 찍고, 나와 같은 사용자로 도는 것은
129
+ `/proc/<pid>/environ`을 읽을 수 있고, 모든 자식 프로세스가 물려받고, CI는 로그에 적습니다. 그래서
130
+ 환경 변수를 쓰면 한 번 묻습니다. `nmts login --env`는 설정할 줄을 찍고 아무것도 쓰지 않으며, 같은
131
+ 동의 뒤에 있습니다.
132
+
133
+ **Codex·Hermes·OpenClaw에서는 환경 변수가 MCP 서버에 닿지 않습니다.** 셋 다 MCP 서버를 띄우기
134
+ 전에 환경을 비웁니다. 대신 `nmts login`으로 저장하거나, 서버 항목의 `env` 블록에 적으십시오.
135
+ `nmts env`가 지금 보이는 에이전트의 이름을 말합니다.
136
+
137
+ ## 에이전트에게 건네기 전에
138
+
139
+ NMTS 키는 한 번에 전부입니다. 그것을 가진 프로그램은 모든 파일을 읽고, 올리고, 지우고, 지갑으로
140
+ 서명할 수 있으며, 그 요청은 내 것과 구별되지 않습니다. 계정을 그대로 둔 채 바꿀 수도 없습니다.
195
141
  **잃어도 괜찮은 계정을 쓰십시오.**
196
142
 
197
143
  ## 명령
@@ -199,214 +145,257 @@ nmts login # …그리고 이것이 찾은 쪽을
199
145
  | 명령 | 하는 일 |
200
146
  |---|---|
201
147
  | `nmts env` | 이것이 어디서 돌고 있고 그것이 무슨 뜻인지. 아무것도 필요 없음 |
202
- | `nmts login` / `logout` | 이 기계에 계정 코드를 두거나 지웁니다 |
203
- | `nmts whoami` | 저장된 코드가 어느 계정의 것인지 — 오프라인, 서버 호출 없음 |
204
- | `nmts expiring` | 산 저장 기간이 곧 끝나는 파일과 그 시각 |
205
- | `nmts extend <path>` | 파일 하나의 저장 기간을 더 삽니다 — **지갑으로 서명하고 씁니다** |
206
- | `nmts create` | 새 계정을 만들고 코드를 한 번 찍습니다. 다시 찍을 수 있는 것은 없습니다 |
207
- | `nmts trial` | 이번 주 무료 크레딧이 얼마나 남았는지. `trial apply`가 신청합니다 |
208
- | `nmts recovery-list` | NMTS 없이 이 계정의 바이트를 찾아내는 파일을 씁니다 |
209
- | `nmts kit` | 복구 키트: 그 목록**과 계정 코드**를 한 파일에 |
210
- | `nmts sweep` | 30일이 지난 휴지통 항목을 버립니다. **되돌릴 수 없어** 실행마다 묻습니다 |
211
- | `nmts consent` | 이 기계가 무엇에 동의했는지 |
212
- | `nmts update` | 이 도구의 가장 새 릴리스를 설치합니다 |
148
+ | `nmts login` / `logout` | 이 기계에 NMTS 키와 API 키를 두거나 지웁니다 |
149
+ | `nmts whoami` | 저장된 NMTS 키가 어느 계정의 것인지 — 오프라인. `--reveal`은 NMTS 키를 찍습니다 |
213
150
  | `nmts ls` | 파일 목록 |
214
151
  | `nmts usage` | 계정이 갖고 있는 것: 개수, 바이트, 가장 큰 파일들, 휴지통 |
152
+ | `nmts balance` | 남은 크레딧, 그것으로 살 수 있는 양, 지출 상한 |
215
153
  | `nmts get <path>` | 파일 하나를 다운로드하고 복호화하고 확인합니다 |
216
154
  | `nmts pull [folder]` | 폴더 하나 또는 계정 전체를 모양 그대로 다운로드합니다 |
217
- | `nmts push <directory>` | 디렉터리 하나를 모양 그대로 업로드합니다 — **크레딧을 씁니다** |
218
- | `nmts put <file>` | 파일 하나를 암호화해 업로드합니다 — **크레딧을 씁니다** |
155
+ | `nmts put <file>` | 파일 하나를 암호화해 업로드합니다 — **크레딧을 씁니다**. `--deposit <n>`은 이 업로드의 보증금을 정합니다 |
156
+ | `nmts push <directory>` | 디렉터리 하나를 모양 그대로 업로드합니다 — **크레딧을 씁니다**. `--deposit <n>`은 안의 모든 파일에 적용됩니다 |
219
157
  | `nmts rm <paths>` | 휴지통으로 옮깁니다 — 30일 동안 되살릴 수 있습니다 |
220
158
  | `nmts restore <paths>` | 휴지통에서 도로 꺼냅니다 |
159
+ | `nmts sweep` | 30일이 지난 휴지통 항목을 버립니다. **되돌릴 수 없어** 실행마다 묻습니다 |
160
+ | `nmts erase <paths>` | 파일을 완전히 지웁니다 — 서버 기록과 이 계정의 열쇠, 휴지통 안팎 가리지 않고. 문장 입력, API 키 옆에 NMTS 키 증명. `--release-storage`는 크레딧으로 산 저장까지 파기(`nmts unlock release-storage`로 열기 전에는 잠김) |
221
161
  | `nmts mkdir <path>` | 폴더를 만듭니다. 위에 없는 폴더도 함께 |
222
162
  | `nmts mv <paths> <folder>` | 폴더로 옮깁니다. `/`는 드라이브의 맨 위입니다 |
223
163
  | `nmts rename <path> <name>` | 하나에 새 이름을 줍니다 |
224
164
  | `nmts star` / `unstar` | 별을 달거나 뗍니다 |
225
165
  | `nmts pin` / `unpin` | 폴더 맨 위에 붙들거나 놓아 줍니다 |
226
- | `nmts label <name> <files>` | 파일에 이름표를 붙입니다. `unlabel`이 뗍니다 |
227
- | `nmts rebuild` | 목록이 없는 계정에서, 서버의 줄로 파일 목록을 다시 짓습니다 |
228
- | `nmts listfile` | 기계가 가진 암호화된 파일 목록을 파일로 씁니다 |
229
- | `nmts share <path> <address>` | 파일 하나를 다른 계정에 줍니다 **거둬들여도 이미 받아 사본은 되돌립니다** |
230
- | `nmts shares` | 계정에 공유된 |
166
+ | `nmts label <name> <files>` | 파일에 라벨 하나를 붙입니다. `unlabel`이 뗍니다. `--rename`과 `--all`은 목록 전체를 훑습니다 |
167
+ | `nmts on-collision` | 업로드할 이름이 이미 있을 무엇을 하는가 |
168
+ | `nmts padding [모드]` | 저장 네트워크에서 파일 크기를 어떻게 가리는지 보고, 다음 업로드부터 바꿉니다 |
169
+ | `nmts deposit [크레딧]` | 크레딧으로 내는 업로드가 파일마다 보증금으로 얼마를 잡아 두는지 보고 바꿉니다(0~64, 기본 64) |
170
+ | `nmts tip [퍼센트\|off]` | WAL로 내는 모든 결제의 일정 비율을 개발자에게 후원으로 보냅니다(기본 0). 정하려면 `nmts unlock donate`가 필요하고, 동의는 한 번만 묻습니다 |
171
+ | `nmts expiring` | 산 저장 기간이 곧 끝나는 파일과 그 시각 |
172
+ | `nmts losses` | 크레딧으로 산 저장 가운데 날마다 도는 확인이 체인에서 찾지 못한 것. `--recheck <id>`는 다시 묻고, `--dismiss <id>`는 줄을 내립니다 |
173
+ | `nmts extend <path>` | 파일 하나의 저장 기간을 더 삽니다 — **지갑으로 서명하고 씁니다** |
174
+ | `nmts wallet` | 계정의 지갑 주소와 SUI·WAL 잔액. 서명하지 않습니다 |
175
+ | `nmts wallet activity` | 지갑의 최근 거래. 체인이 증명하는 것에만 이름을 붙입니다. 서명하지 않습니다 |
176
+ | `nmts wallet storage` | 지갑이 파일 밖에 들고 있는 저장 자원(크기 × 기간). 서명하지 않습니다 |
177
+ | `nmts wallet storage split <id> --size <n>\|--epochs <n>` · `merge <id> <id>` · `transfer <id> <address>` | 저장 자원을 쪼개고, 합치고, 넘깁니다 — **서명합니다**, 지갑 잠금 아래(`transfer`는 범위 `all`). 넘길 때 파일은 넘어가지 않습니다: 크기와 남은 기간뿐 |
178
+ | `nmts wallet send <SUI\|WAL> <amount\|max> <address>` | 주소로 코인을 보냅니다 — **지갑으로 서명하고 씁니다**. 검토를 찍고 `--yes`가 있을 때만 보냅니다 |
179
+ | `nmts wallet swap <SUI\|WAL> <amount\|max>` | DeepBook 또는 Bluefin에서 한 코인을 다른 코인으로 바꿉니다 — **지갑으로 서명하고 씁니다**. `--venue`가 없으면 두 견적을 찍고 멈추며, `--yes`가 있을 때만 바꿉니다 |
180
+ | `nmts wallet donate <SUI\|WAL> <amount>` | 개발자에게 보내는 자발적 후원, 두 코인 중 어느 쪽이든 — **서명하고 씁니다**. `nmts unlock donate`로 열기 전에는 잠겨 있고, 매번 `--yes` |
181
+ | `nmts wallet hall [--name <이름>\|--remove]` | 후원 명예의 전당. `--name`은 고른 이름으로 올립니다 — 지갑이 서명합니다 |
182
+ | `nmts trial` | 이번 주 무료 크레딧이 얼마나 남았는지. `trial apply`가 신청합니다 |
183
+ | `nmts create` | 새 계정을 만들고 NMTS 키를 한 번 찍습니다. 다시 찍을 수 있는 것은 없습니다. 이 기기에 확인된 API 키가 없으면 NMTS 키를 여기서 만들고 주소 하나를 찍은 뒤, 사람이 그 주소를 열어 그 NMTS 키를 입력하고 사람 확인을 통과할 때까지 기다립니다 — 그 순간 계정이 생깁니다. `--no-wait`는 주소만 찍고 멈춥니다 |
184
+ | `nmts verify` | 이 계정의 한도를 여는 사람 확인을 부탁합니다. 계정 주인만 할 수 있습니다 — 그 브라우저에서 이 계정에 로그인돼 있거나, 거기서 NMTS 키를 입력합니다 |
185
+ | `nmts public-code` | 다른 계정이 파일을 보내는 코드. `--publish`가 받을 수 있게 합니다 |
186
+ | `nmts share <path> <address>` | 파일 하나를 다른 계정에 줍니다 — **거둬도 이미 받아 간 사본은 못 되돌립니다**. `nmts unlock share`로 열기 전에는 잠겨 있고, 공유마다 멈춰서 `--yes`가 이 파일 하나에 답합니다 |
187
+ | `nmts shares` | 이 계정에 공유된 것. `--sent <경로>`는 파일 하나가 누구에게 갔는지 |
231
188
  | `nmts receive <id>` | 누군가 이 계정에 공유한 파일 하나를 다운로드합니다 |
232
189
  | `nmts unshare <id>` | 보낸 공유를 거두거나, 받은 공유를 지웁니다 |
233
- | `nmts wallet` | 계정의 지갑 주소와 SUI·WAL 잔액 |
234
- | `nmts verify` | 계정의 한도를 여는 사람 확인을 부탁합니다 |
190
+ | `nmts rebuild` | 목록이 없는 계정에서, 서버의 줄로 파일 목록을 다시 짓습니다 |
191
+ | `nmts rollback` | 파일 목록의 이전 버전을 되돌립니다 사람이 하는 일 |
192
+ | `nmts listfile` | 이 기계가 가진 암호화된 파일 목록을 파일로 씁니다 |
193
+ | `nmts recovery-list` | NMTS 없이 이 계정의 바이트를 찾아내는 파일을 씁니다 |
194
+ | `nmts kit` | 복구 키트: 그 목록**과 NMTS 키**를 한 파일에 |
195
+ | `nmts recovery` | NMTS 없이 파일을 되읽는 독립 프로그램을 내려받습니다 |
196
+ | `nmts unlock` / `nmts lock` | 이 기계가 무엇을 열어 두었는지. `unlock <열쇠>`가 하나를 엽니다(사람이, 터미널에서), `lock <열쇠>`가 닫습니다. `consent`는 옛 이름 |
197
+ | `nmts mode` | 이 도구를 모는 에이전트가 묻지 않고 얼마나 정할 수 있는가 |
198
+ | `nmts support send` | 개발자에게 제보를 보냅니다 — 버그·오류·아이디어·질문. `--attach-log`는 최근 실행 기록을 가려서 붙입니다 |
199
+ | `nmts support list` / `show <코드>` / `reply <코드>` | 답장을 읽고, 같은 글타래에 다시 씁니다 |
200
+ | `nmts update` | 이 도구의 가장 새 릴리스를 설치합니다 |
201
+ | `nmts notices` | NMTS가 올린 공지 — 중단·장애·새 약관이 시행되기 전의 예고. `notices <id>`는 하나를 찍고, `--save <id>`는 날짜 붙은 파일로 보관합니다 |
202
+ | `nmts terms` | 지금 시행 중인 이용약관. `--lang ko`는 한국어, `--board`는 게시판 약관, `--save`는 사본 보관 |
203
+ | `nmts privacy` | 지금 시행 중인 개인정보 처리방침. `--lang ko`, `--save` |
204
+ | `nmts delete-account` | **사람이** 이 계정의 서버 기록을 지웁니다 — 되돌릴 수 없습니다. 이 기계에 NMTS 키가 있어야 하고 문장을 입력해 확인합니다. auto 모드 둘에서는 거절되고, skip-permissions에서만 `--reason`과 함께 됩니다. 저장 네트워크의 바이트와 이 기계의 NMTS 키는 건드리지 않습니다 |
205
+ | `nmts accept-terms` | 새 판의 약관을 읽은 뒤 동의합니다: 사람이 판 이름을 직접 입력하거나, 에이전트가 사람에게 물은 뒤 `--accept-terms <판> --accept-privacy <판> --yes`로 답을 옮깁니다 |
206
+ | `nmts key new` | NMTS 키만으로 이 계정의 API 키를 만듭니다 — 브라우저 없이. `--scopes read,write,spend`, `--days <n>`. 새 API 키는 이 기기의 자격으로 저장되고, `--print`를 주면 한 번 찍어 줍니다 |
207
+ | `nmts devices` | 이 계정에 로그인된 기기 목록. `--sign-out <id>`·`--sign-out all`로 하나 또는 전부를 로그아웃 — 이 기계에 NMTS 키가 있어야 하고, `nmts unlock sign-out`으로 열기 전에는 잠겨 있으며, 실행마다 묻습니다 |
235
208
  | `nmts mcp` | 위의 일부를 MCP 도구로 내줍니다 |
236
209
  | `nmts s3` | 이 기계에서만 닿는 S3 서버로 드라이브를 내줍니다 |
237
210
 
238
- `ls`는 `--json`과 `--all`(휴지통 포함)을 받습니다. 휴지통 항목은 기본으로 숨기고, 개수가 몇 개를
239
- 숨겼는지 항상 말합니다. `--find <text>`는 이름에 그 글자가 든 파일만 남깁니다 — 폴더는 안에 맞는
240
- 것이 있을 때만 나오고, 목록이 무엇을 빼고 보여 주는지 소리 내어 말합니다. `--sort name|size|date`
241
- 와 `--desc`가 순서를 바꿉니다.
242
-
243
- `share`에는 주소가 필요하고, 상대는 그것을 자기 계정 화면에서 읽습니다 — 이름부(디렉터리)도 이름
244
- 조회도 없어서, 잘못 친 주소는 그 안에 든 검사 기호로 **여기서** 걸립니다. 남에게 물어보지 않고요.
245
- **공유를 거두면 그 뒤의 다운로드는 막히지만 이미 받아 간 사본에는 닿지 못합니다.** 남에게 파일을
246
- 준다는 것이 그런 뜻이고, 그래서 처음 공유할 때 동의를 받습니다.
247
-
248
- `pull`은 파일을 하나씩 가져옵니다. 못 가져온 것은 끝에 이름을 대고 나머지는 디스크에 남습니다 —
249
- 하나 때문에 전부를 거절하는 것은 스무 번을 돌리면서 매번 같은 열아홉 개를 잃는 길입니다. 목적지에
250
- 이미 있는 파일은 **건너뛰고 세어** 두며 절대 덮어쓰지 않습니다. `--force`가 덮어쓰고, 그것은
251
- 되돌릴 수 없습니다.
252
-
253
- `push`는 반대 방향이고, **일부러** 다르게 굽니다. `pull`은 값이 안 드니 못 가져온 파일을 지나
254
- 계속 갑니다. `push`는 **돈을 쓰므로** 첫 실패에서 멈추고 이미 올라간 것을 말합니다 — 그 파일들은
255
- 진짜이고 값을 치른 것이며, 같은 명령을 다시 돌리면 나머지만 보냅니다. 목적지에 같은 이름이 이미
256
- 있는 파일은 **건너뜁니다.** 다시 돌려도 안전한 이유가 그것입니다 — 이 도구는 파일을 절대 덮어쓰지
257
- 않으므로, 그게 아니면 두 번째 실행이 전부의 번호 붙은 사본에 값을 치르게 됩니다. 점으로 시작하는
258
- 이름은 `--hidden`을 주시기 전에는 건드리지 않습니다. 소스 코드 디렉터리는 자격을 하필 그런 파일에
259
- 담고 있고, 업로드는 공개 저장망으로 가기 때문입니다. 심볼릭 링크는 따라가지 않습니다.
260
-
261
- `rm`·`restore`·`mv`는 경로를 여러 개 받고 목록 쓰기는 **한 번** 합니다. 아무것도 가리키지 않는
262
- 경로가 하나 있으면 서버의 줄을 건드리기 전에 전체가 멈춥니다 — 다섯 중 넷을 하고 0으로 끝나는
263
- 것은 「끝났다」로 읽히고, 어느 하나가 빠졌는지는 드라이브를 대조해야만 알 수 있습니다.
264
-
265
- `rebuild`는 암호화된 목록은 없어졌는데 파일은 아직 저장돼 있는 계정을 위한 것입니다. 서버 자신의
266
- 줄에서 다시 짓습니다 — 파일 열쇠, 해시, 날짜, 크기, 휴지통에 있던 것까지 돌아오고, 이름과 폴더와
267
- 배치는 돌아오지 않습니다. 그리고 그렇게 말합니다. `--yes` 없이는 아무것도 쓰지 않고, 목록이 이미
268
- 있으면 그 자리에서 거절합니다.
269
-
270
- `wallet`은 읽기만 합니다 — 서명도, 보내기도, 쓰기도 없습니다. 주소는 계정 코드에서 이 기계가
271
- 유도하므로 `nmts wallet address`는 네트워크가 아예 필요 없습니다. 못 읽은 잔액은 0이 아니라
272
- **못 읽었다고** 보고합니다.
273
-
274
- `get`은 `--out`과 `--force`를 받습니다. 반쯤 맞는 파일을 쓰느니 거절합니다 — 복호화되지 않는
275
- 조각, 합이 안 맞는 조각들, 맞지 않는 파일 전체 해시는 어느 것이든 요청하신 이름 자리에 아무것도
276
- 남기지 않습니다. 디스크 위의 파일은 「이것이 그 파일이다」라는 주장입니다. 바이트는 도착하는 대로
277
- 같은 디렉터리 안 임시 이름으로 쓰이고, 파일 전체 해시가 맞은 뒤에야 제자리로 이름이 바뀝니다.
278
- 파일을 통째로 메모리에 들고 있지 않습니다 — 한 번에 조각 하나만 들고 있으므로, 기계에 필요한 것은
279
- 파일 크기가 아니라 올린 쪽이 고른 조각 크기입니다. 실패한 다운로드는 자기 임시 파일을 데리고
280
- 사라집니다.
281
-
282
- `--out -`은 파일을 쓰는 대신 이 프로그램을 읽고 있는 쪽으로 보냅니다. 저장된 파일 하나를 읽는 데
283
- 디스크에 사본을 남기지 않으셔도 되게 하려는 것입니다. 그 모드에서는 사람이 읽는 것이 전부 stderr로
284
- 갑니다. 터미널이 명령으로 받아들일 바이트는 보내기를 거절합니다 — 방향을 돌리시거나 파이프로
285
- 넘기십시오. 파이프에는 이름 바꾸기가 없으므로 그 모드는 한 바이트를 보내기 전에 파일 전체를
286
- 증명하고, 그것은 곧 통째로 들고 있는다는 뜻입니다. 그래서 64 MiB를 넘으면 거절하고
287
- `--out <이름>`을 쓰시라고 말합니다.
288
-
289
- `put`은 `--dry-run`·`--name`·`--to`를 받습니다.
290
-
291
- ```sh
292
- nmts put report.pdf --dry-run # 얼마가 드는지. 아무것도 안 보내고 안 씁니다.
293
- nmts put report.pdf --to notes # 이미 있는 폴더 안으로
294
- nmts put film.mov --part-size 256MiB # 조각을 키우면 구매는 줄고 메모리는 늡니다
295
- ```
296
-
297
- 시작된 메비바이트마다 1크레딧이고, 무엇을 쓰기 전에 찍습니다. 그 폴더에 이미 있는 이름은 덮어쓰지
298
- 않고 번호를 붙입니다(`report (2).pdf`) — NMTS는 이전 버전을 보관하지 않으므로 덮어쓰는 것은
299
- 영구적입니다.
300
-
301
- 조각 하나보다 큰 파일은 쪼개지고 **조각마다 따로 삽니다.** 파일은 한 조각씩 읽으므로 크기가
302
- 메모리에 묶이지 않습니다. 묶이는 것은 조각 크기입니다(기본 64 MiB). 조각마다 자기 구매 전에 먼저
303
- 적어 두므로, 도중에 멈춘 실행은 같은 명령을 다시 돌리면 이어집니다 — 산 적 없는 조각만 삽니다.
211
+ ### 목록과 받기
304
212
 
305
- ### `nmts balance`와 `nmts public-code`
213
+ `ls`는 `--json`, `--all`(휴지통 포함 · 몇 개를 숨겼는지는 언제나 말합니다), `--find <text>`(이름에
214
+ 그 글자가 든 파일과 그것을 담은 폴더만), `--sort name|size|date`, `--desc`를 받습니다.
306
215
 
307
- `balance`는 계정이 아직 무엇을 있는지를 서버에 묻습니다 남은 크레딧, 그것이 뜻하는
308
- 바이트 수, 이미 들고 있는 양, 그리고 쓰기 한도. `usage`와는 다른 질문입니다. 그쪽은 암호화된 파일
309
- 목록을 더해 「내가 무엇을 갖고 있는가」에 답하고, 이쪽은 장부를 읽어 「내가 아직 무엇을 살 수
310
- 있는가」에 답합니다. 저장망의 시계는 읽지 않으므로, 저장된 파일이 **언제** 끝나는지는 다른 출처에서
311
- 번째 기한을 찍는 대신 `nmts expiring`을 가리킵니다.
216
+ `get`은 `--out`과 `--force`를 받습니다. 반쯤 맞는 파일을 남기지 않습니다. 바이트는 같은 디렉터리의
217
+ 임시 이름으로 쓰이고, 파일 전체의 해시가 맞은 뒤에야 이름으로 바뀝니다. 메모리에는 파일이
218
+ 아니라 조각 하나만 올라갑니다. `--out -`는 파일을 쓰는 대신 stdout으로 보내고, 사람이 읽는 것은
219
+ 전부 stderr로 갑니다. 파이프는 되돌릴 없으므로 모드는 파일 전체를 먼저 증명하고, 64 MiB를
220
+ 넘으면 거절합니다.
312
221
 
313
- `public-code`는 다른 계정이 파일을 보낼 쓰는 값을 찍습니다 브라우저가 계정 화면에 보여 주는
314
- **공개 코드**를, 같은 묶음 모양으로 그리고 그것이 게시됐는지 말합니다. 게시되기 전에는 아무도
315
- 보내지 못합니다. 보내는 쪽은 그 뒤의 열쇠가 필요하고, 그것을 찾는 곳이 서버이기 때문입니다.
316
- `nmts public-code --publish`가 그것을 씁니다.
222
+ `pull`은 파일을 하나씩 가져옵니다. 가져온 것은 끝에 이름을 대고 나머지는 디스크에 남습니다.
223
+ 목적지에 이미 있는 파일은 건너뛰고 셉니다. `--force`가 덮어씁니다.
317
224
 
318
- 쓰기는 영구적입니다 — 거둘 수도 바꿀 수도 없습니다. 그리고 고르는 것도 아닙니다. 계정 코드에서
319
- 나오므로 같은 계정 코드는 어느 기계에서든 같은 공개 코드를 내고, 서버는 자기 열쇠의 지문이 아닌
320
- 것을 거절합니다. 서버가 이 계정에 대해 **다른** 공개 코드를 이미 갖고 있으면 명령이 멈추고 그것이
321
- 무슨 뜻인지 말합니다 — 이 기계의 계정 코드가 그 계정을 만든 코드가 아니라는 뜻입니다.
322
-
323
- ⛔ 그것은 계정 코드가 아닙니다. 계정 코드는 갖고 계신 모든 파일을 열고 누구에게도 주지 않는
324
- 것이며, 공개 코드는 주라고 있는 것이고 그것만으로는 아무것도 열지 못합니다.
325
-
326
- 파일을 보내면 그 부수 효과로 게시됩니다 — 게시 없이는 공유가 성립하지 않기 때문입니다. 이 명령이
327
- 필요한 경우는 **받는** 쪽입니다.
328
-
329
- ### `nmts recovery` — 복구 프로그램 받기
330
-
331
- 별도의 복구 프로그램은 계정 코드와 복구 목록만으로 저장망에서 파일을 되살립니다 — NMTS 서버는
332
- 끼지 않습니다. 지금까지 그것을 얻으려면 Rust 도구를 깔고 빌드해야 했는데, 그것은 감사하시는
333
- 분에게는 공정한 요구이지만 방금 파일에 못 닿게 된 분에게는 불공정한 요구입니다.
225
+ ### 올리기
334
226
 
335
227
  ```sh
336
- nmts recovery --out ~/tools
228
+ nmts put report.pdf --dry-run # 얼마가 드는지. 보내지도 물리지도 않습니다.
229
+ nmts put report.pdf --to notes # 이미 있는 폴더 안으로
230
+ nmts put film.mov --part-size 256MiB # 조각을 키우면: 구매 횟수는 줄고 메모리는 늡니다
337
231
  ```
338
232
 
339
- 기계에 어느 실행 파일이 필요한지 알아내고, 릴리스의 체크섬 파일을 **먼저** 가져와 거기서
340
- 릴리스 이름을 꺼낸 뒤, **그 같은 릴리스에서** 실행 파일을 가져옵니다. 둘이 서로 다른 릴리스에서
341
- 없게 하려는 것입니다. 무엇을 실행 가능하게 만들기 전에 바이트를 해시해 대조하고, 다르면
342
- 파일을 지우고 거절합니다. `--force` 없이는 이름의 파일을 절대 덮어쓰지 않고, PATH에 아무것도
343
- 올리지 않습니다.
344
-
345
- 릴리스와 어디서 받았는지와 해시를 찍고, 그 검사가 무엇을 증명하고 무엇을 증명하지 못하는지를
346
- 분명히 말합니다: 바이트가 그 릴리스가 낸 바이트라는 것은 증명하고, 그 릴리스를 누가 냈는지는
347
- 증명하지 못합니다. 소스도 그것을 빌드한 워크플로도 공개돼 있고, 확인하실 값어치가 있는 것은
348
- 그쪽입니다.
349
-
350
- ## 사람이 지나야 하는 확인
233
+ 시작된 메비바이트마다 1크레딧이고, 무엇을 쓰기 전에 값을 찍습니다. 폴더에 이미 있는 이름은
234
+ `nmts on-collision`이 달리 정하지 않는 번호를 사본(`report (2).pdf`)이 됩니다. NMTS는 이전
235
+ 버전을 두지 않으므로 바꿔치기는 영구합니다. 조각 하나(기본 64 MiB)보다 파일은 나뉘고 조각마다
236
+ 따로 삽니다. 도중에 멈춘 실행은 같은 명령을 다시 돌리면 끝나고, 사지 않은 조각만 삽니다. 어떤
237
+ 업로드든 끊긴 뒤 다시 돌리면 더 들지 않습니다.
351
238
 
352
- API 키는 서버를 답하게 뿐, 사람이 거기 있다는 것을 대신해 주지 않습니다. 서버는 그것을 별도의
353
- 질문으로 둡니다 — 최근에 이 계정 뒤에 사람이 있다는 것을 누가 확인했는가. 그 답이 아니오인 동안
354
- 계정은 더 좁은 한도로 돌고, 어떤 요청은 그 자리에서 거절됩니다.
239
+ `--pay wallet`은 크레딧 대신 **NMTS 키가 만드는 지갑에서** 저장 공간을 삽니다:
355
240
 
356
241
  ```sh
357
- nmts verify --status # 확인이 살아 있는가, 언제까지인가
358
- nmts verify # nmts.me에서 사람이 입력할 짧은 코드를 찍고 기다립니다
242
+ nmts put film.mov --pay wallet --dry-run # 검토만: WAL 값, 팁, 수수료, 잔액, 날수. 서명하지 않습니다
243
+ nmts put film.mov --pay wallet --epochs 6 # 저장 네트워크의 에포크 6개(기본 2)
244
+ nmts put film.mov --pay wallet --storage fit # 지갑이 이미 든 저장 자원을 크기에 맞춰 잘라 씁니다
359
245
  ```
360
246
 
361
- `nmts verify`는 확인을 대신 지나 없고, 그것을 돌리는 에이전트도 마찬가지입니다 — 확인
362
- 하려는 것이 바로 그것이기 때문입니다. 코드와 주소를 찍고, 코드가 쓰이거나 쓰게 때까지
363
- 기다립니다. Ctrl-C는 기다림을 끝내는 것이지 코드를 끝내는 것이 아닙니다.
364
-
365
- 며칠이 아니라 확인이 **끝나는 시각**을 찍습니다. 기간은 서버 자신의 경계에서 끝나므로,
366
- 경계 직전에 지난 확인은 짧은 확인이고, 그것을 정직하게 말하는 유일한 방법이 절대 시각입니다.
367
-
368
- ## 이름과 폴더와 휴지통
247
+ 순서가 안전장치입니다. 파일을 같은 조각으로 나누고, 체인이 조각마다 WAL 값과 중계의 팁(SUI)을
248
+ 매기고, 등록 거래를 미리 돌려 수수료를 재고, 잔액을 읽고, 검토(기간은 에포크와 날수로)를 찍은
249
+ 뒤에야 `wallet` 동의(범위 `storage`)를 합계에 대조하고 서명합니다. 모자란 것이 확인된 지갑은 두 수를
250
+ 말하며 거절되고, 못 읽은 잔액은 0이 아니라 「못 읽음」으로 말합니다. 조각마다 서명이 둘(등록, 증명)이고,
251
+ 도중에 멈춘 실행은 같은 명령을 다시 돌리면 끝나며 어느 것도 서명하지 않습니다.
252
+ `--storage fit|whole|<객체 id>`는 지갑이 이미 저장 자원(`nmts wallet storage`가 보여 줍니다)을
253
+ 조각 하나짜리 파일에 씁니다. `fit`은 부호화 뒤 크기에 맞춰 잘라 나머지를 빈 자원으로 남기고, `whole`은
254
+ 전부를 파일에 묶으며, 검토가 어느 바이트가 어디로 가는지 숫자로 말합니다. `--storage`가 없으면 새로
255
+ 사고, 검토는 지갑이 무엇을 들고 있는지만 말합니다. 서버는 이 파일을 지갑 자신의 저장 공간에 있는 것으로
256
+ 기록하고, `nmts extend`로 연장할 수 있습니다. 지갑으로 낸 업로드는 계정의 스위치가 어느 쪽이든 복구
257
+ 목록의 저장 네트워크 사본을 싣지 않습니다 — 오늘은 브라우저의 작은 파일 업로드만 싣습니다.
258
+ `push --pay wallet`은 같은 일을 파일마다 합니다.
259
+
260
+ `push`는 디렉터리를 올리고 **첫 실패에서 멈추며**, 이미 올라간 것을 말합니다. 목적지에 같은
261
+ 이름이 이미 있는 파일은 건너뛰므로 다시 돌려도 안전합니다. 점으로 시작하는 이름은 `--hidden`을
262
+ 주지 않는 한 건드리지 않고, 심볼릭 링크는 따라가지 않습니다.
263
+
264
+ `nmts deposit`은 크레딧으로 내는 업로드가 파일마다 보증금으로 얼마를 잡아 두는지 보여 주고,
265
+ `nmts deposit <n>`은 모든 기기의 다음 업로드부터 그 값을 바꿉니다(0~64, 기본 64). 보증금은 그 파일에
266
+ 나중에 일어나는 체인 작업(예: 저장을 일찍 해제하는 것)의 수수료를 재서 그만큼만 내고, 남은 것은 저장
267
+ 기간이 끝날 때 돌아옵니다. `put --deposit <n>`과 `push --deposit <n>`은 그 실행에만 적용됩니다.
268
+ `--deposit 0`은 아무것도 잡아 두지 않습니다. 그 파일도 해제되지만 같은 수수료의 2배를 그때의 잔액에서
269
+ 내고, 잔액이 모자라면 두 숫자를 적어 거절합니다.
270
+
271
+ `nmts padding`은 파일 크기를 어떻게 가리는지 보여 주고, `nmts padding standard`·`nmts padding pow2`·
272
+ `nmts padding off`는 모든 기기의 다음 업로드부터 바꿉니다(`off`는 정확한 크기로 저장합니다. 파일의 길이가
273
+ 네트워크와 블롭을 읽는 모든 사람에게 보이고, 저장 공간을 약 1 % 덜 씁니다). 저장 네트워크에 놓인 조각의 크기는
274
+ 누구나 읽을 수 있고, 빈 바이트가 그 크기를 정해진 값 중 하나로 만듭니다. 2의 거듭제곱은 더 많이
275
+ 가리고 저장 공간이 평균적으로 더 듭니다.
276
+
277
+ ### 이름과 폴더와 휴지통
369
278
 
370
279
  ```sh
371
- nmts mkdir photos/2026/august # 없으면 셋 다 만듭니다
372
- nmts mv report.pdf photos # `/`는 드라이브 맨 위로 되돌립니다
280
+ nmts mkdir photos/2026/august # 셋 다 없으면 셋 다 만듭니다
281
+ nmts mv report.pdf photos # `/`가 드라이브 맨 위로 되돌립니다
373
282
  nmts rename report.pdf "q3 report.pdf"
374
- nmts rm photos/2026 # 아래 모든 파일과 함께 휴지통으로
283
+ nmts rm photos/2026 # 아래 파일까지 휴지통으로
375
284
  nmts restore photos/2026
376
285
  ```
377
286
 
378
- **이 중 어느 것도 값이 들지 않고 아무것도 묻지 않습니다.** 이름과 폴더와 부모는 암호화된 파일
379
- 목록 안에만 있습니다 서버는 식별자와 크기와 시각을 들고 있을 이름을 둘 자리가 없습니다.
380
- 그래서 이름 바꾸기와 옮기기는 NMTS에게 보이지 않고, 즉시이고, 공짜입니다.
287
+ 어느 것도 값이 들지 않고 묻지 않습니다. 이름, 폴더, 상위 폴더는 암호화된 파일 목록 안에만 있고,
288
+ 서버에는 이름을 자리가 없습니다. `rm`은 파괴하지 않습니다. 휴지통의 파일마다 30일 시계가
289
+ 있습니다. 영구히 지우는 명령은 도구에 일부러 없습니다. 경로는 통째로 맞춥니다(`photos/a.jpg`와
290
+ `a.jpg`는 다른 것). 둘에 맞는 경로는 하나를 고르지 않고 거절합니다. `rm`·`restore`·`mv`는 경로
291
+ 여럿을 한 번의 쓰기로 처리하고, 아무것도 가리키지 않는 경로가 하나라도 있으면 아무것도 건드리기
292
+ 전에 전체를 멈춥니다.
293
+
294
+ `nmts label --rename <옛 이름> <새 이름>`은 그 라벨을 단 모든 파일에서 이름을 바꾸고,
295
+ `nmts unlabel <이름> --all`은 모든 파일에서 뗍니다. 둘 다 파일 목록만 바꿉니다.
296
+
297
+ ### 돈과 시간
298
+
299
+ `balance`는 「무엇을 더 살 수 있는가」에 답합니다 — 남은 크레딧, 그것을 바이트로 바꾼 값, 지출
300
+ 상한. `usage`는 「무엇을 갖고 있는가」에 답합니다. `expiring`은 저장된 파일이 언제 끝나는지 말합니다.
301
+
302
+ `extend`는 저장된 파일의 기간을 **NMTS 키가 만드는 지갑에서** 공개 체인 위에서 더 삽니다.
303
+ `wallet` 잠금을 열 때 범위(`storage`, 또는 교환·보내기까지 `all`)와 기한(최대 30일), 원하면 이 도구가 서명해
304
+ 내보낼 수 있는 상한을 함께 정합니다 — `nmts unlock wallet --days 7 [--scope all] [--cap-wal 10
305
+ --cap-sui 0.1]`. `--dry-run`을 받으며 그때는 열쇠를 건드리지 않습니다.
306
+ 동의를 묻기 전에 지갑을 읽고 그 거래를 체인에 미리 돌려 봅니다: 값, 체인 수수료(SUI), 두 잔액이
307
+ 찍히고, 모자란 것이 확인된 지갑은 서명 대신 두 수를 말하며 거절됩니다.
308
+ `wallet`은 읽기만 합니다. 주소는 이 기계에서 만들고, 못 읽은 잔액은 0이 아니라 「못 읽음」으로
309
+ 말합니다. `wallet address --qr`은 주소를 휴대폰으로 읽을 수 있는 코드로 그립니다. `wallet activity`는
310
+ 최근 거래를 브라우저와 같은 이름(봉인·연장·지우기·교환·보내기·받기, 그 밖은 「other」 — 추측은
311
+ 없습니다)으로 보여 주고, 개발자에게 보낸 후원은 그 주소를 이 도구가 모르므로 보내기로 보입니다.
312
+ `wallet storage`는 지갑이 파일 밖에 들고 있는 저장 자원 — 파일을 저장 네트워크에서 지우면 돌아오는
313
+ 것 — 과 지금 쓸 수 있는지를 보여 줍니다. `wallet send`는 SUI나 WAL을 주소로 보냅니다: 두 잔액을 읽고,
314
+ 주소와 금액을 브라우저와 같은 규칙으로 판단하고, 그 이체를 미리 돌려 수수료를 재고, 주소 전체가 든 검토를
315
+ 찍은 뒤, `--yes`와 범위 `all`의 `wallet` 동의가 있을 때만 서명합니다. `max`는 보낼 수 있는 전부(SUI는
316
+ 수수료 몫을 남깁니다), `--fee-cap`은 수수료 상한입니다. 이체는 되돌릴 수 없습니다. `wallet swap`은 SUI를 WAL로,
317
+ 또는 WAL을 SUI로 바꿉니다 — 브라우저 앱이 메인넷에서 제시하는 두 거래소 DeepBook과 Bluefin 가운데 한 곳에서,
318
+ 브라우저가 짓는 것과 같은 거래로. 여러분의 지갑이 서명하고 산출은 그 지갑으로 돌아오며, NMTS는 거래의 당사자가
319
+ 아니고 아무것도 받지 않습니다. `--venue`가 없으면 두 곳의 견적을 같은 순간에 읽어 나란히 찍고 — 얼마가 나오는지,
320
+ 견적에서 잰 거래소 수수료(잴 수 없으면 「잴 수 없음」이지 지어낸 숫자가 아닙니다) — 멈춥니다: 어느 쪽도 기본이
321
+ 아니고 이 도구는 추천하지 않으며, 다른 거래소를 쓰셔도 됩니다. `--venue deepbook|bluefin`을 주면 검토를 찍습니다:
322
+ 견적, 받아들일 최소량(`--slippage-bps` · 1~5000 · 기본 50), dry run으로 잰 체인 수수료, 준 경우 `--fee-cap`, 그리고
323
+ 사이트의 참고 시세를 읽을 수 있을 때 견적이 거기서 얼마나 떨어져 있는지(못 읽으면 「비교하지 못함」으로 말합니다).
324
+ 슬리피지가 10 미만이거나 200 초과이면, 수수료 상한이 잰 수수료에서 멀면, 견적이 참고 시세에서 3% 넘게 벗어나면
325
+ `--yes`가 있어도 거절합니다. `--accept-extremes`는 그래도 진행하라는 뜻이고 사람만 말할 수 있습니다(모드가 켜져
326
+ 있으면 거절). 스왑에는 `--yes`와 범위 `all`의 `wallet` 동의가 필요합니다. 체인은 주는 만큼 주되 최소량보다 적게는
327
+ 주지 않으며, 그보다 적게 줄 스왑은 체인에서 실패하고 수수료는 나갑니다. 테스트넷의 유일한 길은 Walrus 공식
328
+ 교환소이고 SUI→WAL만, 그 객체에서 읽은 환율로 갑니다. `wallet donate`는 개발자에게 보내는 자발적
329
+ 후원이고, 받는 주소는 서버가 공개하는 것(지갑 화면의 후원 카드와 같은 주소)입니다. `nmts unlock donate`로
330
+ 열기 전에는 잠겨 있고 매번 `--yes`가 필요하며 `wallet` 잠금과 그 상한 밖에 있습니다. 서명 전에 자발적이고 대가가
331
+ 없으며 환불되지 않고 되돌릴 수 없다는 것과, 거래 번호가 유일한 증빙이라는 것을 말합니다. `nmts tip 2.5`는 WAL로 내는
332
+ 모든 결제(지갑으로 낸 업로드·기간 연장)의 2.5 %를 결제 직후 묻지 않고 후원으로 보내고, `nmts tip off`가 멈춥니다.
333
+ `wallet` 상한 밖입니다.
334
+
335
+ ### 공유
336
+
337
+ `share`에는 상대 계정의 공개 코드가 필요하고, 상대는 그것을 자기 계정 화면에서 읽습니다. 이름부도
338
+ 이름 조회도 없으며, 잘못 친 코드는 그 안의 검사 기호로 걸립니다. 공유를 거두면 그 뒤의 다운로드는
339
+ 막히지만 이미 받아 간 사본에는 닿지 못합니다. 그래서 처음 공유할 때 동의를 받습니다.
340
+
341
+ `public-code`는 다른 계정이 파일을 보내는 값을 찍고 공개됐는지 말합니다. 공개하기 전에는 아무도
342
+ 보낼 수 없습니다. `--publish`가 그것을 영구히 씁니다. NMTS 키에서 나오므로 고를 수도 바꿀 수도
343
+ 없습니다. NMTS 키가 아니고, 그것만으로는 아무것도 열지 못합니다.
344
+
345
+ `nmts shares --sent <경로>`는 파일 하나를 누구에게 공유했는지 적습니다 — 받는 주소, 언제부터,
346
+ 그리고 `unshare`가 받는 공유 id.
347
+
348
+ ### 복구
349
+
350
+ `recovery-list`는 저장 네트워크에서 내 바이트가 어디 있는지 찾아내는 암호화된 파일을 씁니다.
351
+ NMTS 키는 들어 있지 않습니다. `kit`은 그 목록과 NMTS 키를 한 파일에 쓰므로, 키트를 가진
352
+ 사람이 계정을 가집니다. `recovery`는 이 기계에 맞는 독립 복구 프로그램을 내려받아 릴리스의
353
+ 체크섬 파일과 대조한 뒤에야 실행 가능하게 만들고, PATH에는 아무것도 넣지 않습니다. `rebuild`는
354
+ 목록을 잃은 계정의 파일 목록을 서버의 줄로 다시 짓습니다. 열쇠·해시·날짜·크기는 돌아오고 이름과
355
+ 폴더는 돌아오지 않습니다.
356
+
357
+ `nmts rollback`은 파일 목록의 이전 버전을 현재 버전으로 되돌립니다 — 현재 목록이 열리지 않을
358
+ 때를 위한 것입니다. 새 버전이 더한 파일은 그 뒤 목록에서 빠지지만 바이트는 그대로 저장돼 있고,
359
+ `nmts rebuild`가 목록에 없는 파일을 찾습니다. `nmts unlock rollback`으로 열기 전에는 잠겨 있고 매번 `--yes`가 필요합니다.
360
+
361
+ ### 저장이 사라졌을 때
362
+
363
+ `nmts losses`는 크레딧으로 산 저장 객체 가운데 날마다 도는 확인이 체인에서 찾지 못한 것을 적습니다 — 객체 id와 확인이 처음 찾지 못한 날. 파일 이름은 없습니다: 서버가 둘을 짝짓지 못하고, NMTS는 파일 안을 볼 수 없습니다. `nmts losses --recheck <id>`는 지금 체인에 다시 묻습니다. `nmts losses --dismiss <id>`는 읽으신 뒤 줄을 내립니다. 한 번 묻습니다(medium 등급 — auto 모드에서는 에이전트의 판단). 사고는 아무도 가리키지 않는 기록에 남고, 같은 결과가 공지 게시판에 날짜별로 게시됩니다.
364
+
365
+ ### 사람이 지나야 하는 확인
366
+
367
+ API 키는 서버가 답하게 할 뿐, 사람이 있다는 것을 대신하지 못합니다. 최근에 아무도 확인하지
368
+ 않았으면 계정은 더 좁은 한도 안에서 돌고, 몇 가지 요청은 거절됩니다.
381
369
 
382
- `rm`은 절대 없애지 않습니다. 하나를 휴지통으로 옮기고, 거기서 30일 동안 되살릴 수 있습니다.
383
- 영구히 지우는 명령은 도구에 **일부러** 없습니다 — 되돌릴 수 없는 동작은 브라우저 앞의 사람의
384
- 것입니다. 폴더를 휴지통에 넣으면 아래 것이 함께 들어가고, 파일마다 자기 30일 시계를 갖습니다.
385
- 그래서 폴더를 되살려도 지난주에 버리신 것이 되살아나지는 않습니다.
370
+ ```sh
371
+ nmts verify --status # 확인이 살아 있는지, 언제까지인지
372
+ nmts verify # 계정 주인이 nmts.me에 짧은 코드를 찍고 기다립니다
373
+ ```
386
374
 
387
- 경로는 **통째로** 맞춥니다 `photos/a.jpg`와 `a.jpg`는 다른 것이고, 항목에 맞는 경로는 먼저
388
- 나온 쪽으로 정하지 않고 거절합니다.
375
+ 도구도 에이전트도 확인을 대신 지날 없습니다. 며칠이 아니라 확인이 **끝나는 시각**을 찍는
376
+ 이유는, 창이 서버 자신의 주 단위 경계에서 닫히기 때문입니다.
389
377
 
390
- 업로드가 크레딧이 움직인 뒤에 끊기면 **같은 명령을 다시 돌리는 것으로 끝납니다.** 값은 더 들지
391
- 않습니다. 암호화된 바이트와 예약은 돈이 움직이기 전에 적어 두므로, 다시 돌리는 것은 두 번째를
392
- 사는 것이 아니라 이미 산 그 블롭을 그대로 밀어 넣습니다.
378
+ ## 멈춰 서서 묻는
393
379
 
394
- ## 컨테이너
380
+ 행위마다 등급이 있습니다. **none**(목록·받기·폴더·표시)은 묻지 않습니다. **low**(휴지통·설정·문의)와
381
+ **medium**(업로드·공개 코드 게시·새 키)은 실행마다 한 번 묻습니다 — 터미널에서 y/N, 또는 `--yes`. **high**
382
+ (지갑 서명·다른 계정에 파일 주기·NMTS 키 노출·잠그지 않은 저장)는 이 기계에서 `nmts unlock <열쇠>`로 한 번 열기
383
+ 전에는 잠겨 있고, 연 뒤에도 실행마다 묻습니다. **ultra-high**(계정 삭제)는 문장을 입력합니다. `nmts unlock`이
384
+ 열쇠 목록을 보여 주고, 각 열쇠는 묻기 전에 무엇을 여는지, 무엇이 잘못될 수 있는지, 무엇을 덮지 않는지를
385
+ 찍습니다. `nmts help <명령>`이 어느 명령이든 그 문서를 등급과 함께 찍습니다.
395
386
 
396
- 도커와 포드맨에서 루트 없이, 고친 것 없이 돕니다.
387
+ ## 컨테이너
397
388
 
398
- 어디에도 공개된 이미지는 없지만, 이 저장소에 `Dockerfile`이 있어서 만드는 것은 명령 하나입니다.
399
- 두 컨테이너 도구 모두 저장소에 밀어 넣을 때마다 실제로 빌드하고 실행하므로, 이것은 믿고 넘어갈
400
- 말이 아니라 확인할 수 있는 말입니다.
389
+ Docker와 Podman에서 rootless로 그대로 돕니다. 공개된 이미지는 없고, 이 저장소에 `Dockerfile`이
390
+ 있으며, 두 컨테이너 도구가 푸시마다 그것을 굽고 돌립니다.
401
391
 
402
392
  ```sh
403
393
  docker build -t nmts . # 또는: podman build -t nmts .
404
394
  docker run --rm nmts --version
405
395
  ```
406
396
 
407
- 이미지는 보통 사용자로 돌고, 저장하는 것은 `/config`에 씁니다 사용자 몫으로 만들어 둔
408
- 폴더라서 거기에 볼륨을 붙이면 그대로 됩니다. 이미지에 없는 경로에 볼륨을 붙이면 root 소유의
409
- 볼륨이 생기고 도구는 한 바이트도 못 씁니다.
397
+ 이미지는 보통 사용자로 돌고 스스로 만드는 `/config`에 쓰므로, 거기에 볼륨을 붙이면 됩니다. 자격은
398
+ 파일로 주고, 컨테이너 안에서는 절대 환경 변수로 주지 마십시오.
410
399
 
411
400
  ```sh
412
401
  printf '%s' "$CODE" > /tmp/nmts-code && chmod 600 /tmp/nmts-code
@@ -419,101 +408,42 @@ docker run --rm \
419
408
  nmts ls
420
409
  ```
421
410
 
422
- **컨테이너에 없는 자격 파일을 가리키면 그냥 멈춥니다.** `NMTS_API_KEY_FILE`이 없는 파일을
423
- 가리키면 요청을 하나도 보내기 전에 종료 코드 3으로 끝납니다 — 그것이 옳은 동작이고, 위에서 두
424
- 파일을 다 붙인 이유입니다.
425
-
426
- ### 컨테이너에서 업로드하려면 하나가 더 필요합니다
411
+ 이름은 댔는데 없는 자격 파일은 어떤 요청보다 먼저 멈춥니다(종료 코드 3).
427
412
 
428
- 도구가 번만 묻는 동의는 설정 폴더 안의 파일이고, 지워지는 컨테이너는 그 파일을 데리고
429
- 갑니다 그래서 컨테이너는 목록도 보고 다운로드도 하지만 **업로드는 매번 거절합니다.**
430
- 가지 길이 있고 평범합니다.
431
-
432
- ```sh
433
- # 이미지에 동의를 구워 넣거나
434
- RUN nmts consent grant spend
435
-
436
- # 설정 폴더를 컨테이너 밖에 두거나
437
- docker run --rm -v nmts-config:/config … nmts put file
438
- ```
439
-
440
- 이 이미지는 이미 `/config`를 보고 있어서, 뒤엣것은 거기에 볼륨 하나만 붙이면 됩니다. 직접 만드신
441
- 이미지에서는 `NMTS_CONFIG_DIR`이 이 도구가 쓰는 것 전부 — 동의, 저장된 자격, 하루 한 번의 새 버전
442
- 확인 — 를 지정하신 폴더로 옮깁니다. `nmts env`가 그것이 어디에 자리 잡았는지, 그리고 그 폴더가
443
- 컨테이너가 지워져도 남는지 알려 줍니다.
444
-
445
- **컨테이너 안에서 계정 코드를 환경변수에 넣지 마십시오.** 환경 전체는 그것을 들여다볼 수 있는
446
- 사람에게 다 보입니다 — `docker inspect`가 찍습니다. **경로**를 담은 변수는 그 사람에게 파일 이름
447
- 하나를 줄 뿐입니다. `NMTS_ACCOUNT_CODE_FILE`은 `--secret` 마운트와 tmpfs와 평범한 바인드 마운트
448
- 어느 쪽과도 씁니다.
449
-
450
- `nmts env`가 여기가 어느 컨테이너 런타임인지, 여기의 root가 호스트의 root인지, 그리고 쓰려는
451
- 디렉터리가 컨테이너가 지워져도 남는지 알려 줍니다.
452
-
453
- ## 멈춰 서서 묻는 것
454
-
455
- 기계마다 한 번씩, 다섯 가지입니다: **크레딧 쓰기**, **계정 코드를 잠그지 않고 저장하기**,
456
- **그것을 평문 환경변수로 쓰기**, **다른 계정에 내 파일 하나를 주기**, **지갑으로 서명하기**.
457
- 각각 무슨 일이 일어나는지, 무엇이 잘못될 수 있는지, 그리고 동의하는 명령 한 줄을 찍습니다.
458
-
459
- 마지막 것은 명령 하나의 것입니다 — `nmts extend`, 이미 저장된 파일의 기간을 더 사는 것. 나머지는
460
- 전부 크레딧으로 값을 치르는데, 크레딧은 NMTS가 발행하고 바로잡을 수 있습니다. 그 하나는 공개
461
- 체인 위에서 구매에 서명하고, NMTS를 포함해 아무도 그것을 되돌릴 수 없습니다. 그래서 「쓰기」 동의를
462
- 같이 쓰지 않고 자기 동의를 따로 갖습니다.
463
-
464
- **기계마다 한 번** 묻는 것은 그 밖에 없습니다. 대신 **실행마다** 묻는 명령이 하나 있습니다 —
465
- `nmts sweep`, 30일이 지난 휴지통 항목을 버리는 것. 그것은 그 파일들에 대한 이 계정의 열쇠 사본을
466
- 없애므로, 한 번 받아 둔 동의는 그 뒤의 모든 sweep을 말없이 만들 것입니다. 목록 보기, 다운로드,
467
- 이름 바꾸기, 옮기기는 누구에게도 멈춰 묻지 않습니다.
468
-
469
- `nmts consent`가 무엇에 동의했는지 보여 주고 도로 거둘 수 있습니다.
413
+ 잠금 상태와 모드는 설정 디렉터리에 있고, 지워진 컨테이너는 그것을 함께 가져갑니다. 컨테이너는 목록과
414
+ 다운로드는 그냥 되고, 업로드는 물으므로 스크립트는 `--yes`를 넘기며, 잠긴 것(지갑·공유)은 사람이 번 연
415
+ 설정 디렉터리를 컨테이너 밖에 두어야 합니다(`-v nmts-config:/config`). 직접 만든 이미지에서는
416
+ `NMTS_CONFIG_DIR`이 이 도구가 쓰는 모든 것을 고른 디렉터리로 옮기고, `nmts env`가 어디에
417
+ 놓였는지와 살아남는지를 말합니다.
470
418
 
471
419
  ## S3 도구에 드라이브 내주기
472
420
 
473
- `nmts s3`는 이 기계에서 S3 프로토콜을 말하는 서버를 띄웁니다. rclone이든 AWS CLI든, S3를 이미 아는
474
- 백업 프로그램이든 그쪽으로 가리키시면 이 계정의 파일을 목록으로 보고 다운로드합니다.
421
+ `nmts s3`는 이 기계에서 S3 프로토콜을 말하는 서버를 띄웁니다. rclone, AWS CLI, S3를 아는 어떤
422
+ 백업 프로그램이든 이 계정의 파일을 목록으로 보고 내려받을 수 있습니다.
475
423
 
476
424
  ```
477
425
  $ nmts s3
478
426
  This account's drive is being served at http://127.0.0.1:9000, to this machine only.
479
-
480
427
  endpoint http://127.0.0.1:9000
481
428
  bucket drive
482
429
  access key id NMTS…
483
430
  secret key …
484
431
  ```
485
432
 
486
- - **버킷은 하나이고 이름은 `drive`입니다.** 키는 앞의 빗금을 뺀 파일 경로라서, 드라이브의
487
- `photos/a.jpg`는 여기서도 `photos/a.jpg`입니다. 폴더는 공통 접두어로 돌아오고 빈 폴더도
488
- 포함됩니다 드라이브에는 진짜 폴더가 있고, 그것을 감추는 것은 브라우저에 있는 것과 다른
489
- 드라이브를 설명하는 일입니다.
490
- - **자격은 명령이 시작할 때 만들어지고 아무 데도 저장되지 않습니다.** 멈추면 쓰게 됩니다.
491
- - **127.0.0.1에서만 듣고, 그것을 바꾸는 옵션은 없습니다.** 요청과 계정의 모든 파일 사이에 서명
492
- 하나가 있고, 그것이 검사하는 열쇠는 터미널에 찍혔던 것입니다.
493
- - **업로드와 삭제도 되고, 쓰기 동의가 필요합니다.** 업로드는 크레딧을 쓰므로,
494
- `nmts consent grant spend`를 돌린 없는 기계는 드라이브를 읽기 전용으로 내주고 그렇게
495
- 말합니다 모든 쓰기가 대신 문장으로 거절됩니다.
496
- - **삭제는 파일을 휴지통에 넣습니다.** 거기서 30일 동안 되살릴 수 있습니다.
497
- - **같은 파일을 이미 갖고 있는 키에는 `200`으로 답하고 아무것도 보내지 않습니다.** 대조하는 것은
498
- 이름이 아니라 **내용**입니다 — 업로드마다 평문의 해시를 이 계정만 읽을 수 있게 암호화해 적어
499
- 두고, 게이트웨이가 도착하는 바이트를 그것과 대조합니다. 그래서 매일 밤 도는 백업은 바뀐 파일에만
500
- 값을 치릅니다.
501
- - ⛔ **다른 파일을 갖고 있는 키는 `409`로 거절합니다.** 이 드라이브는 파일을 덮어쓰지 않습니다 —
502
- 같은 이름은 번호 붙은 사본으로 도착하므로, 200으로 답하는 것은 동기화 도구에게 「복제해 놓은
503
- 파일을 갱신했다」고 말하는 일이 됩니다. 먼저 지우시거나 다른 키로 올리십시오. 해시를 적기 전에
504
- 저장된 파일은 대조할 것이 없어서, 자기 문장과 함께 같은 방식으로 거절됩니다.
505
- - **큰 파일은 조각으로 올라갑니다** — S3 클라이언트가 보내는 방식 그대로. 조각은 순서 없이 동시에
506
- 도착하고, 하나하나가 클라이언트가 서명한 해시와 대조된 뒤에야 파일의 일부가 됩니다. 조각이 전부
507
- 들어오기 전에는 아무것도 저장되지 않습니다. ⚠ 위의 내용 대조는 조각이 한 파일이 된 뒤에
508
- 일어납니다 — 그전에는 대조할 것이 없습니다 — 그래서 안 바뀐 것으로 드러난 큰 파일은 루프백을
509
- 건너온 뒤에 업로드되지 않습니다.
510
- - ⚠ **수정 시각은 넘어가지 않습니다.** 파일은 업로드된 시각으로 도착하므로, 시각을 비교하는
511
- 도구는 안 바뀐 파일을 바뀌었다고 판단하고 다시 올리려 합니다. 그것은 이제 값이 들지 않습니다 —
512
- 내용을 대조하고 업로드를 건너뜁니다.
513
- - **다른 기기에서 올린 파일은 나타나는 데 5초쯤 걸릴 수 있습니다.** 파일 목록을 다시 가져오기
514
- 전까지 그만큼 재사용합니다.
515
-
516
- rclone으로:
433
+ - 버킷은 `drive` 하나. 키는 슬래시를 뺀 파일 경로입니다. 폴더는 빈 것까지 common prefix로
434
+ 돌아옵니다.
435
+ - 자격은 명령이 시작될 만들어지고, 어디에도 저장되지 않으며, 명령과 함께 죽습니다.
436
+ - 127.0.0.1에만 귀를 기울이고, 바꾸는 옵션은 없습니다.
437
+ - 시작할 때 묻습니다(이것을 거친 업로드는 크레딧을 씁니다). 스크립트는 `--yes`로 답합니다. 삭제는
438
+ 파일을 휴지통에 넣습니다.
439
+ - 이미 **같은** 파일을 가진 키에는 `200`으로 답하고 아무것도 보내지 않습니다. 이름이 아니라 내용을
440
+ 비교하므로, 밤마다 도는 백업은 바뀐 파일 값만 냅니다. **다른** 파일을 가진 키는 `409`로
441
+ 거절합니다. 드라이브는 파일을 바꿔치기하지 않기 때문입니다.
442
+ - 파일은 조각으로 올라오고, 클라이언트가 서명한 해시와 조각마다 대조합니다. 모든 조각이 들어오기
443
+ 전에는 아무것도 저장되지 않습니다.
444
+ - 수정 시각은 옮겨지지 않고, 다른 기기에서 올린 파일은 보이기까지 5초가 걸릴 있습니다.
445
+
446
+ rclone이라면:
517
447
 
518
448
  ```
519
449
  $ rclone config create drive s3 provider=Other region=us-east-1 \
@@ -526,116 +456,93 @@ $ rclone copy --size-only ./somewhere drive:drive
526
456
 
527
457
  ## MCP를 말하는 에이전트에게
528
458
 
529
- `nmts mcp`는 로컬 MCP 서버입니다 기계에서, 표준 입출력으로, 자기를 띄운 쪽과 이야기합니다.
530
- 먼저 로그인하십시오(`nmts login`). 기계가 이미 갖고 있는 계정 코드를 읽고, 명령줄로는 절대
531
- 받지 않습니다.
532
-
533
- **Claude Code**와 **Codex** 둘 다 한 줄로 더하고, 그 줄이 같습니다.
459
+ `nmts mcp`는 stdin과 stdout 위의 로컬 MCP 서버입니다. 먼저 로그인하십시오(`nmts login`). 명령줄로
460
+ NMTS 키를 받지 않고, 묻지도 않으므로, 잠가 NMTS 키에 `NMTS_PASSPHRASE`가 없으면 시작하자마자 종료
461
+ 코드 3으로 끝납니다.
534
462
 
535
463
  ```
536
- $ claude mcp add nmts -- nmts mcp --out /where/files/should/land
537
- $ codex mcp add nmts -- nmts mcp --out /where/files/should/land
464
+ $ claude mcp add nmts -- nmts mcp --out /where/files/should/land
465
+ $ codex mcp add nmts -- nmts mcp --out /where/files/should/land
466
+ $ opencode mcp add nmts -- nmts mcp --out /where/files/should/land
538
467
  ```
539
468
 
540
- **opencode**에는 명령이 없습니다. `opencode.json`에 이렇게 넣으십시오.
469
+ Hermes와 OpenClaw는 인자를 하나씩 넘깁니다(Hermes는 `--args`, OpenClaw는 `--arg` 반복). 각자의
470
+ `mcp add --help`가 모양을 찍습니다. 다른 클라이언트도 명령 `nmts`와 인자 `mcp --out <directory>`를
471
+ 받으면 됩니다. 예를 들어 opencode의 설정 파일이라면:
541
472
 
542
473
  ```json
543
474
  { "mcp": { "nmts": { "type": "local", "command": ["nmts", "mcp", "--out", "/where/files/should/land"] } } }
544
475
  ```
545
476
 
546
- 로컬 MCP 서버를 돌리는 다른 클라이언트도 같은 둘을 받습니다 — 명령 `nmts`와 인자
547
- `mcp --out <디렉터리>`. 그것을 어디에 적을지는 그 클라이언트의 일입니다.
548
-
549
- 도구를 스무 내줍니다 — 계정 읽기(`nmts_whoami`·`nmts_list`·`nmts_usage`·`nmts_expiring`·
550
- `nmts_balance`·`nmts_shares`), 가져오기(`nmts_get`·`nmts_pull`·`nmts_receive`),
551
- 업로드(`nmts_put`·`nmts_push`), 정리(`nmts_mkdir`·`nmts_move`·`nmts_rename`·`nmts_mark`·
552
- `nmts_trash`·`nmts_restore`), 공유(`nmts_public_code`·`nmts_share`·`nmts_unshare`).
553
-
554
- **일부러 내주지 않는 것**과 각각의 이유:
555
-
556
- - **자격과 동의** — 로그인·로그아웃, 키 만들기·거두기, 아래의 동의를 주는 것. 그것은 그분의
557
- 것입니다. 자기 권한을 스스로 줄 수 있는 통로는 권한이 없는 것과 같습니다.
558
- - **사람이 지나야 하는 확인.** 기계는 못 합니다 — 확인하려는 것이 그것입니다.
559
- - **영구히 없애는 것** — 휴지통 비우기, 파일 영구 삭제. 휴지통에 **넣는** 것은 있습니다. 도로
560
- 꺼낼 수 있기 때문입니다.
561
- - **잃어버린 파일 목록 다시 짓기.** 되기는 됩니다만 되살아나는 이름이 전부 임시값이고, 그것은
562
- 나중에 글로 읽으실 것이 아니라 직접 보고 계셔야 하는 일입니다.
563
- - **복구 파일 쓰기와 복구 프로그램 받기.** 그것들은 이 서비스가 없는 날을 위해 있고, 만들고
564
- 간직하는 것은 그분의 몫입니다.
565
-
566
- 내주는 것 중 어느 것도 지정하신 디렉터리 밖에 쓰지 못합니다 — 거기서 빠져나가는 경로를 요구하는
567
- 모델은 그 안에 있는 자기 이름의 파일을 얻거나 거절당합니다. 도구 선언 어디에도 그분 디스크의
568
- 경로를 적을 자리가 없고, 도구가 늘어나도 그 사실이 유지되게 하는 것이 그것입니다.
569
-
570
- 도구가 선언한 인자는 돌기 전에 검사하고, 잘못된 것은 짐작하지 않고 거절합니다 — `dry_run`이 문자열
571
- `"true"`로 오면 그것은 오류이지 값을 치르는 업로드가 아닙니다.
477
+ 도구 서른일곱 개를 내줍니다. 계정 읽기(`nmts_whoami`, `nmts_list`, `nmts_usage`, `nmts_expiring`,
478
+ `nmts_balance`, `nmts_shares`, `nmts_shares_sent`), 지갑 읽기(`nmts_wallet_activity`,
479
+ `nmts_wallet_storage`), 로그인된 기기(`nmts_devices`), 확인이 찾지 못한 저장(`nmts_losses`,
480
+ `nmts_loss_recheck`), 받기(`nmts_get`, `nmts_pull`, `nmts_receive`), 올리기(`nmts_put`,
481
+ `nmts_push`, `nmts_padding`, `nmts_deposit`), 정리(`nmts_mkdir`, `nmts_move`, `nmts_rename`, `nmts_mark`,
482
+ `nmts_label_rename`, `nmts_unlabel_all`, `nmts_trash`, `nmts_restore`),
483
+ 공유(`nmts_public_code`, `nmts_share`, `nmts_unshare`),
484
+ 개발자에게 쓰기(`nmts_support_send`, `nmts_support_list`, `nmts_support_show`, `nmts_support_reply`), 그리고 이 서비스가 게시하는 문서(`nmts_notices`, `nmts_notice`, `nmts_terms`,
485
+ `nmts_privacy`).
572
486
 
573
- SDK가 아니라 직접 구현했으므로 의존성이 늘지 않습니다.
487
+ 자격과 동의, 사람이 지나야 하는 확인, 영구 삭제, 잃은 파일 목록 다시 짓기와 이전 목록 되돌리기,
488
+ 복구 파일 쓰기는 일부러 내주지 않습니다. 그것은 사람의 몫입니다. 내주는 어떤 도구도 지정한 디렉터리 밖에는 쓰지
489
+ 못하고, 잘못된 인자는 짐작하지 않고 거절합니다. MCP SDK 없이 직접 구현해 의존성이 없습니다.
574
490
 
575
491
  ## 에이전트가 스스로 판단하게 두기
576
492
 
577
- 기본으로는 동의되지 않은 일이 있으면 그분께 묻고, 이것을 부리는 에이전트는 대신 답하지 말라는
578
- 말을 듣습니다. 그것을 바꾸는 설정이 있고, 다 무엇인지 밝히는 플래그를 요구합니다.
493
+ 기본으로 도구는 가장 낮은 등급 위의 모든 행위 앞에서 사람에게 묻고, 도구를 모는 에이전트는 대신
494
+ 답하지 말라는 지시를 받습니다. 모드는 넷이고, 사람만 터미널에서 바꿉니다:
579
495
 
580
496
  ```
581
- $ nmts mode # 지금 무엇으로 있는가
582
- $ nmts mode auto --i-accept-the-risk # 에이전트가 판단하고 진행합니다
583
- $ nmts mode skip-permissions --i-accept-the-risk # 에이전트가 그냥 진행합니다
584
- $ nmts mode off # 다시 묻게
497
+ $ nmts mode # 지금 무엇이 켜져 있는가
498
+ $ nmts mode explain auto-high # 모드가 무엇을 하고, 무엇을 걸고, 무엇을 얻는지
499
+ $ nmts mode auto-low # low는 묻지 않고 실행, medium은 에이전트의 판단
500
+ $ nmts mode auto-high # 같되, 에이전트에게 더 앞서 생각하라고 한 것
501
+ $ nmts mode skip-permissions # 아무것도 묻지 않고 아무것도 잠그지 않음 — 문장을 입력해 켭니다
502
+ $ nmts mode default # 다시 묻습니다
585
503
  ```
586
504
 
587
- 켜져 있는 동안 **모든 명령이 stderr에 그렇다고 말합니다.** 일부러 그렇습니다 이것은 크레딧을
588
- 쓰기 전에 누가 물어보느냐를 정하는 설정이고, 자기가 켜져 있다고 말하기를 그만둔 설정은 사람들이
589
- 잊는 설정입니다.
505
+ high 행위는 skip-permissions 말고는 어느 모드에서도 잠겨 있고, 뒤에도 실행마다 묻습니다. 계정 삭제는
506
+ auto 모드 둘에서 거절됩니다. 모드가 켜져 있는 동안 모든 명령이 stderr에 그렇다고 말합니다. 에이전트는
507
+ 설명과 함께 모드를 추천할 수는 있지만 바꿀 수는 없습니다.
590
508
 
591
- 동의 자체를 없애지는 않습니다. 쓰기, 지갑, 공유, 계정 코드를 어디에 둘 수 있는가는 여전히 하나씩
592
- 날짜와 함께 기록되고 `nmts consent`가 여전히 그것을 늘어놓습니다. 달라지는 것은 **누가 그것을
593
- 기록해도 되는가**입니다 — `skip-permissions`가 켜져 있으면 에이전트가 그분을 대신해 그렇게 하는
594
- 것이 그분이 시키신 일이고, 꺼져 있으면 에이전트가 읽는 지시가 그러지 말라고 말합니다.
509
+ ## 네트워크와 재시도
595
510
 
596
- ## 연결이 깜빡일
597
-
598
- 만들지 못한 요청 — 연결 거부, 연결 끊김, 아예 맺어지지 않음, 즉 휴대폰 데이터와 와이파이 사이를
599
- 오갈 때 보이는 그 모양 — 은 사이 간격을 늘려 가며 20초쯤 다시 시도한 뒤에 실패를 보고합니다.
600
- 말없이 다시 시도하는 것은 없습니다 — 기다린다고 말합니다.
601
-
602
- **다시 시도하지 않는 것**과 각각의 이유:
511
+ `--network mainnet` 또는 `--network testnet`, 또는 `NMTS_NETWORK`. 실서버에서는 이미 알고
512
+ 있고, 다른 서버에서는 필수입니다. 틀린 네트워크는 「틀린 네트워크」가 아니라 「없음」이라고 답하기
513
+ 때문입니다.
603
514
 
604
- - **거절.** 서버가 아니라고 잘못된 키, 크레딧 없음, 없는 파일 — 은 답입니다. 다시 묻는
605
- 것은 같은 말을 나중에 듣는 기다림을 쓰는 일입니다. 거절은 대개 **무엇을 하면 되는지 한 줄**을
606
- 함께 찍습니다. 찍는 것은 덧붙일 말이 없어서입니다.
607
- - **시간이 다 된 요청.** 이미 30초를 썼고, 그 기한이 있는 이유는 이것을 반복해 돌리는 에이전트가
608
- 하염없이 기다리지 않게 하려는 것입니다.
609
- - ⛔ **멱등 키 없는 쓰기.** 서버에 닿았는데 돌아오는 길에 죽은 요청은 아예 도착하지 않은 요청과
610
- 똑같이 보이고, 그것을 두 번 보내면 돈이 두 번 나갈 수 있습니다. 값을 치르는 두 호출은 키를
611
- 지닙니다 — 두 번째 사본이 같은 요청이라는 서버의 약속입니다 — 그리고 그 둘은 다시 보냅니다.
612
- 쓰기를 하는 나머지는 아닙니다.
515
+ 거절되거나 끊기거나 아예 맺어지지 않은 연결은 점점 길어지는 대기와 함께 20초쯤 다시 시도하고,
516
+ 대기는 알립니다. 서버의 거절, 30초를 요청, 멱등성 키가 없는 쓰기는 다시 시도하지 않습니다.
517
+ 값을 치르는 호출은 그 키를 실어 다시 보내도 안전하고, 그 밖에 쓰는 것은 그렇지 않습니다.
613
518
 
614
- ##
519
+ ## 뭔가 잘못됐다면
615
520
 
616
- `--network mainnet` 또는 `--network testnet`, 아니면 `NMTS_NETWORK`. 절대 짐작하지 않습니다 —
617
- 틀린 망은 그분 파일이 저장된 없는 곳을 뒤지고 「망이 틀렸다」가 아니라 「없다」고 답합니다.
618
- 실서버를 상대로는 망이 이미 알려져 있어 옵션이 선택이고, 다른 서버를 상대로는 필수입니다.
521
+ 도구에서 바로 보내십시오: `nmts support send --category bug --message "…" --attach-log`. NMTS를
522
+ 만드는 사람에게 앱의 문의함과 같은 곳으로 닿고, 답장은 같은 글타래로 옵니다(`nmts support list`,
523
+ 그다음 `nmts support show <코드>`). 보내기 전에 무엇이 갈지 그대로 보여 주고, NMTS 키·API 키·
524
+ 암호 구절·파일 내용은 이 기계에서 먼저 지우며, `--omit <글자>`로 무엇이든 더 지울 수 있습니다.
525
+ 영어를 권하지만 한국어도 읽습니다. 아이디어도 고장만큼 값어치가 있고, 확신이 없는 것도 그렇습니다.
619
526
 
620
- ## 뭔가 잘못됐다면
527
+ 도구 자체가 돌지 않으면 **nmts@nmts.me**로, 무엇을 돌렸고 무엇이 찍혔는지 적어 보내십시오.
621
528
 
622
- **`nmts@nmts.me` 보내 주십시오** — 결함이든, 헷갈리는 메시지든, 없는 기능이든, 걸리적거린 무엇
623
- 이든. 가장 사소한 거슬림도 메일 하나 값어치가 있습니다. 대개는 고치기 싸고, 이쪽에서는 보이지
624
- 않습니다. 무엇을 돌리셨고 무엇이라고 나왔는지 적어 주십시오. **영어 또는 한국어로 써 주십시오** —
625
- 둘 다 읽습니다.
529
+ ## 위에 만드셨습니까?
626
530
 
627
- 주소는 **이 도구**가 잘못됐을 때의 자리입니다. 서비스 자체에 대한 질문과 콘텐츠 신고는
628
- [nmts.me](https://nmts.me)의 문의함으로 가십시오.
531
+ 코드 위에 무엇을 만드셨다면 서비스, 포크, 다른 언어로의 이식, 가벼운 클라이언트 —
532
+ 저희에게 갚을 것은 없습니다. Apache-2.0은 고지 외에 아무것도 요구하지 않습니다. 그래도 알고
533
+ 싶습니다. **nmts@nmts.me**로 쓰시거나, 공개돼도 괜찮다면 여기 이슈를 여십시오. 목록에 싣고
534
+ 싶으시면 그렇게 말씀해 주십시오. [SHOWCASE.ko.md](SHOWCASE.ko.md)에 프로젝트마다 링크와 열 줄까지의
535
+ 소개를 만든 분이 쓴 대로 싣습니다(영어 목록은 [SHOWCASE.md](SHOWCASE.md)). 목록에 실리는 것은 보증이 아니며, 저희는
536
+ 이유를 밝히지 않고 싣지 않거나 내릴 수 있습니다.
629
537
 
630
538
  ## 라이선스
631
539
 
632
- Apache-2.0. 전문은 [LICENSE](LICENSE)에 원문 그대로 있습니다. 2026년 8월 30일에 AGPL-3.0-only
633
- 에서 옮겼고, 그전에 받아 두신 사본은 그대로 AGPL로 남습니다.
540
+ Apache-2.0 전문은 [LICENSE](LICENSE)에 있습니다. 2026-08-30 AGPL-3.0-only에서 옮겨 왔고,
541
+ 전에 AGPL로 받은 사본은 그대로 AGPL입니다.
634
542
 
635
- **그 위에 만들고, 내놓고, 만드신 것을 파셔도 됩니다.** 프로그램을 쓰시는 데에는 아무 조건이
636
- 없습니다. 다시 배포하실 라이선스와 저작권 고지가 함께 갑니다. 그래도 다른 조건이 필요하시면
637
- **nmts@nmts.me** 이유와 함께 알려 주십시오 — [LICENSING.md](LICENSING.md)를 봐 주십시오.
543
+ 위에 만들고, 내보내고, 만든 것을 파십시오. 다른 조건이 필요하면 **nmts@nmts.me**로 이유를
544
+ 적어 보내십시오 [LICENSING.md](LICENSING.md). 코드는 환영합니다.
545
+ [CONTRIBUTING.ko.md](CONTRIBUTING.ko.md)가 어떻게 여기 닿는지 말하고, [기여자 동의서](CLA.ko.md)
546
+ 위의 제안을 프로그램 전체에 대해 참으로 유지합니다.
638
547
 
639
- 코드도 환영합니다 어떻게 도착하는지는 [CONTRIBUTING.ko.md](CONTRIBUTING.ko.md)에 있고,
640
- [기여자 라이선스 동의서](CLA.ko.md)가 위 약속을 프로그램 전체에 대해 참으로 유지해 줍니다.
641
- 버그 신고와 질문, 아이디어도 환영합니다.
548
+ Copyright © 2026 needmoretruth.