소스 정보
- 저장소
- SkeneTechnologies/skene
- 최근 소스 활동
- 2026년 4월 11일 19:03
- 감지된 SKILL.md 언어
- 영어
- 스타
- 121
- 포크
- 13
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/SkeneTechnologies/skene --skill pipeline명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Backend skills for Supabase — CRM, billing, support, and more
Run comprehensive PLG analysis on a codebase to detect tech stack, existing growth features, and revenue opportunities. Use when the user says "analyze", "scan", "audit codebase", or "find growth opportunities".
Generate context-aware implementation prompts for a selected growth loop. Use when the user says "build", "implement", "generate code", "create prompt", or "how do I build this".
SOC 직업 분류 기준
SKILL.md 표시 중
| name | pipeline |
| description | Sales and recruiting pipelines with stages, deals, and stage transition history |
Sales and recruiting pipelines with ordered stages, deals, and an append-only log of stage transitions. Deals track value, status, and expected close date. Stage history enables pipeline velocity analysis.
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| org_id | uuid | FK to organizations |
| name | text | Pipeline name (e.g. Sales, Recruiting) |
| description | text | Pipeline description |
| is_default | boolean | Whether this is the default pipeline for the org |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Last update timestamp (auto-set by trigger) |
| metadata | jsonb | Arbitrary JSON |
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| org_id | uuid | FK to organizations |
| pipeline_id | uuid | FK to pipelines |
| name | text | Stage name (e.g. Qualification, Proposal) |
| position | integer | Display order within the pipeline |
| color | text | Hex color for UI rendering |
| is_terminal | boolean | Whether this stage is a final state (e.g. Closed Won, Rejected) |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Last update timestamp (auto-set by trigger) |
| metadata | jsonb | Arbitrary JSON |
Unique constraint on (pipeline_id, position).
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| org_id | uuid | FK to organizations |
| pipeline_id | uuid | FK to pipelines |
| stage_id | uuid | FK to pipeline_stages. Current stage of the deal |
| owner_id | uuid | FK to users. Deal owner |
| contact_id | uuid | FK to contacts. Associated contact |
| company_id | uuid | FK to companies. Associated company |
| title | text | Deal title |
| value | numeric | Deal value in smallest currency unit (cents) |
| currency | text | Currency code, defaults to USD |
| status | deal_status | Current status: open, won, lost, or stale |
| expected_close_date | date | Forecasted close date |
| closed_at | timestamptz | When the deal was actually closed |
| lost_reason | text | Free-text explanation when status is lost |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Last update timestamp (auto-set by trigger) |
| metadata | jsonb | Arbitrary JSON |
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| org_id | uuid | FK to organizations |
| deal_id | uuid | FK to deals |
| from_stage_id | uuid | FK to pipeline_stages. Stage the deal moved from |
| to_stage_id | uuid | FK to pipeline_stages. Stage the deal moved to |
| changed_by | uuid | FK to users. Who triggered the transition |
| changed_at | timestamptz | When the transition happened |
| duration_seconds | integer | Time spent in the previous stage |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Last update timestamp (auto-set by trigger) |
| metadata | jsonb | Arbitrary JSON |
| Value | Description |
|---|---|
| open | Deal is active and in progress |
| won | Deal was closed successfully |
| lost | Deal was lost |
| stale | Deal has gone inactive with no recent updates |
All tables have RLS enabled and are scoped to the current user's organization via get_user_org_id().
crm -- contacts and companies referenced by dealsGet all deals in a specific stage:
SELECT
d.title,
d.value / 100.0 AS value_dollars,
d.currency,
u.full_name AS owner,
c.first_name || ' ' || coalesce(c.last_name, '') AS contact
FROM deals d
LEFT JOIN users u ON u.id = d.owner_id
LEFT JOIN contacts c ON c.id = d.contact_id
WHERE d.stage_id = '<stage_id>'
AND d.status = 'open'
ORDER BY d.value DESC;
Pipeline summary with deal counts and total value:
SELECT
ps.name AS stage,
ps.position,
count(d.id) AS deal_count,
coalesce(sum(d.value), 0) / 100.0 AS total_value
FROM pipeline_stages ps
LEFT JOIN deals d ON d.stage_id = ps.id AND d.status = 'open'
WHERE ps.pipeline_id = '<pipeline_id>'
GROUP BY ps.id, ps.name, ps.position
ORDER BY ps.position;
Average time in each stage (pipeline velocity):
SELECT
ps.name AS stage,
round(avg(dsh.duration_seconds) / 86400.0, 1) AS avg_days
FROM deal_stage_history dsh
JOIN pipeline_stages ps ON ps.id = dsh.from_stage_id
WHERE dsh.duration_seconds IS NOT NULL
GROUP BY ps.id, ps.name, ps.position
ORDER BY ps.position;
Deals expected to close this month:
SELECT
d.title,
d.value / 100.0 AS value_dollars,
d.expected_close_date,
ps.name AS stage,
u.full_name AS owner
FROM deals d
JOIN pipeline_stages ps ON ps.id = d.stage_id
LEFT JOIN users u ON u.id = d.owner_id
WHERE d.status = 'open'
AND d.expected_close_date >= date_trunc('month', current_date)
AND d.expected_close_date < date_trunc('month', current_date) + interval '1 month'
ORDER BY d.expected_close_date;
Win/loss breakdown by owner:
SELECT
u.full_name AS owner,
count(*) FILTER (WHERE d.status = 'won') AS won,
count(*) FILTER (WHERE d.status = 'lost') AS lost,
round(
100.0 * count(*) FILTER (WHERE d.status = 'won')
/ nullif(count(*) FILTER (WHERE d.status IN ('won', 'lost')), 0),
1
) AS win_rate_pct
FROM deals d
JOIN users u ON u.id = d.owner_id
WHERE d.org_id = get_user_org_id()
AND d.status IN ('won', 'lost')
GROUP BY u.id, u.full_name
ORDER BY win_rate_pct DESC;