Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

ti84-evo-scripter

ASecurity

Use when the user wants a working calculator program for a TI-84 Evo, Evo-T, TI-84 Plus CE/CE-T Python, TI-83 Premium CE Python, or TI-82 Advanced Edition Python — delivered as a real, uploadable .py file. Trigger on requests like "make a TIPCALC that asks for a bill and a tip percent", on turning a formula into an on-calculator prompt-and-print program, on TI-Python syntax errors, on getting a program onto the calculator (TI Connect Evo or CE, unit-to-unit, on-device typing), and on exam-leg...

2 stars
0 votes
0 copies
0 views
Added 9/28/2026
developmentpythongobashexpressaws

Security Analysis

A100/100

Scanned 9/28/2026

Install to Claude Code

$npx -y skills add jovd83/ti84-evo-scripter --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of ti84-evo-scripter?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for ti84-evo-scripter
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jovd83-ti84-evo-scripter/badge)](https://www.skillsdirectory.com/skills/jovd83-ti84-evo-scripter)

More formats (shields.io, HTML) on the badges page.

Files
SKILL.md
---
name: ti84-evo-scripter
description: Use when the user wants a working calculator program for a TI-84 Evo, Evo-T, TI-84 Plus CE/CE-T Python, TI-83 Premium CE Python, or TI-82 Advanced Edition Python — delivered as a real, uploadable .py file. Trigger on requests like "make a TIPCALC that asks for a bill and a tip percent", on turning a formula into an on-calculator prompt-and-print program, on TI-Python syntax errors, on getting a program onto the calculator (TI Connect Evo or CE, unit-to-unit, on-device typing), and on exam-legality questions (ACT/SAT/AP, EU exam mode). Produces a lint-clean .py simulated against the target model's constraints, verified test cases with exact expected output, upload steps, and a printable one-page PDF handout.
metadata:
  dispatcher-layer: production
  dispatcher-lifecycle: active
  dispatcher-category: code-generation
  dispatcher-capabilities: ti-python-program-generation, calculator-file-delivery, exam-legality-check
  dispatcher-accepted-intents: write_calculator_program, generate_ti84_python, make_calculator_handout
  dispatcher-input-artifacts: program_spec, formula, prompt_list
  dispatcher-output-artifacts: py_program, test_report, handout_pdf
  dispatcher-stack-tags: ti-python, circuitpython, ti-84-evo
  dispatcher-risk: low
  dispatcher-writes-files: true
---

# TI-84 Evo Scripter

> **Author:** jovd83 | **Version:** 1.2.0

Turn a plain-language description of a calculation into a **numeric-only Python program** that runs in the TI Python App, and deliver it as a real `.py` file.

## Non-negotiables

1. **The calculator accepts uploaded files.** Never tell the user it cannot. Delivery is always a real `.py` file written to disk.
2. **Ship `.py` only.** Never hand-write `.8xv`, `.8xp`, `.8xp2`, or any calculator binary. TI Connect does that conversion on send.
3. **Numeric output only.** No symbolic algebra, equation solving, factoring, or calculus. Arithmetic on numbers the user typed is fine. This keeps the program non-CAS and exam-legal.
4. **No f-strings.** TI-Python raises `SyntaxError` on `f"..."`. Use `"{:.2f}".format(x)`.
5. **Never claim a check passed without running it.** `run_checks.py` prints the evidence; paste it.

## Workflow

### 0. Preflight — always first

```bash
python scripts/preflight.py --target <model> --fix
```

It checks Python version, skill files, write access, that the sandbox really blocks imports, and whether a browser exists for PDF export. `--fix` repairs what is local and reversible and prints what it did.

Then act on the result:

- **Exit 0, nothing missing** → continue.
- **Exit 0 with a `DEGRADED` line** → **continue anyway**, and tell the user what you lost. No browser means the handout ships as HTML with print-to-PDF instructions. Never stop over a degraded capability.
- **Exit 1 (`BLOCKING`)** → fix it. If the remedy is a system install, tell the user the exact command, offer to run `--fix-system`, and wait. Do not fake the deliverable.

Report installs in one line: "Preflight installed X; PDF export is available." Never install silently.

### 1. Identify the target model

Ask if unstated. Do not assume the Evo — a user in France likely has a `83pce-python`, in the Netherlands possibly an `84t` with no Python at all.

```bash
python scripts/lint_ti_python.py --list-targets
```

Pass `--target <key>` to **every** script. Full matrix in `references/model-matrix.md`.

**If the model has no Python App** (`ce`, `ce-t`, `84t`, `82advanced`): say so plainly, name the two real options — a Python-capable model, or TI-BASIC which this skill does not cover — and stop. Do not generate Python for it.

**If it is a TI-Nspire, Casio, or NumWorks**: different platform, different transfer. Say so instead of guessing.

### 2. Collect the spec

| Field | Rule |
|---|---|
| Program name | 1–8 characters, `A–Z0–9`, first character a letter. Uppercase. Becomes `<NAME>.py`. |
| What it calculates | The formula or procedure. |
| Prompts | What the user is asked for, in order, with units. |
| Displayed output | What is printed, with labels and decimal places. |

Fix an illegal name and say so in one line (`TIPCALCULATOR` → `TIPCALC`). Illegal names are silently renamed to `PYTHON01` on send, so never pass one through.

### 3. Ask which transfer path

Offer these; details in `references/transfer-options.md`:

- **TI Connect Evo** — web, `connectevo.ti.com`, Chrome 143+. **Evo family only.**
- **TI Connect CE** — desktop. **CE family only.** The two are not interchangeable.
- **Type it on the calculator** — no cable, viable under ~30 lines. Supply a shortened variant if chosen.
- **Unit-to-unit USB-C** — from another calculator of the same family.

### 4. Write the program

Start from `assets/program_template.py`.

- `from math import *` only when math functions are used.
- Read every input through the template's `getnum()`. It loops on bad input, accepts expressions like `6*pi`, **and converts a decimal comma** — without that, `eval("48,50")` returns the tuple `(48, 50)` and a European user sees "Not a number" on a valid entry.
- Format fixed decimals with `"{:.2f}".format(x)`.
- Keep printed lines inside the target's width: ~30 columns on Evo, ~26 on CE, **~16 on `82aep`**.
- Label every printed value. Plain ASCII only — prompts in the user's language are welcome, accented characters are not.

### 5. Run the check gate, and loop until it passes

```bash
python scripts/run_checks.py --program <NAME>.py --tests tests.json --target <model>
```

One command runs **lint → simulate → verify**, stops at the first failure, and prints a single `NEXT ACTION`. Loop:

1. Run it.
2. Exit 0 and `ALL CHECKS PASSED` → go to step 6.
3. Otherwise read `NEXT ACTION`, edit the program, re-run with `--iteration N+1`.

Fix the **program**, never the expected value. If the same stage fails five times, stop and tell the user what is stuck and why — do not loop forever.

The stages, if you need one alone:

| Stage | Command | Catches |
|---|---|---|
| lint | `lint_ti_python.py <f> --target <m>` | f-strings, absent modules, illegal names, degree-trig bugs, over-wide prints |
| simulate | `simulate_ti84.py --program <f> --target <m> --inputs ...` | runtime failures under the device's real constraints; draws the screen |
| verify | `verify_program.py --program <f> --tests <t> --target <m>` | wrong math |

**About the simulator:** there is no emulator that runs TI-Python. CEmu does not emulate the Atmel ATSAMD21 coprocessor that executes Python on the CE models, and nothing emulates the Evo. So `simulate_ti84.py` reproduces the *constraints* — module blocking, no `open`/`exec`, f-string rejection, screen width — not the silicon. `verify_program.py` runs inside the same sandbox, so a program importing `statistics` fails its tests even though it would pass on a desktop. Timing, memory exhaustion, and `ti_plotlib`/`ti_hub`/`ti_rover` behaviour still need the real device: say so when the program uses them.

`tests.json` needs **at least three cases, one an edge case** (zero, negative, very large, expression input, or decimal comma):

```json
{
  "program": "TIPCALC.py",
  "cases": [
    {"name": "typical",    "inputs": ["48.50", "18"], "expect": ["Tip:   8.73", "Total: 57.23"]},
    {"name": "round pct",  "inputs": ["100", "15"],   "expect": ["Tip:   15.00", "Total: 115.00"]},
    {"name": "edge: zero", "inputs": ["0", "20"],     "expect": ["Tip:   0.00"], "reject": ["Traceback"]}
  ]
}
```

### 6. State the trig mode explicitly

One of these sentences, every time. Never guess.

- **Uses trig:** "Python's `math` module always works in **radians**. The calculator's `MODE` (DEGREE/RADIAN) setting affects TI-BASIC and the home screen only — it does **not** change Python. This program converts your degree input with `radians()` internally, so leave `MODE` alone."
- **No trig:** "Mode does not matter. This program only does arithmetic, so the DEGREE/RADIAN setting has no effect on it."

### 7. Build the handout

```bash
python scripts/make_handout.py --spec handout.json --out <NAME>-handout.pdf
```

Schema and a filled example are in `examples/TIPCALC/handout.json`. Writes HTML, then PDF via headless Chrome/Edge; with no browser it keeps the HTML and says to print from there. Report which happened.

### 8. Deliver

All seven, every time:

1. **File paths** to the `.py` and the handout.
2. **The full source, inline in chat**, in a plain code block.
3. **How it works** — a short paragraph plus the formula.
4. **Upload steps** for the chosen path and the right Connect software, then how to find and run it in the Python App.
5. **Input quirks** — at minimum that expressions (`6*pi`, `40+8.50`) and a decimal comma both work.
6. **Trig-mode sentence** from step 6.
7. **One concrete test** — exact keystrokes in, exact screen output expected.

## Worked example

`examples/TIPCALC/` is a complete verified deliverable: program, six test cases, handout spec, generated PDF. Read it before writing a new program.

Requested: *"A program called TIPCALC that asks for a bill amount and a tip percentage, then displays the tip amount and the total."*

```
Bill amount: 48.50
Tip percent: 18
Tip:   8.73
Total: 57.23
```

## Anti-patterns, and what enforces each

Machine-enforced ones fail the gate — you cannot ship past them. The rest are on you.

| Do not | Enforced by | Because |
|---|---|---|
| `f"Total: {t:.2f}"` | lint `E004` + simulate precheck | `SyntaxError` on the calculator |
| `import numpy` / `sympy` / `statistics` / `decimal` | lint `E003` + sandbox `ImportError` | Not on the device |
| `import turtle` on an Evo | lint `E003` (model-aware) | Removed on the Evo; still in old tutorials |
| Use a French extra module as if standard | lint `W011` | `turtle`/`ce_chart`/`ce_box`/`ce_quivr` are separate downloads |
| `sin(deg_input)` without `radians()` | lint `W010` + verify failure | `MODE` does not affect Python |
| Name it `MYTIPCALCULATOR` | lint `E002` | Over 8 chars → renamed to `PYTHON01` |
| Deliver a `.8xv` / `.8xp2` | lint `E010` | Wrong layer; TI Connect converts `.py` |
| `open()` / `exec()` / `compile()` | lint `E006` + sandbox `NameError` | No filesystem in the Python App |
| `if __name__ == "__main__":` | lint `E008` | The calculator imports to run; the guard suppresses everything |
| Symbolic solving or factoring | lint `E007` (partial) + your judgement | CAS risks the exam rules |
| Labels too long for the screen | lint `W007` + simulator screen frame | Output wraps mid-number |
| Non-ASCII (`°`, `±`, `≈`, `€`) | lint `W002` | Unreliable in the calculator font |
| Skip the comma guard in `getnum()` | verify, if you test `48,50` | Non-US users type a decimal comma |
| Say the Evo can't take uploaded files | nothing — do not do it | False |
| Claim checks passed without running them | nothing — do not do it | The gate prints evidence; paste it |
| Offer TI Connect CE for an Evo (or Evo for a CE) | nothing — check the matrix | They are not interchangeable |

## Troubleshooting

| Symptom | Cause | Fix |
|---|---|---|
| `SyntaxError` at a print | f-string | Use `"{:.2f}".format(x)` |
| `ImportError: no module named ...` | Desktop-only library | Recompute with `math` |
| Program appears as `PYTHON01` | Filename broke the naming rules | Rename to 1–8 chars, letter first, re-send |
| `TypeError: can't convert str to float` | Raw `input()` | Route through `getnum()` |
| "Not a number" on a valid entry | Decimal comma, no guard | Add the comma line from the template |
| Nothing happens after import | `__main__` guard | Remove it; keep code at top level |
| Output wraps mid-number | Line too long for this model | Shorten labels; re-simulate with `--target` |
| Trig answers wrong by a lot | Degrees passed as radians | Wrap in `radians()` |
| Program missing after an exam | Press-to-Test disables user programs | Exit exam mode; see `exam-legality.md` |
| TI Connect won't see the calculator | Wrong browser, charge-only cable, or wrong Connect app | Chrome 143+, USB-C data cable, match app to family |
| Sandbox blocks a module you believe exists | Registry gap | Confirm on device, then fix `scripts/ti_models.py` |
| `verify` says "requested more input" | Fewer `inputs` than `input()` calls | Add the missing values |

## References

Read only when the situation calls for it:

- `references/model-matrix.md` — every model, what differs, which are unsupported.
- `references/ti-python-language.md` — supported syntax, module allow/deny, memory limits, quirks.
- `references/transfer-options.md` — all transfer paths step by step, plus troubleshooting.
- `references/exam-legality.md` — ACT/SAT/AP rules, EU exam mode, the exam LED.

Attribution

jovd83jovd83
View sourceMore from jovd83 →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

284972 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2222 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Tanstack Start

Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per ...

10311 votes

Pentest

PTES-aligned adversarial security audit for backend, frontend, and mobile applications. Produces a CVSS-scored Hacker Report with verified PoCs and phased remediation.

5491 votes
View all in development →