One attribute, full context
Add data-askable to any element. The library tracks focus, click, and hover interactions and serializes exactly what the user is looking at into a string your LLM can act on.
Annotate any DOM element with data-askable and instantly turn what the user is looking at into structured, prompt-ready context.
Current npm release: v0.5.0.
Need a breaking-release upgrade path? See Migration Guides. Versioned docs are available at
/docs/<version>/.
import { createAskableContext } from '@askable-ui/core';
const ctx = createAskableContext();
ctx.observe(document);
// Anywhere in your AI handler:
ctx.toPromptContext();
// → "User is focused on: metric: revenue, delta: -12%, period: Q3"import { useAskable, Askable } from '@askable-ui/react';
function Dashboard({ data }) {
const { promptContext } = useAskable();
return (
<Askable meta={{ metric: 'revenue', delta: data.delta }}>
<RevenueChart data={data} />
</Askable>
);
}import { Pressable, Text } from 'react-native';
import { useAskable, Askable } from '@askable-ui/react-native';
function RevenueCard() {
const { ctx, promptContext } = useAskable();
return (
<Askable ctx={ctx} meta={{ metric: 'revenue' }} text="Revenue card">
<Pressable>
<Text>Revenue</Text>
</Pressable>
</Askable>
);
}<script setup>
import { useAskable, Askable } from '@askable-ui/vue';
const { promptContext } = useAskable();
</script>
<template>
<Askable :meta="{ metric: 'revenue', delta: data.delta }">
<RevenueChart :data="data" />
</Askable>
</template><script>
import { createAskableStore, Askable } from '@askable-ui/svelte';
const { promptContext } = createAskableStore();
</script>
<Askable meta={{ metric: 'revenue', delta: data.delta }}>
<RevenueChart {data} />
</Askable>