MCPcopy Create free account
hub / github.com/basecamp/hey-cli / runSkillInstall

Function runSkillInstall

internal/cmd/skill_install.go:23–68  ·  view source on GitHub ↗
(cmd *cobra.Command, args []string)

Source from the content-addressed store, hash-verified

21}
22
23func runSkillInstall(cmd *cobra.Command, args []string) error {
24 home, err := os.UserHomeDir()
25 if err != nil {
26 return output.ErrAPI(0, fmt.Sprintf("getting home directory: %v", err))
27 }
28
29 skillDir := filepath.Join(home, ".agents", "skills", "hey")
30 skillFile := filepath.Join(skillDir, "SKILL.md")
31 symlinkDir := filepath.Join(home, ".claude", "skills")
32 symlinkPath := filepath.Join(symlinkDir, "hey")
33
34 // Read embedded SKILL.md
35 data, err := skills.FS.ReadFile("hey/SKILL.md")
36 if err != nil {
37 return output.ErrAPI(0, fmt.Sprintf("reading embedded skill: %v", err))
38 }
39
40 // Create skill directory and write file
41 if err := os.MkdirAll(skillDir, 0o755); err != nil {
42 return output.ErrAPI(0, fmt.Sprintf("creating skill directory: %v", err))
43 }
44 if err := os.WriteFile(skillFile, data, 0o644); err != nil {
45 return output.ErrAPI(0, fmt.Sprintf("writing skill file: %v", err))
46 }
47
48 // Create symlink directory and symlink
49 if err := os.MkdirAll(symlinkDir, 0o755); err != nil {
50 return output.ErrAPI(0, fmt.Sprintf("creating symlink directory: %v", err))
51 }
52 // Remove existing symlink/file if present
53 os.Remove(symlinkPath)
54 if err := os.Symlink(filepath.Join("..", "..", ".agents", "skills", "hey"), symlinkPath); err != nil {
55 return output.ErrAPI(0, fmt.Sprintf("creating symlink: %v", err))
56 }
57
58 if writer.IsStyled() {
59 fmt.Fprintln(cmd.OutOrStdout(), "Installed hey skill to ~/.agents/skills/hey/SKILL.md")
60 fmt.Fprintln(cmd.OutOrStdout(), "Symlinked ~/.claude/skills/hey → ../../.agents/skills/hey")
61 return nil
62 }
63
64 return writeOK(map[string]string{
65 "skill_path": skillFile,
66 "symlink_path": symlinkPath,
67 }, output.WithSummary("hey skill installed"))
68}

Callers

nothing calls this directly

Calls 3

WithSummaryFunction · 0.92
writeOKFunction · 0.85
IsStyledMethod · 0.80

Tested by

no test coverage detected