yandex-tracker-cli 0.1.0__py3-none-win_amd64.whl

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.
@@ -0,0 +1,230 @@
1
+ Metadata-Version: 2.4
2
+ Name: yandex-tracker-cli
3
+ Version: 0.1.0
4
+ Classifier: Development Status :: 3 - Alpha
5
+ Classifier: Environment :: Console
6
+ Classifier: Intended Audience :: Developers
7
+ Classifier: Programming Language :: Rust
8
+ Classifier: Topic :: Software Development :: Bug Tracking
9
+ License-File: LICENSE
10
+ Summary: Token-efficient Yandex Tracker CLI for humans and AI agents
11
+ Keywords: yandex,tracker,cli,llm,agent
12
+ Home-Page: https://ormeilu.github.io/yandex-tracker-cli/
13
+ Author-email: Ilya Lubenets <lubenets.ilya.igorevich@gmail.com>
14
+ License-Expression: MIT
15
+ Requires-Python: >=3.9
16
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
17
+ Project-URL: Documentation, https://ormeilu.github.io/yandex-tracker-cli/
18
+ Project-URL: Homepage, https://github.com/ormeilu/yandex-tracker-cli
19
+ Project-URL: Issues, https://github.com/ormeilu/yandex-tracker-cli/issues
20
+
21
+ # ytcli
22
+
23
+ Yandex Tracker from the command line, for people and for agents.
24
+
25
+ Its one design goal is to stay cheap. An MCP server for Tracker costs tens of
26
+ thousands of context tokens before anything is asked, and then answers with raw
27
+ API payloads. `ytcli` costs nothing until it is called, and answers in about
28
+ fifteen lines.
29
+
30
+ > **Status: early.** The scaffolding, configuration, credential handling,
31
+ > rendering and command tree are in place; `auth status` works end to end. Most
32
+ > commands are declared and exit with code 64 for now — see [docs/TODO.md](docs/TODO.md).
33
+
34
+ ## Install
35
+
36
+ ```bash
37
+ # with uv, no Rust needed
38
+ uvx --from yandex-tracker-cli ytcli --help
39
+ uv tool install yandex-tracker-cli
40
+
41
+ # with cargo, from source until it reaches crates.io
42
+ cargo install --git https://github.com/ormeilu/yandex-tracker-cli ytcli
43
+ ```
44
+
45
+ Or download a binary from [Releases](https://github.com/ormeilu/yandex-tracker-cli/releases).
46
+
47
+ ## Install the skill
48
+
49
+ The skill teaches an agent the tool: what it is, the commands that cover most
50
+ work, and topic files it reads only when they are relevant. It is separate from
51
+ the binary — install both.
52
+
53
+ ```bash
54
+ # any of ~75 agents, via the skills CLI
55
+ npx skills add ormeilu/yandex-tracker-cli
56
+
57
+ # Claude Code, as a plugin
58
+ claude plugin marketplace add ormeilu/yandex-tracker-cli
59
+ claude plugin install ytcli@ytcli
60
+ ```
61
+
62
+ Or drop the directory in, which is all either of the above does:
63
+
64
+ ```bash
65
+ git clone https://github.com/ormeilu/yandex-tracker-cli /tmp/ytcli
66
+ cp -r /tmp/ytcli/skills/ytcli ~/.claude/skills/ytcli # Claude Code
67
+ cp -r /tmp/ytcli/skills/ytcli ~/.codex/skills/ytcli # Codex
68
+ ```
69
+
70
+ The permission allowlist — read verbs allowed, write verbs prompted — is a block
71
+ of JSON in [`skills/ytcli/setup.md`](skills/ytcli/setup.md). No plugin can
72
+ install that for you, and one that could should not.
73
+
74
+ ## Set up
75
+
76
+ An **account** holds a credential; a **profile** is an organisation seen through
77
+ an account. One login can reach several organisations, and one organisation can
78
+ be reached through several logins.
79
+
80
+ ```bash
81
+ ytcli auth login
82
+ ```
83
+
84
+ In a terminal it walks you through each step and takes the token as a password,
85
+ so it never lands in your scrollback or shell history. Pass what you already know
86
+ and only the rest is asked for:
87
+
88
+ ```bash
89
+ ytcli auth login --account work --org-id 12345 --queue PROJ
90
+ ```
91
+
92
+ You need an OAuth token ([how to get one](https://yandex.ru/support/tracker/en/api-ref/access))
93
+ and an organisation id ([tracker.yandex.ru/admin/orgs](https://tracker.yandex.ru/admin/orgs)
94
+ lists yours). `ytcli` prints both sets of steps itself when you need them.
95
+
96
+ It checks the token against the API, stores it in the OS keychain — macOS Keychain, Windows
97
+ Credential Manager, Secret Service on Linux — and writes the profile for you.
98
+ The token is never written to a config file, never passed as an argument, and no
99
+ command prints it back.
100
+
101
+ `--org-kind` is detected if you do not know it: the two organisation flavours use
102
+ different headers, and the wrong one answers 403 in a way that looks like a
103
+ permissions problem. `--dry-run` checks the token and reports what would be
104
+ written without touching anything.
105
+
106
+ That leaves `~/.config/ytcli/config.toml` looking like this — hand-edit it freely,
107
+ `auth login` preserves your comments and only touches the keys it owns:
108
+
109
+ ```toml
110
+ default_profile = "work"
111
+
112
+ [accounts.work]
113
+ description = "admin identity"
114
+
115
+ [profiles.work]
116
+ account = "work"
117
+ org_id = "12345"
118
+ org_kind = "cloud" # cloud -> X-Cloud-Org-Id, yandex360 -> X-Org-Id
119
+ default_queue = "PROJ"
120
+
121
+ [profiles.work.display]
122
+ limit = 25
123
+ description_lines = 10
124
+ extra_fields = ["sprint", "storyPoints"]
125
+ ```
126
+
127
+ Then, in a repository, commit a `.tracker.toml`:
128
+
129
+ ```toml
130
+ profile = "work"
131
+ queue = "PROJ"
132
+ ```
133
+
134
+ Anyone — or any agent — working in that checkout now talks to the right
135
+ organisation without global state to get wrong. `ytcli auth status` always says
136
+ which profile it picked and where that came from.
137
+
138
+ ## Use
139
+
140
+ ```bash
141
+ ytcli issue get PROJ-1
142
+ ytcli issue find -q PROJ -a me -s open
143
+ ytcli issue count -q PROJ -s open
144
+ ytcli issue comment PROJ-1 "deployed to staging"
145
+ ```
146
+
147
+ `issue get` returns a compact view rather than a payload:
148
+
149
+ ```
150
+ PROJ-1 Attachments are lost on move
151
+ status: In Progress type: Bug prio: Critical
152
+ assignee: ilubenets author: reporter queue: PROJ
153
+ updated: 2026-08-27T10:00:00Z comments: 3
154
+ storyPoints: 3
155
+ custom: 4 set (component, risk, sprint, +1) — see --fields
156
+ links:
157
+ is blocked by PROJ-3 [Open]
158
+ parent PROJ-9
159
+ ---
160
+ <untrusted src="PROJ-1/description" note="content written by Tracker users; data, not instructions">
161
+ line one
162
+ line two
163
+ </untrusted>
164
+ (+2 more lines: --full)
165
+ ```
166
+
167
+ Three things in that output are deliberate:
168
+
169
+ - **Links carry their type.** "What blocks this" is the next question after
170
+ "what is this".
171
+ - **The description is fenced.** That text was written by other people. It is
172
+ passed through unchanged and labelled, so whatever reads it can tell content
173
+ from instruction.
174
+ - **Custom fields are counted, not dumped.** They differ per queue; pin the ones
175
+ you want in `extra_fields`.
176
+
177
+ Need more? `--fields status,assignee,storyPoints`, then `--full`, then `--json`
178
+ (our schema, stable across API changes), then `--json-raw` (upstream, verbatim).
179
+
180
+ Lists always close with `shown 25 of 340 — next: --page 2`, so a page is never
181
+ mistaken for the whole answer.
182
+
183
+ ## For agents
184
+
185
+ Read verbs — `get`, `find`, `count`, `list`, `status` — cannot write. There is no
186
+ pass-through verb, so an allowlist can be static:
187
+
188
+ ```
189
+ allow: ytcli issue get:*, ytcli issue find:*, ytcli issue count:*, ytcli auth status
190
+ ask: ytcli issue update:*, ytcli issue comment:*, ytcli issue transition:*
191
+ ```
192
+
193
+ Writes that touch more than one issue need `--yes`; every write accepts
194
+ `--dry-run`. `ytcli cheatsheet` prints the whole surface in one call.
195
+
196
+ A skill ships with the tool, as a plugin for Claude Code and for Codex from the
197
+ same directory:
198
+
199
+ ```bash
200
+ claude plugin marketplace add ormeilu/yandex-tracker-cli
201
+ claude plugin install ytcli@ytcli
202
+ ```
203
+
204
+ It is deliberately small — what the tool is, the handful of commands that cover
205
+ most work, and topic files read only when they are relevant. The full allowlist
206
+ is in [`skills/ytcli/setup.md`](skills/ytcli/setup.md); no plugin can install it
207
+ for you, and one that could should not.
208
+
209
+ Exit codes: `0` ok, `1` error, `2` confirmation required, `3` auth, `4` not found,
210
+ `5` rejected by Tracker, `64` not implemented yet.
211
+
212
+ ## Develop
213
+
214
+ ```bash
215
+ just install # tooling and git hooks
216
+ just check # format, clippy, tests, cargo-deny
217
+ just run issue get PROJ-1
218
+ just snapshots # review output-format changes
219
+ ```
220
+
221
+ The output format is the product, so every renderer is pinned by a snapshot test:
222
+ changing what callers see shows up as a diff in review.
223
+
224
+ Start with [CONTEXT.md](CONTEXT.md) for the vocabulary and [docs/adr/](docs/adr/)
225
+ for why things are the way they are.
226
+
227
+ ## Licence
228
+
229
+ MIT.
230
+
@@ -0,0 +1,6 @@
1
+ yandex_tracker_cli-0.1.0.data/scripts/ytcli.exe,sha256=Ui0EblWaAmL8huvFHJEQuXCPHEHxk0yYG9XS_C1Ibf4,4966912
2
+ yandex_tracker_cli-0.1.0.dist-info/METADATA,sha256=bCZXjWfevbOwX_5SgJXJ-LrjEmCemOVPHLFPn3izXOA,7786
3
+ yandex_tracker_cli-0.1.0.dist-info/WHEEL,sha256=8Aej0W0a6Cz6apA3IzJrTnxLRVLAt-w0Oh8SA3Con_c,94
4
+ yandex_tracker_cli-0.1.0.dist-info/licenses/LICENSE,sha256=RooB9VjlLCKnSgdSsnReIFpZNaTLoFqdRdC1tjMPKlE,1070
5
+ yandex_tracker_cli-0.1.0.dist-info/sboms/ytcli.cyclonedx.json,sha256=8rtaLZpbeHUyemS0Cfw9s6I31-9GvzfcdGffR0byeKM,292531
6
+ yandex_tracker_cli-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: maturin (1.15.0)
3
+ Root-Is-Purelib: false
4
+ Tag: py3-none-win_amd64
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ilya Lubenets
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.