@maccesar/titools 2.4.2 → 2.5.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.
package/README.md CHANGED
@@ -1,293 +1,713 @@
1
- <p align="center">
2
- <img src="https://codigomovil.mx/images/logotipo-purgetss-gris.svg" height="230" width="230" alt="PurgeCSS logo"/>
3
- </p>
1
+ # TiTools - Titanium CLI for AI coding assistants
4
2
 
5
3
  <div align="center">
6
4
 
7
- ![npm](https://img.shields.io/npm/dm/purgetss)
8
- ![npm](https://img.shields.io/npm/v/purgetss)
9
- ![NPM](https://img.shields.io/npm/l/purgetss)
5
+ ![npm](https://img.shields.io/npm/dm/@maccesar%2Ftitools)
6
+ ![npm](https://img.shields.io/npm/v/@maccesar%2Ftitools)
7
+ ![NPM](https://img.shields.io/npm/l/@maccesar%2Ftitools)
10
8
 
11
9
  </div>
12
10
 
13
- **PurgeTSS** is a toolkit for building mobile apps with the [Titanium framework](https://titaniumsdk.com). It provides utility classes, icon font support, an Animation module, a grid system, and the `shades` command for generating custom colors.
11
+ TiTools is a CLI that installs Titanium SDK skills and a knowledge index for AI coding assistants. One command installs 8 skills, a research agent, and 100+ reference files for Titanium SDK, Alloy MVC, and PurgeTSS.
14
12
 
15
- ---
13
+ The reference files are maintained against official documentation whenever an official source exists, so the assistant can retrieve current framework behavior instead of guessing from generic training data.
14
+
15
+ Without TiTools, assistants rely on general training data. That data can be outdated or too generic for Titanium work. With TiTools, the assistant can look up Alloy architecture, memory cleanup patterns, PurgeTSS utility classes, and platform-specific APIs.
16
16
 
17
- - 23,300+ utility classes for styling Titanium views
18
- - Parses XML files to generate a clean `app.tss` with only the classes your project uses
19
- - Customizable defaults via `config.cjs`, with JIT classes for arbitrary values
20
- - Icon font support: Font Awesome, Material Icons, Material Symbols, Framework7-Icons
21
- - `build-fonts` command generates `fonts.tss` with class definitions and fontFamily selectors
22
- - `shades` command generates color shades from any hex color
23
- - Animation module for 2D matrix animations on views or arrays of views
24
- - Grid system for aligning and distributing elements within views
17
+ Vercel's AGENTS.md evaluation reports a 100% pass rate for the knowledge index approach, compared to 53-79% using skills alone.
25
18
 
26
19
  ---
27
20
 
28
- ## Animation Module (`purgetss.ui.js`)
21
+ ## Quick setup
29
22
 
30
- Install with `purgetss module` (or `purgetss m`). This places `purgetss.ui.js` in your project's `lib` folder.
23
+ ```bash
24
+ # 1) Install the CLI
25
+ npm install -g @maccesar/titools
31
26
 
32
- ### Declaring an Animation object
27
+ # 2) Install skills globally
28
+ titools install
33
29
 
34
- ```xml
35
- <Animation id="myAnimation" module="purgetss.ui" class="opacity-0 duration-300 ease-in" />
30
+ # 3) Go to your Titanium project
31
+ cd /path/to/your/project
32
+
33
+ # 4) Sync the knowledge index into your project files
34
+ titools sync
35
+
36
+ # 5) Start your AI coding assistant
37
+ claude # or gemini, or codex
38
+
39
+ # 6) Ask away!
40
+ # "How should I structure a new app with login, signup, and a dashboard?"
41
+ # "My ListView with 500 items scrolls poorly on Android. How do I fix it?"
36
42
  ```
37
43
 
38
- You can use any position, size, color, opacity, or transformation class from `utilities.tss`.
44
+ What gets installed:
45
+ - All 8 titanium-related skills to `~/.agents/skills/`
46
+ - ti-pro agent for Claude Code
47
+ - Platform symlinks (Claude Code, Gemini CLI, Codex CLI)
48
+ - Knowledge index in your project's `AGENTS.md`/`CLAUDE.md`/`GEMINI.md`
49
+ - Claude Code SessionStart hook for auto-updates
39
50
 
40
- ### Available methods
51
+ Why NPM?
52
+ - Cross-platform (macOS, Linux, Windows)
53
+ - No sudo required
54
+ - Auto-updates via Claude Code hook (checks once per day)
41
55
 
42
- | Method | Description |
43
- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
44
- | `play(views, cb)` / `toggle(views, cb)` | Animate views from current state to the animation state. Toggles `open`/`close` on each call. |
45
- | `open(views, cb)` | Explicitly run the `open` state animation. |
46
- | `close(views, cb)` | Explicitly run the `close` state animation. |
47
- | `apply(views, cb)` | Apply properties instantly without animation. |
48
- | `draggable(views)` | Make a view or array of views draggable inside their parent. |
49
- | `undraggable(views)` | Remove draggable behavior and clean up all listeners. |
50
- | `detectCollisions(views, dragCB, dropCB)` | Enable collision detection on draggable views with hover and drop callbacks. |
51
- | `swap(view1, view2)` | Animate two views exchanging positions. Auto-normalizes position from margins/right/center via `view.rect`. Inherits `duration`, `delay`, `curve`; fallback: 200ms. |
52
- | `sequence(views, cb)` | Animate views one after another. Callback fires after the last view. |
53
- | `shake(view, intensity)` | Bidirectional shake animation for error feedback. Inherits `duration`, `delay`; fallback: 400ms. Default intensity: 10px. |
54
- | `pulse(view, count)` | Scale-up-and-back pulse animation. Scale from Animation object (default 1.2x). Count: number of pulses (default 1). |
55
- | `snapTo(view, targets)` | Snap a view to the nearest target by center distance. Auto-normalizes target position. Inherits `duration`, `delay`, `curve`; fallback: 200ms. |
56
- | `reorder(views, newOrder)` | Animate views to new positions based on index mapping. Auto-normalizes positions. Inherits `duration`, `delay`, `curve`; fallback: 200ms. |
57
- | `transition(views, layouts)` | Multi-view layout transitions using `Matrix2D.translate().rotate().scale()`. Layout properties: `translation`, `rotate`, `scale`, `zIndex`. Compatible with TiDesigner presets. Views without a layout entry fade out; returning views fade in. |
56
+ ---
58
57
 
59
- ### Callback event object
58
+ ## Compatible platforms
60
59
 
61
- All callbacks (`play`, `open`, `close`, `apply`) receive an enriched event object:
60
+ | Platform | Status | Installation Path |
61
+ | --------------------------------------------------------- | ---------------- | ------------------- |
62
+ | [Claude Code](https://claude.ai/claude-code) | Fully Compatible | `~/.claude/skills/` |
63
+ | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | Fully Compatible | `~/.gemini/skills/` |
64
+ | [Codex CLI](https://developers.openai.com/codex/cli/) | Fully Compatible | `~/.codex/skills/` |
62
65
 
63
- ```js
64
- {
65
- type: String, // event type ('complete' or 'applied')
66
- bubbles: Boolean,
67
- cancelBubble: Boolean,
68
- action: String, // 'play' or 'apply'
69
- state: String, // 'open' or 'close'
70
- id: String, // Animation object ID
71
- targetId: String, // ID of the animated view
72
- index: Number, // position in array (0-based)
73
- total: Number, // total views in array
74
- getTarget: Function // returns the animated view object
75
- }
76
- ```
77
-
78
- When animating an **array of views**, the callback is called once per view with the corresponding `index` and `total` values.
66
+ All three platforms use the Agent Skills open standard: a `SKILL.md` file with YAML frontmatter.
67
+
68
+ ---
69
+
70
+ ## Knowledge index
71
+
72
+ The knowledge index is a compressed documentation map that gets injected into your project's instruction files. It tells the AI where Titanium reference docs are, so it can pull accurate information from the installed references instead of relying on general training data.
73
+
74
+ ### Why it works
75
+
76
+ | Approach | Reported Pass Rate |
77
+ | ---------------- | ------------------ |
78
+ | No documentation | 53% |
79
+ | Skills only | 53-79% |
80
+ | Knowledge index | 100% |
81
+
82
+ Per Vercel's evaluation:
83
+ - No decision point: information is present without needing to invoke skills
84
+ - Consistent availability: available in every turn, not async-loaded
85
+ - No ordering issues: avoids "read docs first vs explore project first"
86
+
87
+ For details, see `AGENTS-VERCEL-RESEARCH.md`.
88
+
89
+ ### What gets generated
90
+
91
+ The `titools sync` command generates a block like this inside your project files:
79
92
 
80
- ```js
81
- $.myAnimation.play([$.card1, $.card2, $.card3], (e) => {
82
- console.log(`Animated ${e.index + 1} of ${e.total}`) // "Animated 1 of 3", etc.
83
- if (e.index === e.total - 1) {
84
- console.log('All done!')
85
- }
86
- })
93
+ ```
94
+ [Titanium SDK Docs Index]|root: ~/.agents/skills
95
+ |MANDATORY: Your training data for Titanium SDK, Alloy, and PurgeTSS is OUTDATED and INCOMPLETE. These reference files are the SINGLE SOURCE OF TRUTH. Prefer retrieval-led reasoning over pre-training-led reasoning. ALWAYS read the relevant files below BEFORE writing any code.
96
+ |ti-expert/references:{alloy-structure.md,anti-patterns.md,...}
97
+ |purgetss/references:{animation-system.md,class-index.md,...}
98
+ |ti-ui/references:{layouts-and-positioning.md,listviews-and-performance.md,...}
99
+ ...
87
100
  ```
88
101
 
89
- ### Multi-state animations
102
+ Note: The index is injected as direct content (no code blocks) so the model treats it as an active instruction, not illustrative text.
90
103
 
91
- Use `open`, `close`, and `complete` modifiers inside `animationProperties` to define different states:
104
+ File selection per assistant:
105
+ - Claude Code -> `CLAUDE.md`
106
+ - Gemini CLI -> `GEMINI.md`
107
+ - Codex CLI / others -> `AGENTS.md`
92
108
 
93
- ```xml
94
- <Animation id="fadeToggle" module="purgetss.ui" class="duration-300"
95
- animationProperties="{
96
- open: { opacity: 1 },
97
- close: { opacity: 0 }
98
- }"
99
- />
109
+ ### How skills and the knowledge index work together
110
+
111
+ The knowledge index provides always-available context (the documentation map). Skills provide specialized, on-demand expertise (the actual knowledge).
112
+
113
+ Together they work like this:
114
+
115
+ | Your Question | Knowledge Index Provides | Skills Activate |
116
+ | ------------------------------- | ------------------------------- | ----------------------------- |
117
+ | "Create a login screen" | Context about project structure | `ti-expert`, `ti-ui` |
118
+ | "Optimize ListView performance" | Points to docs location | `ti-ui` reads specific files |
119
+ | "Implement push notifications" | API reference paths | `ti-howtos` provides workflow |
120
+
121
+ You do not need to explicitly invoke skills. The AI detects when to use them based on your question.
122
+
123
+ ### Version notice
124
+
125
+ The knowledge index is based on the latest Titanium SDK documentation. If your project uses an older version, the command will warn you about potential API differences.
126
+
127
+ ---
128
+
129
+ ## Skills overview
130
+
131
+ | Skill | Purpose | Best For |
132
+ | ------------ | ------------------------------- | --------------------------------------- |
133
+ | alloy-guides | Alloy MVC reference | Models, Views, Controllers, Widgets |
134
+ | alloy-howtos | Alloy CLI and debugging | Project setup, CLI commands, errors |
135
+ | purgetss | Utility-first styling | UI styling and animations |
136
+ | ti-api | Complete API reference | Properties, methods, events, constants |
137
+ | ti-expert | Architecture and implementation | Starting point for most tasks |
138
+ | ti-guides | SDK fundamentals | Hyperloop, distribution, configuration |
139
+ | ti-howtos | Native feature integration | Location, Push, Media, Platform APIs |
140
+ | ti-ui | UI/UX patterns | Complex layouts, ListViews, platform UI |
141
+
142
+ Note: `ti-guides`, `ti-howtos`, `ti-ui`, `alloy-guides`, and `alloy-howtos` are based on official Titanium SDK and Alloy documentation. `purgetss` is opinionated in workflow and conventions, but its reference files are audited against the official PurgeTSS documentation for verifiable classes and behavior. `ti-expert` and `purgetss` reflect personal coding conventions (biased toward PurgeTSS).
143
+
144
+ ---
145
+
146
+ ## Agents (Claude Code only)
147
+
148
+ In addition to skills, this repository includes sub-agents for Claude Code. Sub-agents run in isolated contexts and are useful for research tasks that produce verbose output.
149
+
150
+ ### ti-pro
151
+
152
+ Deep-dive research specialist that preloads all 7 titanium-related skills.
153
+
154
+ | Aspect | Details |
155
+ | ---------------- | ------------------------------------------------- |
156
+ | Location | `~/.claude/agents/ti-pro.md` |
157
+ | Model | Sonnet (comprehensive analysis) |
158
+ | Tools | Read-only (Read, Grep, Glob) |
159
+ | Preloaded Skills | All 7 titanium-related skills injected at startup |
160
+
161
+ When to use the agent vs skills:
162
+
163
+ | Use Case | Use This | Why |
164
+ | ---------------------------- | ------------------------------- | ---------------------------------------------------- |
165
+ | Quick inline reference | `/ti-expert`, `/purgetss`, etc. | Runs in main conversation, interactive |
166
+ | Analyzing an entire codebase | `ti-pro` agent | Isolates verbose output, cross-references all skills |
167
+ | Multi-feature research | `ti-pro` agent | Preloads all skills for comprehensive answers |
168
+ | Step-by-step implementation | Skills directly | Task-oriented guidance |
169
+ | Architecture review | `ti-pro` agent | Read-only analysis across all documentation |
170
+
171
+ Example prompts for the agent:
172
+
173
+ ```
174
+ "Can you use the ti-pro agent to analyze this Alloy codebase's architecture?"
175
+ "Can you research how to combine location, push, and background sync in Titanium?"
176
+ "Can you compare ListView vs TableView performance for my use case?"
177
+ "Review this Titanium mobile app and identify anti-patterns."
100
178
  ```
101
179
 
102
- ### Draggable views
180
+ Tip: For automatic activation, include words like "Titanium", "Alloy", or "mobile app" in your prompt to ensure the specialized agent is used instead of generic code analysis.
181
+
182
+ Key difference:
183
+ - Skills = interactive help during development (inline, conversational)
184
+ - Agents = isolated research tasks (returns summary, keeps verbose output separate)
185
+
186
+ ---
187
+
188
+ ## How skills work
189
+
190
+ Skills are automatically activated based on your questions. Just ask naturally:
103
191
 
104
- ```js
105
- $.myAnimation.draggable($.myView)
106
- // or with constraints:
107
- $.myAnimation.draggable([$.card1, $.card2])
192
+ ```
193
+ "Can you create a login screen with email validation and animations?"
108
194
  ```
109
195
 
110
- Use `bounds` to restrict movement, and `drag`/`drop` modifiers for drag-state animations. Use `vertical-constraint` or `horizontal-constraint` classes to limit the drag axis.
196
+ The AI will automatically use:
197
+ - `ti-expert` -> Architecture and controller structure
198
+ - `purgetss` -> Styling classes and animations (if PurgeTSS detected)
199
+ - `ti-howtos` -> Secure token storage
111
200
 
112
- ### Collision detection
201
+ You do not need to call skills explicitly. The AI reads skill descriptions and loads the appropriate knowledge when needed.
113
202
 
114
- After calling `draggable()`, you can enable collision detection to know when a dragged view overlaps another:
203
+ ### Project detection
204
+
205
+ All skills include automatic project detection to ensure compatibility:
206
+
207
+ | Skill | What It Detects | How It Works |
208
+ | ------------ | --------------------- | ------------------------------------------------------------- |
209
+ | purgetss | PurgeTSS installation | Checks for `purgetss/` folder, `config.cjs`, `utilities.tss` |
210
+ | ti-expert | Alloy vs Classic | Checks for `app/` (Alloy) vs `Resources/` (Classic) structure |
211
+ | alloy-guides | Alloy projects | Checks for `app/views/`, `app/controllers/` |
212
+ | alloy-howtos | Alloy projects | Checks for `alloy.jmk`, `config.json` |
213
+ | ti-ui | Titanium projects | Checks for `tiapp.xml` (both Alloy and Classic) |
214
+ | ti-guides | Titanium projects | Checks for `tiapp.xml` (both Alloy and Classic) |
215
+ | ti-howtos | Titanium projects | Checks for `tiapp.xml` (both Alloy and Classic) |
216
+
217
+ Why this matters:
218
+ - PurgeTSS suggestions are only provided if PurgeTSS is installed
219
+ - Alloy-specific patterns are only suggested for Alloy projects
220
+ - Classic Titanium projects will not receive inappropriate Alloy advice
221
+
222
+ ### Skill hierarchy
223
+
224
+ `ti-expert` acts as the orchestrator, delegating to specialized skills when needed:
115
225
 
116
- ```js
117
- $.myAnimation.draggable(views)
118
- $.myAnimation.detectCollisions(views, onHover, onDrop)
226
+ ```
227
+ ┌─────────────────┐
228
+ │ ti-expert │
229
+ │ (Start Here) │
230
+ └────────┬────────┘
231
+
232
+ ┌────────────────────┼────────────────────┐
233
+ │ │ │
234
+ ▼ ▼ ▼
235
+ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐
236
+ │ purgetss │ │ ti-ui │ │ ti-howtos │
237
+ │ (Styling) │ │ (UI/UX) │ │ (Native) │
238
+ └───────────────┘ └───────────────┘ └───────────────┘
239
+ │ │ │
240
+ └────────────────────┼────────────────────┘
241
+
242
+ ┌────────────────────┼────────────────────┐
243
+ │ │ │
244
+ ▼ ▼ ▼
245
+ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐
246
+ │ ti-guides │ │ alloy-guides │ │ alloy-howtos │
247
+ │ (SDK) │ │ (MVC) │ │ (CLI) │
248
+ └───────────────┘ └───────────────┘ └───────────────┘
119
249
  ```
120
250
 
121
- **`dragCB(source, target)`** is called during drag:
122
- - `target` is the view under the drag center, or `null` when leaving all targets
123
- - Use this to show visual feedback (highlights, borders, scaling)
251
+ ---
124
252
 
125
- **`dropCB(source, target)`** is called on drop:
126
- - `target` is the view where the source was released
127
- - If no target is found, the source automatically snaps back to its original position with a 200ms animation
253
+ ## Skill details
128
254
 
129
- ### Swap animation
255
+ ### ti-expert
130
256
 
131
- Animate two views exchanging positions:
257
+ The primary skill for Titanium Alloy development. Start here for most tasks.
132
258
 
133
- ```js
134
- $.myAnimation.swap(view1, view2)
259
+ When it activates:
260
+ - Designing project structure
261
+ - Implementing controllers, views, services
262
+ - Choosing data strategies (Models vs Collections)
263
+ - Writing clean ES6+ code
264
+ - Memory management and cleanup patterns
265
+ - Performance optimization
266
+ - Security patterns
267
+ - Migrating legacy apps
268
+
269
+ Example prompts:
270
+ ```
271
+ "How should I structure a new Titanium Alloy app with authentication?"
272
+ "Create a user service that fetches data from an API."
273
+ "What's the best pattern for navigation between screens?"
274
+ "Prevent memory leaks in my controllers."
275
+ "Migrate classic Titanium code to modern Alloy patterns."
276
+ "What's a clean way to organize services in an Alloy app?"
135
277
  ```
136
278
 
137
- - Inherits `duration`, `delay`, and `curve` from the Animation object's classes
138
- - Falls back to 200ms duration, 0ms delay, and ease-in-out curve if not set
139
- - Handles iOS transform reset automatically
140
- - Temporarily raises z-index so views animate above siblings
141
- - Updates internal `_originLeft`/`_originTop` for subsequent drag operations
279
+ Key features:
280
+ - Quick decision matrix for common questions
281
+ - 18 reference guides for deep dives
282
+ - Delegates to specialized skills when needed
283
+
284
+ ---
142
285
 
143
- ### Sequence animation
286
+ ### purgetss
144
287
 
145
- Animate views one after another (unlike `play(array)` which runs them in parallel):
288
+ Utility-first styling toolkit for Titanium/Alloy.
146
289
 
147
- ```js
148
- $.fadeIn.sequence([$.title, $.subtitle, $.button], () => {
149
- console.log('All views animated')
150
- })
290
+ When it activates:
291
+ - Setting up PurgeTSS in a project
292
+ - Complex layouts (Grid system)
293
+ - Declarative animations (`<Animation>` component)
294
+ - Icon fonts (Font Awesome, Material Icons)
295
+ - Custom color palettes
296
+ - Platform-specific styling
297
+ - config.cjs configuration
298
+
299
+ Example prompts:
300
+ ```
301
+ "How do I set up PurgeTSS in my existing Alloy project?"
302
+ "Create a responsive 12-column grid layout."
303
+ "Add a fade-in animation when my view appears."
304
+ "How do I configure custom colors in config.cjs?"
305
+ "How do I use Font Awesome 7 icons?"
306
+ "Style this button differently on iOS vs Android."
151
307
  ```
152
308
 
153
- - Each view fully completes before the next starts
154
- - Callback fires once after the last view
155
- - Respects `open`/`close` state (set once for the entire sequence)
309
+ Rules:
310
+ - Platform-specific properties require modifiers (e.g., `[platform=ios]`) to prevent cross-platform build failures
311
+ - No flexbox (`flex-row`, `justify-between`) -> use `horizontal`/`vertical`
312
+ - No `w-full` -> use `w-screen`
313
+ - No `p-*` on Views -> use `m-*` on children
314
+ - Arbitrary values use parentheses: `w-(100px)`, not `w-[100px]`
156
315
 
157
- ### Shake animation
316
+ ---
158
317
 
159
- Quick horizontal shake for error feedback, using native `autoreverse` + `repeat` for smooth performance:
318
+ ### ti-ui
160
319
 
161
- ```js
162
- $.myAnimation.shake($.loginButton) // default intensity: 10px
163
- $.myAnimation.shake($.input, 6) // subtle: 6px
164
- $.myAnimation.shake($.errorLabel, 20) // strong: 20px
320
+ UI/UX expert for layouts and platform components.
321
+
322
+ When it activates:
323
+ - Layout systems (composite, vertical, horizontal)
324
+ - ListView/TableView optimization
325
+ - Event handling and bubbling
326
+ - Animations and transforms
327
+ - Gestures (swipe, pinch, longpress)
328
+ - Orientation handling
329
+ - App icons and splash screens
330
+ - Android Action Bar / iOS Navigation patterns
331
+ - Accessibility (VoiceOver, TalkBack)
332
+
333
+ Example prompts:
334
+ ```
335
+ "How do I create a high-performance ListView with custom templates?"
336
+ "Handle swipe gestures on table rows."
337
+ "Set up app icons for all iOS and Android densities."
338
+ "Implement pull-to-refresh on a ScrollView."
339
+ "How do I make my app accessible for VoiceOver users?"
340
+ "How do I configure the Android Action Bar with custom menu items?"
165
341
  ```
166
342
 
167
- ### Snap to nearest target
343
+ Key rules:
344
+ - No `Ti.UI.SIZE` in ListView items (causes jerky scrolling)
345
+ - Prefer ListView over TableView for large datasets
346
+ - Use `dp` units for cross-platform consistency
347
+ - Remove global listeners on pause
168
348
 
169
- After dragging, snap a view to the closest target by center-to-center distance:
349
+ ---
170
350
 
171
- ```js
172
- const matched = $.myAnimation.snapTo(draggedView, slotViews)
173
- if (matched) {
174
- console.log('Snapped to:', matched.id)
175
- }
351
+ ### ti-howtos
352
+
353
+ Native feature integration expert.
354
+
355
+ When it activates:
356
+ - Location services and Maps
357
+ - Push notifications (APNs/FCM)
358
+ - Local notifications
359
+ - Camera and Gallery
360
+ - Audio/Video playback
361
+ - File system operations
362
+ - SQLite databases
363
+ - HTTPClient networking
364
+ - WebView integration
365
+ - Android Intents and Services
366
+ - iOS Background Services, iCloud, Keychain
367
+ - Core Motion, WatchKit
368
+
369
+ Example prompts:
370
+ ```
371
+ "How do I implement battery-efficient GPS tracking?"
372
+ "How do I set up push notifications for iOS and Android?"
373
+ "How do I capture and resize photos from the camera?"
374
+ "Download files with a progress indicator."
375
+ "How should I store sensitive data in iOS Keychain?"
376
+ "Create an Android background service."
377
+ "Integrate with Apple Watch using WatchKit."
378
+ "Handle background location updates on iOS."
176
379
  ```
177
380
 
178
- ### Reorder animation
381
+ Key rules:
382
+ - Always handle both `onload` and `onerror` for HTTPClient
383
+ - Always close database handles and result sets
384
+ - Use `imageAsResized` to avoid memory exhaustion
385
+ - Configure proper permissions in tiapp.xml
179
386
 
180
- Animate an array of views to new positions based on index mapping:
387
+ ---
181
388
 
182
- ```js
183
- // Reverse order: view[0] goes to position of view[2], view[2] to position of view[0]
184
- $.myAnimation.reorder(cardViews, [2, 1, 0])
389
+ ### ti-guides
390
+
391
+ SDK fundamentals and advanced configuration.
392
+
393
+ When it activates:
394
+ - Hyperloop native access
395
+ - Native module development
396
+ - App distribution (Play Store, App Store)
397
+ - tiapp.xml configuration
398
+ - CLI commands and options
399
+ - Memory and bridge optimization
400
+ - CommonJS module patterns
401
+ - Coding best practices
402
+
403
+ Example prompts:
404
+ ```
405
+ "How do I access native iOS APIs using Hyperloop?"
406
+ "Configure tiapp.xml for a production build."
407
+ "What do I need for Google Play submission?"
408
+ "How do I create a native Android module?"
409
+ "Optimize bridge crossings for better performance."
410
+ "List reserved words I should avoid."
185
411
  ```
186
412
 
187
- - All views animate simultaneously
188
- - Captures positions before animating to avoid conflicts
413
+ ---
189
414
 
190
- ### Removing draggable behavior
415
+ ### alloy-guides
191
416
 
192
- Remove draggable behavior and clean up all event listeners:
417
+ Complete Alloy MVC framework reference.
193
418
 
194
- ```js
195
- $.myAnimation.undraggable(cardViews)
419
+ When it activates:
420
+ - MVC architecture concepts
421
+ - Backbone.js models and collections
422
+ - Data binding patterns
423
+ - XML markup elements
424
+ - TSS styling syntax
425
+ - Widget development
426
+ - Sync adapters (sql, properties)
427
+ - Migrations
428
+
429
+ Example prompts:
430
+ ```
431
+ "Explain how Alloy data binding works."
432
+ "How do I create a model with the SQLite adapter?"
433
+ "Bind a collection to a TableView."
434
+ "How do I build a reusable widget?"
435
+ "Show the TSS syntax for platform-specific styles."
436
+ "How does the Alloy compilation process work?"
196
437
  ```
197
438
 
198
- ### Property inheritance
439
+ ---
440
+
441
+ ### alloy-howtos
199
442
 
200
- The `swap`, `reorder`, `snapTo`, and `shake` methods inherit animation properties from the `<Animation>` object's classes. This means you can configure behavior declaratively in XML:
443
+ Alloy CLI, configuration, and debugging.
201
444
 
202
- ```xml
203
- <Animation id="myAnim" module="purgetss.ui" class="curve-animation-ease-out delay-100 duration-150" />
445
+ When it activates:
446
+ - Alloy CLI commands (new, generate, compile)
447
+ - Configuration files (alloy.jmk, config.json)
448
+ - Debugging compilation errors
449
+ - Conditional views
450
+ - Custom XML tags
451
+ - Best practices and naming conventions
452
+ - Backbone.Events patterns
453
+
454
+ Example prompts:
455
+ ```
456
+ "How do I generate a new model with the CLI?"
457
+ "Configure alloy.jmk build hooks."
458
+ "How do I fix "No app.js found"?"
459
+ "Create conditional views based on user state."
460
+ "How do I build a custom XML tag without widgets?"
461
+ "Set up Backbone.Events for global communication."
462
+ ```
463
+
464
+ Key rules:
465
+ - Use Backbone.Events instead of Ti.App.fireEvent
466
+ - Never use double underscore prefixes (`__foo`)
467
+ - Access config at runtime with `Alloy.CFG.yourKey`
468
+
469
+ ---
470
+
471
+ ## Usage examples and best practices
472
+
473
+ ### Example prompts
474
+
475
+ Starting a new project:
476
+ ```
477
+ "I'm starting a new Titanium Alloy app for a food delivery service.
478
+ Can you help me set up the project structure?"
479
+ ```
480
+
481
+ UI development:
482
+ ```
483
+ "Can you create a product listing screen with:
484
+ - Pull-to-refresh
485
+ - Infinite scroll pagination
486
+ - Image caching
487
+ - Swipe-to-delete"
204
488
  ```
205
489
 
206
- | Property | `play`/`toggle`/`open`/`close`/`sequence` | `swap`/`reorder`/`snapTo` | `shake` |
207
- | ------------- | :---------------------------------------: | :-----------------------: | :-----------------: |
208
- | `duration` | ✅ | ✅ | ✅ (÷6) |
209
- | `delay` | ✅ | ✅ | ✅ |
210
- | `curve` | ✅ | ✅ | fixed `EASE_IN_OUT` |
211
- | `autoreverse` | ✅ | — | fixed `true` |
212
- | `repeat` | ✅ | — | fixed `3` |
490
+ API integration:
491
+ ```
492
+ "Can you build a complete authentication flow with:
493
+ - Login/Register screens
494
+ - JWT token management
495
+ - Secure storage
496
+ - Auto-refresh tokens"
497
+ ```
213
498
 
214
- Fallback defaults when not set: `swap`/`reorder`/`snapTo` → 200ms; `shake` → 400ms. All animation timing is controlled declaratively via the `<Animation>` object's classes.
499
+ Performance optimization:
500
+ ```
501
+ "My app is slow - the ListView scrolls poorly and memory usage is high. How do I optimize it?"
502
+ ```
215
503
 
216
- - Removes touch and orientation listeners
217
- - Removes views from collision detection registry
218
- - Cleans up internal tracking properties
504
+ Migration:
505
+ ```
506
+ "I have a legacy Titanium classic app from 2015. Can you help me migrate it to modern Alloy?"
507
+ ```
219
508
 
220
- ### Utility classes for animations
509
+ Platform-specific features:
510
+ ```
511
+ "How do I implement Apple Sign-In for iOS and Google Sign-In for Android?"
512
+ ```
513
+
514
+ Debugging:
515
+ ```
516
+ "How do I fix "Alloy is not defined" in my lib file?"
517
+ ```
221
518
 
222
- | Class pattern | Description |
223
- | --------------------------------------------------- | ----------------------------- |
224
- | `duration-{n}` | Animation duration in ms |
225
- | `delay-{n}` | Delay before animation starts |
226
- | `rotate-{n}` | 2D rotation in degrees |
227
- | `scale-{n}` | Scale factor |
228
- | `repeat-{n}` | Number of repeats |
229
- | `ease-in`, `ease-out`, `ease-linear`, `ease-in-out` | Timing curve |
230
- | `zoom-in-{n}`, `zoom-out-{n}` | Zoom animations |
231
- | `drag-apply`, `drag-animate` | Drag interaction style |
232
- | `vertical-constraint`, `horizontal-constraint` | Constrain drag axis |
519
+ Codebase analysis (using agent):
520
+ ```
521
+ "Use the ti-pro agent to analyze this project and:
522
+ - review the overall architecture
523
+ - identify memory leak patterns
524
+ - check for common anti-patterns
525
+ - suggest improvements"
526
+ ```
233
527
 
234
- ### Utility functions
528
+ ### Tips for better results
235
529
 
236
- | Function | Description |
237
- | -------------------------------------- | -------------------------------------------------------------------------------------------------------- |
238
- | `deviceInfo()` | Logs detailed platform and display information to the console. Works in both Alloy and Classic projects. |
239
- | `saveComponent({ source, directory })` | Saves a view snapshot as PNG to the photo gallery. |
530
+ 1. Be specific. Instead of "Make a list", try "Can you create a ListView with user avatars, names, and swipe actions?"
531
+ 2. Provide context. Instead of "How do I fix this error?", try "I'm getting this error when compiling: [error message]. Here's my code: [code]"
532
+ 3. Ask for architecture first. For complex features, start with "How should I architect a real-time chat feature?" then follow up with implementation details.
533
+ 4. Mention constraints. "Build a settings screen. Must work offline and sync when connected."
534
+ 5. Reference existing code. "Here's my current controller. How can I improve memory management?"
240
535
 
241
- See the full documentation at [purgetss.com/docs/animation-module/introduction](https://purgetss.com/docs/animation-module/introduction).
536
+ More examples: See [Example Prompts](EXAMPLE-PROMPTS.md) for detailed prompts that test each skill's capabilities.
242
537
 
243
538
  ---
244
539
 
245
- ## Customizing default components
540
+ ## CLI reference
246
541
 
247
- PurgeTSS sets defaults for three components out of the box:
542
+ ### titools install
248
543
 
249
- | Component | Default |
250
- | ----------- | --------------------------------------- |
251
- | `Window` | `backgroundColor: '#FFFFFF'` |
252
- | `View` | `width: Ti.UI.SIZE, height: Ti.UI.SIZE` |
253
- | `ImageView` | `hires: true` (iOS only) |
544
+ Installs Titanium skills, agents, and platform symlinks.
254
545
 
255
- Override or extend them in `config.cjs` with `theme.extend`:
546
+ ```bash
547
+ titools install [options]
548
+ ```
256
549
 
257
- ```js
258
- module.exports = {
259
- theme: {
260
- extend: {
261
- Window: {
262
- apply: 'exit-on-close-false bg-surface'
263
- }
264
- }
265
- }
266
- }
550
+ Options:
551
+ | Option | Description |
552
+ | --------------- | ------------------------------------------------------------------- |
553
+ | `-l, --local` | Install skills locally in the current project (`./.agents/skills/`) |
554
+ | `-a, --all` | Install to all detected platforms without prompting |
555
+ | `--path <path>` | Install to a custom path (skips symlink setup) |
556
+
557
+ Behavior depends on where you run it:
558
+
559
+ | Context | Behavior |
560
+ | -------------------------- | --------------------------------------------------------------------- |
561
+ | Outside a Titanium project | Installs skills globally to `~/.agents/skills/` |
562
+ | Inside a Titanium project | Prompts you to choose: Global or Local installation |
563
+ | With `--local` flag | Installs skills locally to `./.agents/skills/` in the current project |
564
+
565
+ What it does:
566
+ - Installs all 7 titanium-related skills (global or local depending on context)
567
+ - Installs ti-pro agent for Claude Code
568
+ - Detects installed AI platforms and lets you choose which to link
569
+ - Creates symlinks from platform directories to central skills
570
+ - Cleans up legacy artifacts (`alloy-expert` skill, `ti-researcher` agent)
571
+ - If run inside a Titanium project, prompts to run `titools sync` afterward
572
+ - Warns Gemini users if local skills override existing global Gemini skills
573
+ - Installs Claude Code SessionStart hook for auto-updates
574
+
575
+ ### titools auto-update
576
+
577
+ Checks for updates and applies them silently. Designed to run from the Claude Code SessionStart hook, but can also be used manually.
578
+
579
+ ```bash
580
+ titools auto-update # Show progress
581
+ titools auto-update --silent # No output (for hooks)
267
582
  ```
268
583
 
269
- If an applied class sets a property that already exists in the defaults (e.g., `bg-surface` vs `backgroundColor: '#FFFFFF'`), the applied value wins. Array-type properties like `extendEdges` and `orientationModes` use bracket notation (`[ ]`) in the generated output.
584
+ Options:
585
+ | Option | Description |
586
+ | -------------- | ---------------------------------- |
587
+ | `-s, --silent` | Suppress all output except errors |
270
588
 
271
- ### Shorthand and explicit forms
589
+ What it does:
590
+ 1. Checks a local cache (`~/.titools/last-check.json`) — if already checked today, exits immediately
591
+ 2. Queries npm for the latest version
592
+ 3. If a new version is available, runs `npm update -g @maccesar/titools`
593
+ 4. Syncs skills and refreshes platform symlinks
594
+ 5. If inside a Titanium project, updates existing Knowledge Index files
595
+ 6. Writes the cache so it won't check again for 24 hours
272
596
 
273
- Both are equivalent:
597
+ The hook is installed automatically by `titools install` when Claude Code is selected. It runs `titools auto-update --silent` at the start of every Claude Code session.
274
598
 
275
- ```js
276
- // Shorthand
277
- Window: { apply: 'exit-on-close-false' }
599
+ ### titools status
600
+
601
+ Shows a quick overview of your installation.
278
602
 
279
- // Explicit
280
- Window: { default: { apply: 'exit-on-close-false' } }
603
+ ```bash
604
+ titools status
281
605
  ```
282
606
 
283
- Use the explicit form when you need platform-specific variants:
607
+ Displays: version, skills count, agent, hook status, last update check, platform symlinks, and project Knowledge Index status (if inside a Titanium project).
284
608
 
285
- ```js
286
- Button: {
287
- default: { apply: 'text-xl' },
288
- ios: { apply: 'font-bold' },
289
- android: { apply: 'text-2xl font-semibold', color: 'red' }
290
- }
609
+ ### titools doctor
610
+
611
+ Diagnoses installation health.
612
+
613
+ ```bash
614
+ titools doctor
615
+ ```
616
+
617
+ Checks: skill directories exist, symlinks are valid (not broken), agent is installed, hook is configured, cache is readable, Knowledge Index version matches CLI version. Reports issues with fix suggestions.
618
+
619
+ ### titools sync
620
+
621
+ Generates a compressed knowledge index inside your project's instruction files (`AGENTS.md`, `CLAUDE.md`, `GEMINI.md`).
622
+
623
+ Important: This command only works inside a Titanium project (requires `tiapp.xml`). The knowledge index is project-specific. It detects your SDK version and points to the installed skill references.
624
+
625
+ ```bash
626
+ titools sync [path] [options]
627
+ ```
628
+
629
+ Arguments:
630
+ | Argument | Description |
631
+ | -------- | -------------------------------------------- |
632
+ | `[path]` | Project path (defaults to current directory) |
633
+
634
+ Options:
635
+ | Option | Description |
636
+ | --------------- | ------------------------------------------ |
637
+ | `-f, --force` | Overwrite existing files without prompting |
638
+ | `-v, --verbose` | Show detailed diagnostics |
639
+
640
+ What it does:
641
+ - Verifies you're inside a Titanium project (`tiapp.xml`)
642
+ - Detects Titanium SDK version from `tiapp.xml`
643
+ - Prompts you to select which files to sync: `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`
644
+ - Inserts or updates a compressed knowledge index block in selected files
645
+ - Removes knowledge blocks from unselected files
646
+ - Creates files if they don't exist
647
+
648
+ ### titools update
649
+
650
+ Checks whether a newer `titools` CLI version is available on npm, then syncs installed skills and agents from the currently installed package.
651
+
652
+ ```bash
653
+ titools update [options]
654
+ ```
655
+
656
+ Options:
657
+ | Option | Description |
658
+ | ------------- | ------------------------------------------ |
659
+ | `-l, --local` | Update local skills in the current project |
660
+
661
+ Behavior depends on where you run it:
662
+
663
+ | Context | Behavior |
664
+ | --------------------------------------------------------------- | ----------------------------------------------------------- |
665
+ | Outside a Titanium project | Updates global skills in `~/.agents/skills/` (if installed) |
666
+ | Inside a Titanium project (local skills only) | Updates local skills automatically |
667
+ | Inside a Titanium project (both local and global) | Prompts you to choose: Global or Local |
668
+ | Inside a Titanium project (with existing knowledge index files) | Also refreshes `AGENTS.md`/`CLAUDE.md`/`GEMINI.md` |
669
+
670
+ What it does:
671
+ 1. Checks npm for the latest CLI version
672
+ 2. If a newer version exists, it shows the update command `npm update -g @maccesar/titools`
673
+ 3. It exits without changing skills, agents, or knowledge files until the CLI is updated
674
+ 4. If the CLI is current, it syncs skills and agents from the installed package (no download needed)
675
+ 5. Updates platform symlinks only for platforms that already have them
676
+ 6. Cleans up legacy artifacts (`alloy-expert` skill, `ti-researcher` agent)
677
+ 7. Auto-syncs knowledge index files if they exist in the current project
678
+
679
+ Note: This command syncs knowledge packages and agents from your installed CLI. To get new features, first update the CLI with `npm update -g @maccesar/titools`, then run `titools update` again.
680
+
681
+ ### titools remove
682
+
683
+ Removes skills, agents, symlinks, and knowledge index blocks.
684
+
685
+ ```bash
686
+ titools remove [options]
687
+ ```
688
+
689
+ Options:
690
+ | Option | Description |
691
+ | ------------- | -------------------------------------------- |
692
+ | `-l, --local` | Remove local skills from the current project |
693
+
694
+ What it does:
695
+ - Detects all installed components (skills, agents, symlinks, knowledge blocks)
696
+ - Prompts you to select what to remove:
697
+ - ti-pro agent for Claude Code
698
+ - Knowledge index blocks from instruction files (`AGENTS.md`, `CLAUDE.md`, `GEMINI.md`)
699
+ - Skills from global (`~/.agents/skills/`) or project directory
700
+ - Platform symlinks from global or project directory
701
+ - Removes both current and legacy artifacts
702
+ - Removes Claude Code auto-update hook
703
+ - Cleans up cache directory (`~/.titools/`)
704
+
705
+ ### Verify installation
706
+
707
+ ```bash
708
+ titools status # Quick overview of everything
709
+ titools doctor # Diagnose any issues
710
+ titools --version # CLI version only
291
711
  ```
292
712
 
293
713
  ---
@@ -334,34 +754,140 @@ This pattern is documented across four skills: `ti-ui`, `ti-expert`, `ti-api`, a
334
754
 
335
755
  ---
336
756
 
337
- ### Visit the official documentation site at [purgetss.com](https://purgetss.com) to learn more.
338
-
339
- ## Requirements
340
-
341
- - **Titanium SDK** (Compatible with all versions; 13.1.1.GA recommended for full property support)
342
- - **Alloy Framework** (for most commands)
343
- - **Node.js 20+** (required for the CLI tool)
344
-
345
- ## Table of Content
346
-
347
- - [Installation](https://purgetss.com/docs/installation)
348
- - [Commands](https://purgetss.com/docs/commands)
349
- - Customization
350
- - [The Config File](https://purgetss.com/docs/customization/the-config-file)
351
- - [Custom Rules](https://purgetss.com/docs/customization/custom-rules)
352
- - [The `apply` Directive](https://purgetss.com/docs/customization/the-apply-directive)
353
- - [The `opacity` Modifier](https://purgetss.com/docs/customization/the-opacity-modifier)
354
- - [Arbitrary Values](https://purgetss.com/docs/customization/arbitrary-values)
355
- - [Platform and Device Modifiers](https://purgetss.com/docs/customization/platform-and-device-modifiers)
356
- - [Icon Fonts Libraries](https://purgetss.com/docs/customization/icon-fonts-libraries)
357
- - Animation Module
358
- - [Introduction](https://purgetss.com/docs/animation-module/introduction)
359
- - [The `play` Method](https://purgetss.com/docs/animation-module/the-play-method)
360
- - [The `apply` Method](https://purgetss.com/docs/animation-module/the-apply-method)
361
- - [The `open` and `close` Methods](https://purgetss.com/docs/animation-module/the-open-and-close-methods)
362
- - [The `draggable` Method](https://purgetss.com/docs/animation-module/the-draggable-method)
363
- - [Complex UI Elements](https://purgetss.com/docs/animation-module/complex-ui-elements)
364
- - [Additional Methods](https://purgetss.com/docs/animation-module/additional-methods)
365
- - [Available Utilities](https://purgetss.com/docs/animation-module/available-utilities)
366
- - [Implementation Rules](https://purgetss.com/docs/animation-module/implementation-rules)
367
- - [Grid System](https://purgetss.com/docs/grid-system)
757
+ ## Skill contents summary
758
+
759
+ | Skill | SKILL.md | References |
760
+ | ------------ | ----------------------------- | ----------------------------------------------------- |
761
+ | alloy-guides | MVC Quick Start | 10 files (models, views, widgets, etc.) |
762
+ | alloy-howtos | Best Practices | 6 files (CLI, config, debugging, etc.) |
763
+ | purgetss | Setup + Critical Rules | 21 files (grid, animations, icons, class-index, etc.) |
764
+ | ti-api | API Quick Reference | 14 files (windows, views, lists, media, etc.) |
765
+ | ti-expert | Architecture + Implementation | 19 refs + 1 asset (patterns, testing, security, etc.) |
766
+ | ti-guides | Core Workflow | 14 files (hyperloop, distribution, etc.) |
767
+ | ti-howtos | Integration Workflow | 18 files (location, media, maps, automation, etc.) |
768
+ | ti-ui | UI Rules + Platform Diffs | 14 files (layouts, lists, gestures, etc.) |
769
+
770
+ ---
771
+
772
+ ## Troubleshooting
773
+
774
+ ### Skill not activating?
775
+
776
+ If the AI doesn't seem to use Titanium knowledge:
777
+ 1. Mention "Titanium" or "Alloy" explicitly in your prompt
778
+ 2. Be more specific about what you're building
779
+ 3. Reference the technology stack
780
+ 4. Try explicit invocation: "Use the purgetss skill for styling questions"
781
+
782
+ ### Getting wrong suggestions?
783
+
784
+ If the AI suggests patterns you don't use (for example, PurgeTSS when you're not using it):
785
+ 1. The skill may not have detected your project type correctly
786
+ 2. Explicitly mention your stack: "I'm using Classic Titanium, not Alloy"
787
+ 3. Be more specific about what you're building
788
+
789
+ ### PurgeTSS not detected?
790
+
791
+ If the purgetss skill doesn't activate for your PurgeTSS project:
792
+ 1. Verify `purgetss/` folder exists in project root
793
+ 2. Check that `purgetss/config.cjs` exists
794
+ 3. Mention "PurgeTSS" explicitly in your prompt
795
+
796
+ ### Wrong advice?
797
+
798
+ If the AI suggests incorrect patterns (like flexbox):
799
+ 1. Remind it you're using PurgeTSS
800
+ 2. Reference the correct pattern from memory
801
+ 3. Ask to check the PurgeTSS rules
802
+
803
+ ### Need more detail?
804
+
805
+ Ask the AI to:
806
+ ```
807
+ "Show me the reference documentation for ListView performance"
808
+ "What does the ti-expert skill say about memory cleanup?"
809
+ ```
810
+
811
+ ### titools command not found?
812
+
813
+ If the command is not found:
814
+ ```bash
815
+ # Verify installation
816
+ npm list -g @maccesar/titools
817
+
818
+ # Re-install
819
+ npm install -g @maccesar/titools
820
+ ```
821
+
822
+ ### Knowledge index not working?
823
+
824
+ If your AI doesn't use the knowledge index information:
825
+ 1. Verify AGENTS.md/CLAUDE.md/GEMINI.md exists in your project root
826
+ 2. Check that your AI supports these files
827
+ 3. Try explicitly referencing: "Check the AGENTS.md documentation"
828
+
829
+ ### Version mismatch warning?
830
+
831
+ The knowledge index is based on the latest documentation. Be cautious when using newer APIs in older projects.
832
+
833
+ ---
834
+
835
+ ## Uninstall
836
+
837
+ ```bash
838
+ # Remove the CLI
839
+ npm uninstall -g @maccesar/titools
840
+
841
+ # Remove knowledge packages and agent
842
+ titools remove
843
+ ```
844
+
845
+ Note: `titools remove` can remove the knowledge index blocks from your project files, but it does not delete the files themselves.
846
+
847
+ ---
848
+
849
+ ## Contributing
850
+
851
+ 1. Fork the repository
852
+ 2. Improve SKILL.md or reference files
853
+ 3. Test with your preferred AI coding assistant
854
+ 4. Submit a pull request
855
+
856
+ ### Guidelines
857
+ - Keep SKILL.md concise (<500 lines)
858
+ - Use progressive disclosure (details in references)
859
+ - Include concrete examples
860
+ - Test with real sessions
861
+
862
+ ---
863
+
864
+ ## Legacy installation (not recommended)
865
+
866
+ The bash installer is maintained for backward compatibility but NPM installation is recommended.
867
+
868
+ ```bash
869
+ curl -fsSL https://raw.githubusercontent.com/macCesar/titools/main/install.sh | bash
870
+ ```
871
+
872
+ Use this only if you cannot use NPM for any reason.
873
+
874
+ ---
875
+
876
+ ## Credits
877
+
878
+ Created by César Estrada ([@macCesar](https://github.com/macCesar)), creator of [PurgeTSS](https://github.com/macCesar/purgeTSS).
879
+
880
+ ## License
881
+
882
+ MIT License - Free to use, modify, and distribute.
883
+
884
+ ---
885
+
886
+ ## Resources
887
+
888
+ - [Titanium SDK](https://titaniumsdk.com/)
889
+ - [PurgeTSS](https://purgetss.com/)
890
+ - [TiDev Community](https://tidev.io/)
891
+ - [Claude Code Skills](https://docs.anthropic.com/en/docs/claude-code)
892
+ - [Gemini CLI Skills](https://geminicli.com/docs/cli/skills/)
893
+ - [Codex CLI Skills](https://developers.openai.com/codex/skills/)