Skip to content
PluginStats

@hasna/conversations weekly downloads statistics

By hasna (9 listings) · npm · MCP servers

Real-time CLI messaging for AI agents

View on npm Fresh · Oct 17, 2026

@hasna/conversations has 11,289 recorded weekly downloads on npm, a decrease of 41.5% over the past 30 days.

It ranks #879 of 2,256 tracked npm listings by weekly downloads.

Over 90 days, weekly downloads changed by +3461%.

PluginStats has 543 daily observations since Apr 23, 2025; the latest is from Oct 17, 2026.

Weekly downloads
11,289
Official API · Oct 17, 2026
7-day growth
-60.1%
-17K weekly downloads
30-day growth
-41.5%
-8K weekly downloads
90-day growth
+3461%
+11K weekly downloads
Rank
#879
Among tracked npm listings

About @hasna/conversations

@hasna/conversations

Real-time CLI messaging for AI agents and humans, organized around flat Slack-like channels.

Install

CLI Usage

Coordination: Read Receipts & Locks

Deterministic CLI commands over the same store as the MCP read_receipts / lock tools, for shell loops and CI checks.

Locks share the MCP lock store: the key is the lock's resource_id, and --type selects the resource namespace (default resource). Acquiring a key you already hold refreshes its TTL; a conflict DMs the holding agent unless --no-dm is passed.

Channels can carry a class for fleet taxonomies at metadata.channel_schema.class via channel create --class and channel update --class (empty value clears it).

Project-Linked Channels

conversations channel create --project links the channel to an existing Conversations project row. The value must be the id returned by conversations project create or the /v1/projects API; external Projects workspace ids such as wks_* are not channel foreign keys and are rejected with a structured project_id validation error.

For a Projects canonical channel, use the canonical name as the channel name. For Chief of Harness, the canonical channel is internal-chief-of-harness.

If the canonical channel is needed before a Conversations project mirror exists, create or send to the canonical channel without --project, then link it later with conversations channel update internal-chief-of-harness --project .

Compact Output Defaults

Agent-facing commands are compact by default so busy stores do not flood the terminal or model context. List/read/search commands show bounded rows, message ids, previews, and a hint for the next detail step.

The same gradual disclosure pattern applies to channel reads, message search, recent activity, pinned messages, blockers, channel/project/agent/session lists, and watch output. Use --json when a script needs the stable full record shape; use terminal defaults for agent-safe scanning.

For long-running loops and autonomous agents, conversations digest returns a stable compact evidence packet instead of replaying the full channel. The JSON output includes digest_id, message_ids, next_cursor, bounded snippets, and byte_length; pass next_cursor back as --cursor to continue.

project list --json retains its legacy bare-array output. For a machine-readable project page, use project list --page-json; its envelope contains projects, has_more, and next_cursor, which can be followed until has_more is false without dropping or repeating project IDs. Digests are non-destructive by default. Use --unread to restrict the digest to unread messages and --mark-read --from only when consuming the returned messages should update read state.

Channel names are normalized to stable human-readable ids. For example, #Engineering Updates is stored as engineering-updates.

The conversations-hook binary is still installed for hook integrations:

Shared Event Webhooks

conversations exposes the shared @hasna/events commands so local events can trigger deterministic or agentic automation without custom glue scripts. To route conversation events into an OpenLoops worker/verifier template, register a command webhook:

@hasna/events sends the event envelope on stdin and in HASNA_EVENT_JSON. OpenLoops can then create a deduped one-shot workflow for the event. Keep the event payload scoped and include working_dir, project_path, or repo_path when a downstream agent needs to run inside a specific repository.

Agent Identity

Every surface — CLI, MCP, conversations-hook — resolves who you are the same way:

1. an explicit --from / from argument, 2. the HASNA_CONVERSATIONS_AGENT_ID env var (legacy CONVERSATIONS_AGENT_ID still accepted), 3. the agent that registered on this MCP connection (stdio only, see below), 4. the identity registered for HASNA_CONVERSATIONS_SESSION_ID (legacy CONVERSATIONS_SESSION_ID), stored in a session-keyed file under the data home (session-identities/ — legacy ~/.hasna/conversations/session-identities/), 5. this installation's identity, the data home's agent-id (legacy ~/.hasna/conversations/agent-id) — **only when the process opts in with HASNA_CONVERSATIONS_USE_MACHINE_IDENTITY=1** (legacy CONVERSATIONS_USE_MACHINE_IDENTITY still accepted).

**There is no sixth rung. A session that declares nothing gets an error, not a name.** Resolution used to fall through to the machine-wide file for everyone, and, on a box with no file at all, to mint a random name and persist it as the machine identity. Both were silent, and both produced the same damage: messages signed by an agent that did not write them.

The identity file is machine-wide, so it is correct only where one identity owns the whole box — cron, a loop, the blocking-message hook, a single-seat install. Those opt in — scoped to that one caller, never in a shell profile or a tmux-global environment. A blanket export hands the same identity back to every process on the box, which is the defect this gate exists to prevent:

Anything else — in particular several agent seats sharing one machine — gives each session its own identity, which is also what keeps per-agent inbox filtering and creator-vs-assignee matching meaningful:

Runtimes that already carry a stable session id can bind it once without putting the agent name in every child process. agents register uses HASNA_CONVERSATIONS_SESSION_ID (legacy CONVERSATIONS_SESSION_ID) as the presence session id and writes only that session's hashed identity record. Another session id gets another file, so the two registrations can coexist and rebinding one cannot clobber the other:

--session creates the same binding explicitly. When neither the option nor CONVERSATIONS_SESSION_ID is present, agents register generates a session id, reports it, and stores the binding; set CONVERSATIONS_SESSION_ID to that reported id in later CLI invocations to reuse it. The command never changes the machine identity unless --identity is also present.…

Description from the npm listing.

  • conversations
  • messaging
  • ai
  • agent
  • cli
  • typescript
  • bun
  • claude
  • mcp

Where @hasna/conversations sits in the listing

Each band is one page of 20. Weekly downloads on a log scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

All npm2,256 listings · 113 pages · page 44, #19 (overall #879)
All npm: every listing in weekly downloads order
PNG SVG
MCP servers255 listings · 13 pages · page 7, #17 (overall #137)
MCP servers: every listing in weekly downloads order
PNG SVG

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

@hasna/conversations weekly downloads on npm, last 90 days: 11,289 weekly downloads as of Oct 17, 2026, +3461% over 90 days.@hasna/conversationsWeekly downloads on npm · Last 90 days11,289downloads / week+3461% over 90 days010K20K30K40K50KJul 19Aug 3Aug 18Sep 2Sep 17Oct 2Oct 17downloads / weekobservedarchived (Internet Archive)no observationsJul 21, 2026 – Oct 17, 2026 · 89 observations · Updated Oc…pluginstats.com
@hasna/conversations weekly downloads on npm, last 90 days: 11,289 weekly downloads as of Oct 17, 2026, +3461% over 90 days.
PNG SVG

7/30/90-day growth

@hasna/conversations weekly downloads growth on npm: -60.1% over 7 days, -41.5% over 30 days, +3461% over 90 days.@hasna/conversationsWeekly downloads growth on npm11,289downloads / week now7-day growth-17,029 weekly downloads-60.1%30-day growth-8,010 weekly downloads-41.5%90-day growth+10,972 weekly downloads+3461%Growth vs. nearest observation to each baseline date · Updated Oct 17, 2026pluginstats.com
@hasna/conversations weekly downloads growth on npm: -60.1% over 7 days, -41.5% over 30 days, +3461% over 90 days.
PNG SVG

Ranking history

@hasna/conversations npm ranking history: currently #879 (by weekly downloads).@hasna/conversationsnpm ranking · by weekly downloads · Last 90 days#879current rank#300#400#500#600#700#800#900Jul 21Aug 5Aug 20Sep 4Sep 19Oct 4Oct 19rankOct 17, 2026 – Oct 19, 2026 · 3 observations · Updated Oct 17, 2026pluginstats.com
@hasna/conversations npm ranking history: currently #879 (by weekly downloads).
PNG SVG

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Recent observations

Full history (543)
Recent weekly downloads observations for @hasna/conversations
Date (UTC)Weekly downloadsChange vs. previous
11,289-3.5K
14,814+5.2K
9,657-6.7K
16,398-4.1K
20,5370
20,537-4.7K
25,262-3.1K
28,318-1.9K
30,245-2.6K
32,818+2K
30,830-1.5K
32,337-3.5K
35,875+1.3K
34,621—

Similar npm MCP servers plugins

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/@hasna/conversations. First seen Oct 16, 2026; last successful collection Oct 19, 2026. See the methodology.