Install

ARTie is a plugin for your coding agent. Install it once and your agent can tailor your resume to a job posting from facts you have approved.

Before you start

You need three things on your computer. The first two are required.

1. A coding agent: Claude Code or Codex

Follow the official install page for the one you use: Claude Code or Codex. Claude Code is the recommended path. Both run in a terminal.

2. uv

uv is a Python tool runner. ARTie runs through uvx, which comes with uv, so you do not install Python yourself. The official page has the installer for Windows, macOS and Linux. When it is done, open a new terminal and run uv --version to confirm.

3. A LaTeX engine, for PDFs

ARTie writes your resume in LaTeX and needs a LaTeX engine on your PATH to turn it into a PDF. Either of these works: tectonic or pdflatex. pdflatex comes with MiKTeX on Windows, MacTeX on macOS and TeX Live on Linux. Without either you still get the .tex file, just not the PDF, so you can install this later.

Notes for your system

Windows
Claude Code runs ARTie's hooks with Git Bash, or PowerShell if Git Bash is missing. Codex runs them with the session's shell, which is PowerShell by default. If an install fails on a long file path, see Troubleshooting.
macOS and Linux
Nothing extra. Hooks run with sh.

Install in Claude Code

This is the recommended route. Open a terminal, start claude, and enter these two commands inside Claude Code:

In Claude Code
/plugin marketplace add nathansso/agentic_resume_tailoring
/plugin install art@art

The first adds ARTie's plugin catalog. The second installs the plugin, which registers the MCP server, the /art:* commands and the hooks in one step.

The first start downloads ARTie and takes longer than later ones. It needs the network once, then reuses what it downloaded.

Install in Codex

The same plugin works in Codex. Run these two commands in a terminal:

In a terminal
codex plugin marketplace add nathansso/agentic_resume_tailoring
codex plugin add art@art

The plugin carries ARTie's hooks, which keep your pinned preferences in front of the agent and tell it what you changed by hand in the editor. Codex 0.131 and later load them, and skip them until you trust them: run /hooks inside Codex once after installing, and again after an upgrade changes them.

Older Codex, or Codex without the plugin

If your Codex is older than 0.131, or you register only the server (see Other MCP clients), install the hooks into your own hooks.json instead:

In a terminal
uvx --from "art-mcp[ui] @ https://github.com/nathansso/agentic_resume_tailoring/releases/download/v0.1.0/art_mcp-0.1.0-py3-none-any.whl" art hooks codex --write

Then run /hooks to review and trust them. With the plugin installed this command adds nothing and removes ARTie's own entries from hooks.json, so no hook runs twice. Without the plugin, run it again after you upgrade ARTie: it replaces ARTie's earlier hooks and leaves your own alone.

Approving writes

ARTie's write tools (the ones that save to your resume library or render a file) ask for approval under Codex's default policy. Approve them, or choose to always allow the art server.

Other MCP clients

If you use another MCP client, or want only the tools without the plugin, register the server by hand. For Claude Code:

In a terminal
claude mcp add art -- uvx --from "art-mcp[ui] @ https://github.com/nathansso/agentic_resume_tailoring/releases/download/v0.1.0/art_mcp-0.1.0-py3-none-any.whl" art mcp

For Codex:

In a terminal
codex mcp add art -- uvx --from "art-mcp[ui] @ https://github.com/nathansso/agentic_resume_tailoring/releases/download/v0.1.0/art_mcp-0.1.0-py3-none-any.whl" art mcp

For any other client that starts MCP servers over stdio, the server is everything after the -- in those lines: the command uvx with the arguments that follow it.

The install runs art mcp, which is the same server as art-mcp. Use art mcp: a machine's Application Control policy may block one executable and not the other.

Check that it worked

The first time it starts, ARTie creates its local store at ~/.art/art.db and a default profile. Your data stays in that local file; ARTie keeps no copy on a server.

  1. See that the server is connected. In Claude Code, type /mcp and find the entry for art. In Codex, ask the agent in the next step.
  2. Ask the agent for ARTie's tools. Say: "List the ART tools you can use." The answer should include art_briefing, open_job, execute_plan and render.
  3. Claude Code only: run a read-only command. /art:prefs shows your saved preferences. On a fresh install it has none, and that is a good result: it means the agent reached ARTie.

You can also check from a terminal, without any agent. This prints every tool as JSON:

In a terminal
uvx --from "art-mcp[ui] @ https://github.com/nathansso/agentic_resume_tailoring/releases/download/v0.1.0/art_mcp-0.1.0-py3-none-any.whl" art --list

If any of these fail, see Troubleshooting.

Optional extras

ARTie works fully without any of this. Add what you want, later.

Extras

[ui]
art ui, a local editor where you adjust a tailored resume by hand. The plugin's install already includes it.
[pdf]
Document readers (docling, pypdf, python-docx).
[embed]
Sentence-transformers for semantic matching.

The walkthrough on the Usage page needs none of them. The default install is deliberately light: no torch, no model clients.

The local editor: art ui

The release ships with the editor built in, so you need no checkout, Node or npm. Fill in the job's id (your agent can tell you, or run /art:open in Claude Code and it prints this line for you):

In a terminal
uvx --from "art-mcp[ui] @ https://github.com/nathansso/agentic_resume_tailoring/releases/download/v0.1.0/art_mcp-0.1.0-py3-none-any.whl" art ui --job <job_id>

It opens at http://127.0.0.1:8765/, on your machine only. Anything you save there comes back to your agent on your next message.

Optional: strengthen the checks with Jev

ARTie works fully without this, so skip it if you like. If you have a TypeSafe API key, ARTie can use it, from your computer with no ARTie server in between, to ask TypeSafe's Jev a few narrow yes/no and multiple-choice questions that plain rules answer less well:

  • Does a reworded bullet say more than its cited source supports?
  • Does a bullet mention a topic you banned, in other words?
  • Which of your saved bullets fits a job best?

Jev never writes resume text. Without a key, each question falls back to a plain rule (a check of the bullet's wording against its cited source, a literal term match, word overlap, or your agent asking you), and those rules still gate your resume. Jev adds the reworded cases they miss.

To turn it on, set the key in the environment Claude Code or Codex starts from, for example in your shell profile:

Shell profile (macOS, Linux, Git Bash)
export TYPESAFE_API_KEY='...'

On Windows, set it as a user environment variable named TYPESAFE_API_KEY, the same way as UV_CACHE_DIR under Troubleshooting. Then restart your agent.

The key is never logged or stored in the database. When a key is set and an answer is not already cached, a small piece of text goes to api.typesafe.ai: the bullet or message in question and the posting requirements it is checked against, never your whole resume or the whole posting. To be certain nothing is sent, leave the key unset or set ART_JEV_MODE=off. To see whether ARTie can see a key, run the check command from above with art jev status in place of art --list.

The full list of what is sent is in INSTALL.md.

Troubleshooting

The first start is slow

The first start downloads the release and builds its environment. That needs the network and takes a while. After that, uv keeps both in its cache. ARTie's hooks do nothing until the server has started once, so the first message you send may get no hook output and the next one will.

It fails to start when you are offline

uv re-checks its cached answers a few minutes after they were made. With the network on, that costs a second or two. With it off, a start after the cache has aged fails once uv gives up retrying, about 15 seconds. There are two fixes, both using what is already cached.

Set this in the environment Claude Code or Codex starts from. uv then never touches the network and uses the cache as it is (after one earlier online start):

Environment variable
UV_OFFLINE=1

Or install ARTie as a uv tool once, so uvx stops re-resolving it:

In a terminal
uv tool install "art-mcp[ui] @ https://github.com/nathansso/agentic_resume_tailoring/releases/download/v0.1.0/art_mcp-0.1.0-py3-none-any.whl"

Upgrade it later by installing the next release the same way.

Windows: the install fails on a long path

uv's default cache folder on Windows can be nested deep enough to break the install. Point uv at a short one before you start Claude Code or Codex. In PowerShell:

PowerShell
[Environment]::SetEnvironmentVariable("UV_CACHE_DIR", "C:\uvc", "User")

Programs read it when they start, so open a new terminal and start your agent again.

Windows: Application Control blocks an executable

If a policy on your machine blocks art-mcp.exe, the plugin is unaffected, because it runs art mcp. If you registered the server by hand, use art mcp as in Other MCP clients.

Codex hooks do nothing on Windows

The hook line needs a PowerShell or bash session shell. If Codex has none and falls back to cmd.exe, ; is not a separator there and the hook exits without doing anything. Use a PowerShell or bash session.

You get a .tex file but no PDF

ARTie found no LaTeX engine. Install tectonic or pdflatex (see Before you start), make sure it is on your PATH, and ask your agent to render again.