Alien-libssh

 view release on metacpan or  search on metacpan

.claude/skills/kanban-issues-karr-cli/SKILL.md  view on Meta::CPAN

karr context --compact                       # board_name and the four counts, key=value
```

Generates a markdown summary with sections: In Progress, Blocked, Overdue, Recently Completed, Recent Activity (other agents' log entries, newest first, bounded by `--activity-limit`, default 5). `--sections` takes the slugs `in-progress,blocked,over...

### Skill management

```bash
karr skill install                           # install skill for detected agents
karr skill install --agent claude-code       # install for specific agent
karr skill install --global                  # install globally (~/)
karr skill install --force                   # force reinstall
karr skill check                             # check if installed skills are current
karr skill update                            # update outdated skills
karr skill show                              # print skill content to stdout
```

Supported agents: `claude-code`, `codex`, `cursor`.

For Docker-wrapped usage, prefer the `raudssus/karr:latest` alias that mounts
the current project at `/work` and uses `/home/karr` as `HOME`, so the image

.claude/skills/perl-xs/SKILL.md  view on Meta::CPAN

static int foo_conn_free(pTHX_ SV *sv, MAGIC *mg) {
    FOO_Conn *self = (FOO_Conn *)(void *)mg->mg_ptr;
    if (self->conn) { foolib_close(self->conn); foolib_free(self->conn); }
    Safefree(self);
    return 0;
}
static const MGVTBL Foo_magic = { .svt_free = foo_conn_free };
```

`svt_free` is the destructor, and it is a better one than a Perl method: it fires
when the SV is collected, it still fires during global destruction, and no subclass
can override it away. **An XS object needs no `DESTROY` sub** — not in the XS, not
in the `.pm`.

The vtable address is also the type check. `mg_findext(sv, PERL_MAGIC_ext,
&Foo_magic)` matches only magic carrying that exact vtable, so a hand-blessed
hashref croaks at the boundary instead of segfaulting through an `INT2PTR` cast on
a pointer that was never there. That is the reason to skip `T_PTROBJ`, which stores
the pointer with `sv_setref_pv` and offers neither a free hook nor a real type
check.

.claude/skills/perl-xs/references/objects-and-memory.md  view on Meta::CPAN

static int foo_conn_free(pTHX_ SV *sv, MAGIC *mg) {
    FOO_Conn *self = (FOO_Conn *)(void *)mg->mg_ptr;
    if (self->conn) { foolib_close(self->conn); foolib_free(self->conn); }
    Safefree(self);
    return 0;
}
static const MGVTBL Foo_magic = { .svt_free = foo_conn_free };
```

`svt_free` runs when the SV is collected. It beats a Perl `DESTROY` on three counts:
it cannot be overridden by a subclass, it still runs during global destruction, and
`CLONE_PARAMS` handling has a place to go (`svt_dup`) if threads ever matter.

The vtable is `static const` and its **address is the type identity** — declare one
per class, never share a vtable between two types.

## Attaching and finding

```c
/* OUTPUT side, in the typemap: bless an SV and hang the pointer off it */
sv_magicext(newSVrv($arg, "Foo"), NULL, PERL_MAGIC_ext,

META.json  view on Meta::CPAN

         },
         {
            "class" : "Dist::Zilla::Plugin::RewriteVersion::Transitional",
            "config" : {
               "Dist::Zilla::Plugin::RewriteVersion" : {
                  "add_tarball_name" : 0,
                  "finders" : [
                     ":ExecFiles",
                     ":InstallModules"
                  ],
                  "global" : 0,
                  "skip_version_provider" : 0
               },
               "Dist::Zilla::Plugin::RewriteVersion::Transitional" : {}
            },
            "name" : "@Author::GETTY/@Git::VersionManager/RewriteVersion::Transitional",
            "version" : "0.009"
         },
         {
            "class" : "Dist::Zilla::Plugin::MetaProvides::Update",
            "name" : "@Author::GETTY/@Git::VersionManager/MetaProvides::Update",

META.json  view on Meta::CPAN

            "version" : "2.052"
         },
         {
            "class" : "Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional",
            "config" : {
               "Dist::Zilla::Plugin::BumpVersionAfterRelease" : {
                  "finders" : [
                     ":ExecFiles",
                     ":InstallModules"
                  ],
                  "global" : 0,
                  "munge_makefile_pl" : 1
               },
               "Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional" : {}
            },
            "name" : "@Author::GETTY/@Git::VersionManager/BumpVersionAfterRelease::Transitional",
            "version" : "0.009"
         },
         {
            "class" : "Dist::Zilla::Plugin::NextRelease",
            "name" : "@Author::GETTY/@Git::VersionManager/NextRelease",

META.yml  view on Meta::CPAN

      name: '@Author::GETTY/@Git::VersionManager/pluginbundle version'
      version: '6.037'
    -
      class: Dist::Zilla::Plugin::RewriteVersion::Transitional
      config:
        Dist::Zilla::Plugin::RewriteVersion:
          add_tarball_name: 0
          finders:
            - ':ExecFiles'
            - ':InstallModules'
          global: 0
          skip_version_provider: 0
        Dist::Zilla::Plugin::RewriteVersion::Transitional: {}
      name: '@Author::GETTY/@Git::VersionManager/RewriteVersion::Transitional'
      version: '0.009'
    -
      class: Dist::Zilla::Plugin::MetaProvides::Update
      name: '@Author::GETTY/@Git::VersionManager/MetaProvides::Update'
      version: '0.007'
    -
      class: Dist::Zilla::Plugin::CopyFilesFromRelease

META.yml  view on Meta::CPAN

          time_zone: local
      name: '@Author::GETTY/@Git::VersionManager/Git::Tag'
      version: '2.052'
    -
      class: Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional
      config:
        Dist::Zilla::Plugin::BumpVersionAfterRelease:
          finders:
            - ':ExecFiles'
            - ':InstallModules'
          global: 0
          munge_makefile_pl: 1
        Dist::Zilla::Plugin::BumpVersionAfterRelease::Transitional: {}
      name: '@Author::GETTY/@Git::VersionManager/BumpVersionAfterRelease::Transitional'
      version: '0.009'
    -
      class: Dist::Zilla::Plugin::NextRelease
      name: '@Author::GETTY/@Git::VersionManager/NextRelease'
      version: '6.037'
    -
      class: Dist::Zilla::Plugin::Git::Commit



( run in 0.897 second using v1.01-cache-2.11-cpan-1236ad508bc )