Install · est. 60 seconds

One line to cowork.

Happy Cowork installs as symlinks from core/ into each AI tool's native home. No build step, no package manager, no background service. Re-runs are idempotent.

curl -fsSL https://ai.happynguyen.name.vn/install.sh | bash

The installer auto-detects the AI tools already on your machine.
Pick specific tools · Inspect then run · Manual clone

Prerequisites

A typical developer machine already has these.

macOS or Linux

Windows works via WSL 2 (Ubuntu / Debian). Native cmd / PowerShell is not supported.

bash 3.2+

macOS's bundled /bin/bash is fine. Homebrew's bash 5 is also fine.

git 2.30+

For cloning and for the git pull update path.

Cursor

Any recent version. Launch Cursor once so ~/.cursor/ exists before installing.

gh CLI optional

Used by create-pr, review-pr, triage-issues, release-notes. gh auth login once.

jq & direnv optional

JSON wrangling in scripts and per-repo env vars — nice to have.

Pick which tools to install for

The bootstrap accepts a --tool= flag. Leave it off and every detected tool gets configured.

curl -fsSL https://ai.happynguyen.name.vn/install.sh | bash -s -- --tool=cursor

Install for Cursor only.

curl -fsSL https://ai.happynguyen.name.vn/install.sh | bash -s -- --tool=cursor,claude

Install for multiple tools at once.

bin/cowork install --tool=cursor --only=skills,rules

After clone: install only certain categories (skills, rules, hooks, mcp, agents).

Safer: inspect before running

Never pipe a URL into your shell without knowing what it does.

  1. 1

    Download the bootstrap

    curl -fsSL https://ai.happynguyen.name.vn/install.sh -o happy-cowork-install.sh
  2. 2

    Read it

    less happy-cowork-install.sh

    It's a thin wrapper: clones nguyenhappy92/happy-cowork into ~/code/happy-cowork and runs the repo's install.sh. Nothing leaves your machine.

  3. 3

    Run it

    bash happy-cowork-install.sh

Manual clone

Same result, zero curl magic.

  1. 1

    Clone

    git clone https://github.com/nguyenhappy92/happy-cowork.git ~/code/happy-cowork

    SSH variant: git@github.com:nguyenhappy92/happy-cowork.git. Any path works; ~/code/happy-cowork is just a convention.

  2. 2

    Symlink into ~/.cursor/

    cd ~/code/happy-cowork && ./install.sh

    Idempotent — safe to re-run. Existing files at the target paths are renamed with a .bak suffix before a symlink replaces them.

  3. 3

    Restart Cursor, then verify

    Open Cursor and ask the agent:

     List the skills you have available.

    You should see create-pr, rebase, review-pr, daily-standup, triage-issues, and release-notes.

What the installer does

No magic. Just symlinks.

skills/* ~/.cursor/skills/
rules/* ~/.cursor/rules/
hooks/hooks.json ~/.cursor/hooks/hooks.json
hooks/scripts ~/.cursor/hooks/scripts

Install options

Everything below is an environment variable you can prefix to the curl command.

HAPPY_COWORK_DIR

Where to clone the repo. Default $HOME/code/happy-cowork.

HAPPY_COWORK_REF

Branch, tag, or SHA to install. Default main. Pin to a tag for reproducibility.

HAPPY_COWORK_REPO

Git URL. Default https://github.com/nguyenhappy92/happy-cowork.git. Useful for forks.

CURSOR_HOME

Target Cursor config dir. Default $HOME/.cursor.

Examples

HAPPY_COWORK_REF=v1.0.0 \
  bash -c "$(curl -fsSL https://ai.happynguyen.name.vn/install.sh)"

Install a pinned version (once you cut a release).

HAPPY_COWORK_DIR=~/dev/happy-cowork \
  bash -c "$(curl -fsSL https://ai.happynguyen.name.vn/install.sh)"

Install into a custom directory.

Platform notes

macOS

Works with the default /bin/bash (3.2). Homebrew bash 5 works too.

Linux

Any distro with bash and git. Tested on Ubuntu LTS and Debian stable.

Windows (WSL 2)

Install into your WSL home, not /mnt/c/…. Symlinks don't survive the DrvFs boundary reliably.

Updating

Since everything is symlinked, updating is a single git pull:

cd ~/code/happy-cowork && git pull --rebase

Or re-run the one-liner — it's idempotent and will fast-forward to main.

Uninstall

Remove the symlinks. Nothing else is touched — any .bak files stay where they are.

cd ~/code/happy-cowork && \
find ~/.cursor/skills ~/.cursor/rules ~/.cursor/hooks -maxdepth 2 -type l \
  -lname "$(pwd)/*" -print -delete

Troubleshooting

Cursor doesn't see the skills.
Fully quit Cursor (not just close the window) and relaunch. Confirm the symlinks: ls -la ~/.cursor/skills.
~/.cursor/ doesn't exist.
Launch Cursor once so it creates the directory, then re-run the installer.
The installer says "Backing up existing … -> ….bak".
Expected. You had a regular file or directory at the target path; it's safe on disk next to the new symlink.
Permission denied on install.sh.
The bootstrap sets chmod +x automatically. If you cloned manually: chmod +x install.sh.
I use zsh / fish — does that matter?
No. The scripts run under bash regardless of your interactive shell.
Can I install into a custom Cursor home?
Yes: CURSOR_HOME=/some/path bash -c "$(curl -fsSL https://ai.happynguyen.name.vn/install.sh)".
The curl fails with certificate problem.
Your system clock is probably off, or a corporate proxy is intercepting TLS. Fix the clock, or use the manual clone path.

What next

Try a skill

In any chat, say /standup or /triage. The agent picks the matching skill by its description.

Read the recipes

Combine skills into daily workflows — see workflow recipes.

Add your own

Say "use the create-skill skill to add a new skill called my-thing" — or create skills/my-thing/SKILL.md by hand.