Loading...
Loading...
Compare original and translation side by side
Skill by ara.so — Daily 2026 Skills collection.
技能由 ara.so 开发 — 2026年度每日技能精选。
undefinedundefinedundefinedundefinedclaudeundefinedclaudeundefined
---
---/career-ops → Show all available modes
/career-ops {job URL or JD} → Full auto-pipeline: evaluate + PDF + tracker entry
/career-ops scan → Scan pre-configured portals for new offers
/career-ops pdf → Generate ATS-optimized CV for last evaluated offer
/career-ops batch → Batch evaluate multiple offers in parallel
/career-ops tracker → View application pipeline status
/career-ops apply → AI-assisted application form filling
/career-ops pipeline → Process all pending URLs in queue
/career-ops contacto → Generate LinkedIn outreach message
/career-ops deep → Deep company research report
/career-ops training → Evaluate a course or certification
/career-ops project → Evaluate a portfolio project fit/career-ops → 查看所有可用模式
/career-ops {岗位URL或岗位描述} → 全自动化流程:评估 + 生成PDF + 录入追踪系统
/career-ops scan → 扫描预设的招聘门户获取新岗位
/career-ops pdf → 为上一个评估的岗位生成ATS优化的简历PDF
/career-ops batch → 并行批量评估多个岗位
/career-ops tracker → 查看申请流程状态
/career-ops apply → AI辅助填写申请表单
/career-ops pipeline → 处理队列中所有待处理的URL
/career-ops contacto → 生成LinkedIn outreach消息
/career-ops deep → 生成深度公司调研报告
/career-ops training → 评估课程或认证的价值
/career-ops project → 评估作品集项目的匹配度https://boards.greenhouse.io/anthropic/jobs/12345https://boards.greenhouse.io/anthropic/jobs/12345
---
---config/profile.ymlconfig/profile.ymlundefinedundefinedundefinedundefinedportals.ymlportals.ymlundefinedundefinedundefinedundefinedtemplates/states.ymltemplates/states.ymlundefinedundefined
---
---modes/modes/
├── _shared.md # Shared context injected into every mode — customize this first
├── oferta.md # /career-ops {JD} — full evaluation pipeline
├── pdf.md # /career-ops pdf — PDF CV generation
├── scan.md # /career-ops scan — portal scanner
├── batch.md # /career-ops batch — parallel evaluation
├── tracker.md # /career-ops tracker — pipeline viewer
├── apply.md # /career-ops apply — form filling
├── pipeline.md # /career-ops pipeline — process queue
├── contacto.md # /career-ops contacto — LinkedIn outreach
├── deep.md # /career-ops deep — company research
├── training.md # /career-ops training — cert evaluation
└── project.md # /career-ops project — portfolio project fitmodes/modes/
├── _shared.md # 注入到每个模式的共享上下文 — 优先自定义这个文件
├── oferta.md # /career-ops {JD} — 完整评估流程
├── pdf.md # /career-ops pdf — PDF简历生成
├── scan.md # /career-ops scan — 门户扫描
├── batch.md # /career-ops batch — 并行评估
├── tracker.md # /career-ops tracker — 流程查看器
├── apply.md # /career-ops apply — 表单填写
├── pipeline.md # /career-ops pipeline — 处理队列
├── contacto.md # /career-ops contacto — LinkedIn outreach
├── deep.md # /career-ops deep — 公司调研
├── training.md # /career-ops training — 认证评估
└── project.md # /career-ops project — 作品集项目匹配度undefinedundefined
---
---cd dashboard
go build -o career-dashboard .
./career-dashboardcd dashboard
go build -o career-dashboard .
./career-dashboard// dashboard/main.go — entry point
package main
import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
)
func main() {
p := tea.NewProgram(initialModel(), tea.WithAltScreen())
if _, err := p.Run(); err != nil {
log.Fatal(err)
}
}// dashboard/model.go — core data model
package main
import "time"
type Application struct {
ID string `json:"id"`
Company string `json:"company"`
Role string `json:"role"`
Score string `json:"score"` // A, B+, B, C, D, F
Status string `json:"status"`
URL string `json:"url"`
ReportPath string `json:"report_path"`
PDFPath string `json:"pdf_path"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Archetype string `json:"archetype"` // LLMOps, Agentic, PM, SA...
CompRange string `json:"comp_range"`
Notes string `json:"notes"`
}
type Model struct {
applications []Application
filtered []Application
cursor int
activeTab int
sortMode int
grouped bool
preview string
showPreview bool
width int
height int
}// dashboard/main.go — 入口文件
package main
import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
)
func main() {
p := tea.NewProgram(initialModel(), tea.WithAltScreen())
if _, err := p.Run(); err != nil {
log.Fatal(err)
}
}// dashboard/model.go — 核心数据模型
package main
import "time"
type Application struct {
ID string `json:"id"`
Company string `json:"company"`
Role string `json:"role"`
Score string `json:"score"` // A, B+, B, C, D, F
Status string `json:"status"`
URL string `json:"url"`
ReportPath string `json:"report_path"`
PDFPath string `json:"pdf_path"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Archetype string `json:"archetype"` // LLMOps, Agentic, PM, SA...
CompRange string `json:"comp_range"`
Notes string `json:"notes"`
}
type Model struct {
applications []Application
filtered []Application
cursor int
activeTab int
sortMode int
grouped bool
preview string
showPreview bool
width int
height int
}// dashboard/data.go
package main
import (
"encoding/csv"
"os"
"path/filepath"
)
func loadApplications(dataDir string) ([]Application, error) {
tsvPath := filepath.Join(dataDir, "pipeline.tsv")
f, err := os.Open(tsvPath)
if err != nil {
return nil, err
}
defer f.Close()
r := csv.NewReader(f)
r.Comma = '\t'
r.LazyQuotes = true
records, err := r.ReadAll()
if err != nil {
return nil, err
}
var apps []Application
for _, record := range records[1:] { // skip header
if len(record) < 8 {
continue
}
apps = append(apps, Application{
ID: record[0],
Company: record[1],
Role: record[2],
Score: record[3],
Status: record[4],
URL: record[5],
})
}
return apps, nil
}// dashboard/data.go
package main
import (
"encoding/csv"
"os"
"path/filepath"
)
func loadApplications(dataDir string) ([]Application, error) {
tsvPath := filepath.Join(dataDir, "pipeline.tsv")
f, err := os.Open(tsvPath)
if err != nil {
return nil, err
}
defer f.Close()
r := csv.NewReader(f)
r.Comma = '\t'
r.LazyQuotes = true
records, err := r.ReadAll()
if err != nil {
return nil, err
}
var apps []Application
for _, record := range records[1:] { // 跳过表头
if len(record) < 8 {
continue
}
apps = append(apps, Application{
ID: record[0],
Company: record[1],
Role: record[2],
Score: record[3],
Status: record[4],
URL: record[5],
})
}
return apps, nil
}claude -pclaude -pundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedbatch/batch-runner.shbatch/batch-runner.sh#!/usr/bin/env bash#!/usr/bin/env bash# Launch sub-agent for each URL
claude -p "$(cat $PROMPT_FILE)\n\nEvaluate this offer: $url" \
--output-format json \
>> ../data/batch-results.jsonl &
# Throttle parallelism
while [[ $(jobs -r | wc -l) -ge $MAX_PARALLEL ]]; do
sleep 2
done
---# 为每个URL启动子代理
claude -p "$(cat $PROMPT_FILE)\n\nEvaluate this offer: $url" \
--output-format json \
>> ../data/batch-results.jsonl &
# 控制并行数
while [[ $(jobs -r | wc -l) -ge $MAX_PARALLEL ]]; do
sleep 2
done
---undefinedundefinedundefinedundefined// scripts/generate-pdf.js
const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');
async function generatePDF(htmlContent, outputPath) {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.setContent(htmlContent, { waitUntil: 'networkidle' });
await page.pdf({
path: outputPath,
format: 'A4',
margin: { top: '20mm', bottom: '20mm', left: '15mm', right: '15mm' },
printBackground: true,
});
await browser.close();
console.log(`PDF generated: ${outputPath}`);
}
// Usage
const template = fs.readFileSync('templates/cv-template.html', 'utf8');
const company = process.argv[2] || 'company';
const role = process.argv[3] || 'role';
const outputPath = path.join('output', `${company}-${role}.pdf`);
generatePDF(template, outputPath);// scripts/generate-pdf.js
const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');
async function generatePDF(htmlContent, outputPath) {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.setContent(htmlContent, { waitUntil: 'networkidle' });
await page.pdf({
path: outputPath,
format: 'A4',
margin: { top: '20mm', bottom: '20mm', left: '15mm', right: '15mm' },
printBackground: true,
});
await browser.close();
console.log(`PDF已生成:${outputPath}`);
}
// 使用示例
const template = fs.readFileSync('templates/cv-template.html', 'utf8');
const company = process.argv[2] || 'company';
const role = process.argv[3] || 'role';
const outputPath = path.join('output', `${company}-${role}.pdf`);
generatePDF(template, outputPath);data/data/
├── pipeline.tsv # Main tracker — all applications
├── batch-results.jsonl # Batch evaluation outputs
└── urls-pending.txt # Queue for /career-ops pipeline
reports/
└── {company}-{role}-{date}.md # Full evaluation reports
output/
└── {company}-{role}.pdf # Generated CVsdata/data/
├── pipeline.tsv # 主追踪文件 — 所有申请记录
├── batch-results.jsonl # 批量评估输出
└── urls-pending.txt # /career-ops pipeline的待处理队列
reports/
└── {公司}-{岗位}-{日期}.md # 完整评估报告
output/
└── {公司}-{岗位}.pdf # 生成的简历id company role score status url archetype comp_range created_at updated_at report_path pdf_path
abc123 Anthropic AI Engineer A applied https://... LLMOps $150k-$200k 2026-04-05 2026-04-05 reports/anthropic-ai-engineer.md output/anthropic-ai-engineer.pdfid company role score status url archetype comp_range created_at updated_at report_path pdf_path
abc123 Anthropic AI Engineer A applied https://... LLMOps $150k-$200k 2026-04-05 2026-04-05 reports/anthropic-ai-engineer.md output/anthropic-ai-engineer.pdf| Dimension | Weight | What it measures |
|---|---|---|
| Role fit | 20% | Match between JD requirements and your CV |
| Level alignment | 15% | Seniority match |
| Compensation | 15% | Comp vs your target range |
| Tech stack | 15% | Stack overlap with your skills |
| Company stage | 10% | Startup/scale-up/enterprise fit |
| Remote policy | 10% | Location/remote match |
| Growth potential | 5% | Career trajectory opportunity |
| Mission alignment | 5% | Personal interest in the domain |
| Interview signals | 3% | Glassdoor/process quality signals |
| Recruiter quality | 2% | JD quality, clarity, red flags |
| 维度 | 权重 | 评估内容 |
|---|---|---|
| 岗位匹配度 | 20% | JD要求与你的简历的匹配程度 |
| 级别匹配度 | 15% | 职级匹配度 |
| 薪资 | 15% | 薪资与你的目标范围的匹配度 |
| 技术栈 | 15% | 技术栈与你的技能的重叠度 |
| 公司阶段 | 10% | 初创/扩张/成熟企业的匹配度 |
| 远程政策 | 10% | 地点/远程政策匹配度 |
| 成长潜力 | 5% | 职业发展机会 |
| 使命匹配度 | 5% | 个人对领域的兴趣度 |
| 面试信号 | 3% | Glassdoor/面试流程质量信号 |
| 招聘人员质量 | 2% | JD质量、清晰度、风险信号 |
undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefined
---
---undefinedundefinedundefinedundefinedcd dashboard
go mod tidy
go build -o career-dashboard .cd dashboard
go mod tidy
go build -o career-dashboard .undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefined
---
---career-ops/
├── CLAUDE.md # Agent instructions (read by Claude Code)
├── cv.md # YOUR CV in markdown — create this
├── article-digest.md # Your proof points / portfolio (optional)
├── config/
│ └── profile.example.yml # Copy to profile.yml and fill out
├── modes/ # 14 Claude skill definitions
│ ├── _shared.md # Shared context — customize first
│ └── *.md # One file per /career-ops command
├── templates/
│ ├── cv-template.html # ATS CV template (Space Grotesk + DM Sans)
│ ├── portals.example.yml # Copy to portals.yml
│ └── states.yml # Pipeline status definitions
├── batch/
│ ├── batch-prompt.md # Self-contained worker prompt for sub-agents
│ └── batch-runner.sh # Parallel orchestrator
├── dashboard/ # Go TUI (Bubble Tea + Lipgloss)
│ ├── main.go
│ ├── model.go
│ ├── data.go
│ └── go.mod
├── fonts/ # Space Grotesk + DM Sans woff2 files
├── data/ # Runtime data — gitignored
├── reports/ # Evaluation reports — gitignored
├── output/ # Generated PDFs — gitignored
├── docs/
│ ├── SETUP.md
│ ├── CUSTOMIZATION.md
│ └── ARCHITECTURE.md
└── examples/ # Sample CV, report, proof pointscareer-ops/
├── CLAUDE.md # Agent指令(Claude Code读取)
├── cv.md # 你的Markdown格式简历 — 需自行创建
├── article-digest.md # 你的证明材料/作品集(可选)
├── config/
│ └── profile.example.yml # 复制为profile.yml并填写
├── modes/ # 14个Claude技能定义
│ ├── _shared.md # 共享上下文 — 优先自定义
│ └── *.md # 每个/career-ops命令对应一个文件
├── templates/
│ ├── cv-template.html # ATS简历模板(Space Grotesk + DM Sans)
│ ├── portals.example.yml # 复制为portals.yml
│ └── states.yml # 流程状态定义
├── batch/
│ ├── batch-prompt.md # 子代理的独立工作提示词
│ └── batch-runner.sh # 并行协调器
├── dashboard/ # Go TUI(Bubble Tea + Lipgloss)
│ ├── main.go
│ ├── model.go
│ ├── data.go
│ └── go.mod
├── fonts/ # Space Grotesk + DM Sans woff2文件
├── data/ # 运行时数据 — 已加入gitignore
├── reports/ # 评估报告 — 已加入gitignore
├── output/ # 生成的PDF — 已加入gitignore
├── docs/
│ ├── SETUP.md
│ ├── CUSTOMIZATION.md
│ └── ARCHITECTURE.md
└── examples/ # 示例简历、报告、证明材料data/pipeline.tsvdata/reports/output/cv.mddata/pipeline.tsvdata/reports/output/cv.md