Dev10x 0.64.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. dev10x-0.64.0/LICENSE +21 -0
  2. dev10x-0.64.0/PKG-INFO +322 -0
  3. dev10x-0.64.0/README.md +265 -0
  4. dev10x-0.64.0/pyproject.toml +74 -0
  5. dev10x-0.64.0/setup.cfg +4 -0
  6. dev10x-0.64.0/src/Dev10x.egg-info/PKG-INFO +322 -0
  7. dev10x-0.64.0/src/Dev10x.egg-info/SOURCES.txt +90 -0
  8. dev10x-0.64.0/src/Dev10x.egg-info/dependency_links.txt +1 -0
  9. dev10x-0.64.0/src/Dev10x.egg-info/entry_points.txt +2 -0
  10. dev10x-0.64.0/src/Dev10x.egg-info/requires.txt +13 -0
  11. dev10x-0.64.0/src/Dev10x.egg-info/top_level.txt +1 -0
  12. dev10x-0.64.0/src/dev10x/__init__.py +1 -0
  13. dev10x-0.64.0/src/dev10x/cli.py +53 -0
  14. dev10x-0.64.0/src/dev10x/commands/__init__.py +0 -0
  15. dev10x-0.64.0/src/dev10x/commands/hook.py +276 -0
  16. dev10x-0.64.0/src/dev10x/commands/init.py +187 -0
  17. dev10x-0.64.0/src/dev10x/commands/permission.py +349 -0
  18. dev10x-0.64.0/src/dev10x/commands/platform.py +104 -0
  19. dev10x-0.64.0/src/dev10x/commands/skill.py +90 -0
  20. dev10x-0.64.0/src/dev10x/commands/validate.py +6 -0
  21. dev10x-0.64.0/src/dev10x/config/__init__.py +3 -0
  22. dev10x-0.64.0/src/dev10x/config/loader.py +111 -0
  23. dev10x-0.64.0/src/dev10x/domain/__init__.py +32 -0
  24. dev10x-0.64.0/src/dev10x/domain/config_loader.py +24 -0
  25. dev10x-0.64.0/src/dev10x/domain/git_context.py +43 -0
  26. dev10x-0.64.0/src/dev10x/domain/hook_input.py +97 -0
  27. dev10x-0.64.0/src/dev10x/domain/plan.py +184 -0
  28. dev10x-0.64.0/src/dev10x/domain/repository_ref.py +20 -0
  29. dev10x-0.64.0/src/dev10x/domain/result.py +41 -0
  30. dev10x-0.64.0/src/dev10x/domain/rule_engine.py +82 -0
  31. dev10x-0.64.0/src/dev10x/domain/session_state.py +200 -0
  32. dev10x-0.64.0/src/dev10x/domain/sql.py +41 -0
  33. dev10x-0.64.0/src/dev10x/domain/validation_rule.py +111 -0
  34. dev10x-0.64.0/src/dev10x/hooks/__init__.py +0 -0
  35. dev10x-0.64.0/src/dev10x/hooks/edit_validator.py +52 -0
  36. dev10x-0.64.0/src/dev10x/hooks/permission_diagnostics.py +342 -0
  37. dev10x-0.64.0/src/dev10x/hooks/session.py +518 -0
  38. dev10x-0.64.0/src/dev10x/hooks/skill.py +95 -0
  39. dev10x-0.64.0/src/dev10x/hooks/task_plan_sync.py +143 -0
  40. dev10x-0.64.0/src/dev10x/mcp/__init__.py +0 -0
  41. dev10x-0.64.0/src/dev10x/mcp/audit.py +74 -0
  42. dev10x-0.64.0/src/dev10x/mcp/db.py +33 -0
  43. dev10x-0.64.0/src/dev10x/mcp/git.py +157 -0
  44. dev10x-0.64.0/src/dev10x/mcp/github.py +621 -0
  45. dev10x-0.64.0/src/dev10x/mcp/monitor.py +50 -0
  46. dev10x-0.64.0/src/dev10x/mcp/permission.py +104 -0
  47. dev10x-0.64.0/src/dev10x/mcp/plan.py +89 -0
  48. dev10x-0.64.0/src/dev10x/mcp/release.py +36 -0
  49. dev10x-0.64.0/src/dev10x/mcp/server_cli.py +832 -0
  50. dev10x-0.64.0/src/dev10x/mcp/server_db.py +35 -0
  51. dev10x-0.64.0/src/dev10x/mcp/skill_index.py +30 -0
  52. dev10x-0.64.0/src/dev10x/mcp/subprocess_utils.py +108 -0
  53. dev10x-0.64.0/src/dev10x/mcp/tests/__init__.py +0 -0
  54. dev10x-0.64.0/src/dev10x/mcp/tests/test_git.py +163 -0
  55. dev10x-0.64.0/src/dev10x/mcp/utilities.py +34 -0
  56. dev10x-0.64.0/src/dev10x/platform/__init__.py +14 -0
  57. dev10x-0.64.0/src/dev10x/platform/registry.py +156 -0
  58. dev10x-0.64.0/src/dev10x/skills/__init__.py +0 -0
  59. dev10x-0.64.0/src/dev10x/skills/audit/__init__.py +0 -0
  60. dev10x-0.64.0/src/dev10x/skills/audit/analyze_actions.py +330 -0
  61. dev10x-0.64.0/src/dev10x/skills/audit/analyze_permissions.py +510 -0
  62. dev10x-0.64.0/src/dev10x/skills/audit/extract_session.py +237 -0
  63. dev10x-0.64.0/src/dev10x/skills/audit/instruction_budget.py +246 -0
  64. dev10x-0.64.0/src/dev10x/skills/database/__init__.py +0 -0
  65. dev10x-0.64.0/src/dev10x/skills/evidence/__init__.py +0 -0
  66. dev10x-0.64.0/src/dev10x/skills/monitor/__init__.py +0 -0
  67. dev10x-0.64.0/src/dev10x/skills/monitor/ci_check_status.py +261 -0
  68. dev10x-0.64.0/src/dev10x/skills/monitor/pr_notify.py +496 -0
  69. dev10x-0.64.0/src/dev10x/skills/notifications/__init__.py +0 -0
  70. dev10x-0.64.0/src/dev10x/skills/notifications/slack_review_request.py +259 -0
  71. dev10x-0.64.0/src/dev10x/skills/permission/__init__.py +0 -0
  72. dev10x-0.64.0/src/dev10x/skills/permission/backup.py +57 -0
  73. dev10x-0.64.0/src/dev10x/skills/permission/clean_project_files.py +472 -0
  74. dev10x-0.64.0/src/dev10x/skills/permission/enumerate_mcp.py +229 -0
  75. dev10x-0.64.0/src/dev10x/skills/permission/file_lock.py +44 -0
  76. dev10x-0.64.0/src/dev10x/skills/permission/merge_worktree_permissions.py +205 -0
  77. dev10x-0.64.0/src/dev10x/skills/permission/update_paths.py +598 -0
  78. dev10x-0.64.0/src/dev10x/skills/release/__init__.py +0 -0
  79. dev10x-0.64.0/src/dev10x/skills/release/collect_prs.py +415 -0
  80. dev10x-0.64.0/src/dev10x/validators/__init__.py +52 -0
  81. dev10x-0.64.0/src/dev10x/validators/base.py +38 -0
  82. dev10x-0.64.0/src/dev10x/validators/command_substitution.py +45 -0
  83. dev10x-0.64.0/src/dev10x/validators/commit_jtbd.py +200 -0
  84. dev10x-0.64.0/src/dev10x/validators/execution_safety.py +135 -0
  85. dev10x-0.64.0/src/dev10x/validators/pr_base.py +67 -0
  86. dev10x-0.64.0/src/dev10x/validators/prefix_friction.py +355 -0
  87. dev10x-0.64.0/src/dev10x/validators/safe_subshell.py +130 -0
  88. dev10x-0.64.0/src/dev10x/validators/skill_redirect.py +193 -0
  89. dev10x-0.64.0/src/dev10x/validators/sql_safety.py +252 -0
  90. dev10x-0.64.0/tests/test_cli.py +87 -0
  91. dev10x-0.64.0/tests/test_integration.py +398 -0
  92. dev10x-0.64.0/tests/test_script_loadability.py +155 -0
dev10x-0.64.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Janusz Skonieczny
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.
dev10x-0.64.0/PKG-INFO ADDED
@@ -0,0 +1,322 @@
1
+ Metadata-Version: 2.4
2
+ Name: Dev10x
3
+ Version: 0.64.0
4
+ Summary: Claude Code plugin providing reusable skills, hooks, and commands
5
+ Author: Janusz Skonieczny
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 Janusz Skonieczny
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Project-URL: Homepage, https://dev10x.guru
29
+ Project-URL: Repository, https://github.com/Dev10x-Guru/dev10x-claude
30
+ Project-URL: Issues, https://github.com/Dev10x-Guru/dev10x-claude/issues
31
+ Project-URL: Changelog, https://github.com/Dev10x-Guru/dev10x-claude/blob/main/CHANGELOG.md
32
+ Keywords: claude,claude-code,plugin,ai,developer-tools
33
+ Classifier: Development Status :: 4 - Beta
34
+ Classifier: Environment :: Console
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: Operating System :: OS Independent
37
+ Classifier: Programming Language :: Python :: 3
38
+ Classifier: Programming Language :: Python :: 3.12
39
+ Classifier: Topic :: Software Development
40
+ Classifier: Topic :: Software Development :: Build Tools
41
+ Requires-Python: >=3.12
42
+ Description-Content-Type: text/markdown
43
+ License-File: LICENSE
44
+ Requires-Dist: click>=8.0
45
+ Requires-Dist: msgpack>=1.0
46
+ Requires-Dist: pyyaml>=6.0
47
+ Provides-Extra: dev
48
+ Requires-Dist: factory-boy>=3.3; extra == "dev"
49
+ Requires-Dist: faker>=33.0; extra == "dev"
50
+ Requires-Dist: pytest>=8.0; extra == "dev"
51
+ Requires-Dist: pytest-asyncio>=0.24; extra == "dev"
52
+ Requires-Dist: pytest-benchmark>=5.0; extra == "dev"
53
+ Requires-Dist: pytest-cov>=6.0; extra == "dev"
54
+ Requires-Dist: mcp>=1.0; extra == "dev"
55
+ Requires-Dist: ruff>=0.9; extra == "dev"
56
+ Dynamic: license-file
57
+
58
+ <p align="center">
59
+ <a href="https://github.com/Dev10x-Guru/dev10x-claude/releases"><img src="https://img.shields.io/github/v/release/Dev10x-Guru/dev10x-claude?style=for-the-badge&color=blue" alt="GitHub Release"></a>
60
+ <img src="https://img.shields.io/badge/skills-69-green?style=for-the-badge" alt="69 Skills">
61
+ <img src="https://img.shields.io/badge/agents-21-purple?style=for-the-badge" alt="21 Agents">
62
+ <img src="https://img.shields.io/badge/hooks-6-orange?style=for-the-badge" alt="6 Hooks">
63
+ <a href="https://github.com/Dev10x-Guru/dev10x-claude/blob/main/LICENSE"><img src="https://img.shields.io/github/license/Dev10x-Guru/dev10x-claude?style=for-the-badge&color=green" alt="License"></a>
64
+ </p>
65
+
66
+ <p align="center">
67
+ <a href="https://github.com/Dev10x-Guru/dev10x-claude/stargazers"><img src="https://img.shields.io/github/stars/Dev10x-Guru/dev10x-claude?style=flat-square&logo=github" alt="GitHub stars"></a>
68
+ <img src="https://img.shields.io/badge/clones-20k+-blue?style=flat-square" alt="GitHub clones">
69
+ <a href="https://github.com/Dev10x-Guru/dev10x-claude/issues"><img src="https://img.shields.io/github/issues/Dev10x-Guru/dev10x-claude?style=flat-square" alt="GitHub issues"></a>
70
+ <img src="https://img.shields.io/badge/python-3.11+-yellow?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
71
+ </p>
72
+
73
+ <p align="center">
74
+ <a href="https://dev10x.guru">
75
+ <img src="https://dev10x.guru/og-image.png" alt="Dev10x — Stop babysitting your AI. Start supervising." width="800">
76
+ </a>
77
+ </p>
78
+
79
+ <p align="center">
80
+ <a href="https://dev10x.guru">Dev10x.guru</a> | <a href="https://www.skool.com/Dev10x-1892/about">Join Community</a>
81
+ </p>
82
+
83
+ ---
84
+
85
+ # Dev10x Claude Plugin
86
+
87
+ Stop babysitting your AI. Start supervising it.
88
+
89
+ ---
90
+
91
+ A Claude Code plugin that gives your AI pre-approved workflows,
92
+ self-correcting guardrails, and a complete scope-to-merge pipeline —
93
+ so you can supervise in 5-minute windows instead of hovering over
94
+ every command.
95
+
96
+ [![asciicast](https://asciinema.org/a/vAEDMseToIBk35wo.svg)](https://asciinema.org/a/vAEDMseToIBk35wo)
97
+
98
+ ## The problem with AI coding assistants
99
+
100
+ **Permission friction kills autonomy.** Every ad-hoc bash command
101
+ triggers a permission prompt. Every prompt pulls you back to the
102
+ terminal. Your AI can write code, but it can't ship a commit
103
+ without asking you 15 times.
104
+
105
+ **Progress is invisible.** You walk away for 10 minutes and come
106
+ back to a wall of terminal output. Or a stalled session waiting
107
+ for approval. No way to tell at a glance if things are on track.
108
+
109
+ **Attention doesn't batch.** You want to give 5 minutes of
110
+ direction, check in during coffee, and move on. Instead you're
111
+ hovering — approving every shell command, every file write, every
112
+ git operation.
113
+
114
+ ## How Dev10x solves this
115
+
116
+ ### Pre-approved workflows, not ad-hoc scripts
117
+
118
+ 67 skills encapsulate complete dev workflows as slash commands.
119
+ `/commit` handles gitmoji, ticket reference, and benefit-focused
120
+ title — all through pre-approved tool calls that never trigger
121
+ permission prompts.
122
+
123
+ When Claude uses `/Dev10x:gh-pr-create` instead of raw `gh` commands, every
124
+ step matches an allow rule. Zero interruptions.
125
+
126
+ ### Guardrails that teach, not just block
127
+
128
+ 14 hooks across 5 lifecycle events intercept dangerous patterns
129
+ *before* they execute — and redirect the AI toward the approved
130
+ path:
131
+
132
+ - **`validate-bash-command`** catches `&&` chaining, inline
133
+ `python3 -c`, and other patterns that break allow rules →
134
+ teaches separate calls and `uv run --script`
135
+ - **`validate-edit-write`** blocks `.env` file creation and
136
+ enforces safe file editing patterns
137
+ - **`ruff-format-python`** auto-formats Python files after every
138
+ Edit/Write — no manual formatting step needed
139
+ - **`task-plan-sync`** persists task state to survive context
140
+ compaction across long sessions
141
+
142
+ The hooks carry educational messages. The AI learns from each
143
+ block. By mid-session, it stops triggering them entirely.
144
+
145
+ ### Orchestration that finishes what it starts
146
+
147
+ Long AI sessions drift. The agent forgets the plan, skips steps,
148
+ uses raw CLI commands instead of skill wrappers, and produces PRs
149
+ missing ticket links, Job Stories, or CI verification. You come
150
+ back to a branch that *looks* done but isn't merge-worthy.
151
+
152
+ [`Dev10x:work-on`](skills/work-on/SKILL.md) solves this with a
153
+ four-phase orchestrator — parse inputs, gather context in
154
+ parallel, build a supervisor-approved plan from a YAML playbook,
155
+ then execute with enforced skill routing:
156
+
157
+ - **Playbook-driven plans** — every work type (feature, bugfix,
158
+ PR continuation, investigation) has a default play with ordered
159
+ steps. Override per-project via YAML without touching plugin
160
+ code.
161
+ - **Skill routing enforcement** — a hard-wired table maps every
162
+ shipping action (commit, push, PR, CI monitor, groom) to its
163
+ skill wrapper. The agent cannot fall back to raw `git commit`
164
+ or `gh pr create` — the table survives context compaction.
165
+ - **Acceptance verification** — the last step in every plan
166
+ delegates to a structured verification skill that checks CI
167
+ status, PR state, and working copy before declaring done.
168
+ - **Pause and resume** — walk away mid-session and come back
169
+ later. Task state persists through context compaction, and
170
+ deferred work is routed to PR bookmarks or project TODOs.
171
+
172
+ [`Dev10x:fanout`](skills/fanout/SKILL.md) extends this to
173
+ multiple issues in parallel — each issue gets the **full
174
+ playbook** (branch → implement → test → review → PR → CI →
175
+ merge), not a collapsed shortcut. Issues run in isolated
176
+ worktrees to avoid merge conflicts, with dependency ordering
177
+ so blocking work lands first.
178
+
179
+ The result: you point at a ticket, walk away, and come back to
180
+ a groomed branch with atomic commits, a Job Story PR, passing
181
+ CI, and a clean review — not a half-finished session that needs
182
+ another hour of hand-holding.
183
+
184
+ ### Planning that spans milestones
185
+
186
+ Single-ticket features are straightforward. Multi-milestone
187
+ projects — the ones that span bounded contexts, require
188
+ migration sequencing, and involve three teams — are where AI
189
+ sessions usually produce shallow plans that miss dependencies.
190
+
191
+ [`Dev10x:project-scope`](skills/project-scope/SKILL.md) turns a
192
+ parent ticket or free-text description into a structured project
193
+ with milestones, blocking relationships, and tracker integration
194
+ (Linear, JIRA, or GitHub Issues). Each child ticket gets
195
+ acceptance criteria, story point estimates, and clear dependency
196
+ links so future sessions know what to build next.
197
+
198
+ [`Dev10x:ticket-scope`](skills/ticket-scope/SKILL.md) goes
199
+ deeper on individual tickets — technical research, architecture
200
+ design, component identification, and implementation strategy.
201
+ The output is a scoping document that replaces ad-hoc
202
+ implementation decisions with structured planning before code is
203
+ written.
204
+
205
+ [`Dev10x:ddd`](skills/ddd/SKILL.md) supports the earliest phase:
206
+ domain exploration via Event Storming workshops. When a feature
207
+ spans multiple bounded contexts and the right decomposition isn't
208
+ obvious, the skill guides structured discovery of domain events,
209
+ aggregates, and context boundaries — producing models that inform
210
+ how tickets are split and sequenced.
211
+
212
+ Together, these skills create a planning chain:
213
+
214
+ ```
215
+ Domain exploration (ddd) → Project decomposition (project-scope)
216
+ → Ticket scoping (ticket-scope) → Implementation (work-on)
217
+ ```
218
+
219
+ Each step produces artifacts (models, tickets, scoping docs) that
220
+ persist across sessions, so the AI picks up context instead of
221
+ starting from scratch every time.
222
+
223
+ ### A complete scope-to-merge pipeline
224
+
225
+ Every step produces a precise, artifact-quality message — readable
226
+ by the next agent in the chain or a human reviewer glancing at
227
+ their phone:
228
+
229
+ | Step | Skill | Output |
230
+ |------|-------|--------|
231
+ | Scope | [`Dev10x:ticket-scope`](skills/ticket-scope/SKILL.md) | Architecture research, ticket update |
232
+ | Branch | [`Dev10x:work-on`](skills/work-on/SKILL.md) | Named branch, gathered context |
233
+ | Commit | [`Dev10x:git-commit`](skills/git-commit/SKILL.md) | Atomic commits with benefit-focused titles |
234
+ | Groom | [`Dev10x:git-groom`](skills/git-groom/SKILL.md) | Clean history, no fixup commits |
235
+ | PR | [`Dev10x:gh-pr-create`](skills/gh-pr-create/SKILL.md) | Job Story description, ticket links |
236
+ | Monitor | [`Dev10x:gh-pr-monitor`](skills/gh-pr-monitor/SKILL.md) | Background CI + review watch |
237
+ | Respond | [`Dev10x:gh-pr-respond`](skills/gh-pr-respond/SKILL.md) | Batched review responses, minimal noise |
238
+ | Review | [`Dev10x:gh-pr-review`](skills/gh-pr-review/SKILL.md) | Domain-routed review across 5 agents |
239
+
240
+ No step produces wall-of-text. Each output is sized for a Slack
241
+ preview, a PR comment, or a task list glance.
242
+
243
+ ### Learning loops that calibrate to you
244
+
245
+ Code review findings, commit conventions, and PR feedback flow
246
+ back into CLAUDE.md rules and session memory. The more you
247
+ course-correct, the less you need to.
248
+
249
+ After a few sessions, the AI produces commits, PR descriptions,
250
+ and code that look like *you* wrote them — because it learned your
251
+ preferences, not generic defaults.
252
+
253
+ ## Supervise, don't babysit
254
+
255
+ The plugin is designed around batched attention windows:
256
+
257
+ 1. **Scope** — point at a ticket, let the AI research and plan
258
+ 2. **Walk away** — skills and hooks keep the pipeline moving
259
+ 3. **Check in** — task list shows where the session stands
260
+ 4. **Course-correct** — give 2 minutes of guidance, walk away again
261
+ 5. **Ship** — come back to a groomed branch, clean PR, ready for
262
+ review
263
+
264
+ When you pop in during a coffee break, you see a task list — not
265
+ a wall of terminal output. Each artifact (commit message, PR body,
266
+ review comment) is concise enough to evaluate in seconds.
267
+
268
+ ## Skill families
269
+
270
+ | Family | Skills | What it automates |
271
+ |--------|--------|-------------------|
272
+ | **Git** | [`git-commit`](skills/git-commit/SKILL.md), [`git-commit-split`](skills/git-commit-split/SKILL.md), [`git-fixup`](skills/git-fixup/SKILL.md), [`git-groom`](skills/git-groom/SKILL.md), [`git-promote`](skills/git-promote/SKILL.md), [`git-worktree`](skills/git-worktree/SKILL.md), [`git`](skills/git/SKILL.md), [`git-alias-setup`](skills/git-alias-setup/SKILL.md), [`release-notes`](skills/release-notes/SKILL.md) | Atomic commits, clean history, workspace isolation, release notes |
273
+ | **PR** | [`gh-pr-create`](skills/gh-pr-create/SKILL.md), [`gh-pr-review`](skills/gh-pr-review/SKILL.md), [`gh-pr-respond`](skills/gh-pr-respond/SKILL.md), [`gh-pr-monitor`](skills/gh-pr-monitor/SKILL.md), [`gh-pr-triage`](skills/gh-pr-triage/SKILL.md), [`gh-pr-fixup`](skills/gh-pr-fixup/SKILL.md), [`gh-pr-request-review`](skills/gh-pr-request-review/SKILL.md), [`gh-pr-bookmark`](skills/gh-pr-bookmark/SKILL.md), [`gh-pr-doctor`](skills/gh-pr-doctor/SKILL.md), [`gh-pr-merge`](skills/gh-pr-merge/SKILL.md), [`gh-context`](skills/gh-context/SKILL.md), [`request-review`](skills/request-review/SKILL.md), [`review`](skills/review/SKILL.md), [`review-fix`](skills/review-fix/SKILL.md) | Full PR lifecycle, domain-routed review, self-review |
274
+ | **Tickets** | [`ticket-create`](skills/ticket-create/SKILL.md), [`ticket-branch`](skills/ticket-branch/SKILL.md), [`ticket-scope`](skills/ticket-scope/SKILL.md), [`ticket-jtbd`](skills/ticket-jtbd/SKILL.md), [`work-on`](skills/work-on/SKILL.md), [`linear`](skills/linear/SKILL.md), [`project-scope`](skills/project-scope/SKILL.md), [`investigate`](skills/investigate/SKILL.md) | Issue tracker integration, ticket scoping, bug investigation |
275
+ | **Park** | [`park`](skills/park/SKILL.md), [`park-todo`](skills/park-todo/SKILL.md), [`park-remind`](skills/park-remind/SKILL.md), [`park-discover`](skills/park-discover/SKILL.md) | Deferred work parking |
276
+ | **Scoping** | [`scope`](skills/scope/SKILL.md), [`jtbd`](skills/jtbd/SKILL.md), [`adr`](skills/adr/SKILL.md), [`adr-evaluate`](skills/adr-evaluate/SKILL.md), [`ddd`](skills/ddd/SKILL.md) | Architecture decisions, Job Story format, DDD workshops |
277
+ | **QA** | [`qa-scope`](skills/qa-scope/SKILL.md), [`qa-self`](skills/qa-self/SKILL.md), [`playwright`](skills/playwright/SKILL.md), [`py-test`](skills/py-test/SKILL.md) | Test planning, self-review, browser testing, pytest runner |
278
+ | **Session** | [`session-tasks`](skills/session-tasks/SKILL.md), [`session-wrap-up`](skills/session-wrap-up/SKILL.md), [`plan-sync`](skills/plan-sync/SKILL.md), [`fanout`](skills/fanout/SKILL.md), [`verify-acc-dod`](skills/verify-acc-dod/SKILL.md) | In-session work tracking, parallel execution, acceptance verification |
279
+ | **DB** | [`db`](skills/db/SKILL.md), [`db-psql`](skills/db-psql/SKILL.md) | Safe database query planning and execution |
280
+ | **Tooling** | [`py-uv`](skills/py-uv/SKILL.md), [`slack`](skills/slack/SKILL.md), [`slack-review-request`](skills/slack-review-request/SKILL.md), [`slack-setup`](skills/slack-setup/SKILL.md), [`ask`](skills/ask/SKILL.md) | Python packaging, Slack notifications, interactive prompts |
281
+ | **Meta** | [`skill-create`](skills/skill-create/SKILL.md), [`skill-audit`](skills/skill-audit/SKILL.md), [`skill-index`](skills/skill-index/SKILL.md), [`audit-report`](skills/audit-report/SKILL.md), [`playbook`](skills/playbook/SKILL.md), [`skill-reinforcement`](skills/skill-reinforcement/SKILL.md), [`onboarding`](skills/onboarding/SKILL.md) | Create, audit, discover, and learn skills |
282
+ | **Maintenance** | [`memory-maintenance`](skills/memory-maintenance/SKILL.md), [`upgrade-cleanup`](skills/upgrade-cleanup/SKILL.md), [`playbook-maintenance`](skills/playbook-maintenance/SKILL.md), [`context-audit`](skills/context-audit/SKILL.md) | Memory, permission, playbook, and context hygiene |
283
+
284
+ All skills use the `Dev10x:` prefix — type `/Dev10x:git-commit` in the Claude
285
+ Code CLI to run it. Run `/Dev10x:skill-index` for the full reference.
286
+
287
+ ## Installation
288
+
289
+ ```
290
+ /plugin marketplace add Dev10x-Guru/dev10x-claude
291
+ /plugin install Dev10x@Dev10x-Guru
292
+ ```
293
+
294
+ [Full installation guide →](docs/installation.md) — prerequisites,
295
+ dependencies, manual clone, develop branch, and verification.
296
+
297
+ ## Why Dev10x?
298
+
299
+ [Why Dev10x →](docs/why-dev10x.md) — who it's for, what problems
300
+ it solves, and how it compares to alternatives.
301
+
302
+ ## Community
303
+
304
+ The [Dev10x community on Skool](https://www.skool.com/Dev10x-1892)
305
+ is where plugin users get assistance, request features, and share
306
+ workflows. If you already have access to this repository, you do not
307
+ need to join Skool — it is a support and discussion hub, not a
308
+ gatekeeper for repo access.
309
+
310
+ ## Development
311
+
312
+ [Development guide →](docs/development.md)
313
+
314
+ ## Star History
315
+
316
+ <a href="https://www.star-history.com/?repos=Dev10x-Guru%2Fdev10x-claude&type=date&legend=bottom-right">
317
+ <picture>
318
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=Dev10x-Guru/dev10x-claude&type=date&theme=dark&legend=bottom-right" />
319
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=Dev10x-Guru/dev10x-claude&type=date&legend=bottom-right" />
320
+ <img alt="Star History Chart" src="https://api.star-history.com/image?repos=Dev10x-Guru/dev10x-claude&type=date&legend=bottom-right" />
321
+ </picture>
322
+ </a>
@@ -0,0 +1,265 @@
1
+ <p align="center">
2
+ <a href="https://github.com/Dev10x-Guru/dev10x-claude/releases"><img src="https://img.shields.io/github/v/release/Dev10x-Guru/dev10x-claude?style=for-the-badge&color=blue" alt="GitHub Release"></a>
3
+ <img src="https://img.shields.io/badge/skills-69-green?style=for-the-badge" alt="69 Skills">
4
+ <img src="https://img.shields.io/badge/agents-21-purple?style=for-the-badge" alt="21 Agents">
5
+ <img src="https://img.shields.io/badge/hooks-6-orange?style=for-the-badge" alt="6 Hooks">
6
+ <a href="https://github.com/Dev10x-Guru/dev10x-claude/blob/main/LICENSE"><img src="https://img.shields.io/github/license/Dev10x-Guru/dev10x-claude?style=for-the-badge&color=green" alt="License"></a>
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://github.com/Dev10x-Guru/dev10x-claude/stargazers"><img src="https://img.shields.io/github/stars/Dev10x-Guru/dev10x-claude?style=flat-square&logo=github" alt="GitHub stars"></a>
11
+ <img src="https://img.shields.io/badge/clones-20k+-blue?style=flat-square" alt="GitHub clones">
12
+ <a href="https://github.com/Dev10x-Guru/dev10x-claude/issues"><img src="https://img.shields.io/github/issues/Dev10x-Guru/dev10x-claude?style=flat-square" alt="GitHub issues"></a>
13
+ <img src="https://img.shields.io/badge/python-3.11+-yellow?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
14
+ </p>
15
+
16
+ <p align="center">
17
+ <a href="https://dev10x.guru">
18
+ <img src="https://dev10x.guru/og-image.png" alt="Dev10x — Stop babysitting your AI. Start supervising." width="800">
19
+ </a>
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="https://dev10x.guru">Dev10x.guru</a> | <a href="https://www.skool.com/Dev10x-1892/about">Join Community</a>
24
+ </p>
25
+
26
+ ---
27
+
28
+ # Dev10x Claude Plugin
29
+
30
+ Stop babysitting your AI. Start supervising it.
31
+
32
+ ---
33
+
34
+ A Claude Code plugin that gives your AI pre-approved workflows,
35
+ self-correcting guardrails, and a complete scope-to-merge pipeline —
36
+ so you can supervise in 5-minute windows instead of hovering over
37
+ every command.
38
+
39
+ [![asciicast](https://asciinema.org/a/vAEDMseToIBk35wo.svg)](https://asciinema.org/a/vAEDMseToIBk35wo)
40
+
41
+ ## The problem with AI coding assistants
42
+
43
+ **Permission friction kills autonomy.** Every ad-hoc bash command
44
+ triggers a permission prompt. Every prompt pulls you back to the
45
+ terminal. Your AI can write code, but it can't ship a commit
46
+ without asking you 15 times.
47
+
48
+ **Progress is invisible.** You walk away for 10 minutes and come
49
+ back to a wall of terminal output. Or a stalled session waiting
50
+ for approval. No way to tell at a glance if things are on track.
51
+
52
+ **Attention doesn't batch.** You want to give 5 minutes of
53
+ direction, check in during coffee, and move on. Instead you're
54
+ hovering — approving every shell command, every file write, every
55
+ git operation.
56
+
57
+ ## How Dev10x solves this
58
+
59
+ ### Pre-approved workflows, not ad-hoc scripts
60
+
61
+ 67 skills encapsulate complete dev workflows as slash commands.
62
+ `/commit` handles gitmoji, ticket reference, and benefit-focused
63
+ title — all through pre-approved tool calls that never trigger
64
+ permission prompts.
65
+
66
+ When Claude uses `/Dev10x:gh-pr-create` instead of raw `gh` commands, every
67
+ step matches an allow rule. Zero interruptions.
68
+
69
+ ### Guardrails that teach, not just block
70
+
71
+ 14 hooks across 5 lifecycle events intercept dangerous patterns
72
+ *before* they execute — and redirect the AI toward the approved
73
+ path:
74
+
75
+ - **`validate-bash-command`** catches `&&` chaining, inline
76
+ `python3 -c`, and other patterns that break allow rules →
77
+ teaches separate calls and `uv run --script`
78
+ - **`validate-edit-write`** blocks `.env` file creation and
79
+ enforces safe file editing patterns
80
+ - **`ruff-format-python`** auto-formats Python files after every
81
+ Edit/Write — no manual formatting step needed
82
+ - **`task-plan-sync`** persists task state to survive context
83
+ compaction across long sessions
84
+
85
+ The hooks carry educational messages. The AI learns from each
86
+ block. By mid-session, it stops triggering them entirely.
87
+
88
+ ### Orchestration that finishes what it starts
89
+
90
+ Long AI sessions drift. The agent forgets the plan, skips steps,
91
+ uses raw CLI commands instead of skill wrappers, and produces PRs
92
+ missing ticket links, Job Stories, or CI verification. You come
93
+ back to a branch that *looks* done but isn't merge-worthy.
94
+
95
+ [`Dev10x:work-on`](skills/work-on/SKILL.md) solves this with a
96
+ four-phase orchestrator — parse inputs, gather context in
97
+ parallel, build a supervisor-approved plan from a YAML playbook,
98
+ then execute with enforced skill routing:
99
+
100
+ - **Playbook-driven plans** — every work type (feature, bugfix,
101
+ PR continuation, investigation) has a default play with ordered
102
+ steps. Override per-project via YAML without touching plugin
103
+ code.
104
+ - **Skill routing enforcement** — a hard-wired table maps every
105
+ shipping action (commit, push, PR, CI monitor, groom) to its
106
+ skill wrapper. The agent cannot fall back to raw `git commit`
107
+ or `gh pr create` — the table survives context compaction.
108
+ - **Acceptance verification** — the last step in every plan
109
+ delegates to a structured verification skill that checks CI
110
+ status, PR state, and working copy before declaring done.
111
+ - **Pause and resume** — walk away mid-session and come back
112
+ later. Task state persists through context compaction, and
113
+ deferred work is routed to PR bookmarks or project TODOs.
114
+
115
+ [`Dev10x:fanout`](skills/fanout/SKILL.md) extends this to
116
+ multiple issues in parallel — each issue gets the **full
117
+ playbook** (branch → implement → test → review → PR → CI →
118
+ merge), not a collapsed shortcut. Issues run in isolated
119
+ worktrees to avoid merge conflicts, with dependency ordering
120
+ so blocking work lands first.
121
+
122
+ The result: you point at a ticket, walk away, and come back to
123
+ a groomed branch with atomic commits, a Job Story PR, passing
124
+ CI, and a clean review — not a half-finished session that needs
125
+ another hour of hand-holding.
126
+
127
+ ### Planning that spans milestones
128
+
129
+ Single-ticket features are straightforward. Multi-milestone
130
+ projects — the ones that span bounded contexts, require
131
+ migration sequencing, and involve three teams — are where AI
132
+ sessions usually produce shallow plans that miss dependencies.
133
+
134
+ [`Dev10x:project-scope`](skills/project-scope/SKILL.md) turns a
135
+ parent ticket or free-text description into a structured project
136
+ with milestones, blocking relationships, and tracker integration
137
+ (Linear, JIRA, or GitHub Issues). Each child ticket gets
138
+ acceptance criteria, story point estimates, and clear dependency
139
+ links so future sessions know what to build next.
140
+
141
+ [`Dev10x:ticket-scope`](skills/ticket-scope/SKILL.md) goes
142
+ deeper on individual tickets — technical research, architecture
143
+ design, component identification, and implementation strategy.
144
+ The output is a scoping document that replaces ad-hoc
145
+ implementation decisions with structured planning before code is
146
+ written.
147
+
148
+ [`Dev10x:ddd`](skills/ddd/SKILL.md) supports the earliest phase:
149
+ domain exploration via Event Storming workshops. When a feature
150
+ spans multiple bounded contexts and the right decomposition isn't
151
+ obvious, the skill guides structured discovery of domain events,
152
+ aggregates, and context boundaries — producing models that inform
153
+ how tickets are split and sequenced.
154
+
155
+ Together, these skills create a planning chain:
156
+
157
+ ```
158
+ Domain exploration (ddd) → Project decomposition (project-scope)
159
+ → Ticket scoping (ticket-scope) → Implementation (work-on)
160
+ ```
161
+
162
+ Each step produces artifacts (models, tickets, scoping docs) that
163
+ persist across sessions, so the AI picks up context instead of
164
+ starting from scratch every time.
165
+
166
+ ### A complete scope-to-merge pipeline
167
+
168
+ Every step produces a precise, artifact-quality message — readable
169
+ by the next agent in the chain or a human reviewer glancing at
170
+ their phone:
171
+
172
+ | Step | Skill | Output |
173
+ |------|-------|--------|
174
+ | Scope | [`Dev10x:ticket-scope`](skills/ticket-scope/SKILL.md) | Architecture research, ticket update |
175
+ | Branch | [`Dev10x:work-on`](skills/work-on/SKILL.md) | Named branch, gathered context |
176
+ | Commit | [`Dev10x:git-commit`](skills/git-commit/SKILL.md) | Atomic commits with benefit-focused titles |
177
+ | Groom | [`Dev10x:git-groom`](skills/git-groom/SKILL.md) | Clean history, no fixup commits |
178
+ | PR | [`Dev10x:gh-pr-create`](skills/gh-pr-create/SKILL.md) | Job Story description, ticket links |
179
+ | Monitor | [`Dev10x:gh-pr-monitor`](skills/gh-pr-monitor/SKILL.md) | Background CI + review watch |
180
+ | Respond | [`Dev10x:gh-pr-respond`](skills/gh-pr-respond/SKILL.md) | Batched review responses, minimal noise |
181
+ | Review | [`Dev10x:gh-pr-review`](skills/gh-pr-review/SKILL.md) | Domain-routed review across 5 agents |
182
+
183
+ No step produces wall-of-text. Each output is sized for a Slack
184
+ preview, a PR comment, or a task list glance.
185
+
186
+ ### Learning loops that calibrate to you
187
+
188
+ Code review findings, commit conventions, and PR feedback flow
189
+ back into CLAUDE.md rules and session memory. The more you
190
+ course-correct, the less you need to.
191
+
192
+ After a few sessions, the AI produces commits, PR descriptions,
193
+ and code that look like *you* wrote them — because it learned your
194
+ preferences, not generic defaults.
195
+
196
+ ## Supervise, don't babysit
197
+
198
+ The plugin is designed around batched attention windows:
199
+
200
+ 1. **Scope** — point at a ticket, let the AI research and plan
201
+ 2. **Walk away** — skills and hooks keep the pipeline moving
202
+ 3. **Check in** — task list shows where the session stands
203
+ 4. **Course-correct** — give 2 minutes of guidance, walk away again
204
+ 5. **Ship** — come back to a groomed branch, clean PR, ready for
205
+ review
206
+
207
+ When you pop in during a coffee break, you see a task list — not
208
+ a wall of terminal output. Each artifact (commit message, PR body,
209
+ review comment) is concise enough to evaluate in seconds.
210
+
211
+ ## Skill families
212
+
213
+ | Family | Skills | What it automates |
214
+ |--------|--------|-------------------|
215
+ | **Git** | [`git-commit`](skills/git-commit/SKILL.md), [`git-commit-split`](skills/git-commit-split/SKILL.md), [`git-fixup`](skills/git-fixup/SKILL.md), [`git-groom`](skills/git-groom/SKILL.md), [`git-promote`](skills/git-promote/SKILL.md), [`git-worktree`](skills/git-worktree/SKILL.md), [`git`](skills/git/SKILL.md), [`git-alias-setup`](skills/git-alias-setup/SKILL.md), [`release-notes`](skills/release-notes/SKILL.md) | Atomic commits, clean history, workspace isolation, release notes |
216
+ | **PR** | [`gh-pr-create`](skills/gh-pr-create/SKILL.md), [`gh-pr-review`](skills/gh-pr-review/SKILL.md), [`gh-pr-respond`](skills/gh-pr-respond/SKILL.md), [`gh-pr-monitor`](skills/gh-pr-monitor/SKILL.md), [`gh-pr-triage`](skills/gh-pr-triage/SKILL.md), [`gh-pr-fixup`](skills/gh-pr-fixup/SKILL.md), [`gh-pr-request-review`](skills/gh-pr-request-review/SKILL.md), [`gh-pr-bookmark`](skills/gh-pr-bookmark/SKILL.md), [`gh-pr-doctor`](skills/gh-pr-doctor/SKILL.md), [`gh-pr-merge`](skills/gh-pr-merge/SKILL.md), [`gh-context`](skills/gh-context/SKILL.md), [`request-review`](skills/request-review/SKILL.md), [`review`](skills/review/SKILL.md), [`review-fix`](skills/review-fix/SKILL.md) | Full PR lifecycle, domain-routed review, self-review |
217
+ | **Tickets** | [`ticket-create`](skills/ticket-create/SKILL.md), [`ticket-branch`](skills/ticket-branch/SKILL.md), [`ticket-scope`](skills/ticket-scope/SKILL.md), [`ticket-jtbd`](skills/ticket-jtbd/SKILL.md), [`work-on`](skills/work-on/SKILL.md), [`linear`](skills/linear/SKILL.md), [`project-scope`](skills/project-scope/SKILL.md), [`investigate`](skills/investigate/SKILL.md) | Issue tracker integration, ticket scoping, bug investigation |
218
+ | **Park** | [`park`](skills/park/SKILL.md), [`park-todo`](skills/park-todo/SKILL.md), [`park-remind`](skills/park-remind/SKILL.md), [`park-discover`](skills/park-discover/SKILL.md) | Deferred work parking |
219
+ | **Scoping** | [`scope`](skills/scope/SKILL.md), [`jtbd`](skills/jtbd/SKILL.md), [`adr`](skills/adr/SKILL.md), [`adr-evaluate`](skills/adr-evaluate/SKILL.md), [`ddd`](skills/ddd/SKILL.md) | Architecture decisions, Job Story format, DDD workshops |
220
+ | **QA** | [`qa-scope`](skills/qa-scope/SKILL.md), [`qa-self`](skills/qa-self/SKILL.md), [`playwright`](skills/playwright/SKILL.md), [`py-test`](skills/py-test/SKILL.md) | Test planning, self-review, browser testing, pytest runner |
221
+ | **Session** | [`session-tasks`](skills/session-tasks/SKILL.md), [`session-wrap-up`](skills/session-wrap-up/SKILL.md), [`plan-sync`](skills/plan-sync/SKILL.md), [`fanout`](skills/fanout/SKILL.md), [`verify-acc-dod`](skills/verify-acc-dod/SKILL.md) | In-session work tracking, parallel execution, acceptance verification |
222
+ | **DB** | [`db`](skills/db/SKILL.md), [`db-psql`](skills/db-psql/SKILL.md) | Safe database query planning and execution |
223
+ | **Tooling** | [`py-uv`](skills/py-uv/SKILL.md), [`slack`](skills/slack/SKILL.md), [`slack-review-request`](skills/slack-review-request/SKILL.md), [`slack-setup`](skills/slack-setup/SKILL.md), [`ask`](skills/ask/SKILL.md) | Python packaging, Slack notifications, interactive prompts |
224
+ | **Meta** | [`skill-create`](skills/skill-create/SKILL.md), [`skill-audit`](skills/skill-audit/SKILL.md), [`skill-index`](skills/skill-index/SKILL.md), [`audit-report`](skills/audit-report/SKILL.md), [`playbook`](skills/playbook/SKILL.md), [`skill-reinforcement`](skills/skill-reinforcement/SKILL.md), [`onboarding`](skills/onboarding/SKILL.md) | Create, audit, discover, and learn skills |
225
+ | **Maintenance** | [`memory-maintenance`](skills/memory-maintenance/SKILL.md), [`upgrade-cleanup`](skills/upgrade-cleanup/SKILL.md), [`playbook-maintenance`](skills/playbook-maintenance/SKILL.md), [`context-audit`](skills/context-audit/SKILL.md) | Memory, permission, playbook, and context hygiene |
226
+
227
+ All skills use the `Dev10x:` prefix — type `/Dev10x:git-commit` in the Claude
228
+ Code CLI to run it. Run `/Dev10x:skill-index` for the full reference.
229
+
230
+ ## Installation
231
+
232
+ ```
233
+ /plugin marketplace add Dev10x-Guru/dev10x-claude
234
+ /plugin install Dev10x@Dev10x-Guru
235
+ ```
236
+
237
+ [Full installation guide →](docs/installation.md) — prerequisites,
238
+ dependencies, manual clone, develop branch, and verification.
239
+
240
+ ## Why Dev10x?
241
+
242
+ [Why Dev10x →](docs/why-dev10x.md) — who it's for, what problems
243
+ it solves, and how it compares to alternatives.
244
+
245
+ ## Community
246
+
247
+ The [Dev10x community on Skool](https://www.skool.com/Dev10x-1892)
248
+ is where plugin users get assistance, request features, and share
249
+ workflows. If you already have access to this repository, you do not
250
+ need to join Skool — it is a support and discussion hub, not a
251
+ gatekeeper for repo access.
252
+
253
+ ## Development
254
+
255
+ [Development guide →](docs/development.md)
256
+
257
+ ## Star History
258
+
259
+ <a href="https://www.star-history.com/?repos=Dev10x-Guru%2Fdev10x-claude&type=date&legend=bottom-right">
260
+ <picture>
261
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=Dev10x-Guru/dev10x-claude&type=date&theme=dark&legend=bottom-right" />
262
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=Dev10x-Guru/dev10x-claude&type=date&legend=bottom-right" />
263
+ <img alt="Star History Chart" src="https://api.star-history.com/image?repos=Dev10x-Guru/dev10x-claude&type=date&legend=bottom-right" />
264
+ </picture>
265
+ </a>