cue-ai 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/README.md +38 -0
- package/bin/cue-review-progress +107 -0
- package/bin/cue-review-watch +98 -0
- package/package.json +2 -1
- package/profiles/career/profile.yaml +13 -2
- package/profiles/core/profile.yaml +8 -0
- package/profiles/eu-tender-research/README.md +48 -0
- package/profiles/eu-tender-research/logo.png +0 -0
- package/profiles/eu-tender-research/profile.yaml +108 -0
- package/profiles/gstack/profile.yaml +2 -0
- package/profiles/skill-writer/profile.yaml +4 -0
- package/profiles/x-growth-bot/profile.yaml +0 -2
- package/resources/icons/generate-icons.py +128 -2
- package/resources/mcps/configs/claude.sanitized.json +17 -0
- package/resources/skills/skills/career/resume-version-manager/SKILL.md +351 -0
- package/resources/skills/skills/career/salary-negotiation-prep/SKILL.md +378 -0
- package/resources/skills/skills/eu-funding/grant-outreach/SKILL.md +70 -0
- package/resources/skills/skills/eu-funding/hu-grant-finder/SKILL.md +114 -0
- package/resources/skills/skills/eu-funding/hu-grant-finder/evals.md +26 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/SKILL.md +80 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/evals.md +26 -0
- package/resources/skills/skills/eu-funding/ted-tender-search/scripts/ted-search.sh +46 -0
- package/resources/skills/skills/github/gx-agents/SKILL.md +96 -0
- package/resources/skills/skills/meta/focus/SKILL.md +62 -0
- package/resources/skills/skills/tools/portless/SKILL.md +186 -0
- package/src/lib/analytics.ts +13 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to cue (`cue-ai`) are documented here.
|
|
4
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/), and the project
|
|
5
|
+
adheres to [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [0.9.2] — 2026-06-05
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Live code-review visibility.** Watch an independent review move file-by-file in
|
|
12
|
+
real time instead of staring at an opaque "Precipitating…" spinner.
|
|
13
|
+
- `bin/cue-review-watch` — live renderer; run it in a second pane to follow the
|
|
14
|
+
latest review (`--id <id>` for a specific one, `--once` for a snapshot).
|
|
15
|
+
- `bin/cue-review-progress` — append-only progress events to
|
|
16
|
+
`~/.config/cue/review-progress/<id>.jsonl` (the shared schema every reviewer writes).
|
|
17
|
+
- `/code-review` now emits per-file / per-dimension / per-finding progress events.
|
|
18
|
+
- The `auto-review` Stop-hook gate streams its review to the same log, so the
|
|
19
|
+
independent merge-gate review is watchable live too (invariants unchanged:
|
|
20
|
+
recursion guard, fail-open, binary verdict).
|
|
21
|
+
- Docs: [`docs/review-visibility.md`](./docs/review-visibility.md).
|
|
22
|
+
- **Self-learner (experimental · opt-in · default-OFF).** Profiles capture where their
|
|
23
|
+
skills fell short during a task and feed gated improvements back over time.
|
|
24
|
+
- `resources/hooks/profile-self-improve.sh` — friction-signal capture plus an optional
|
|
25
|
+
live critic agent. Recursion-guarded, never blocks Stop, runs the critic at most once
|
|
26
|
+
per session, fully fail-open.
|
|
27
|
+
- New `skill_gap` analytics event (`src/lib/analytics.ts`), inert to existing readers.
|
|
28
|
+
- Piloted on the `skill-writer` profile. Enable with
|
|
29
|
+
`touch ~/.config/cue/.auto-improve-enabled`. Docs: [`docs/self-learner.md`](./docs/self-learner.md).
|
|
30
|
+
|
|
31
|
+
### Documentation
|
|
32
|
+
|
|
33
|
+
- **README — "what you'll see during a run — the reviewer".** Explains the independent
|
|
34
|
+
review gate that runs during a Claude Code session: why a red "Stop hook error" means
|
|
35
|
+
the gate is working (not a failure), how to suppress or disable it, and how to watch a
|
|
36
|
+
review live with `cue-review-watch`. Includes a real catch (a `weight` kg/g unit
|
|
37
|
+
ambiguity that would have rendered per-kg prices as `€0.00`).
|
|
38
|
+
|
|
39
|
+
[0.9.2]: https://github.com/opencue/cuecards/compare/v0.9.1...v0.9.2
|
|
40
|
+
[0.9.1]: https://github.com/opencue/cuecards/releases/tag/v0.9.1
|
package/README.md
CHANGED
|
@@ -220,6 +220,44 @@ Full system + when each tag fires: **[`resources/skills/skills/meta/integrity-ta
|
|
|
220
220
|
|
|
221
221
|
---
|
|
222
222
|
|
|
223
|
+
## what you'll see during a run — the reviewer.
|
|
224
|
+
|
|
225
|
+
cuecards can ship an **independent review gate**. When the agent finishes a
|
|
226
|
+
code-producing turn in a cuecard that enables it, cue spawns a *fresh, separate*
|
|
227
|
+
reviewer agent over the working-tree diff **before the turn is allowed to finish**.
|
|
228
|
+
It runs as a normal step of a Claude Code run — so expect to see a reviewer agent
|
|
229
|
+
think for a while (a deep pass can run many minutes and tens of thousands of tokens).
|
|
230
|
+
This is by design, and it earns its keep.
|
|
231
|
+
|
|
232
|
+
A real catch from a live session: the reviewer flagged a **load-bearing unit bug** —
|
|
233
|
+
a product's `weight` was treated as kilograms in one place but grams in two others
|
|
234
|
+
(`weight >= 1000 ? kg : g`). Left in, the per-kg price renders as `€0.00` and a cart
|
|
235
|
+
reads `20000 kg`. The gate held the merge until it was fixed.
|
|
236
|
+
|
|
237
|
+
Two things so the behavior isn't surprising:
|
|
238
|
+
|
|
239
|
+
- **A red "Stop hook error" is the gate working, not a failure.** Claude Code renders
|
|
240
|
+
any *blocking* hook that way. It means the reviewer found a CRITICAL/HIGH issue and is
|
|
241
|
+
holding the turn until you address it. It caps at 2 rounds, then releases. Suppress it
|
|
242
|
+
for one turn with `[skip-auto-review]` in your message; turn it off entirely with
|
|
243
|
+
`rm ~/.config/cue/auto-review-enabled`.
|
|
244
|
+
- **You can watch the review live.** A long review otherwise shows only a spinner. Run
|
|
245
|
+
`cue-review-watch` in a second pane to see it move file-by-file with findings as they land:
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
16:42:03 📄 setup-plate-variants.ts
|
|
249
|
+
16:42:03 → unit convention
|
|
250
|
+
16:42:09 🔴 CRITICAL weight kg/g ambiguity → per-kg price shows €0.00
|
|
251
|
+
16:45:30 ✅ review complete 1 CRITICAL
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Enable the gate with `touch ~/.config/cue/auto-review-enabled`. Full details:
|
|
255
|
+
[`docs/review-visibility.md`](./docs/review-visibility.md).
|
|
256
|
+
|
|
257
|
+
<br>
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
223
261
|
## the catalog.
|
|
224
262
|
|
|
225
263
|
> One repo. 69 pre-built expert agents. Pin one with `cue use <name>` and `claude` launches with that cuecard's skills, MCPs, hooks, and commands materialized.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# cue-review-progress — emit live code-review progress events to a tail-able JSONL
|
|
3
|
+
# so `cue-review-watch` (or a dashboard panel) can show what a reviewer is doing
|
|
4
|
+
# in REAL TIME instead of an opaque spinner. No external deps.
|
|
5
|
+
#
|
|
6
|
+
# Any reviewer (the auto-review Stop hook, a code-reviewer subagent, /ship Step 9,
|
|
7
|
+
# a review workflow) appends one event per file / dimension / finding. The shared
|
|
8
|
+
# schema is the contract — see docs/review-visibility.md.
|
|
9
|
+
#
|
|
10
|
+
# Storage: ~/.config/cue/review-progress/<id>.jsonl (append-only)
|
|
11
|
+
# ~/.config/cue/review-progress/latest (pointer file holding <id>)
|
|
12
|
+
#
|
|
13
|
+
# Event schema (one JSON object per line):
|
|
14
|
+
# ts ISO-8601 UTC (auto)
|
|
15
|
+
# id review id
|
|
16
|
+
# kind start | file | dim | finding | note | end
|
|
17
|
+
# file path under review (file/dim/finding)
|
|
18
|
+
# dim dimension/lens being checked (dim/finding)
|
|
19
|
+
# severity CRITICAL|HIGH|MEDIUM|LOW (finding)
|
|
20
|
+
# title short text (finding/note/start/end)
|
|
21
|
+
# detail longer text (optional)
|
|
22
|
+
#
|
|
23
|
+
# Usage:
|
|
24
|
+
# cue-review-progress start [--id <id>] [--label <text>] [--files <n>] # prints id
|
|
25
|
+
# cue-review-progress emit [--id <id>] --kind <file|dim|finding|note> \
|
|
26
|
+
# [--file <p>] [--dim <d>] [--severity <S>] \
|
|
27
|
+
# [--title <t>] [--detail <x>]
|
|
28
|
+
# cue-review-progress end [--id <id>] [--summary <text>]
|
|
29
|
+
# cue-review-progress path [--id <id>] # print the jsonl path
|
|
30
|
+
# cue-review-progress latest # print current latest id
|
|
31
|
+
set -euo pipefail
|
|
32
|
+
|
|
33
|
+
DIR="${XDG_CONFIG_HOME:-$HOME/.config}/cue/review-progress"
|
|
34
|
+
mkdir -p "$DIR"
|
|
35
|
+
|
|
36
|
+
# JSON string escape: drop C0 control chars (a raw tab/newline breaks the line),
|
|
37
|
+
# then escape backslash and double-quote.
|
|
38
|
+
esc() { printf '%s' "${1:-}" | tr -d '\000-\037' | sed 's/\\/\\\\/g; s/"/\\"/g'; }
|
|
39
|
+
now() { date -u +%Y-%m-%dT%H:%M:%S.000Z; }
|
|
40
|
+
|
|
41
|
+
resolve_id() { # $1 = explicit id (may be empty)
|
|
42
|
+
if [[ -n "${1:-}" ]]; then printf '%s' "$1"; return; fi
|
|
43
|
+
if [[ -r "$DIR/latest" ]]; then head -1 "$DIR/latest"; return; fi
|
|
44
|
+
printf ''
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
cmd="${1:-}"; shift || true
|
|
48
|
+
ID="" KIND="" FILE="" DIM="" SEV="" TITLE="" DETAIL="" LABEL="" FILES="" SUMMARY=""
|
|
49
|
+
while [[ $# -gt 0 ]]; do
|
|
50
|
+
case "$1" in
|
|
51
|
+
--id) ID="$2"; shift 2 ;;
|
|
52
|
+
--kind) KIND="$2"; shift 2 ;;
|
|
53
|
+
--file) FILE="$2"; shift 2 ;;
|
|
54
|
+
--dim) DIM="$2"; shift 2 ;;
|
|
55
|
+
--severity) SEV="$2"; shift 2 ;;
|
|
56
|
+
--title) TITLE="$2"; shift 2 ;;
|
|
57
|
+
--detail) DETAIL="$2"; shift 2 ;;
|
|
58
|
+
--label) LABEL="$2"; shift 2 ;;
|
|
59
|
+
--files) FILES="$2"; shift 2 ;;
|
|
60
|
+
--summary) SUMMARY="$2"; shift 2 ;;
|
|
61
|
+
*) echo "cue-review-progress: unknown flag $1" >&2; exit 1 ;;
|
|
62
|
+
esac
|
|
63
|
+
done
|
|
64
|
+
|
|
65
|
+
append() { # $1 = full json object (without trailing newline)
|
|
66
|
+
printf '%s\n' "$1" >> "$DIR/$RID.jsonl"
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
case "$cmd" in
|
|
70
|
+
start)
|
|
71
|
+
RID="${ID:-rev-$(date -u +%Y%m%dT%H%M%SZ)-$$}"
|
|
72
|
+
printf '%s' "$RID" > "$DIR/latest"
|
|
73
|
+
: > "$DIR/$RID.jsonl"
|
|
74
|
+
append "$(printf '{"ts":"%s","id":"%s","kind":"start","title":"%s","detail":"%s"}' \
|
|
75
|
+
"$(now)" "$(esc "$RID")" "$(esc "$LABEL")" "$(esc "$FILES")")"
|
|
76
|
+
printf '%s\n' "$RID"
|
|
77
|
+
;;
|
|
78
|
+
emit)
|
|
79
|
+
RID="$(resolve_id "$ID")"
|
|
80
|
+
[[ -z "$RID" ]] && { echo "cue-review-progress emit: no review id (run 'start' first or pass --id)" >&2; exit 1; }
|
|
81
|
+
case "$KIND" in
|
|
82
|
+
file|dim|finding|note) ;;
|
|
83
|
+
"") echo "cue-review-progress emit: --kind required (file|dim|finding|note)" >&2; exit 1 ;;
|
|
84
|
+
*) echo "cue-review-progress emit: invalid --kind '$KIND'" >&2; exit 1 ;;
|
|
85
|
+
esac
|
|
86
|
+
append "$(printf '{"ts":"%s","id":"%s","kind":"%s","file":"%s","dim":"%s","severity":"%s","title":"%s","detail":"%s"}' \
|
|
87
|
+
"$(now)" "$(esc "$RID")" "$KIND" "$(esc "$FILE")" "$(esc "$DIM")" "$(esc "$SEV")" "$(esc "$TITLE")" "$(esc "$DETAIL")")"
|
|
88
|
+
;;
|
|
89
|
+
end)
|
|
90
|
+
RID="$(resolve_id "$ID")"
|
|
91
|
+
[[ -z "$RID" ]] && exit 0
|
|
92
|
+
append "$(printf '{"ts":"%s","id":"%s","kind":"end","title":"%s"}' \
|
|
93
|
+
"$(now)" "$(esc "$RID")" "$(esc "$SUMMARY")")"
|
|
94
|
+
;;
|
|
95
|
+
path)
|
|
96
|
+
RID="$(resolve_id "$ID")"; [[ -z "$RID" ]] && { echo "no review yet" >&2; exit 1; }
|
|
97
|
+
printf '%s\n' "$DIR/$RID.jsonl"
|
|
98
|
+
;;
|
|
99
|
+
latest)
|
|
100
|
+
[[ -r "$DIR/latest" ]] && head -1 "$DIR/latest" || { echo "no review yet" >&2; exit 1; }
|
|
101
|
+
;;
|
|
102
|
+
""|-h|--help|help)
|
|
103
|
+
sed -n '2,/^set -e/p' "$0" | sed 's/^# \{0,1\}//; s/^set -.*//'
|
|
104
|
+
;;
|
|
105
|
+
*)
|
|
106
|
+
echo "cue-review-progress: unknown subcommand '$cmd' (start|emit|end|path|latest)" >&2; exit 1 ;;
|
|
107
|
+
esac
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# cue-review-watch — live view of a code review in progress. Run it in a second
|
|
3
|
+
# pane and watch the reviewer move file-by-file, dimension-by-dimension, with
|
|
4
|
+
# findings as they land — instead of an opaque "Precipitating…" spinner.
|
|
5
|
+
#
|
|
6
|
+
# Reads the JSONL written by cue-review-progress (and the auto-review Stop hook).
|
|
7
|
+
#
|
|
8
|
+
# Usage:
|
|
9
|
+
# cue-review-watch # follow the latest review, live
|
|
10
|
+
# cue-review-watch --id <id> # follow a specific review
|
|
11
|
+
# cue-review-watch --once # print what's there so far and exit (no follow)
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
DIR="${XDG_CONFIG_HOME:-$HOME/.config}/cue/review-progress"
|
|
15
|
+
ID="" ONCE=0
|
|
16
|
+
while [[ $# -gt 0 ]]; do
|
|
17
|
+
case "$1" in
|
|
18
|
+
--id) ID="$2"; shift 2 ;;
|
|
19
|
+
--once) ONCE=1; shift ;;
|
|
20
|
+
-h|--help) grep '^#' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
|
|
21
|
+
*) echo "cue-review-watch: unknown flag $1" >&2; exit 1 ;;
|
|
22
|
+
esac
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
# Colors only on a tty.
|
|
26
|
+
if [[ -t 1 ]]; then
|
|
27
|
+
B=$'\033[1m'; D=$'\033[2m'; R=$'\033[31m'; Y=$'\033[33m'; G=$'\033[32m'; C=$'\033[36m'; M=$'\033[35m'; Z=$'\033[0m'
|
|
28
|
+
else
|
|
29
|
+
B="" D="" R="" Y="" G="" C="" M="" Z=""
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
have_jq=0; command -v jq >/dev/null 2>&1 && have_jq=1
|
|
33
|
+
|
|
34
|
+
get() { # $1=field (reads $line); jq if present, grep fallback
|
|
35
|
+
if [[ $have_jq -eq 1 ]]; then
|
|
36
|
+
printf '%s' "$line" | jq -r --arg f "$1" '.[$f] // ""' 2>/dev/null
|
|
37
|
+
else
|
|
38
|
+
printf '%s' "$line" | grep -oE "\"$1\"[[:space:]]*:[[:space:]]*\"[^\"]*\"" | head -1 \
|
|
39
|
+
| sed -E "s/.*\"$1\"[[:space:]]*:[[:space:]]*\"([^\"]*)\".*/\1/"
|
|
40
|
+
fi
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
hhmmss() { printf '%s' "${1:-}" | sed -E 's/.*T([0-9:]{8}).*/\1/'; }
|
|
44
|
+
|
|
45
|
+
render() { # reads $line
|
|
46
|
+
local kind ts t file dim sev title detail
|
|
47
|
+
kind="$(get kind)"; [[ -z "$kind" ]] && return 0
|
|
48
|
+
ts="$(get ts)"; t="$(hhmmss "$ts")"
|
|
49
|
+
file="$(get file)"; dim="$(get dim)"; sev="$(get severity)"; title="$(get title)"; detail="$(get detail)"
|
|
50
|
+
case "$kind" in
|
|
51
|
+
start) printf '%s%s▶ review started%s %s%s%s\n' "$D$t $Z" "$B$C" "$Z" "$D" "${detail:+($detail files) }${title}" "$Z" ;;
|
|
52
|
+
file) printf '%s%s📄 %s%s\n' "$D$t $Z" "$B" "$file" "$Z" ;;
|
|
53
|
+
dim) printf '%s %s→ %s%s\n' "$D$t $Z" "$C" "$dim" "$Z" ;;
|
|
54
|
+
finding)
|
|
55
|
+
local col gl
|
|
56
|
+
case "$sev" in
|
|
57
|
+
CRITICAL) col="$R$B"; gl="🔴" ;;
|
|
58
|
+
HIGH) col="$R"; gl="🟠" ;;
|
|
59
|
+
MEDIUM) col="$Y"; gl="🟡" ;;
|
|
60
|
+
*) col="$D"; gl="⚪" ;;
|
|
61
|
+
esac
|
|
62
|
+
printf '%s %s%s %s%s %s%s\n' "$D$t $Z" "$col" "$gl" "${sev:-NOTE}" "$Z" "${file:+$file${dim:+ · $dim} }" "$title"
|
|
63
|
+
[[ -n "$detail" ]] && printf ' %s%s%s\n' "$D" "$detail" "$Z"
|
|
64
|
+
;;
|
|
65
|
+
note) printf '%s %s· %s%s\n' "$D$t $Z" "$D" "${title}${detail:+: $detail}" "$Z" ;;
|
|
66
|
+
end) printf '%s%s✅ review complete%s %s%s%s\n' "$D$t $Z" "$B$G" "$Z" "$D" "$title" "$Z" ;;
|
|
67
|
+
esac
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# Resolve the review id / file.
|
|
71
|
+
[[ -z "$ID" && -r "$DIR/latest" ]] && ID="$(head -1 "$DIR/latest")"
|
|
72
|
+
if [[ -z "$ID" ]]; then
|
|
73
|
+
echo "${D}cue-review-watch: no review yet. Start one, or a reviewer will.${Z}" >&2
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
# Wait for the file to appear (a reviewer may not have started yet).
|
|
77
|
+
file_path="$DIR/${ID:-__none__}.jsonl"
|
|
78
|
+
if [[ ! -e "$file_path" ]]; then
|
|
79
|
+
printf '%swaiting for a review to start (%s)…%s\n' "$D" "$DIR" "$Z"
|
|
80
|
+
while [[ ! -e "$file_path" ]]; do
|
|
81
|
+
# latest may update to a new id while we wait
|
|
82
|
+
[[ -r "$DIR/latest" ]] && ID="$(head -1 "$DIR/latest")" && file_path="$DIR/$ID.jsonl"
|
|
83
|
+
sleep 1
|
|
84
|
+
done
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
printf '%swatching %s%s\n\n' "$D" "$file_path" "$Z"
|
|
88
|
+
|
|
89
|
+
if [[ $ONCE -eq 1 ]]; then
|
|
90
|
+
while IFS= read -r line; do render; done < "$file_path"
|
|
91
|
+
exit 0
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# Follow live. -F keeps following across truncation/rotation.
|
|
95
|
+
tail -n +1 -F "$file_path" 2>/dev/null | while IFS= read -r line; do
|
|
96
|
+
render
|
|
97
|
+
printf '%s' "$(get kind)" | grep -q '^end$' && break || true
|
|
98
|
+
done
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cue-ai",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "cue — Agent Profile Manager for Claude Code & Codex. Pick a profile, launch with the right skills, MCPs, and plugins.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
"install.sh",
|
|
69
69
|
"get.sh",
|
|
70
70
|
"README.md",
|
|
71
|
+
"CHANGELOG.md",
|
|
71
72
|
"LICENSE"
|
|
72
73
|
],
|
|
73
74
|
"dependencies": {
|
|
@@ -18,7 +18,11 @@ persona: |
|
|
|
18
18
|
- **Story > list.** Interview answers follow STAR (Situation, Task, Action,
|
|
19
19
|
Result) with the Result quantified.
|
|
20
20
|
skills:
|
|
21
|
-
local:
|
|
21
|
+
local:
|
|
22
|
+
# Coverage not in the npx entries below: comp-band research + resume
|
|
23
|
+
# version tracking. Materialized from .claude/skills into the submodule.
|
|
24
|
+
- career/salary-negotiation-prep
|
|
25
|
+
- career/resume-version-manager
|
|
22
26
|
npx:
|
|
23
27
|
# Top community skills surfaced via `cue sources search resume/career`.
|
|
24
28
|
# Install counts (as of 2026-05-29) reflect community validation.
|
|
@@ -28,4 +32,11 @@ skills:
|
|
|
28
32
|
skills: [resume-builder] # 223 installs — Reactive Resume integration
|
|
29
33
|
- repo: santifer/career-ops
|
|
30
34
|
skills: [career-ops] # 151 installs — broader career management
|
|
31
|
-
|
|
35
|
+
# Proficiently — integrated job-search suite (setup → search → tailor →
|
|
36
|
+
# cover → apply → network → telegram). Shares ~/.proficiently/ state.
|
|
37
|
+
- repo: proficientlyjobs/proficiently-claude-skills
|
|
38
|
+
skills: [setup, job-search, tailor-resume, cover-letter, network-scan, apply, jobsearch-telegram]
|
|
39
|
+
mcps:
|
|
40
|
+
# Browser automation — powers the Proficiently suite: apply fills
|
|
41
|
+
# Greenhouse/Lever/Workday forms, job-search/network-scan scrape boards.
|
|
42
|
+
- playwright
|
|
@@ -82,6 +82,7 @@ persona: |
|
|
|
82
82
|
(sprint, ship-feature, triage-bug), read it first.
|
|
83
83
|
skills:
|
|
84
84
|
local:
|
|
85
|
+
- meta/focus
|
|
85
86
|
# ── Built-in essentials: shared by every cue profile via inheritance ──
|
|
86
87
|
- meta/analyze # investigation: "analyze", "why does", "what's causing"
|
|
87
88
|
- meta/cue-usage # cue CLI guidance
|
|
@@ -129,6 +130,7 @@ mcps:
|
|
|
129
130
|
- cue-tty-watch # Claude's eyes inside X displays / tmux panes (screenshot, capture-pane, send-keys)
|
|
130
131
|
- lightpanda # Fast headless browser MCP — fetch/render/scrape URLs without Chromium. Pairs with browser/lightpanda skill.
|
|
131
132
|
- context7 # Up-to-date, version-specific library docs (Upstash @upstash/context7-mcp). No API key needed; set CONTEXT7_API_KEY for higher limits. Pairs with tools/context7 skill.
|
|
133
|
+
- codegraph # CodeGraph MCP (`codegraph serve --mcp`): structural code search — callers, callees, impact, definitions, signatures. No-op in repos without a `.codegraph/` index (run `codegraph init -i`). Fans out to every core-inheriting profile.
|
|
132
134
|
plugins:
|
|
133
135
|
- claude-mem@thedotmack
|
|
134
136
|
# Disabled 2026-05-30: OMC's PreToolUse auto-mode classifier was intermittently
|
|
@@ -172,6 +174,12 @@ hooks:
|
|
|
172
174
|
# Universal analytics: append one line per session-end to ~/.config/cue/session-log.jsonl
|
|
173
175
|
# so `cue eval` sees real usage data for every profile, not just gstack.
|
|
174
176
|
- session-summary.json
|
|
177
|
+
# SessionStart hook: inject this project's most recent cue-learnings entries
|
|
178
|
+
# as context, so a fresh session inherits captured lessons instead of
|
|
179
|
+
# repeating past mistakes — the read side of the bin/cue-learnings loop
|
|
180
|
+
# (capture side is the skill-evolution persona). Fail-open; no-op when the
|
|
181
|
+
# project has no learnings.jsonl. Opt out with CUE_LEARNINGS_CONTEXT=0.
|
|
182
|
+
- learnings-context.json
|
|
175
183
|
# Refuse writes to .env, id_rsa, credentials.json, .pem/.key, ~/.ssh, ~/.aws, etc.
|
|
176
184
|
- secrets-guard.json
|
|
177
185
|
# Reject low-effort `git commit -m "wip"` / "fix" / "update" messages.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# 🏛️ eu-tender-research
|
|
2
|
+
|
|
3
|
+
EU funding research for **agentic AI companies in Slovakia or Hungary**. Two jobs in one
|
|
4
|
+
profile: find public-procurement **tenders** to bid on, and map the **grants, cheap loans,
|
|
5
|
+
and venture capital** a company can apply for. Built so the second run is faster, cheaper,
|
|
6
|
+
and more accurate than the first.
|
|
7
|
+
|
|
8
|
+
## Two channels, two skills
|
|
9
|
+
|
|
10
|
+
| You want to... | Skill | Source |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Find EU tenders to bid on | `eu-funding/ted-tender-search` | Official TED API (free, no key) |
|
|
13
|
+
| Find grants / loans / VC for a company | `eu-funding/hu-grant-finder` | palyazat.gov.hu, NKFIH, MFB, Hiventures, EIC |
|
|
14
|
+
|
|
15
|
+
Both skills carry the **verified recipes** so the agent doesn't rediscover them:
|
|
16
|
+
the TED API endpoint + Expert-Search query language, the Hungarian funding ladder,
|
|
17
|
+
the canonical sources, and the eligibility gotchas that disqualify fastest.
|
|
18
|
+
|
|
19
|
+
## The funding channels (the #1 thing users confuse)
|
|
20
|
+
|
|
21
|
+
- **Tender / közbeszerzés** — TED procurement: you *sell* services to the state.
|
|
22
|
+
- **Grant / támogatás** — GINOP/DIMOP: non-repayable project money.
|
|
23
|
+
- **Loan / hitel** — MFB / GINOP 1.4.x: cheap (often 0%) but you repay.
|
|
24
|
+
- **VC / kockázati tőke** — Hiventures (GINOP 2.5.1), EIC: equity investment.
|
|
25
|
+
|
|
26
|
+
## Gotchas baked into the persona
|
|
27
|
+
|
|
28
|
+
- **Closed-year wall** — most KKV grants/loans need ≥1 closed business year. An egyéni
|
|
29
|
+
vállalkozó's closed tax year counts; don't found a fresh Kft and reset the clock.
|
|
30
|
+
- **Region split** — DIMOP/GINOP: Budapest (`/C`) vs every other county (`/B`, favoured).
|
|
31
|
+
- **Timing** — frames close on *forráskimerülés*, often before the deadline; re-check live.
|
|
32
|
+
- **VC is not free** — equity + TRL6 product; GINOP 2.5.1 excludes "only software" firms.
|
|
33
|
+
- **Deep-tech ≠ SaaS** — an LLM-wrapper won't win EIC; Hungary's route is EIC Pre-Accelerator.
|
|
34
|
+
|
|
35
|
+
## MCPs
|
|
36
|
+
|
|
37
|
+
`ted-eu` (free single-notice fetch), `lightpanda` (page render), `gbrain` (track
|
|
38
|
+
shortlisted opportunities across sessions). No paid scraper, no API token. Apify is
|
|
39
|
+
re-addable if ever wanted: `cue mcps add apify-ted-eu` (needs `APIFY_API_TOKEN`).
|
|
40
|
+
|
|
41
|
+
## Use it
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cue use eu-tender-research
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Then ask things like *"find open IT tenders from Hungarian buyers"* or *"what grants can a
|
|
48
|
+
new Hungarian AI company apply for?"* — the matching skill activates and runs the verified flow.
|
|
Binary file
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
name: eu-tender-research
|
|
2
|
+
icon: "🏛️"
|
|
3
|
+
iconImage: "logo.png"
|
|
4
|
+
description: "EU funding research for agentic AI companies in Slovakia or Hungary: TED tenders + grants/loans/VC (GINOP, DIMOP, Hiventures, EIC). Find, filter, assess eligibility, draft briefs."
|
|
5
|
+
agents: [claude-code]
|
|
6
|
+
inherits: core
|
|
7
|
+
skills:
|
|
8
|
+
local:
|
|
9
|
+
- eu-funding/ted-tender-search
|
|
10
|
+
- eu-funding/hu-grant-finder
|
|
11
|
+
- eu-funding/grant-outreach
|
|
12
|
+
- research/find-skills
|
|
13
|
+
- research/defuddle
|
|
14
|
+
- research/trendradar
|
|
15
|
+
- gstack/scrape
|
|
16
|
+
- gstack/document-generate
|
|
17
|
+
- gstack/make-pdf
|
|
18
|
+
- content/article-writer
|
|
19
|
+
mcps:
|
|
20
|
+
- lightpanda
|
|
21
|
+
- gbrain
|
|
22
|
+
- trendradar
|
|
23
|
+
env:
|
|
24
|
+
EU_TENDER_HQ_COUNTRIES: "SK,HU"
|
|
25
|
+
TED_API_BASE: "https://api.ted.europa.eu/v3"
|
|
26
|
+
persona: |
|
|
27
|
+
You run EU funding research for agentic AI companies headquartered in
|
|
28
|
+
Slovakia (SK) or Hungary (HU). Two jobs: (1) surface TED procurement
|
|
29
|
+
tenders these firms can bid on, and (2) map the grants, cheap loans, and
|
|
30
|
+
venture capital they can apply for. Rank by fit and eligibility, then turn
|
|
31
|
+
winners into a clean brief.
|
|
32
|
+
|
|
33
|
+
## Funding channels (DON'T conflate them, this is the #1 user confusion)
|
|
34
|
+
|
|
35
|
+
| Channel | What it is | Lead skill |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Tender / közbeszerzés | TED procurement, you *sell* to the state | `eu-funding/ted-tender-search` |
|
|
38
|
+
| Grant / támogatás | GINOP/DIMOP, non-repayable | `eu-funding/hu-grant-finder` |
|
|
39
|
+
| Cheap loan / hitel | MFB / GINOP 1.4.x, 0% but repay | `eu-funding/hu-grant-finder` |
|
|
40
|
+
| Venture capital | Hiventures (GINOP 2.5.1), EIC, equity | `eu-funding/hu-grant-finder` |
|
|
41
|
+
|
|
42
|
+
The two `eu-funding/*` skills carry the verified recipes (TED API query
|
|
43
|
+
language, the Hungarian funding ladder, the sources, the eligibility
|
|
44
|
+
gotchas). Read the matching skill first, don't rediscover the endpoint or
|
|
45
|
+
the gotchas from scratch.
|
|
46
|
+
|
|
47
|
+
## Gotchas that gate everything (check before detailing amounts)
|
|
48
|
+
|
|
49
|
+
- **Closed-year wall** — most KKV grants/loans need >=1 closed business
|
|
50
|
+
year + 1 employee; a brand-new company can't apply day one. An egyeni
|
|
51
|
+
vallalkozo's closed tax year counts, so don't found a fresh Kft and
|
|
52
|
+
reset that clock.
|
|
53
|
+
- **Region split** — DIMOP/GINOP is Budapest (`/C`) vs every other county
|
|
54
|
+
(`/B`, "less developed"); wealthy counties are in the favoured `/B`.
|
|
55
|
+
- **Timing** — frames close on forraskimerules, often before the deadline;
|
|
56
|
+
re-check the live active list at palyazat.gov.hu the same day.
|
|
57
|
+
- **VC is not free** — Hiventures/EIC take equity, need a TRL6 working
|
|
58
|
+
product, and GINOP 2.5.1 excludes "only software" firms.
|
|
59
|
+
- **Deep-tech vs SaaS** — an LLM-wrapper is SaaS, not deep tech; EIC wants
|
|
60
|
+
breakthrough. Hungary is a "widening" country, so EIC Pre-Accelerator is
|
|
61
|
+
the realistic stepping stone.
|
|
62
|
+
|
|
63
|
+
## Data sources (route by need)
|
|
64
|
+
|
|
65
|
+
| Need | Tool |
|
|
66
|
+
|-------------------------------------------------------------------|-------------------------------|
|
|
67
|
+
| Search TED notices (CPV, country, deadline, value) — free, no key | Official TED API, `${TED_API_BASE}/notices/search` (POST) |
|
|
68
|
+
| Fetch one notice in full by publication number | Same TED API: `query: "publication-number IN (123456-2025)"` |
|
|
69
|
+
| Render a TED portal page that the API can't reach | `lightpanda` MCP, gstack/scrape |
|
|
70
|
+
| Strip a notice page to clean text | research/defuddle |
|
|
71
|
+
| Track shortlisted tenders + buyer contacts across sessions | `gbrain` MCP |
|
|
72
|
+
| Spot which procurement themes are heating up | research/trendradar |
|
|
73
|
+
| Draft a bid summary / capability statement | content/article-writer |
|
|
74
|
+
| Export the brief as a shareable doc/PDF | gstack/document-generate, gstack/make-pdf |
|
|
75
|
+
|
|
76
|
+
## Defaults
|
|
77
|
+
|
|
78
|
+
- **Fit before volume.** A relevant notice an SK/HU agentic-AI firm can win
|
|
79
|
+
beats ten generic IT tenders. Filter hard on CPV codes for software, AI,
|
|
80
|
+
data, and consulting services (72xxxxxx, 48xxxxxx, 73xxxxxx), buyer
|
|
81
|
+
country, deadline still open, and eligibility (no incumbent lock-in).
|
|
82
|
+
- **Source every notice.** Each tender in a brief carries its TED
|
|
83
|
+
publication number (e.g. `123456-2025`), buyer, country, value, deadline,
|
|
84
|
+
and the live notice URL. No number, not in the brief.
|
|
85
|
+
- **Rank, don't dump.** When you produce a list of tenders (3+), run
|
|
86
|
+
`/roi-estimator` so each row carries a fit/value tag the user can sort by.
|
|
87
|
+
- **Both bid angles.** A notice can fit either as the prime bidder or as a
|
|
88
|
+
subcontractor to a local integrator — flag which when it's not obvious.
|
|
89
|
+
- **Verify before claiming done.** Confirm a notice is still open and the
|
|
90
|
+
publication number resolves before putting it in front of the user.
|
|
91
|
+
|
|
92
|
+
## Free stack, no credentials
|
|
93
|
+
|
|
94
|
+
Everything here runs without an API key or paid scraper:
|
|
95
|
+
|
|
96
|
+
- **Search** is the official EU TED API at `${TED_API_BASE}/notices/search`
|
|
97
|
+
(POST JSON `{query, fields, limit, scope:"ACTIVE"}`). The Expert Search
|
|
98
|
+
query language filters on `classification-cpv`, `place-of-performance`,
|
|
99
|
+
`deadline-date`, `notice-type`, etc. No key needed.
|
|
100
|
+
Example: `classification-cpv IN (72000000) AND place-of-performance IN (SVK HUN)`.
|
|
101
|
+
- **Single-notice detail** comes from the same API:
|
|
102
|
+
`query: "publication-number IN (123456-2025)"`, `scope: "ALL"`. No MCP needed.
|
|
103
|
+
- **Page scraping** uses `lightpanda` + `defuddle` locally — no cloud
|
|
104
|
+
scraper (Apify, Firecrawl, etc.) required.
|
|
105
|
+
- **Why no TED MCP:** the `ted-eu` gateway exposes 22 tools for 2 useful
|
|
106
|
+
ones, and its search is an NL-router black box. The API above is precise,
|
|
107
|
+
verified, and zero-bloat. Re-add it only if you want NL queries:
|
|
108
|
+
`cue mcps add ted-eu` (or `apify-ted-eu`, needs `APIFY_API_TOKEN`).
|
|
@@ -74,6 +74,8 @@ skills:
|
|
|
74
74
|
- gstack/health
|
|
75
75
|
# gitguardex (gx) — worktree/lock/PR safety + the gated auto-ship flow
|
|
76
76
|
- github/gitguardex
|
|
77
|
+
# gx mcp agent radar — see who's on which branch/PR/file, avoid collisions
|
|
78
|
+
- github/gx-agents
|
|
77
79
|
# MCPs: cue-tty-watch + lightpanda inherited from core. gbrain dropped along
|
|
78
80
|
# with the setup-gbrain / sync-gbrain skills.
|
|
79
81
|
rules:
|
|
@@ -118,6 +118,10 @@ commands:
|
|
|
118
118
|
|
|
119
119
|
hooks:
|
|
120
120
|
- skill-frontmatter-guard.json
|
|
121
|
+
# cue self-learner (pilot) — captures where this profile's skills fall short
|
|
122
|
+
# and (with the live critic) judges the gap, feeding `cue profile self-improve`.
|
|
123
|
+
# OFF until `touch ~/.config/cue/.auto-improve-enabled`. See docs/self-learner.md.
|
|
124
|
+
- profile-self-improve.json
|
|
121
125
|
|
|
122
126
|
mcps:
|
|
123
127
|
- gbrain
|
|
@@ -9,13 +9,11 @@ skills:
|
|
|
9
9
|
local:
|
|
10
10
|
# The operator surface: routes each request to the xbot MCP / botctl / cli
|
|
11
11
|
# and enforces the loop-vs-MCP live-write safety rule.
|
|
12
|
-
- xbot/operate
|
|
13
12
|
|
|
14
13
|
# The bot's MCP control surface (~27 tools: xbot_status, xbot_think, xbot_reply,
|
|
15
14
|
# xbot_dm, xbot_cycle, xbot_pause, xbot_control, ...). core already contributes
|
|
16
15
|
# cue-tty-watch + lightpanda.
|
|
17
16
|
mcps:
|
|
18
|
-
- xbot
|
|
19
17
|
|
|
20
18
|
# Quality rules read on-demand (indexed in CLAUDE.md, not inlined).
|
|
21
19
|
rules:
|