project-onboarding
Onboard new projects with standardized configuration and documentation
What this skill does
# Project Onboarding Skill
> Quickly onboard a new project into the agentic workspace with RAG collections, routing rules, and baseline knowledge.
## Overview
When starting work on a new project, this skill provides a systematic approach to:
- Create project-specific RAG collections
- Register semantic routing rules
- Ingest existing documentation as baseline knowledge
- Set up credentials and configuration
- Validate the setup
## Prerequisites
- Workspace with RAG server running
- Router server running
- Access to the project's source code or documentation
## Onboarding Steps
### Step 1: Gather Project Information
Before onboarding, collect:
```yaml
project:
name: "project-slug" # Lowercase, hyphenated
display_name: "Project Name" # Human-readable
code_path: "/path/to/code" # Absolute path to source
description: "Brief description of the project"
# Optional
tech_stack:
- python
- fastapi
- postgresql
docs_paths:
- README.md
- docs/
- ARCHITECTURE.md
```
### Step 2: Create RAG Collections
Create isolated collections for different content types:
```python
# Collection naming convention: {project}_{content_type}
collections = [
f"{project_name}_docs", # Documentation, READMEs
f"{project_name}_code", # Code snippets, patterns
f"{project_name}_decisions", # ADRs, architectural decisions
f"{project_name}_research", # Research findings, notes
]
# Create via RAG server
for collection in collections:
await rag.create_collection(collection)
```
**Recommended collection structure:**
| Collection | Content | Metadata |
|------------|---------|----------|
| `{project}_docs` | README, guides, API docs | `type: doc, source: file` |
| `{project}_code` | Reusable patterns, examples | `type: code, language: python` |
| `{project}_decisions` | ADRs, design docs | `type: decision, status: accepted` |
| `{project}_research` | Research notes, findings | `type: research, topic: x` |
### Step 3: Ingest Baseline Documentation
```bash
#!/bin/bash
# scripts/onboard-docs.sh
PROJECT=$1
CODE_PATH=$2
# Ingest README
if [ -f "$CODE_PATH/README.md" ]; then
/ingest --collection "${PROJECT}_docs" \
--source "readme" \
--file "$CODE_PATH/README.md"
fi
# Ingest docs directory
if [ -d "$CODE_PATH/docs" ]; then
find "$CODE_PATH/docs" -name "*.md" -exec \
/ingest --collection "${PROJECT}_docs" \
--source "docs" \
--file {} \;
fi
# Ingest architecture docs
for doc in ARCHITECTURE.md DESIGN.md CONTRIBUTING.md; do
if [ -f "$CODE_PATH/$doc" ]; then
/ingest --collection "${PROJECT}_decisions" \
--source "architecture" \
--file "$CODE_PATH/$doc"
fi
done
```
### Step 4: Register Routing Rules
Add project-specific routing so queries get directed appropriately:
```yaml
# routing/routes/project-{name}.yaml
routes:
- name: "{project}_code_search"
utterances:
- "find code in {project}"
- "search {project} for"
- "how does {project} implement"
- "{project} code pattern"
action:
type: rag_search
collection: "{project}_code"
- name: "{project}_docs_search"
utterances:
- "{project} documentation"
- "how to use {project}"
- "{project} setup"
- "{project} guide"
action:
type: rag_search
collection: "{project}_docs"
- name: "{project}_decisions"
utterances:
- "why did {project}"
- "{project} architecture"
- "{project} design decision"
action:
type: rag_search
collection: "{project}_decisions"
```
### Step 5: Create Project Configuration
```yaml
# config/projects/{project}.yaml
project:
name: "{project}"
display_name: "{Project Display Name}"
code_path: "/path/to/code"
collections:
docs: "{project}_docs"
code: "{project}_code"
decisions: "{project}_decisions"
research: "{project}_research"
credentials:
# Reference to .env variables
api_key: "{PROJECT}_API_KEY"
database_url: "{PROJECT}_DATABASE_URL"
defaults:
search_collection: "{project}_docs"
search_results: 5
```
### Step 6: Create Code Symlink
```bash
# Link project code into workspace
ln -sf /path/to/actual/code ./code/{project}
```
### Step 7: Validate Setup
```python
#!/usr/bin/env python3
"""Validate project onboarding."""
import asyncio
from pathlib import Path
async def validate_onboarding(project: str):
errors = []
# Check collections exist
collections = await rag.list_collections()
expected = [f"{project}_docs", f"{project}_code",
f"{project}_decisions", f"{project}_research"]
for coll in expected:
if coll not in [c["name"] for c in collections]:
errors.append(f"Missing collection: {coll}")
# Check config exists
config_path = Path(f"config/projects/{project}.yaml")
if not config_path.exists():
errors.append(f"Missing config: {config_path}")
# Check code symlink
code_path = Path(f"code/{project}")
if not code_path.exists():
errors.append(f"Missing code symlink: {code_path}")
# Check routing rules
route_path = Path(f"routing/routes/project-{project}.yaml")
if not route_path.exists():
errors.append(f"Missing routes: {route_path}")
# Test search works
try:
results = await rag.search(
query="project overview",
collection=f"{project}_docs",
n_results=1
)
if not results["results"]:
errors.append("No documents in docs collection")
except Exception as e:
errors.append(f"Search failed: {e}")
return errors
if __name__ == "__main__":
import sys
project = sys.argv[1]
errors = asyncio.run(validate_onboarding(project))
if errors:
print("โ Onboarding validation failed:")
for e in errors:
print(f" - {e}")
sys.exit(1)
else:
print(f"โ
Project '{project}' onboarded successfully!")
```
## Quick Onboarding Script
```bash
#!/bin/bash
# scripts/onboard-project.sh
set -e
PROJECT=$1
CODE_PATH=$2
DISPLAY_NAME=${3:-$PROJECT}
if [ -z "$PROJECT" ] || [ -z "$CODE_PATH" ]; then
echo "Usage: onboard-project.sh <project-slug> <code-path> [display-name]"
exit 1
fi
echo "๐ Onboarding project: $PROJECT"
# Step 1: Create collections
echo "๐ฆ Creating RAG collections..."
for type in docs code decisions research; do
curl -X POST "http://localhost:8100/create_collection" \
-d "{\"name\": \"${PROJECT}_${type}\"}"
done
# Step 2: Create config
echo "โ๏ธ Creating project config..."
cat > "config/projects/${PROJECT}.yaml" << EOF
project:
name: "${PROJECT}"
display_name: "${DISPLAY_NAME}"
code_path: "${CODE_PATH}"
collections:
docs: "${PROJECT}_docs"
code: "${PROJECT}_code"
decisions: "${PROJECT}_decisions"
research: "${PROJECT}_research"
EOF
# Step 3: Create code symlink
echo "๐ Creating code symlink..."
mkdir -p code
ln -sf "$CODE_PATH" "code/${PROJECT}"
# Step 4: Ingest docs
echo "๐ Ingesting documentation..."
./scripts/onboard-docs.sh "$PROJECT" "$CODE_PATH"
# Step 5: Create routing rules
echo "๐ Creating routing rules..."
cat > "routing/routes/project-${PROJECT}.yaml" << EOF
routes:
- name: "${PROJECT}_search"
utterances:
- "${PROJECT}"
- "search ${PROJECT}"
- "${PROJECT} code"
- "${PROJECT} docs"
action:
type: rag_search
collection: "${PROJECT}_docs"
EOF
# Step 6: Validate
echo "โ
Validating..."
python scripts/validate-onboarding.py "$PROJECT"
echo "๐ Project '$PROJECT' onboarded successfully!"
```
## Usage Examples
```bash
# Onboard a Python project
./scripts/onboard-project.sh my-api ~/projects/my-api "My API Service"
# Onboard with just slug and path
./scripts/onboard-project.sh client-portal ~/work/client-portal
# Validate existing project
python scripts/validate-onboarding.py my-api
```
## Post-OnboardingRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.