Set Up Claude as Your Startup's AI OS

Configure Claude Desktop with custom Skills and workflows for your startup.

Introduction

30 Second Summary

Every time you ask an AI assistant for help, you spend the first few messages re-explaining your product, your tech stack, and your preferences. For a solo founder juggling both code and marketing, that wasted context adds up fast.

In this project, you will configure Claude Desktop to act as your startup's AI operating system. You'll give it persistent memory about your product so every interaction starts immediately productive.

What You'll Build

A fully configured Claude environment with custom Skills, optimized token settings, and an automated marketing workflow tailored to your B2B SaaS product.

By the end of this project, you'll have:

  • A lean CLAUDE.md file that gives Claude persistent context about your codebase, conventions, and brand.
  • Two working custom Skills: one for generating platform-specific marketing content and one for security auditing your code.
  • A repeatable Cowork marketing workflow that produces a week's worth of social content from a single prompt.
  • Secret Mission: Build a compound Skill that chains research, content creation, and scheduling into one command.

Are there any prerequisites?

You'll need an active Claude Max 5x plan ($100/month) and an existing webapp codebase you want Claude to learn. Basic familiarity with using a terminal is helpful but not required.

Install and Verify Claude Code

You have the Claude Desktop App running and your Max 5x plan confirmed. Now you need the Claude Code CLI accessible from your terminal so you can work directly with your Assessly codebase.

Claude Code is an AI coding agent that reads your project files, writes code, and runs commands. Once installed, you can give it persistent memory about Assessly by generating a CLAUDE.md file at the root of your project.

In this step, get ready to:
  • Install Claude Code CLI on Windows and verify it works from the terminal.
  • Confirm Claude Code runs inside the Claude Desktop App.
  • Run /init to auto-generate a starter CLAUDE.md for Assessly.
Install Claude Code CLI on Windows

Claude Code runs directly in the desktop app, but you also need the standalone CLI installed so you can launch it from any terminal window and navigate to your project directory.

  • Press the Windows key to open your search bar.
  • Type PowerShell and press Enter to open Windows PowerShell.

How do I know I'm in PowerShell?

Your prompt starts with PS C:\ followed by your username. If you see C:\ without the PS prefix, you're in CMD instead. The install command below is specifically for PowerShell.

  • Install Claude Code by running this command:
irm https://claude.ai/install.ps1 | iex

What does this command do?

This downloads and runs the official Claude Code installer script from Anthropic. It installs the claude binary and adds it to your system PATH so you can use it from any terminal.

Native installs auto-update in the background, so you always have the latest version without running update commands manually.

  • After installation completes, close and reopen PowerShell so the PATH update takes effect.
  • Verify the installation by running:
claude --version

✔️ I see a version number

Claude Code is installed and ready to use. You can move on to the next substep.

ⓧ 'claude' is not recognized

The CLI is not on your PATH yet. Try these fixes:

  • Make sure you fully closed and reopened PowerShell after installing.
  • Run the install command again. It is safe to re-run.
  • If you still see the error, open a brand new PowerShell window (not a tab in the same window) and try claude --version again.

Still not working?

If the command is still not recognized after a fresh PowerShell window, your system may need a restart to pick up the new PATH entry. Restart your computer, open PowerShell, and run claude --version once more.

help me troubleshoot Claude Code CLI not being recognized on Windows

ⓧ I see a token error about &&

This error means you are in CMD, not PowerShell. The command irm https://claude.ai/install.ps1 | iex only works in PowerShell.

  • Close the current terminal window.
  • Press the Windows key, type PowerShell, and open Windows PowerShell (look for the blue icon).
  • Run the install command again in this new PowerShell window.
Confirm Claude Code runs in the desktop app

Claude Code also runs directly inside the Claude Desktop App. This gives you a GUI experience where you can preview code changes, review diffs, and monitor pull requests without leaving the app.

  • Switch back to the Claude Desktop App.
  • Look for the Claude Code option in the app interface. It should be accessible alongside Chat and Cowork.
  • Open a Claude Code session inside the desktop app to confirm it loads successfully.

Why both terminal and desktop app?

The terminal CLI and the desktop app connect to the same underlying Claude Code engine. Your CLAUDE.md files, settings, and Skills work across both surfaces.

For this project, you will use the terminal to run /init and navigate to your project directory. You can use whichever surface you prefer for day-to-day coding after setup is complete.

  • Confirm you see a Claude Code session ready for input. You do not need to type anything yet.

Don't see Claude Code in the desktop app?

Make sure your Claude Desktop App is up to date. Claude Code is available on all paid plans through the desktop app. If you do not see it, check for an app update by closing and reopening the desktop app.

help me find Claude Code inside the Claude Desktop App on Windows

Generate a starter CLAUDE.md with /init

The /init command analyzes your codebase and creates a CLAUDE.md file with build commands, test instructions, and project conventions it discovers. This gives Claude Code instant context about Assessly every time you start a session.

  • In PowerShell, navigate to your Assessly project directory by running:
cd [[ASSESSLY_PATH="path to your Assessly project folder"]]
  • Launch Claude Code in this directory by running:
claude

First-time login

If this is your first time running claude, you will be prompted to log in via your browser. Follow the prompts to authenticate with your Anthropic account. Your Max 5x plan is already active, so you just need to confirm the login.

  • Once Claude Code starts and you see the input prompt, generate the starter CLAUDE.md by typing:
/init

What does /init do?

Claude analyzes your Assessly codebase and creates a CLAUDE.md file at the project root. It automatically discovers build commands, test instructions, and coding conventions from your existing code.

If any other config files exist (like .cursorrules or AGENTS.md), /init reads and incorporates the relevant parts into the generated file.

  • Wait for Claude to finish analyzing your codebase. It will display a summary of what it found and create the CLAUDE.md file.
  • Verify the file was created by running:
ls CLAUDE.md

You should see CLAUDE.md listed in the output, confirming it was created at your Assessly project root.

Don't see CLAUDE.md?

Make sure you ran /init from inside the Claude Code session (after running claude), not directly in PowerShell. The / prefix indicates a slash command that only works inside a Claude Code session.

Also confirm you are in the correct directory. Run pwd in PowerShell to check your current location matches your Assessly project folder.

help me troubleshoot why /init did not create a CLAUDE.md file

What is CLAUDE.md?

CLAUDE.md is a markdown file at your project root that Claude Code reads at the start of every session. It acts as persistent memory. Anything you put here (coding standards, architecture decisions, build commands) is available to Claude without you re-explaining it each time.

The auto-generated version is just a starting point. In the next step, you will craft a lean, optimized version specifically tailored to Assessly.

Your development environment is ready. Claude Code is installed, running in both the terminal and the desktop app, and has a starter CLAUDE.md with basic context about Assessly. Next up, you will rewrite this file into a lean, purpose-built configuration that transforms every future Claude interaction.

Write Your CLAUDE.md

In the previous step, you installed Claude Code and ran /init to generate a starter CLAUDE.md for your Assessly project.

That auto-generated file gives Claude a basic sketch of your project, but it lacks the depth to prevent repeated mistakes. Every time you start a new session without detailed context, you burn tokens re-explaining your conventions, security rules, and architecture. A well-crafted CLAUDE.md eliminates that waste by giving Claude persistent memory of everything it needs to know about Assessly.

In this step, get ready to:
  • Write a lean CLAUDE.md covering Assessly's architecture, tech stack, and build commands.
  • Add coding conventions, testing requirements, and branch strategy rules.
  • Mark critical rules with emphasis markers so Claude always follows them.
Write the project foundation

Your CLAUDE.md should stay under 200 lines. Anthropic's docs recommend this limit because longer files consume more context and reduce how reliably Claude follows your instructions.

Why keep CLAUDE.md short?

CLAUDE.md loads into the context window at the start of every session. Every line is a recurring token cost. If the file gets too long, important rules get buried and Claude starts ignoring them.

If an instruction only matters for one part of your codebase, move it to a Skill or a path-scoped rule instead. You will build Skills in later steps of this project.

  • Open the CLAUDE.md file at the root of your Assessly project directory.
  • Select all the existing auto-generated content and delete it.
  • Replace it with the following project overview and tech stack section:
# Assessly

Dual-score coding assessment platform that evaluates both code correctness and explanation quality. Built for engineering teams (hiring) and universities (grading).

## Architecture

- Web application with sandboxed code execution engine
- Multi-language support: Python, JavaScript, Java, C, C++
- Real-time analytics dashboard with 12+ evaluation metrics
- RESTful API serving a React frontend

## Tech Stack

- Frontend: React, TypeScript, Tailwind CSS
- Backend: Node.js, Express
- Database: PostgreSQL
- Code Execution: Docker-based sandboxed runners
- Testing: Jest (unit), Playwright (e2e)
- Deployment: AWS (ECS, RDS, S3)

## Commands

### Build
```
npm run build
```

### Run (development)
```
npm run dev
```

### Test
```
npm run test          # unit tests
npm run test:e2e      # end-to-end tests
npm run lint          # linting
```

What does this section do?

The project overview tells Claude what Assessly is in one sentence. This prevents Claude from making incorrect assumptions about the product.

The architecture and tech stack sections let Claude know exactly which frameworks and tools you use. When Claude suggests code, it will use the correct imports, patterns, and APIs without you having to specify them every time.

The commands section gives Claude runnable commands it can execute to build, test, and lint your code.

Customize for your actual stack

If your Assessly project uses different frameworks or commands than the example above, replace them with your actual tech stack. The structure and format matter more than the specific values.

Add coding conventions, testing, and branch strategy

Conventions are rules Claude cannot discover by reading your code alone. Without them, Claude will guess based on general best practices, which may not match your team's decisions.

  • Add the following sections below the Commands section in your CLAUDE.md:
## Coding Conventions

### Naming
- Components: PascalCase (e.g., AssessmentCard.tsx)
- Utilities: camelCase (e.g., formatScore.ts)
- Constants: SCREAMING_SNAKE_CASE
- Database columns: snake_case
- API endpoints: kebab-case (/api/v1/assessment-results)

### File Structure
- One component per file
- Co-locate tests with source files (ComponentName.test.tsx)
- Shared utilities in src/utils/
- API routes in src/api/

### Code Style
- Prefer named exports over default exports
- Use TypeScript strict mode
- Destructure props in function signature
- Keep components under 150 lines

## Testing Requirements

- All new features require unit tests (minimum 80% coverage for the feature)
- API endpoints require integration tests
- UI components require at least one happy-path test
- Run the full test suite before opening a PR

## Branch Strategy

- main: production-ready code, deploy on merge
- dev: integration branch for feature work
- Feature branches: feature/short-description
- Bugfix branches: fix/short-description
- Never commit directly to main or dev

What does this section do?

The naming conventions prevent Claude from guessing wrong. Without them, Claude might name a file assessment_card.tsx when your codebase uses AssessmentCard.tsx.

The testing requirements ensure Claude writes tests when it creates new features. The branch strategy prevents Claude from suggesting commits directly to main.

Add security policies and emphasis markers

Some rules are more critical than others. If Claude ignores a naming convention, the fix is cosmetic. If Claude ignores a security rule, the consequences are serious.

Anthropic's best practices recommend adding emphasis markers like IMPORTANT and YOU MUST to improve adherence on critical rules. Claude is trained to handle absolute language, so these markers signal which instructions are non-negotiable.

  • Add the following security policies and guardrails section at the bottom of your CLAUDE.md:
## Security Policies

IMPORTANT: All user-submitted code runs in isolated Docker containers. Never execute user code on the host machine.

IMPORTANT: Never log or expose assessment answers in API responses. Candidate submissions are encrypted at rest.

YOU MUST sanitize all user inputs before database queries. Use parameterized queries exclusively.

YOU MUST validate authentication tokens on every API request. No endpoint is publicly accessible without auth.

## Guardrails

IMPORTANT: Never store API keys, secrets, or credentials in source code. Use environment variables exclusively.

YOU MUST run npm run lint before suggesting code is complete. All code must pass linting.

IMPORTANT: Never modify the sandbox execution engine without explicit approval. Changes affect assessment integrity.

YOU MUST preserve backward compatibility for all public API endpoints. Breaking changes require a new API version.

Never disable TypeScript strict mode.

Never use any or unknown as a type escape without a comment explaining why.

Never skip error handling. All async operations must have try/catch blocks.

What do these markers do?

IMPORTANT and YOU MUST are emphasis markers that signal to Claude which rules are non-negotiable. Anthropic's official best practices confirm that adding emphasis improves Claude's adherence to critical instructions.

The "Never" rules at the bottom are guardrails that prevent common mistakes. Claude treats these as hard boundaries it should not cross, even if a prompt seems to ask for it.

  • Save your CLAUDE.md file.
  • Count the total lines in your file. It should be under 200 lines.

File is over 200 lines?

If your file exceeds 200 lines, trim any sections that repeat information Claude could infer from reading your code. Remove obvious language conventions Claude already knows (like "use semicolons in JavaScript"). Keep only rules that are specific to Assessly and that Claude would get wrong without explicit guidance.

Help me trim my CLAUDE.md to under 200 lines.

✔️ Awesome, I've got everything!

Great. Double check you have saved your CLAUDE.md file at the root of your Assessly project.

ⓧ I'd like to double check the full code

Here is the complete CLAUDE.md file. Compare yours against it:

# Assessly

Dual-score coding assessment platform that evaluates both code correctness and explanation quality. Built for engineering teams (hiring) and universities (grading).

## Architecture

- Web application with sandboxed code execution engine
- Multi-language support: Python, JavaScript, Java, C, C++
- Real-time analytics dashboard with 12+ evaluation metrics
- RESTful API serving a React frontend

## Tech Stack

- Frontend: React, TypeScript, Tailwind CSS
- Backend: Node.js, Express
- Database: PostgreSQL
- Code Execution: Docker-based sandboxed runners
- Testing: Jest (unit), Playwright (e2e)
- Deployment: AWS (ECS, RDS, S3)

## Commands

### Build
```
npm run build
```

### Run (development)
```
npm run dev
```

### Test
```
npm run test          # unit tests
npm run test:e2e      # end-to-end tests
npm run lint          # linting
```

## Coding Conventions

### Naming
- Components: PascalCase (e.g., AssessmentCard.tsx)
- Utilities: camelCase (e.g., formatScore.ts)
- Constants: SCREAMING_SNAKE_CASE
- Database columns: snake_case
- API endpoints: kebab-case (/api/v1/assessment-results)

### File Structure
- One component per file
- Co-locate tests with source files (ComponentName.test.tsx)
- Shared utilities in src/utils/
- API routes in src/api/

### Code Style
- Prefer named exports over default exports
- Use TypeScript strict mode
- Destructure props in function signature
- Keep components under 150 lines

## Testing Requirements

- All new features require unit tests (minimum 80% coverage for the feature)
- API endpoints require integration tests
- UI components require at least one happy-path test
- Run the full test suite before opening a PR

## Branch Strategy

- main: production-ready code, deploy on merge
- dev: integration branch for feature work
- Feature branches: feature/short-description
- Bugfix branches: fix/short-description
- Never commit directly to main or dev

## Security Policies

IMPORTANT: All user-submitted code runs in isolated Docker containers. Never execute user code on the host machine.

IMPORTANT: Never log or expose assessment answers in API responses. Candidate submissions are encrypted at rest.

YOU MUST sanitize all user inputs before database queries. Use parameterized queries exclusively.

YOU MUST validate authentication tokens on every API request. No endpoint is publicly accessible without auth.

## Guardrails

IMPORTANT: Never store API keys, secrets, or credentials in source code. Use environment variables exclusively.

YOU MUST run npm run lint before suggesting code is complete. All code must pass linting.

IMPORTANT: Never modify the sandbox execution engine without explicit approval. Changes affect assessment integrity.

YOU MUST preserve backward compatibility for all public API endpoints. Breaking changes require a new API version.

Never disable TypeScript strict mode.

Never use any or unknown as a type escape without a comment explaining why.

Never skip error handling. All async operations must have try/catch blocks.

Your CLAUDE.md is complete. Every future Claude Code session in your Assessly project now starts with full context about your architecture, conventions, and security boundaries. Next up, you will configure token-saving settings to make every session even more efficient.

Configure Token-Saving Settings

Your CLAUDE.md gives Claude instant context about Assessly. But context is only half the efficiency equation. Every message you send also costs thinking tokens, and those add up fast when Claude uses deep reasoning on simple tasks.

This step teaches you how to control the intensity (and cost) of each interaction. You will learn to match Claude's effort to the complexity of each task, keep sessions clean, and plan before executing.

In this step, get ready to:
  • Set up model switching and effort levels for different task types.
  • Practice session hygiene with the clear, compact, and rename workflow.
  • Test plan mode to prevent expensive rework on complex tasks.
Set up model switching and effort levels

Not every task needs the same amount of compute. A quick variable rename needs less reasoning power than redesigning your authentication flow.

Claude Code lets you pick which model handles a task and how hard it thinks about the answer.

  • In your Claude Code session (inside your Assessly project directory), switch to the Sonnet model by running:
/model

What does this command do?

The /model command opens an interactive picker where you can select a model and adjust effort with the left/right arrow keys. Pick Sonnet for routine coding tasks (renaming, formatting, simple bug fixes). Switch to Opus for architecture decisions and multi-step reasoning.

  • Select Sonnet from the model list. You should see the model name update in your prompt bar.
  • Now set the effort level for cost-sensitive tasks by running:
/effort medium

What are effort levels?

Effort levels control how deeply Claude reasons on each step. Lower effort is faster and cheaper for straightforward tasks. Higher effort provides deeper reasoning for complex problems.

  • `low` is for short, scoped, latency-sensitive tasks that are not intelligence-sensitive.
  • `medium` reduces token usage for cost-sensitive work that can trade off some intelligence.
  • `high` balances token usage and intelligence. This is the default on most models.
  • `xhigh` provides deeper reasoning at higher token spend.
  • For a task like planning Assessly's new assessment module, switch back to higher effort by running:
/effort high

You should see a confirmation that the effort level changed. Levels low, medium, high, and xhigh persist across sessions, so you only need to set this once for your default workflow.

Match effort to task type

For Assessly, use medium effort when asking Claude to rename variables, fix typos, or generate boilerplate. Use high or xhigh when asking Claude to design a new feature, review security logic, or refactor a complex module.

Model or effort command not working?

Make sure you are typing the command inside the Claude Code session (after the prompt), not in a regular terminal shell. All slash commands only work inside an active Claude Code session.

If you see a message about unsupported effort levels, the available levels depend on your current model. Run /effort with no arguments to see the interactive slider and all available options for your active model.

Why isn't my /effort or /model command responding?

Practice session hygiene with /clear, /compact, and /rename

As you work, your conversation accumulates context. Stale context from a previous task wastes tokens on every subsequent message because Claude re-reads the entire conversation history each time.

  • Before clearing a session, give it a name so you can return to it later. Run:
/rename assessly-auth-review

You should see the session name update in your prompt bar. This name appears when you use claude --resume later.

  • Now clear the session to start fresh by running:
/clear

What does /clear do?

The /clear command wipes the current conversation context. Use it when switching to unrelated work. Without clearing, Claude keeps reading stale messages about your previous task, burning tokens and potentially confusing its responses.

  • Start a new task by asking Claude something about your Assessly codebase (any question will do). Let it respond.
  • Once the conversation has several messages, compact it with custom instructions by running:
/compact Focus on Assessly architecture and API endpoints

What does /compact do?

The /compact command summarizes the conversation to free up context space without losing important information. The text after the command tells Claude what to preserve during summarization. This is useful for long sessions where you want to continue but the context window is filling up.

The recommended workflow is: /rename your session before switching tasks, then /clear to start fresh. Use /compact when you want to stay in the same session but free up context space.

Session feels sluggish or responses seem confused?

This usually means your context window is full of stale information. Run /clear to reset, or /compact to summarize and free space while keeping the key points.

Claude's responses seem confused or off-topic after a long session. What should I do?

Use plan mode for complex tasks

When Claude dives straight into implementation on a complex task, it sometimes goes down the wrong path. That means wasted tokens undoing and redoing work.

Plan mode asks Claude to explore the codebase and propose an approach for your approval before making any changes.

  • Press Shift+Tab in the Claude Code prompt to toggle into plan mode.
  • Type a complex task for Assessly, such as: Refactor the assessment scoring module to support custom rubrics.
  • Press Enter to submit.

Claude explores the codebase and proposes an approach instead of immediately editing files. You review the plan and approve or redirect before any code changes happen.

Why use plan mode?

Plan mode prevents expensive rework. When Claude proposes an approach first, you catch wrong assumptions before they become wrong code. This saves both tokens (no undo/redo cycle) and time (no debugging a bad implementation).

Use plan mode for any task that touches multiple files, requires architectural decisions, or could be approached in more than one way.

  • Review the plan Claude presents. Press Shift+Tab again to toggle back to normal mode when you are ready to let Claude implement.

Not seeing a plan? Claude jumped straight to editing?

Make sure you pressed Shift+Tab before typing your message. You should see an indicator in the prompt area that plan mode is active. If you typed the message first and then pressed Shift+Tab, clear the input and try again.

Claude is editing my files even though I wanted plan mode. How do I fix this?

Your Claude Code environment is now optimized for cost and speed. Next up, you will build your first custom Skill to automate Assessly's marketing content creation.

Create Your Marketing Content Skill

Your CLAUDE.md gives Claude persistent memory about Assessly's codebase. Now you need Claude to handle a workflow you repeat constantly: creating marketing content for different social platforms.

Instead of re-explaining your brand voice, audience, and platform rules every time you ask Claude to write a post, you can package all of that into a Skill. Skills are on-demand workflows that Claude loads only when relevant, keeping your context window lean.

In this step, get ready to:
  • Create the skill directory structure and YAML frontmatter.
  • Write the skill body with brand voice, audience, and platform-specific rules.
  • Add a brand guide reference file for deeper context.
Set up the skill directory and frontmatter

A Skill lives in a named folder inside .claude/skills/. The folder name becomes the command you type to invoke it. For your marketing skill, the folder create-content means you will invoke it with /create-content.

  • In your Claude Code terminal (inside your Assessly project directory), create the skill directory structure by running this command:
mkdir -p .claude/skills/create-content/references

What does this command do?

The -p flag creates the full path of nested directories in one go. This creates .claude/skills/create-content/ (where your SKILL.md lives) and references/ (where your brand guide will go).

  • Confirm the directories exist by running:
ls .claude/skills/create-content/

You should see references listed in the output.

Every SKILL.md file starts with YAML frontmatter between --- markers. This metadata tells Claude what the skill does and when to load it.

  • Create the SKILL.md file inside .claude/skills/create-content/ and add this frontmatter at the top:
---
description: |
  Generate platform-specific marketing content for Assessly.
  Use when asked to create content, generate posts, write social media copy,
  draft marketing materials, or produce content for X, LinkedIn, or Instagram.
---

What does the frontmatter do?

At startup, Claude pre-loads only the description from every installed skill. This is the first level of progressive disclosure. Claude reads the full SKILL.md body only when it determines the skill is relevant to your request.

The description includes trigger phrases like "create content" and "generate posts" so Claude knows when to activate this skill automatically.

  • Save SKILL.md.

Skill not showing up?

Make sure the file is named exactly SKILL.md (case-sensitive). Variations like skill.md or Skill.md will not be discovered.

Also confirm the file path is .claude/skills/create-content/SKILL.md relative to your Assessly project root.

Why isn't Claude finding my skill?

Write the skill body

The body of SKILL.md contains the instructions Claude follows when the skill runs. This is where you encode Assessly's brand voice, target audience, and platform-specific formatting rules.

  • In SKILL.md, add the following content below the closing --- of the frontmatter:
# Marketing Content Generation

## Brand Voice
- Authoritative but approachable
- Data-driven with concrete examples
- Focus on outcomes and impact
- Never salesy or pushy

## Target Audience

Assessly sells to two segments:
1. **Institutions** (universities, bootcamps) evaluating student engineering skills
2. **Companies** (engineering teams) assessing candidate technical ability

Always frame content around the pain of inaccurate assessment and the value of measuring genuine understanding.

## Platform Rules

### X (formerly Twitter)
- Maximum 280 characters
- Lead with a hook (question, bold claim, or surprising stat)
- Conversational tone
- 0-2 hashtags maximum
- End with engagement prompt or link

### LinkedIn
- Long-form thought leadership (150-300 words)
- Professional but not stiff
- Open with insight or industry observation
- Include data points or case studies
- End with question to drive comments
- 3-5 relevant hashtags

### Instagram
- Visual-first (describe image/graphic concept)
- Caption with line breaks for readability
- Storytelling structure (hook > context > takeaway)
- 5-10 hashtags in first comment
- Include clear call-to-action

## Content Pillars
1. Engineering hiring is broken (problem awareness)
2. Code quality alone does not measure understanding (differentiation)
3. Dual-score assessment methodology (product education)
4. Success stories and metrics (social proof)
5. EdTech and the future of skills evaluation (thought leadership)

## Output Format
For each piece of content, provide:
- Platform name
- Post text (formatted for the platform)
- Suggested visual concept (if applicable)
- Hashtags (listed separately)
- Best posting time suggestion

What does this skill body do?

The body gives Claude five key pieces of context it needs to produce on-brand content: your voice guidelines, who you are talking to, platform-specific character limits and formatting rules, recurring content themes, and the structure of the output you expect.

Claude reads this body only when it detects a content-creation request. The rest of the time, only the short description from the frontmatter sits in context.

  • Save SKILL.md.
  • Test the skill by typing /create-content in Claude Code. You should see the skill appear in the autocomplete menu.

Skill command not appearing in autocomplete?

If /create-content does not appear, try running /clear and starting a fresh session. Skill discovery runs at startup, so newly created skills may not appear until the next session.

Help me troubleshoot my /create-content skill not showing up

✔️ Awesome, I've got everything!

Great. Double check you have saved your file before moving on.

ⓧ I'd like to double check the full code

Here is the complete SKILL.md file:

---
description: |
  Generate platform-specific marketing content for Assessly.
  Use when asked to create content, generate posts, write social media copy,
  draft marketing materials, or produce content for X, LinkedIn, or Instagram.
---

# Marketing Content Generation

## Brand Voice
- Authoritative but approachable
- Data-driven with concrete examples
- Focus on outcomes and impact
- Never salesy or pushy

## Target Audience

Assessly sells to two segments:
1. **Institutions** (universities, bootcamps) evaluating student engineering skills
2. **Companies** (engineering teams) assessing candidate technical ability

Always frame content around the pain of inaccurate assessment and the value of measuring genuine understanding.

## Platform Rules

### X (formerly Twitter)
- Maximum 280 characters
- Lead with a hook (question, bold claim, or surprising stat)
- Conversational tone
- 0-2 hashtags maximum
- End with engagement prompt or link

### LinkedIn
- Long-form thought leadership (150-300 words)
- Professional but not stiff
- Open with insight or industry observation
- Include data points or case studies
- End with question to drive comments
- 3-5 relevant hashtags

### Instagram
- Visual-first (describe image/graphic concept)
- Caption with line breaks for readability
- Storytelling structure (hook > context > takeaway)
- 5-10 hashtags in first comment
- Include clear call-to-action

## Content Pillars
1. Engineering hiring is broken (problem awareness)
2. Code quality alone does not measure understanding (differentiation)
3. Dual-score assessment methodology (product education)
4. Success stories and metrics (social proof)
5. EdTech and the future of skills evaluation (thought leadership)

## Output Format
For each piece of content, provide:
- Platform name
- Post text (formatted for the platform)
- Suggested visual concept (if applicable)
- Hashtags (listed separately)
- Best posting time suggestion
Add the brand guide reference

Skills can bundle additional files in their directory that Claude reads only when it needs deeper context. Your brand guide contains positioning and messaging details that the skill body references but does not need to repeat in full.

  • Create brand-guide.md inside the references/ directory and add the following content:
# Assessly Brand Guide

## Positioning Statement

Assessly is the evaluation platform that measures understanding, not just output.
By scoring both code correctness AND explanation quality, Assessly gives institutions
and companies the complete picture of engineering talent.

## Tone of Voice

- **Authoritative**: We know assessment. Back claims with data.
- **Approachable**: Complex ideas in plain language. No jargon walls.
- **Data-driven**: Metrics, percentages, and measurable outcomes over vague promises.
- **Outcome-focused**: Always tie features to results for the customer.

## Key Messages

1. Traditional coding assessments only measure half the picture.
2. Understanding WHY code works matters as much as making it work.
3. Assessly's dual-score system evaluates both code quality and conceptual clarity.
4. 12+ granular metrics give hiring teams and educators unprecedented insight.
5. Sandboxed execution across 5 languages (Python, JS, Java, C, C++) means fair, consistent evaluation.

## Audience Personas

### Institutions (Universities and Bootcamps)
- Pain: Manual grading is slow and inconsistent. Hard to tell who truly understands vs who memorized patterns.
- Need: Scalable, objective assessment that measures genuine comprehension.
- Message angle: "Stop guessing who gets it. Measure understanding at scale."

### Companies (Engineering Hiring Teams)
- Pain: Candidates pass whiteboard interviews but struggle in real roles. Interview signal is noisy.
- Need: Reliable signal on whether a candidate can think through problems, not just solve them.
- Message angle: "Hire engineers who understand the code they write."

Why a separate reference file?

This is the third level of progressive disclosure. Claude reads SKILL.md when the skill activates. It only reads files in references/ if it needs deeper detail for the current task. This keeps your base context cost low while still having rich brand information available.

  • Save brand-guide.md.
  • Verify both files exist by running:
ls .claude/skills/create-content/
ls .claude/skills/create-content/references/

You should see SKILL.md and references in the first listing, and brand-guide.md in the second.

File not showing up in the listing?

Double check you saved the file in the correct directory. The full path should be .claude/skills/create-content/references/brand-guide.md relative to your Assessly project root.

Help me fix my brand guide file location

✔️ Awesome, I've got everything!

Great. Double check you have saved your file before moving on.

ⓧ I'd like to double check the full code

Here is the complete brand-guide.md file:

# Assessly Brand Guide

## Positioning Statement

Assessly is the evaluation platform that measures understanding, not just output.
By scoring both code correctness AND explanation quality, Assessly gives institutions
and companies the complete picture of engineering talent.

## Tone of Voice

- **Authoritative**: We know assessment. Back claims with data.
- **Approachable**: Complex ideas in plain language. No jargon walls.
- **Data-driven**: Metrics, percentages, and measurable outcomes over vague promises.
- **Outcome-focused**: Always tie features to results for the customer.

## Key Messages

1. Traditional coding assessments only measure half the picture.
2. Understanding WHY code works matters as much as making it work.
3. Assessly's dual-score system evaluates both code quality and conceptual clarity.
4. 12+ granular metrics give hiring teams and educators unprecedented insight.
5. Sandboxed execution across 5 languages (Python, JS, Java, C, C++) means fair, consistent evaluation.

## Audience Personas

### Institutions (Universities and Bootcamps)
- Pain: Manual grading is slow and inconsistent. Hard to tell who truly understands vs who memorized patterns.
- Need: Scalable, objective assessment that measures genuine comprehension.
- Message angle: "Stop guessing who gets it. Measure understanding at scale."

### Companies (Engineering Hiring Teams)
- Pain: Candidates pass whiteboard interviews but struggle in real roles. Interview signal is noisy.
- Need: Reliable signal on whether a candidate can think through problems, not just solve them.
- Message angle: "Hire engineers who understand the code they write."

Your marketing content skill is ready to go. Next up, you will build a security audit skill that checks your Assessly codebase for common vulnerabilities.

Create Your Security Audit Skill

Your marketing content Skill handles one side of running Assessly. The other critical side is keeping your codebase secure.

Security vulnerabilities in a web application can go unnoticed until they become expensive problems. In this step, you will build a /security-audit Skill that checks your code for the most common vulnerability patterns every time you invoke it.

In this step, get ready to:
  • Create the security-audit Skill directory and SKILL.md file.
  • Write the YAML frontmatter with disable-model-invocation: true to prevent auto-triggering.
  • Define vulnerability checks and a structured checklist output format.
Create the security-audit skill directory

Just like the /create-content Skill, your new Skill lives inside its own folder under .claude/skills/. The folder name becomes the slash command you type to invoke it.

  • Create the security-audit Skill directory and its SKILL.md file by running these commands in your Assessly project terminal:
mkdir .claude/skills/security-audit
touch .claude/skills/security-audit/SKILL.md
  • Confirm the directory was created by running:
ls .claude/skills/security-audit/

You should see SKILL.md listed in the output.

Don't see the file?

Make sure you are running these commands from your Assessly project root (the same directory that contains your CLAUDE.md and .claude/ folder). If .claude/skills/ does not exist yet, create it first with mkdir -p .claude/skills/security-audit.

help me create the security-audit Skill directory in my Assessly project

Write the SKILL.md with frontmatter and vulnerability checks

Your SKILL.md needs two parts: YAML frontmatter that tells Claude when to use the Skill, and a markdown body with the instructions Claude follows when the Skill runs.

Setting disable-model-invocation: true prevents Claude from automatically loading this Skill during regular coding sessions. It only runs when you explicitly type /security-audit.

  • Open .claude/skills/security-audit/SKILL.md in your editor and paste the following content:
---
description: "Audit code for security vulnerabilities including SQL injection, XSS, authentication flaws, hardcoded secrets, and insecure dependencies. Use when reviewing code changes, before deployments, or during periodic security reviews."
disable-model-invocation: true
---

# Security Audit

## Scope

Review the Assessly codebase for the following vulnerability categories:

### 1. SQL Injection
- Check for raw string concatenation in database queries
- Verify parameterized queries are used consistently
- Look for ORM misuse that bypasses query sanitization

### 2. Cross-Site Scripting (XSS)
- Check for unescaped user input rendered in HTML
- Verify output encoding is applied in templates
- Look for dangerous use of innerHTML or dangerouslySetInnerHTML

### 3. Authentication Flaws
- Check for missing authentication on protected routes
- Verify session management follows best practices
- Look for weak password policies or insecure token storage

### 4. Hardcoded Secrets
- Check for API keys, passwords, or tokens in source code
- Verify sensitive values are loaded from environment variables
- Look for secrets in configuration files that are tracked by git

### 5. Insecure Dependencies
- Check for known vulnerabilities in installed packages
- Verify dependency versions are pinned
- Look for abandoned or unmaintained packages

## Output Format

Present findings as a structured markdown checklist, grouped by severity:

### [CRITICAL/HIGH/MEDIUM/LOW] - [Vulnerability Category]

- [ ] **File**: `path/to/file.ext` (line X)
- [ ] **Issue**: Description of the vulnerability
- [ ] **Risk**: What an attacker could exploit
- [ ] **Remediation**: Specific fix with code example

## Rules

- IMPORTANT: Always check ALL five categories, even if early findings seem severe
- Report "No issues found" for clean categories rather than skipping them
- Severity levels:
  - Critical: Exploitable immediately with no authentication
  - High: Exploitable with minimal effort or insider access
  - Medium: Requires specific conditions to exploit
  - Low: Theoretical risk or defense-in-depth improvement
- YOU MUST include remediation suggestions for every finding
- Sort findings by severity (Critical first, Low last)

What does this SKILL.md do?

The YAML frontmatter between the --- markers controls how Claude loads this Skill. The description field tells Claude what the Skill does and when to use it. Claude uses this to decide relevance.

The disable-model-invocation: true flag prevents Claude from automatically triggering this Skill. A security audit can modify how Claude interprets your code, so you want it to run only when you explicitly ask with /security-audit.

The body defines five vulnerability categories and a strict output format. The checklist format with severity levels (Critical, High, Medium, Low) ensures every audit produces consistent, actionable results you can work through systematically.

  • Save SKILL.md.

Why disable-model-invocation for security audits?

Your /create-content Skill does not use this flag because you want Claude to recognize marketing requests and apply brand rules automatically. Security audits are different.

An audit scans your entire codebase and produces a lengthy report. Running it accidentally during a routine coding session would consume tokens and clutter your output. Manual invocation keeps audits intentional and focused.

✔️ Awesome, I've got everything!

Great. Double check you have saved your file before moving on.

ⓧ I'd like to double check the full code

Here is the complete .claude/skills/security-audit/SKILL.md file:

---
description: "Audit code for security vulnerabilities including SQL injection, XSS, authentication flaws, hardcoded secrets, and insecure dependencies. Use when reviewing code changes, before deployments, or during periodic security reviews."
disable-model-invocation: true
---

# Security Audit

## Scope

Review the Assessly codebase for the following vulnerability categories:

### 1. SQL Injection
- Check for raw string concatenation in database queries
- Verify parameterized queries are used consistently
- Look for ORM misuse that bypasses query sanitization

### 2. Cross-Site Scripting (XSS)
- Check for unescaped user input rendered in HTML
- Verify output encoding is applied in templates
- Look for dangerous use of innerHTML or dangerouslySetInnerHTML

### 3. Authentication Flaws
- Check for missing authentication on protected routes
- Verify session management follows best practices
- Look for weak password policies or insecure token storage

### 4. Hardcoded Secrets
- Check for API keys, passwords, or tokens in source code
- Verify sensitive values are loaded from environment variables
- Look for secrets in configuration files that are tracked by git

### 5. Insecure Dependencies
- Check for known vulnerabilities in installed packages
- Verify dependency versions are pinned
- Look for abandoned or unmaintained packages

## Output Format

Present findings as a structured markdown checklist, grouped by severity:

### [CRITICAL/HIGH/MEDIUM/LOW] - [Vulnerability Category]

- [ ] **File**: `path/to/file.ext` (line X)
- [ ] **Issue**: Description of the vulnerability
- [ ] **Risk**: What an attacker could exploit
- [ ] **Remediation**: Specific fix with code example

## Rules

- IMPORTANT: Always check ALL five categories, even if early findings seem severe
- Report "No issues found" for clean categories rather than skipping them
- Severity levels:
  - Critical: Exploitable immediately with no authentication
  - High: Exploitable with minimal effort or insider access
  - Medium: Requires specific conditions to exploit
  - Low: Theoretical risk or defense-in-depth improvement
- YOU MUST include remediation suggestions for every finding
- Sort findings by severity (Critical first, Low last)
Test the /security-audit skill

With the file saved, Claude Code can now discover and invoke your new Skill. Time to verify it works.

  • Switch back to your Claude Code session in the terminal.
  • Type /security-audit and press Enter.

Claude should begin scanning your Assessly codebase and produce a structured checklist report grouped by severity level.

What should I see?

Claude will work through each of the five vulnerability categories and output a markdown checklist. Each finding (if any) will include the file path, issue description, risk assessment, and a remediation suggestion. Clean categories show "No issues found" instead of being skipped.

The first audit may take a minute depending on your codebase size. This is normal.

Skill not recognized?

If Claude does not recognize /security-audit, check that your file is saved at exactly .claude/skills/security-audit/SKILL.md relative to your project root. The folder name security-audit must match the command you type after the slash.

Also verify the YAML frontmatter starts with --- on the very first line of the file with no blank lines above it.

help me troubleshoot why my /security-audit skill is not being recognized by Claude Code

You now have a repeatable security workflow that produces consistent, actionable results every time. Next up, you will set up a Cowork marketing workflow that produces a full week of social content from a single prompt.

Set Up Your Cowork Marketing Workflow

Your Skills handle on-demand tasks inside Claude Code. But marketing content creation is a different beast. It's a recurring, multi-step knowledge workflow that doesn't involve code at all.

Claude Cowork is designed for exactly this. You give it a goal, point it at a folder on your desktop, and it works autonomously to produce a finished deliverable. In this step, you'll configure a marketing project folder and build a structured workflow that produces a full week of social content from a single prompt.

In this step, get ready to:
  • Create a marketing content project folder on your Desktop and open it in Cowork.
  • Write a structured content brief that produces 7 days of posts across X, LinkedIn, and Instagram.
  • Test the workflow end-to-end to produce a finished content calendar file.
Create your marketing project folder

Cowork works with local files and folders on your computer. You'll create a dedicated folder on your Desktop where Cowork will read your content brief and save the finished deliverables.

  • Open your terminal by pressing the Windows key, typing Terminal, and pressing Enter.
  • Move to your Desktop by running this command:
cd ~/Desktop
  • Create your marketing project folder and move into it by running these commands:
mkdir assessly-marketing
cd assessly-marketing
  • Confirm the folder exists by running:
ls ~/Desktop

You should see assessly-marketing listed in the output.

Why a dedicated folder?

Cowork operates on your local file system. When you point it at a folder, it can read files inside for context and save new deliverables there. A dedicated marketing folder keeps your content briefs, output calendars, and brand assets organized in one place.

Write your 7-day content brief

The quality of Cowork's output depends on the quality of your brief. A structured prompt that specifies your audience, platforms, content pillars, and output format produces a content calendar you can actually use.

  • Create a content brief file inside your assessly-marketing folder by running:
touch content-brief.md
  • Open content-brief.md in your text editor.
  • Paste the following structured prompt into the file:
# Assessly Weekly Content Brief

## Goal
Generate 7 days of social media content for Assessly, a B2B engineering
talent assessment platform. Each day should have one post per platform
(X, LinkedIn, Instagram).

## Target Audience
- Engineering hiring managers at tech companies
- University professors and academic institutions evaluating student talent
- HR and talent acquisition leaders at enterprises

## Brand Voice
- Authoritative but approachable
- Data-driven (cite stats and outcomes where possible)
- Focus on the problem of evaluating understanding, not just code output

## Platform Rules

### X (formerly Twitter)
- Max 280 characters
- Hook-driven (first line must grab attention)
- Minimal hashtags (1-2 max)
- Conversational, punchy tone

### LinkedIn
- Long-form thought leadership (150-300 words)
- Professional tone with personal insight
- End with a question or call to action
- 3-5 relevant hashtags

### Instagram
- Visual-first caption (describe a suggested graphic/carousel)
- Caption with line breaks for readability
- 5-10 hashtags at the end
- Mix of educational carousels and quote graphics

## Content Pillars
1. Why code correctness alone is not enough (dual-score assessment)
2. Hiring process pain points and solutions
3. Academic integrity in coding assessments
4. Engineering team culture and evaluation best practices
5. Product updates and platform features

## Output Format
Produce a markdown file called `content-calendar.md` with this structure:

### Day [Number] - [Theme]
**X Post:**
[content]

**LinkedIn Post:**
[content]

**Instagram:**
Visual suggestion: [description]
Caption: [content]
Hashtags: [hashtags]

## Additional Instructions
- Vary the content pillar each day (don't repeat the same theme consecutively)
- Include at least 2 days focused on the dual-score differentiator
- Make LinkedIn posts tell a mini-story or share a specific insight
- X posts should be standalone (no threads)
- Save the output file to this same folder

What makes this brief effective?

This brief works because it gives Cowork clear constraints instead of vague goals. The platform rules prevent generic content that doesn't fit anywhere. The content pillars keep posts on-brand. The output format means you get a consistent, scannable file every time you run this workflow.

The more specific your constraints, the less editing you'll do afterwards. Cowork performs best with high-effort, repeatable tasks that have a defined outcome.

  • Save content-brief.md.

Brief feels too long?

The brief looks lengthy, but each section is giving Cowork a constraint it needs. Without platform rules, you'll get LinkedIn-length posts for X. Without content pillars, you'll get generic marketing fluff. Keep every section.

help me shorten my content brief without losing quality

Run your Cowork marketing workflow

Now you'll hand this brief to Cowork and let it produce a full week of content autonomously. Cowork reads the brief from your folder, generates all 21 posts (7 days across 3 platforms), and saves the result as a local file.

  • Switch back to the Claude Desktop App.
  • Click Cowork in the left sidebar to open the Cowork interface.
  • In the Cowork message field, paste the following prompt:
Read the content brief at ~/Desktop/assessly-marketing/content-brief.md
and generate a full 7-day content calendar following its instructions.
Save the output as content-calendar.md in the same folder.

Why point Cowork at the file?

Instead of pasting the entire brief into the chat, you're telling Cowork where to find it. This keeps your prompt short and reusable. Next time you want fresh content, you can update the brief file and re-run the same one-line prompt.

  • Press Enter to send the prompt.
  • Cowork will ask for permission to access your local files. Click Allow when prompted.

What happens while Cowork runs?

Cowork works autonomously. It reads your brief, generates platform-specific content following your constraints, and saves the finished file. This typically takes 1-2 minutes. The Claude Desktop App must stay open for the task to complete.

  • Wait for Cowork to finish. You'll see a confirmation message when the task is complete.
  • Verify the output file was created by running this in your terminal:
ls ~/Desktop/assessly-marketing/

You should see both content-brief.md and content-calendar.md listed.

  • Open the content calendar to review the output:
cat ~/Desktop/assessly-marketing/content-calendar.md

You should see 7 days of structured content with separate X, LinkedIn, and Instagram posts for each day, following your platform rules and content pillars.

Quick quality check

Scan the output for these signals that your brief worked well: X posts stay under 280 characters, LinkedIn posts include a question or CTA at the end, Instagram posts have visual suggestions, and the content pillars rotate across days. If any of these are off, tighten that section of your brief and re-run.

No content-calendar.md file appeared?

Make sure the Claude Desktop App stayed open while Cowork was working. The desktop app must remain running for Cowork to complete tasks. If the app was minimized or closed, re-open it and re-send the prompt.

Also confirm the folder path is correct. Run ls ~/Desktop/assessly-marketing/ to check that content-brief.md exists there. If Cowork can't find the brief, it can't generate the calendar.

help me troubleshoot why Cowork didn't save my content calendar file

Your marketing workflow is live. From here, you can update the content brief any time your messaging evolves, then re-run the same prompt to get fresh content. Next up, you'll tackle the Secret Mission and chain multiple workflows into a single compound Skill.

Secret mission

Build a /weekly-marketing Compound Skill

Your individual Skills work great for one-off tasks. But what if you could chain research, content creation, and scheduling into a single command that produces a full week of marketing content from a single prompt?

Clean Up Your Resources

Clean Up Your Resources

This project runs entirely locally using your existing Claude Max 5x subscription. There are no additional ongoing costs from the files and configurations you created.

Decide whether to keep your resources running, pause them to come back later, or delete them entirely.

Resources you used:

  • CLAUDE.md file in your Assessly project directory.
  • .claude/skills/ directory containing your three custom Skills (create-content, security-audit, weekly-marketing).
  • Cowork Marketing Project Folder on your Desktop.
  • Claude Code CLI installed on your system.

Keep everything running

No action needed. Choose this if you're still actively using Claude Code for your Assessly development and marketing workflows.

  • Your CLAUDE.md loads automatically every time you start a Claude Code session in your Assessly project.
  • Your Skills remain available via /create-content, /security-audit, and /weekly-marketing.
  • Your Cowork Marketing Project Folder stays on your Desktop for future content workflows.
  • Claude Code CLI remains installed and ready to use.

Pause - I'll come back to this later

Since everything is local files and configurations, there is nothing to pause. Your files stay on disk until you delete them. Close the Claude Desktop app when you are not using it.

  • Close the Claude Desktop app by right-clicking its icon in the system tray and selecting Quit.
  • Your CLAUDE.md, Skills, and Cowork folder will be exactly as you left them when you return.

Delete - I don't want to use this again

Remove all project resources and start fresh. Follow these steps to clean up everything you created.

Delete the CLAUDE.md file from your Assessly project directory by running this in PowerShell from your project folder:

Remove-Item -Path "CLAUDE.md" -Force

Delete the entire Skills directory (this removes all three Skills you created) by running:

Remove-Item -Path ".claude\skills" -Recurse -Force

Delete the Cowork Marketing Project Folder from your Desktop by running:

Remove-Item -Path "$env:USERPROFILE\Desktop\Cowork Marketing Project Folder" -Recurse -Force

To uninstall Claude Code CLI entirely, run these commands in PowerShell:

# Remove the Claude Code binary and version files
Remove-Item -Path "$env:USERPROFILE\.local\bin\claude.exe" -Force
Remove-Item -Path "$env:USERPROFILE\.local\share\claude" -Recurse -Force

# Remove user settings and state
Remove-Item -Path "$env:USERPROFILE\.claude" -Recurse -Force
Remove-Item -Path "$env:USERPROFILE\.claude.json" -Force

What about the Claude Desktop app?

The Claude Desktop app itself is separate from your project files. If you want to keep using Claude for chat and Cowork (without your custom Skills), leave the app installed. The Skills and CLAUDE.md only affect Claude Code sessions in your Assessly project directory.

Nice Work!

Nice Work!

You've transformed Claude from a generic chatbot into a context-aware AI operating system for Assessly. Every future interaction now starts smarter and costs fewer tokens because Claude already has the context it needs.

You've learned how to:

  • Configure a lean CLAUDE.md that gives Claude Code instant understanding of your codebase, conventions, and security policies.
  • Build custom Skills (/create-content and /security-audit) that turn repeatable workflows into single-command operations.
  • Set up a Cowork marketing workflow that produces a full week of platform-specific social content from a single prompt.
  • Secret Mission: Created a /weekly-marketing compound Skill that chains research, content creation, and scheduling into one command.

Ready to quiz yourself?